読者です 読者をやめる 読者になる 読者になる

kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

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ログの場所などは事前に指定してもいいし、あとでリネームしてもよい。