目的

環境

参考文献

準備

3.1.1 強制ロギングの有効化

#pre{{ SQL> alter database force logging;

データベースが変更されました。 }}

3.1.2 REDO転送の認証の構成

パスワードファイル認証。

#pre{{ [oracle@ora1 ~]$ sqlplus sys/oracle@orcl as sysdba (接続できることを確認) }}

3.1.4 プライマリ・データベースの初期化パラメータの構成

マニュアルに従って書きます。

spfile にしてあるので pfile を作ります。

#pre{{ SQL> create pfile from spfile;

ファイルが作成されました。 }}

$ORACLE_HOME/dbs/initorcl.ora に作成されるので、 これを編集します。

空行より下の行が今回追記したところですが、 その上の spfile から作ったところも必要があれば変更します。

#pre{{ orcl.__oracle_base='/u01/app/oracle' orcl.__shared_io_pool_size=0 orcl.__streams_pool_size=0

.audit_file_dest='/u02/oradata/admin/orcl/adump'

.audit_trail='db'

.compatible='11.2.0.0.0'

.control_files='/u02/oradata/orcl/control01.ctl','/u02/oradata/orcl/control02.ctl'

.db_block_size=8192

.db_domain=''

.db_name='orcl'

.db_recovery_file_dest='/u02/oradata/flash_recovery_area'

.db_recovery_file_dest_size=4294967296

.diagnostic_dest='/u01/app/oracle'

.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

.memory_target=500M

.nls_language='JAPANESE'

.nls_territory='JAPAN'

.open_cursors=300

.processes=150

.remote_login_passwordfile='EXCLUSIVE'

.undo_tablespace='UNDOTBS1'

log_archive_config='DG_CONFIG=(orcl,orclsby)' log_archive_dest_1=

 'LOCATION=/u02/oradata/arch/orcl/
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=orcl'

log_archive_dest_2=

 'SERVICE=orclsby ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=orclsby'

log_archive_dest_state_1=ENABLE log_archive_dest_state_2=ENABLE log_archive_format=%t_%s_%r.arc log_archive_max_processes=30

fal_server=orclsby fal_client=orcl db_file_name_convert='/u02/oradata/orclsby/','/u02/oradata/orcl/' log_file_name_convert='/u02/oradata/arch/orclsby/','/u02/oradata/arch/orcl/' standby_file_management=AUTO }}

3.1.5 アーカイブの有効化

pfileを指定して起動します。 NOARCHIVELOGモードだったので変更します。

#pre{{ SQL> shutdown immediate データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> startup mount pfile=$ORACLE_HOME/dbs/initorcl.ora ORACLEインスタンスが起動しました。

Total System Global Area 521936896 bytes Fixed Size 2214936 bytes Variable Size 314573800 bytes Database Buffers 201326592 bytes Redo Buffers 3821568 bytes データベースがマウントされました。

SQL> alter database archivelog;

データベースが変更されました。

SQL> alter database open;

データベースが変更されました。

SQL> }}

アーカイブログが作られていることを確認します。

#pre{{ SQL> !ls /u02/oradata/arch/orcl/ 1_6_697420466.arc 1_7_697420466.arc

SQL> alter system switch logfile;

システムが変更されました。

SQL> !ls /u02/oradata/arch/orcl/ 1_6_697420466.arc 1_7_697420466.arc 1_8_697420466.arc

SQL> }}

#pre{{ SQL> archive log list データベース・ログ・モード アーカイブ・モード 自動アーカイブ 有効 アーカイブ先 /u02/oradata/arch/orcl/ 最も古いオンライン・ログ順序 7 アーカイブする次のログ順序 9 現行のログ順序 9 SQL> alter system switch logfile;

システムが変更されました。

SQL> archive log list データベース・ログ・モード アーカイブ・モード 自動アーカイブ 有効 アーカイブ先 /u02/oradata/arch/orcl/ 最も古いオンライン・ログ順序 8 アーカイブする次のログ順序 10 現行のログ順序 10 SQL> }}

