Data Guard switchover切换(Logical Standby Database)

1)Verify it is possible to perform a switchover on the primary database.
SELECT SWITCHOVER_STATUS FROM V$DATABASE;–TO STANDBY/SESSIONS ACTIVE

2)Prepare the current primary database for the switchover
ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;–PREPARING SWITCHOVER
ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;–cancel(终止操作)

3)Prepare the target logical standby database for the switchover
ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;
–PREPARING DICTIONARY–>PREPARING SWITCHOVER
ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;–cancel(终止操作)

4)Ensure the current primary database is ready for the future primary
database’s redo stream

SELECT SWITCHOVER_STATUS FROM V$DATABASE;–TO LOGICAL STANDBY

5)Switch the primary database to the logical standby database role
ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;

6)Ensure all available redo has been applied to the target logical standby
database that is about to become the new primary database

SELECT SWITCHOVER_STATUS FROM V$DATABASE;–TO PRIMARY

7)Switch the target logical standby database to the primary database role
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

8)Start SQL Apply on the new logical standby database
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

11g data guard(LOGICAL STANDBY)配置

1、Create a Physical Standby Database
11g data guard(PHYSICAL STANDBY)配置

2、Stop Redo Apply on the Physical Standby Database
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

3、Prepare the Primary Database to Support a Logical Standby Database
1)Prepare the Primary Database for Role Transitions

*.log_archive_dest_1='LOCATION=/u01/archive valid_for=(online_logfiles,all_roles) db_unique_name=first'
*.log_archive_dest_3='LOCATION=/u01/archive/standby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=first'
*.log_archive_dest_state_3='enable'
--其他不修改

2)Build a Dictionary in the Redo Data
EXECUTE DBMS_LOGSTDBY.BUILD;

4、Transition to a Logical Standby Database
1)Convert to a Logical Standby Database
ALTER DATABASE RECOVER TO LOGICAL STANDBY db_name;
Note:
(1)如果数据库是open状态,需要重启,然后置于mount状态
(2)取消使用:RECOVER MANAGED STANDBY DATABASE CANCEL;
(3)如果执行到一半,然后取消,导致原物理库损坏(不能同步),从主库中重新生成备库的control file,然后启动物理库同步

2)Adjust Initialization Parameters for the Logical Standby Database

SHUTDOWN;
STARTUP MOUNT;
alter system set log_archive_dest_3='LOCATION=/u01/archive/standby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=second';
alter system set log_archive_dest_1='LOCATION=/u01/archive valid_for=(online_logfiles,all_roles) db_unique_name=second';
alter system set LOG_ARCHIVE_DEST_STATE_3='ENABLE';

5、Open the Logical Standby Database
ALTER DATABASE OPEN RESETLOGS;
–开启实时应用
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
–开启应用
ALTER DATABASE START LOGICAL STANDBY APPLY;
–关闭应用
ALTER DATABASE STOP LOGICAL STANDBY APPLY;

Physical Standby Database and Snapshot Standby Database

Converting a Physical Standby Database into a Snapshot Standby Database

shutdown immedaite
startup mount
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
alter database open;

Converting a Snapshot Standby Database into a Physical Standby Database

shutdown immedaite
startup mount
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
alter database open;--如果出现ORA-01507: database not mounted,重启数据库
alter database recover managed standby database disconnect from session;
alter database recover managed standby database using current logfile disconnect from session;

Data Guard表空间和数据文件管理

一、添加表空间或者添加数据文件
1)备库的STANDBY_FILE_MANAGEMENT=auto时
主库执行create tablespace fei_2 datafile ‘/u01/oradata/first/fei_02.dbf’ size 1m;
就可以实现在主备库中都实现表空间和数据文件的添加,无需人工干预
2)备库的STANDBY_FILE_MANAGEMENT=MANUAL时
主库执行create tablespace fei_1 datafile ‘/u01/oradata/first/fei_01.dbf’ size 1m;
备库分三步操作
select name from v$datafile;–获得命名异常的数据文件
alter database create datafile ‘/u01/oracle/dbs/UNNAMED00006’ as ‘/u01/oradata/first/fei_01.dbf’;
RECOVER MANAGED STANDBY DATABASE DISCONNECT;

二、删除表空间或者数据文件
1)备库的STANDBY_FILE_MANAGEMENT=auto时
在主库上执行drop tablespace fei_1 including contents and datafiles;
备库同时会删除表空间和数据文件,无需人工干预
2)备库的STANDBY_FILE_MANAGEMENT=MANUAL时
主库执行drop tablespace fei_1 including contents and datafiles;
需要手工在备库上删除相应数据文件rm /u01/oradata/first/fei_01.dbf

三、数据文件重命名
无论STANDBY_FILE_MANAGEMENT=auto/manual都需要人工干预
主库上需要执行操作
1)ALTER TABLESPACE fei_02 OFFLINE;
2)!mv /u01/oradata/first/fei_02.dbf /u01/oradata/first/xifenfei.dbf
3) alter tablespace fei_2 rename datafile ‘/u01/oradata/first/fei_02.dbf’ to ‘/u01/oradata/first/xifenfei.dbf’;
4) alter tablespace fei_2 online;
备库需要执行操作
1)shutdown immediate
2)startup mount
3)!mv /u01/oradata/first/fei_02.dbf /u01/oradata/first/xifenfei.dbf
4)alter system set standby_file_management=manual;–如果是manual无需操作
5)alter database rename file ‘/u01/oradata/first/fei_02.dbf’ to ‘/u01/oradata/first/xifenfei.dbf’;
6)alter system set standby_file_management=auto;–根据实际需求
7)ALTER DATABASE OPEN;–11G
8)ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Data Guard Failover 处理

1、flush redo
ALTER SYSTEM FLUSH REDO TO target_db_name;
Note:1)11g新加功能,如果不是11g的data gurad 则直接跳至步骤2
2)只要主库能启动到mount状态,那么Flush 就可以把没有发送的归档和current online redo 发送到备库,如果Flush成功,数据不会丢失,执行步骤2

2、检查Gap
select thread#, low_sequence#, high_sequence# from v$archive_gap;
如果有,将对应的归档文件copy到备库,在注册它
alter database register physical logfile ‘filespec1’;
检查是否存在gap,如果无记录,继续执行步骤3,否则再尝试,确实不行,则执行步骤6

3、Stop Redo Apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

4、Finish Apply
1)在oracle 10gR2 或之后的版本:如果在备用库上有备用库日志文件
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH [force|wait|nowait];
Note:在执行这个命令的时候,如果主库和备库之间的网络中断了。 那么备库的RFS进程就会等待网络的连接,直到TCP超时。 因此在这种情况下,就需要加上Foce 关键字
2)在oracle 10gR2之前的版本:没有备库日志文件
alter database recover managed standby database finish skip standby logfile;
Note:如果执行了这条命令,就不能在进行recover standby database;

5、将备库切换成主库
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY [WITH SESSION SHUTDOWN];
Note:当我们正常切换的时候,如果提示我们需要介质恢复的时候执行,则执行步骤6,否则执行步骤7

6、强行切换(激活)
1)查找主库最后归档日志
SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#)
OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
2)注册最近归档日志
ALTER DATABASE REGISTER PHYSICAL LOGFILE ‘filespec1’;
3)将主库的所有online redo copy到备库
4)Stop Redo Apply
alter database recover managed standby database cancel;
5)恢复备库
recover standby database until cancel;
Note:手工输入online redo尝试
6)激活备库
alter database activate standby database;

7、重启数据库
shutdown immediate;
startup