はじめに
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データベースマイグレーション時のダンプ〜インポートまでのマニュアル』でした。
誤字がなければたぶんこれで移行はできると思いますが、検証はお忘れなく。