※アフィリエイト広告を利用しています。

【社内SE向け】サーバー移行に伴うoracleデータベースマイグレーション時のダンプ〜インポートまでのマニュアル

Oracle

はじめに

oracle環境をマイグレーション移行しましたので、その際の行った手順を備忘録としてまとめます。これを見ればとりあえず環境移行はできると思います。

前提

  • 表領域は定義済み

旧環境での作業

DBAディレクトリの作成

ダンプファイルの保存場所を定義する。sql plusなどで実施します。

create directory <定義名> as '保存場所の絶対パス';

ディレクトリオブジェクトの作成・権限付与

定義したDBAディレクトリへのアクセス権限みたいなもの。systemユーザで実行すれば当作業は不要。sql plusなどで実施。

grant read,write on directory <定義名> to <ダンプ作業に用いるユーザ>;

ダンプファイル作成

ダンプファイルを作成。コマンドプロンプトで実行。以下はスキーマ単位でダンプ。

expdp ユーザ/パスワード@識別子 schemas = <対象のスキーマ> directory = <定義名> dumpfile=ダンプファイル.dmp logfile = ダンプファイル.log

表領域およびDBFの確認

DBFのサイズは1ファイル最大32GB。ダンプサイズが超えているor移行元ダンプサイズが超えている場合は、インポート前に事前にDBFの追加が必要となります。

SELECT
a.tablespace_name,a.file_id,a.file_name,
a.bytes / 1024 / 1024 AStotal_mb,NVL(b.free_mb, 0) AS free_mb, 
(a.bytes -NVL (b.free_bytes, 0)) / 1024 / 1024 AS used_mb,
ROUND((NVL(b.free_bytes, 0) / a.bytes) * 100, 2) AS free_pct 
FROM dba_data_files a LEFT JOIN
( 
SELECT file_id,
SUM (bytes) AS free_bytes,
SUM(bytes) / 1024 / 1024 AS free_mb
FROM dba free_space
GROUP BY file_id
) b ON a.file_id = b.file_id
WHERE
a.tablespace_name = '表領域名'
ORDER BY a.file_id;

付与ロール、システム権限の確認

スキーマユーザに付与されたロールを確認します。

--ロール
SELECT * FROM dba_role_privs
WHERE grantee = 'YourUser';
--システム権限
SELECT * FROM dba_sys_privs
WHERE grantee = 'YourUser';

新環境での作業

ディレクトリオブジェクトの作成・権限付与

ダンプファイルのインポートディレクトリを定義する。sql plusなどで実施。

Create Directory インポートディレクトリの定義名 As '絶対パス';
--DBA権限(system)以外でインポート実行する場合
Grant READ,WRITE on Directory インポートディレクトリの定義名 to YourUser;

表領域の空き容量確認

旧環境の確認方法と同じです。32GBを超えるとダンプエラーとなります。

表領域へDBFの追加(必要があれば)

32GBを越えそうであれば、実施が必要です。

ALTER TABLESPACE 表領域
ADD DATAFILE 'oracleドライブレター:\APP\ORACLE_DBA\ORADATA\yourfilename.DBF' SIZE 500M
AUTO EXTEND ON NEXT 100M
MAXSIZE UNLIMITED:

スキーマ・ユーザの作成

create user yourUser identified by yourPassword default tablespace 指定の表領域 temporary tablespace temp;

スキーマ・ユーザへのロール・システム権限付与

旧環境と同じロール・システム権限の付与します。

--最低限接続に必要な権限は以下のとおり
grant connect to yourUser;
grant resource to yourUser;

ダンプファイルのインポート

DBA権限のあるsystemで実行が無難です。権限がないとエラーとなります。コマンドプロンプトで実行します。保存する表領域を変える場合は、オプションでreplace_tablespaceを入れいると変更できます。

impdp system/yourPassword DIRECTORY=インポートディレクトリの定義名 dumpfile=ダンプファイル.dmp logfile=ダンプインポート.log schemas=yourSchemas remap_tablespace=元の表領域:新表領域

再コンパイル(必要に応じて)

他スキーマへの相関関係がある(View)が、スキーマがなくエラーとなった場合、リコンパイルする必要があります。sysでの実行を前提としてます。

sys/sysPassword as sysdba
EXEC UTL_RECOMP.recomp_serial('yourSchemas');

コンパイル結果の確認

コンパイルエラーがないか確認して、なければひとまずOKかと思います。

SELECT object_name, object_type,status FROM all_objects
WHERE status = 'INVALID'
AND owner = 'yourSchemas'
ORDER BY object_type, object_name;

まとめ

以上で、『【社内SE向け】サーバー移行に伴うoracleデータベースマイグレーション時のダンプ〜インポートまでのマニュアル』でした。

誤字がなければたぶんこれで移行はできると思いますが、検証はお忘れなく。

タイトルとURLをコピーしました