正しくアーカイブログモードになっていることが確認できたら、 spfile にして起動しなおしておきます。

#pre{{ SQL> shutdown immediate データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> create spfile from pfile;

ファイルが作成されました。

SQL> startup ORACLEインスタンスが起動しました。

Total System Global Area 521936896 bytes Fixed Size 2214936 bytes Variable Size 314573800 bytes Database Buffers 201326592 bytes Redo Buffers 3821568 bytes データベースがマウントされました。 データベースがオープンされました。 SQL> }}

フィジカルスタンバイデータベースの構築

orclsby インスタンスの設定

インスタンスが上がるだけのものを作っておきます。

初期化パラメータファイルの作成

initorcl.ora からコピーして作ります。

orcl → orclsby のものと、orclsby → orcl のものが 混在しているので注意しましょう。

#pre{{ [oracle@ora1 2_DataGuard]$ cat initorclsby.ora orclsby.__oracle_base='/u01/app/oracle' orclsby.__shared_io_pool_size=0 orclsby.__streams_pool_size=0

.audit_file_dest='/u02/oradata/admin/orclsby/adump'

.audit_trail='db'

.compatible='11.2.0.0.0'

.control_files='/u02/oradata/orclsby/control01.ctl','/u02/oradata/orclsby/control02.ctl'

.db_block_size=8192

.db_domain=''

.db_name='orcl'

.db_recovery_file_dest='/u02/oradata/flash_recovery_area'

.db_recovery_file_dest_size=4294967296

.db_unique_name='orclsby'

.diagnostic_dest='/u01/app/oracle'

.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

.memory_target=500M

.nls_language='JAPANESE'

.nls_territory='JAPAN'

.open_cursors=300

.processes=150

.remote_login_passwordfile='EXCLUSIVE'

.undo_tablespace='UNDOTBS1'

.log_archive_config='DG_CONFIG=(orcl,orclsby)'

.log_archive_dest_1='LOCATION=/u02/oradata/arch/orclsby/

  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=orclsby'

.log_archive_dest_2='SERVICE=orcl ASYNC

  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=orcl'

.log_archive_dest_state_1='ENABLE'

.log_archive_dest_state_2='ENABLE'

.log_archive_format='%t_%s_%r.arc'

.log_archive_max_processes=30

.fal_server='orcl'

.fal_client='orclsby'

.db_file_name_convert='/u02/oradata/orcl/','/u02/oradata/orclsby/'

.log_file_name_convert='/u02/oradata/orcl/','/u02/oradata/orclsby/'

.standby_file_management='AUTO'

}}

パスワードファイルの作成

#pre{{ [oracle@ora1 2_DataGuard]$ orapwd file=$ORACLE_HOME/dbs/orapworclsby

Enter password for SYS: }}

ディレクトリの作成

orclsby 用の必要なディレクトリも作っておきます。

#pre{{ [oracle@ora1 2_DataGuard]$ mkdir -p /u02/oradata/admin/orclsby/adump [oracle@ora1 2_DataGuard]$ mkdir -p /u02/oradata/orclsby [oracle@ora1 2_DataGuard]$ mkdir -p /u02/oradata/arch/orclsby }}

ネットワークの設定

listener.ora と tnsnames.ora を編集して、 @orclsby でアクセスできるようにします。

$ORACLE_HOME/network/admin/listener.ora

#pre{{ LISTENER =

 (ADDRESS_LIST=
   (ADDRESS=(PROTOCOL=tcp)(HOST=ora1)(PORT=1521))
   (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)))

SID_LIST_LISTENER=

 (SID_LIST=
   (SID_DESC=
     (GLOBAL_DBNAME=orcl)
     (SID_NAME=orcl)
     (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1))
   (SID_DESC=
     (GLOBAL_DBNAME=orclsby)
     (SID_NAME=orclsby)
     (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)))

}}

