検証環境およびシステム要件
検証環境概要:
個人PCでVMWAREソフトを利用し、下記のように二つのLinux virtual machineを作成した。
Primary DB:rh-ora10g-s01(vmware環境):
OS:RH Linux AS3
DB:Oracle 10gR2(DB_NAME=fengのインスタンス作成済み)
Standby DB:rh-ora10g-s02(vmware環境):
OS:RH Linux AS3
DB:Oracle 10gR2 (ソフトウエアのみ、インスタンスがない)
1.Primary DBでの準備作業
Primary DBをforce loggingモードに変更
SQL> alter database force logging;
データベースが変更されました。
アーカイブログ出力先とログ転送先を指定する
SQL> alter system set log_archive_dest_1='location=/u03/oradata/feng/arch valid_for=(all_logfiles,all_roles)' scope=both;
システムが変更されました。
SQL> alter system set log_archive_dest_2='service=feng-s lgwr async valid_for=(online_logfiles,primary_role)' scope=both;
システムが変更されました。
SQL> alter system set log_archive_max_processes=10 scope=both;
システムが変更されました。
SQL>
'service=feng-s・・・':feng-sはstandbyへのNet Service名。
Primary DBをarchivelog modeに変更する
SQL> startup mount
ORACLEインスタンスが起動しました。
Total System Global Area 209715200 bytes
Fixed Size 2019640 bytes
Variable Size 92278472 bytes
Database Buffers 113246208 bytes
Redo Buffers 2170880 bytes
データベースがマウントされました。
SQL> alter database archivelog;
データベースが変更されました。
SQL> archive log list
データベース・ログ・モード アーカイブ・モード
自動アーカイブ 有効
アーカイブ先 /u03/oradata/feng/arch
最も古いオンライン・ログ順序 4
アーカイブする次のログ順序 6
現行のログ順序 6
SQL> alter database open;
データベースが変更されました。
SQL>
2.Primary DBがStandby roleで動作するため、Standby Databaseパラメータ設定
FAL_SERVERおよびFAL_CLIENT
SQL> alter system set fal_server='feng-s' scope=both;
システムが変更されました。
SQL> alter system set fal_client='feng-p' scope=both;
システムが変更されました。
SQL> show parameter fal_
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
fal_client string feng-p
fal_server string feng-s
SQL> alter system set standby_file_management=auto scope=both;
システムが変更されました。
SQL>
Standby Redo Group作成
SQL> alter database add standby logfile group 4 ('/u02/oradata/feng/redo04_01.log','/u02/oradata/feng/redo04_02.log') size 100m;
データベースが変更されました。
SQL> alter database add standby logfile group 5 ('/u02/oradata/feng/redo05_01.log','/u02/oradata/feng/redo05_02.log') size 100m;
データベースが変更されました。
SQL> alter database add standby logfile group 6 ('/u02/oradata/feng/redo06_01.log','/u02/oradata/feng/redo06_02.log') size 100m;
データベースが変更されました。
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARCHIVED STATUS
---------- ---------- ---------- --------- ------------------------------
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
6 0 0 YES UNASSIGNED
3.ListenerとNet Service Names設定
Primary DBとStandby DBでリスナーを起動し、両方のTNSNAMES.ORAに下記の設定を追加する。
FENG-S =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rh-ora10g-s02)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = feng)
)
)
FENG-P =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rh-ora10g-s01)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = feng)
)
)
4.Standby DBを作成するため、Primary DBから必要なデータファイルをコピーする。
Primary DBを停止する。
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされま
5.FTPなどのツールを使ってPrimary DBのデータファイルをStandby DBへ転送する。
※ この検証ではPrimaryとStandbyのファイルディレクトリを同じに設定した。
※ Standby側では、Primaryと同じ場所でbdump、udump等のフォルダを事前に作っておく。
転送ファイル:
- データファイル
- パスワードファイル
- Redo Logファイル
- アーカイブログ
6.Primary DBをマウントして、Standby DB用制御ファイルと初期パラメータファイルを作成する。
[oracle@rh-ora10g-s01 oracle]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 水 8月 13 02:08:18 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
アイドル・インスタンスに接続しました。
SQL> startup mount
ORACLEインスタンスが起動しました。
Total System Global Area 209715200 bytes
Fixed Size 2019640 bytes
Variable Size 92278472 bytes
Database Buffers 113246208 bytes
Redo Buffers 2170880 bytes
データベースがマウントされました。
SQL> alter database create standby controlfile as '/tmp/standby.ctl';
データベースが変更されました。
SQL> create pfile='/tmp/initstandby.ora' from spfile;
ファイルが作成されました。
SQL> exit
上記で作成したファイルをStandby DBへ転送する。
7.Standby DBで初期化パラメータファイルを編集する。
Standby DBを起動するため、初期化パラメータファイル編集
・・・・・・
*.audit_file_dest='/u01/oracle/app/oracle/admin/feng/adump'
*.background_dump_dest='/u01/oracle/app/oracle/admin/feng/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u02/oradata/feng/control01.ctl','/u02/oradata/feng/control02.ctl','/u02/oradata/feng/control03.ctl'
*.core_dump_dest='/u01/oracle/app/oracle/admin/feng/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='feng'
*.db_recovery_file_dest='/u03/oradata/feng/flash_recovery_area'
*.db_recovery_file_dest_size=21474836480
*.fal_client='feng-s'
*.fal_server='feng-p'
*.job_queue_processes=10
*.log_archive_dest_1='location=/u03/oradata/feng/arch valid_for=(all_logfiles,all_roles)'
*.log_archive_dest_2='service=feng-p lgwr async valid_for=(online_logfiles,primary_role)'
*.log_archive_max_processes=10
*.nls_language='JAPANESE'
*.nls_territory='JAPAN'
*.open_cursors=300
*.pga_aggregate_target=20971520
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=209715200
*.standby_file_management='AUTO'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/oracle/app/oracle/admin/feng/udump'
Standby DBのアイドル状態で、上記編集した初期化ファイルをSPFILEに変換する
[oracle@rh-ora10g-s02 dbs]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 水 8月 13 02:36:28 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
アイドル・インスタンスに接続しました。
SQL> !
[oracle@rh-ora10g-s02 dbs]$ ls -l
合計 52
-rw-r--r-- 1 oracle oinstall 1552 8月 13 02:00 hc_feng.dat
-rw-r----- 1 oracle oinstall 8385 8月 13 02:00 init.ora
-rw-r----- 1 oracle oinstall 12920 8月 13 02:00 initdw.ora
-rw-r--r-- 1 oracle oinstall 1101 8月 13 02:00 initfeng.ora
-rw-r--r-- 1 oracle oinstall 1344 8月 13 02:34 initstandby.ora
-rw-r--r-- 1 oracle oinstall 24 8月 13 02:00 lkFENG
-rw-r--r-- 1 oracle oinstall 1536 8月 13 02:00 orapwfeng
-rw-r--r-- 1 oracle oinstall 3584 8月 13 02:00 spfilefeng.ora
[oracle@rh-ora10g-s02 dbs]$ exit
exit
SQL> !pwd
/u01/oracle/app/oracle/product/10.2.0/db_1/dbs
SQL> create spfile from pfile='/u01/oracle/app/oracle/product/10.2.0/db_1/dbs/initstandby.ora';
ファイルが作成されました。
SQL> !ls -l
合計 52
-rw-r--r-- 1 oracle oinstall 1552 8月 13 02:00 hc_feng.dat
-rw-r----- 1 oracle oinstall 8385 8月 13 02:00 init.ora
-rw-r----- 1 oracle oinstall 12920 8月 13 02:00 initdw.ora
-rw-r--r-- 1 oracle oinstall 1101 8月 13 02:00 initfeng.ora
-rw-r--r-- 1 oracle oinstall 1344 8月 13 02:34 initstandby.ora
-rw-r--r-- 1 oracle oinstall 24 8月 13 02:00 lkFENG
-rw-r--r-- 1 oracle oinstall 1536 8月 13 02:00 orapwfeng
-rw-r----- 1 oracle oinstall 3584 8月 13 02:38 spfilefeng.ora
8.Standby DBの起動
SQL> startup nomount;
ORACLEインスタンスが起動しました。
Total System Global Area 209715200 bytes
Fixed Size 2019640 bytes
Variable Size 92278472 bytes
Database Buffers 113246208 bytes
Redo Buffers 2170880 bytes
SQL> show parameter fal
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
fal_client string feng-s
fal_server string feng-p
SQL> alter database mount;
データベースが変更されました。
SQL> alter database recover managed standby database disconnect from session;
データベースが変更されました。
9.Standby DBへログ転送のテスト
Standby DBでArchive log状態を確認する。
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;
SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
6 08-08-12 08-08-13
7 08-08-13 08-08-13
Primary DBでログスイッチ
SQL> alter system switch logfile;
システムが変更されました。
Standby DBで新規ログの受信確認
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;
SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
6 08-08-12 08-08-13
7 08-08-13 08-08-13
8 08-08-13 08-08-13
Standby DBで新規ログの適用状態を確認
SQL> select sequence#,applied from v$archived_log order by sequence#;
SEQUENCE# APPLIED
---------- ---------
6 YES
7 YES
8 YES
10.DataGuard稼働状態検証
Primary DBで新規にユーザーとテーブル作成
SQL> create user feng identified by feng;
ユーザーが作成されました。
SQL> grant dba to feng;
権限付与が成功しました。
SQL> grant select any dictionary to feng;
権限付与が成功しました。
SQL> grant unlimited tablespace to feng;
権限付与が成功しました。
SQL> conn feng/feng
接続されました。
SQL> create table dg_test as select * from dba_objects;
表が作成されました。
SQL> select count(*) from dg_test;
COUNT(*)
----------
11253
SQL> insert into dg_test select * from dba_objects;
11253行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> select count(*) from dg_test;
COUNT(*)
----------
22506
SQL> alter system switch logfile;
システムが変更されました。
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;
SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
6 08-08-12 08-08-13
6 08-08-12 08-08-13
7 08-08-13 08-08-13
7 08-08-13 08-08-13
8 08-08-13 08-08-13
8 08-08-13 08-08-13
9 08-08-13 08-08-13
9 08-08-13 08-08-13
10 08-08-13 08-08-13
10 08-08-13 08-08-13
11 08-08-13 08-08-13
SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
11 08-08-13 08-08-13
Standby DBでの確認
SQL> select sequence#, first_time, next_time from v$archived_log order by sequence#;
SEQUENCE# FIRST_TI NEXT_TIM
---------- -------- --------
6 08-08-12 08-08-13
7 08-08-13 08-08-13
8 08-08-13 08-08-13
9 08-08-13 08-08-13
10 08-08-13 08-08-13
11 08-08-13 08-08-13
6行が選択されました。
SQL> alter database recover managed standby database cancel;
データベースが変更されました。
SQL> alter database open read only;
データベースが変更されました。
SQL> select sequence#,applied from v$archived_log order by sequence#;
SEQUENCE# APPLIED
---------- ---------
6 YES
7 YES
8 YES
9 YES
10 YES
11 YES
6行が選択されました。
SQL> conn feng/feng
接続されました。
SQL> select count(*) from dg_test;
COUNT(*)
----------
22506
SQL>
2008.8.14 1:15 by moc.todikiw.bup-elcaro|nosaJ#moc.todikiw.bup-elcaro|nosaJ
個人的な検証メモなので無断転載などをしないで下さい。