本文承接http://djb1008.itpub.net/post/42280/504822
[oracle@standbydb archivelog]$ pwd
/oradata/archivelog
[oracle@standbydb archivelog]$ ls -lt *
standby_arc:
total 47820
-rw-r----- 1 oracle oinstall 286208 Sep 3 18:41 1_212_724504451.dbf
-rw-r----- 1 oracle oinstall 197120 Sep 3 18:32 1_211_724504451.dbf
-rw-r----- 1 oracle oinstall 4096 Sep 3 18:31 1_210_724504451.dbf
-rw-r----- 1 oracle oinstall 48413184 Sep 3 18:31 1_209_724504451.dbf
primary_arc:
total 0
[@more@]我们可以看到归档日志文件从主节点复制到了备节点,并且得到了应用。
[oracle@standbydb archivelog]$ sqlplus / as sysdba
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
209 03-SEP-10 03-SEP-10
210 03-SEP-10 03-SEP-10
211 03-SEP-10 03-SEP-10
212 03-SEP-10 03-SEP-10
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APP
---------- ---
209 YES
210 YES
211 YES
212 YES
到目前位置,主备数据库环境已经完全搭建完成了,并投入使用。搭建的是Physical Standby Database。
三. 主备数据库切换
注意:
主库服务器的名称为:primarydb,备库服务器的名称为:standbydb。在下面的脚本中可以通过命令行前面的提示符可以知道在那台服务器上执行的。例如"[oracle@primarydb /]$",就可以看出是在主库服务器上运行。
- 生产环境从主库服务器切换到备库服务器
1.1 停止主库运行
[oracle@primarydb /]$ sqlplus / as sysdba
SQL> alter database commit to switchover to physical standby;
Database altered.
SQL> shutdown immediate;
ORA-01507: database notmount
ORACLE instance shut down.
1.2 将主库运行在standby database状态
[oracle@primarydb /]$ sqlplus / as sysdba
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2089472 bytes
Variable Size 578817536 bytes
Database Buffers 490733568 bytes
Redo Buffers 2101248 bytes
SQL> alter database mount standby database;
Database altered.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
1.3 启动备库为生产环境
[oracle@standbydb ~]$ sqlplus / as sysdba
SQL> alter database commit to switchover to primary;
Database altered
备库的alert日志描述如下:
[oracle@standbydb ~]$tail -f alert_gridctl.log
alter database commit to switchover to primary
Mon Sep 6 11:24:30 2010
ALTER DATABASE SWITCHOVER TO PRIMARY (gridctl)
Mon Sep 6 11:24:30 2010
If media recovery active, switchover will wait 900 seconds
SwitchOver after complete recovery through change 9735881
Standby became primary SCN: 9735879
Converting standby mount to primary mount.
Mon Sep 6 11:24:34 2010
Switchover: Complete - Database mounted as primary (gridctl)
Completed: alter database commit to switchover to primary
SQL>shutdown immediate;
ORA-01507: database notmount
ORACLE instance shut down.
SQL>startup
ORACLE instance started.
。。。。。。
Database mounted.
Database opened.
1.4 修改主库服务器的参数log_archive_dest_2为空
[oracle@primarydb /]$ sqlplus / as sysdba
SQL> show parameter log_archive_dest_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string service=standby mandatory reop
en=60
SQL>ALTER SYSTEM SET log_archive_dest_2='' SCOPE=BOTH;
1.5 修改备库服务器的参数log_archive_dest_2,将日志应用到主库服务器
[oracle@standbydb ~]$ sqlplus / as sysdba
SQL> alter system set log_archive_dest_2='service=primary mandatory reopen=60' scope=both;
1.6 查看备库服务器上数据库的角色状态,并进行日切换
[oracle@standbydb ~]$ sqlplus / as sysdba
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
READ WRITE PRIMARY
SQL> alter system switch logfile;
System altered.
1.7 检查主库服务器的数据库角色状态,并查看alert日志文件,验证日志是否得到了应用
[oracle@primarydb /]$ sqlplus / as sysdba
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
MOUNTED PHYSICAL STANDBY
[oracle@standbydb ~]$tail -f alert_gridctl.log
Mon Sep 6 16:15:20 2010
RFS[1]: Archived Log: '/oradata/archivelog/standby_arc/1_237_724504451.dbf'
Mon Sep 6 16:15:23 2010
Media Recovery Log /oradata/archivelog/standby_arc/1_237_724504451.dbf
Media Recovery Waiting for thread 1 sequence 238
- 生产环境从备库服务器切换回主库服务器
2.1 备库服务器将数据库角色从primary转换为standby
[oracle@standbydb ~]$ sqlplus / as sysdba
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
READ WRITE PRIMARY
SQL> alter database commit to switchover to standby;
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2089472 bytes
Variable Size 578817536 bytes
Database Buffers 490733568 bytes
Redo Buffers 2101248 bytes
SQL> alter database mount standby database;
SQL> alter system set log_archive_dest_2='' scope=both;
SQL> alter database recover managed standby database disconnect from session;
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
MOUNTED PHYSICAL STANDBY
2.2 主库服务器将数据库角色从standby转换为primary
[oracle@primarydb /]$ sqlplus / as sysdba
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
MOUNTED PHYSICAL STANDBY
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2089472 bytes
Variable Size 578817536 bytes
Database Buffers 490733568 bytes
Redo Buffers 2101248 bytes
Database mounted.
Database opened.
SQL> alter system set log_archive_dest_2='service=standby mandatory reopen=60' scope=both;
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
READ WRITE PRIMARY
SQL> alter system switch logfile;
查看备库服务器的alert日志文件,可以看到来自主库服务器的日志得到了应用。
[oracle@standbydb ~]$ tail -f alert_gridctl.log
。。。。。。
Media Recovery Log /oradata/archivelog/standby_arc/1_240_724504451.dbf
Media Recovery Log /oradata/archivelog/standby_arc/1_241_724504451.dbf
Media Recovery Waiting for thread 1 sequence 242
切换到此完成。