$ORACLE_HOME/network/admin/tnsnames.ora

#pre{{ orcl=

 (DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcp)(HOST=ora1)(PORT=1521))
   (CONNECT_DATA=
     (SERVICE_NAME=orcl)))

orclsby=

 (DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcp)(HOST=ora1)(PORT=1521))
   (CONNECT_DATA=
     (SERVICE_NAME=orclsby)))

}}

編集したら設定を読み込みます。

#pre{{ [oracle@ora1 2_DataGuard]$ lsnrctl reload

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 12-9月 -2009 17:09:34

Copyright (c) 1991, 2009, Oracle. All rights reserved.

(ADDRESS=(PROTOCOL=tcp)(HOST=ora1)(PORT=1521))に接続中 コマンドは正常に終了しました。 }}

orclsby インスタンスの起動

リスナー経由でアクセスできることと、 NOMOUNTで起動できることを確認しておきます。

#pre{{ [oracle@ora1 2_DataGuard]$ sqlplus sys/oracle@orclsby as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 日 9月 13 01:42:32 2009

Copyright (c) 1982, 2009, Oracle. All rights reserved.

アイドル・インスタンスに接続しました。

SQL> startup nomount pfile=$ORACLE_HOME/dbs/initorclsby.ora ORACLEインスタンスが起動しました。

Total System Global Area 521936896 bytes Fixed Size 2214936 bytes Variable Size 314573800 bytes Database Buffers 201326592 bytes Redo Buffers 3821568 bytes SQL> }}

これは spfile にしてはいけません。

データベースの複製

RMANのマニュアルにあるサンプルを利用して、 RMANのスクリプトを用意しておきます。 初期化パラメータファイルはもう設定してあるため、 ここは簡単になっています。

#pre{{ [oracle@ora1 2_DataGuard]$ cat rman.txt run {

 duplicate target database
   for standby
   from active database
   db_file_name_convert '/u02/oradata/orcl/','/u02/oradata/orclsby/'
 ;

} }}

rman で両方のインスタンスに接続して、 このスクリプトを流します。

#pre{{ [oracle@ora1 2_DataGuard]$ rman

Recovery Manager: Release 11.2.0.1.0 - Production on 日 9月 13 01:55:30 2009

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

RMAN> connect target sys/oracle@orcl

ターゲット・データベース: ORCL (データベースID=1225201194)に接続されました

RMAN> connect auxiliary sys/oracle@orclsby

補助データベースに接続されました(開始されていません)

RMAN> @rman.txt ...

データファイル1はデータファイル・コピーに切り替えられました 入力データファイル・コピー レコードID=5 スタンプ=697430331 ファイル名=/u02/oradata/orclsby/system01.dbf データファイル2はデータファイル・コピーに切り替えられました 入力データファイル・コピー レコードID=6 スタンプ=697430331 ファイル名=/u02/oradata/orclsby/sysaux01.dbf データファイル3はデータファイル・コピーに切り替えられました 入力データファイル・コピー レコードID=7 スタンプ=697430331 ファイル名=/u02/oradata/orclsby/undotbs01.dbf データファイル4はデータファイル・コピーに切り替えられました 入力データファイル・コピー レコードID=8 スタンプ=697430331 ファイル名=/u02/oradata/orclsby/users01.dbf データファイル5はデータファイル・コピーに切り替えられました 入力データファイル・コピー レコードID=9 スタンプ=697430331 ファイル名=/u02/oradata/orclsby/example01.dbf Duplicate Dbが完了しました(完了時間: 09-09-13)

RMAN> RMAN> **end-of-file** }}

ここまでできたらインスタンスを止めて、 一貫性バックアップを取っておくといいと思います。

#pre{{ SQL> shutdown immediate ORA-01109: データベースがオープンされていません。

データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。 SQL> create spfile from pfile;

ファイルが作成されました。

}}

3.2.6 フィジカルスタンバイデータベースの起動

