RMANで同一サーバ上にデータベースを複製する
あるOracleDBを同一サーバ上に複製させるメモ。
環境は12cSE2。
現在、稼動中のインスタンス名をtestdb
、複製先DBをcopydb
とする。
準備
- 初期化パラメータをコピーして、リネーム
cp -p $ORACLE_HOME/dbs/inittestdb.ora $ORACLE_HOME/dbs/initcopydb.ora
- パスワードファイルコピー
cp -p $ORACLE_HOME/dbs/orapwtestdb $ORACLE_HOME/dbs/orapwcopydb
- 初期化パラメータの編集 コントロールファイルの場所であったり、SGAのサイズであったり調整する。
・ *.audit_file_dest='/opt/app/oracle/admin/copydb/adump' *.control_files='/opt/app/oracle/oradata/copydb/control01.ctl' ・
- 初期化パラメータで編集した存在しないディレクトリがあれば作成する
$ mkdir -p {/opt/app/oracle/admin/copydb/adump,/opt/app/oracle/oradata/copydb}
- /etc/oratabに記述して環境変数を変更しやすくしておく
$ vim /etc/oratab testdb:/opt/app/oracle/product/12.1.0/dbhome_1:N copydb:/opt/app/oracle/product/12.1.0/dbhome_1:N
複製する
静的リスナーを設定して起動、copydbにアクセスできるようにする
今回はLISTENER2
を作成。
vim $ORACLE_HOME/network/admin/listener.ora LISTENER2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522)) ) ) SID_LIST_LISTENER2= (SID_LIST= (SID_DESC= (SID_NAME=copydb) (ORACLE_HOME=/opt/app/oracle/product/12.1.0/dbhome_1) ) ) $ lsnrctl start LISTENER2 ・ ・ サービスのサマリー... サービス"copydb"には、1件のインスタンスがあります。 インスタンス"copydb"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります... ・ ・
copydb
インスタンス起動
$ . oraenv ORACLE_SID = [testdb] ? copydb The Oracle base remains unchanged with value /opt/app/oracle $ sqlplus / as sysdba SQL> startup nomount; ORACLEインスタンスが起動しました。
RMANから接続してインスタンス起動
testdb
に接続。
$ . oraenv ORACLE_SID = [copydb] ? testdb $ rman target / ターゲット・データベース: TESTDB (データベースID=2695979559)に接続されました
copydb
に接続。パスワードファイルをコピーしておいたのでtestdb
と同じパスワード。
RMAN> connect auxiliary sys/oracle@localhost:1522/copydb 補助データベース: COPYDBに接続されました(マウントされていません)
複製開始する。
事前にデータファイルの場所を確認しておき、SET NEWNAME
で変更する。
RMAN> RUN { SET NEWNAME FOR DATAFILE 1 TO '/opt/app/oracle/oradata/copydb/system01.dbf'; SET NEWNAME FOR DATAFILE 3 TO '/opt/app/oracle/oradata/copydb/sysaux01.dbf'; SET NEWNAME FOR DATAFILE 4 TO '/opt/app/oracle/oradata/copydb/undotbs01.dbf'; SET NEWNAME FOR DATAFILE 5 TO '/opt/app/oracle/oradata/copydb/soe.dbf'; SET NEWNAME FOR DATAFILE 6 TO '/opt/app/oracle/oradata/copydb/users01.dbf'; SET NEWNAME FOR TEMPFILE 1 TO '/opt/app/oracle/oradata/copydb/temp01.dbf'; duplicate target database to copydb; } ・ ・ データベースがオープンしました。 作成したサーバー・パラメータ・ファイルを削除できません Duplicate Dbが完了しました(完了時間: 2016/07/04 22:17:17) ・ ・
これで完了できた。
オンラインREDOログの場所などは事前に指定してもいいし、あとでリネームしてもよい。