orclsby を MOUNT で起動します。

ここでは1つのサーバに2つインスタンスを立ち上げているので、 メモリが足りないと言われたら メモリの設定 を見直してください。

#pre{{ [oracle@ora1 2_DataGuard]$ sqlplus sys/oracle@orclsby as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 土 9月 12 19:19:08 2009

Copyright (c) 1982, 2009, Oracle. All rights reserved.

アイドル・インスタンスに接続しました。

SQL> startup mount ORACLEインスタンスが起動しました。

Total System Global Area 521936896 bytes Fixed Size 2214936 bytes Variable Size 314573800 bytes Database Buffers 201326592 bytes Redo Buffers 3821568 bytes データベースがマウントされました。 SQL> }}

3.2.6 → 6.2.3 スタンバイREDOログの作成

スタンバイREDOログを作っておきます。

#pre{{ [oracle@ora1 2_DataGuard]$ cat standbyredo-orclsby.sql alter database add standby logfile

('/u02/oradata/orclsby/sbyredo01.log') size 50M;

alter database add standby logfile

('/u02/oradata/orclsby/sbyredo02.log') size 50M;

alter database add standby logfile

('/u02/oradata/orclsby/sbyredo03.log') size 50M;

alter database add standby logfile

('/u02/oradata/orclsby/sbyredo04.log') size 50M;

}}

orclsby で流します。

#pre{{ SQL> @standbyredo-orclsby

データベースが変更されました。 ... }}

REDO Apply の開始

コマンドが長いので別に書いておいて流すのがいいでしょう。

#pre{{ [oracle@ora1 2_DataGuard]$ cat redoapply.sql alter database recover managed standby database using current logfile disconnect from session;

}}

#pre{{ SQL> @redoapply

データベースが変更されました。

SQL> }}

3.2.7 動作確認

プライマリ側

#pre{{ SQL> archive log list データベース・ログ・モード アーカイブ・モード 自動アーカイブ 有効 アーカイブ先 /u02/oradata/arch/orcl/ 最も古いオンライン・ログ順序 17 アーカイブする次のログ順序 19 現行のログ順序 19 }}

いま19です。

スタンバイ側

#pre{{ SQL> select sequence#,applied from v$archived_log order by sequence#;

SEQUENCE# APPLIED

       14 YES
       15 YES
       16 YES
       17 YES
       18 YES

}}

18まで反映されていました。

プライマリ側

ログスイッチします。

#pre{{ SQL> alter system switch logfile;

システムが変更されました。

SQL> archive log list データベース・ログ・モード アーカイブ・モード 自動アーカイブ 有効 アーカイブ先 /u02/oradata/arch/orcl/ 最も古いオンライン・ログ順序 18 アーカイブする次のログ順序 20 現行のログ順序 20 }}

スタンバイ側

#pre{{ SQL> select sequence#,applied from v$archived_log order by sequence#;

SEQUENCE# APPLIED

       14 YES
       15 YES
       16 YES
       17 YES
       18 YES
       19 IN-MEMORY

6行が選択されました。 }}

アーカイブされたものは反映されてます。

動作確認続き

プライマリ側で表領域を作ってみます。

#pre{{ SQL> create tablespace testtbs datafile '/u02/oradata/orcl/testtbs01.dbf'

 2  size 10M
 3  extent management local autoallocate;

表領域が作成されました。

SQL> }}

スタンバイ側で確認してみます。 dba_tablespaces は見れないようなのでファイルで確認しました。

#pre{{ SQL> !ls -l /u02/oradata/orclsby/ 合計 1782800

SQL> }}

ちゃんと出来てます。

8.2.1 スイッチオーバー

orcl→orclsby

orcl が切り替え可能かどうか見てみます。

#pre{{ SQL> select switchover_status from v$database;

SWITCHOVER_STATUS


TO STANDBY }}

切り替えてみます。

#pre{{ SQL> alter database commit to switchover to physical standby with session shutdown;

データベースが変更されました。

}}

停止してMOUNTにします。

#pre{{ SQL> shutdown immediate ORA-01507: データベースがマウントされていません。

ORACLEインスタンスがシャットダウンされました。 SQL> startup mount ORACLEインスタンスが起動しました。

Total System Global Area 521936896 bytes Fixed Size 2214936 bytes Variable Size 360711144 bytes Database Buffers 155189248 bytes Redo Buffers 3821568 bytes データベースがマウントされました。 SQL> }}

同様に、orclsby で切り替え準備を確認します。

#pre{{ SQL> select switchover_status from v$database;

SWITCHOVER_STATUS


TO PRIMARY }}

切り替えます。

#pre{{ SQL> alter database commit to switchover to primary with session shutdown;

データベースが変更されました。

SQL> alter database open;

データベースが変更されました。

SQL> }}

旧プライマリの orcl では REDO Apply を動かします。

#pre{{ SQL> @redoapply alter database recover managed standby database

行1でエラーが発生しました。: ORA-38500: USING CURRENT LOGFILE option not available without standby redo logs

}}

スタンバイREDOログファイルを作っていませんでした。

#pre{{ [oracle@ora1 2_DataGuard]$ cat standbyredo-orcl.sql alter database add standby logfile

('/u02/oradata/orcl/sbyredo01.log') size 50M;

alter database add standby logfile

('/u02/oradata/orcl/sbyredo02.log') size 50M;

alter database add standby logfile

('/u02/oradata/orcl/sbyredo03.log') size 50M;

alter database add standby logfile

('/u02/oradata/orcl/sbyredo04.log') size 50M;

}}

このように作ったのを流します。

#pre{{ SQL> @standbyredo-orcl

データベースが変更されました。

データベースが変更されました。

データベースが変更されました。

データベースが変更されました。 }}

今度は REDO Apply もちゃんと動きます。

#pre{{ SQL> @redoapply

データベースが変更されました。 }}

orclsby→orcl

今度は逆に切り戻してみます。

まずはプライマリになっている orclsby にて。

#pre{{ SQL> select switchover_status from v$database;

SWITCHOVER_STATUS


TO STANDBY

SQL> alter database commit to switchover to physical standby with session shutdown;

データベースが変更されました。

SQL> shutdown immediate ORA-01507: データベースがマウントされていません。

ORACLEインスタンスがシャットダウンされました。 SQL> startup mount ORACLEインスタンスが起動しました。

Total System Global Area 521936896 bytes Fixed Size 2214936 bytes Variable Size 318768104 bytes Database Buffers 197132288 bytes Redo Buffers 3821568 bytes データベースがマウントされました。 }}

orcl をプライマリに戻します。

#pre{{ SQL> select switchover_status from v$database;

SWITCHOVER_STATUS


TO PRIMARY

SQL> alter database commit to switchover to primary with session shutdown;

データベースが変更されました。

SQL> alter database open;

データベースが変更されました。 }}

orclsby で REDO Apply を有効にします。

#pre{{ SQL> @redoapply

データベースが変更されました。 }}

問題

ORA-03113

alter system switch logfile; 直後に ORA-03113 が出ることがあります。

#pre{{ SQL> alter system switch logfile; alter system switch logfile

行1でエラーが発生しました。: ORA-03113: 通信チャネルでend-of-fileが検出されました プロセスID: 4983 セッションID: 1、シリアル番号: 5 }}

こうなるとリカバリしてスタンバイ側も再構成の必要があり、 かなりやっかいです。

スタンバイ側でのREDOをプライマリ側と同じファイルで指定してしまっているのが原因みたいで、 復旧するのがなかなか難しいです。

convertの設定

ここを間違えると全部作り直しになります。 RMAN でのスクリプトで変換するときは 何がどう変わるのかをよく考えないと失敗します。



トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-01-29 (土) 15:27:48