READ WRITE
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /Archivelog
Oldest online log sequence 312
Next log sequence to archive 314
Current log sequence 314
1.1.2. 主库打开force logging
SQL> select force_logging,flashback_on from gv$database;
FORCE_LOG FLASHBACK_ON
NO NO
SQL> alter database force logging;
Database altered.
SQL> Col force_logging for a20
Col FLASHBACK_ON for a20
Set lines 200 pages 80
select force_logging,flashback_on from gv$database;
FORCE_LOGGING FLASHBACK_ON
YES NO
1.1.3. 拷贝主库的密码文件到备库服务器
主库拷贝密码文件到备库服务器,这里注意一下确认主库当前使用的密码文件,如果有多个,确定当前使用的是哪一个,如果没有使用需要指定:
cd $ORACLE_HOME/dbs
scp orapwORCL 192.168.1.200:/oracle/app/oracle/product/19.3.0/db_1/dbs
1.1.4. 主库配置监听程序
编辑listener配置文件:
su - grid
vi /oracle/app/19.3.0/grid/network/admin/listener.ora
添加如下内容:
LISTENER_ADG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1525))
)
)
SID_LIST_LISTENER_ADG =
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = /oracle/app/oracle/product/19.3.0/db_1)
(GLOBAL_DBNAME=ORCL)
)
完成以后启动listener:
lsnrctl start LISTENER_ADG
lsnrctl status LISTENER_ADG
1.1.5. 主库配置tnsname
编辑tns配置文件:
cd /oracle/app/oracle/product/19.3.0/db_1/network/admin
vi tnsnames.ora
添加如下内容:
ORCL_STD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1525))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
ORCL_PRI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1525))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLp)
)
)
1.1.6. 在主库使用oracle用户创建pfile并传递到备库
Sqlplus / as sysdba
create pfile=’/tmp/pfile.ora’ from spfile;
exit;
scp /tmp/pfile.ora 192.168.1.200:/tmp/
1.1.7. 后期主库的部分参数修改
修改如下参数(需要个性化配置的参数标红):
alter system set db_create_file_dest=’/oradata/ORCL’ scope=both;
alter system set archive_lag_target=0 scope=both;
alter system set log_archive_max_processes=8;
alter system set log_archive_config=‘dg_config=(ORCL,ORCLp)’ scope=both;
alter system set log_archive_dest_state_2=DEFER scope=both;
alter system set log_archive_dest_2=’’ scope=both;
alter system set log_archive_dest_2=‘SERVICE=ORCL_PRI LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLp’ scope=both;
alter system set fal_client=‘ORCL_STD’ scope=both;
alter system set fal_server=‘ORCL_PRI’ scope=both;
alter system set standby_file_management=‘AUTO’ scope=both;
alter system set db_recovery_file_dest_size=100G scope=both;
alter system set db_recovery_file_dest=’/Archivelog’ scope=both;
alter system set local_listener= ‘(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.9)(PORT=1521))’,’(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.9)(PORT=1525))’;
alter system register;
修改以下两个参数需要重启两个节点的数据库。
alter system set db_file_name_convert=’/oradata/ORCLp’,‘oradata/ORCL’ scope=spfile;
alter system set log_file_name_convert=’/oradata/ORCLp’,‘oradata/ORCL’ scope=spfile;
1.2. 物理备库相关配置操作
1.2.1. 备库配置listener
编辑listener配置文件:
su - grid
vi /oracle/app/19.3.0/grid/network/admin/listener.ora
添加如下内容:
LISTENER_ADG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1525))
)
)
SID_LIST_LISTENER_ADG =
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = /oracle/app/oracle/product/19.3.0/db_1)
(GLOBAL_DBNAME=ORCLp)
)
1.2.2. 备库配置tnsnames
编辑tns配置文件:
su - oracle
cd $ORACLE_HOME/network/admin
vi tnsnames.ora
添加如下内容:
ORCL_STD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1525))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
ORCL_PRI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1525))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLp)
)
)
1.2.3. 备库添加数据库及listener资源(选项)
/oracle/app/19.3.0/grid/bin/crsctl modify resource “ora.cssd” -attr “AUTO_START=1” -unsupported
/oracle/app/19.3.0/grid/bin/crsctl start resource -all
su - grid
srvctl add database -d ORCLp -o /oracle/app/oracle/product/19.3.0/db_1
srvctl add listener -l LISTENER_ADG -p 1525
srvctl start listener
lsnrctl status
1.2.4. 创建audit文件目录
备库节点创建审计目录
mkdir -p /oracle/app/oracle/admin/ORCL/adump
1.2.5. 根据主库的pfile修改成备库的参数文件
在备库上编辑pfile文件:
$vi /tmp/pfile.ora
根据文件内容修改成备库的信息,修改之后的如下,标红部分需要根据备库的情况进行修改:
注释 control_files一行
即
#*.control_files=’/oradata/ORCL/control01.ctl’,’/oradata/ORCL/control02.ctl’
然后添加如下内容:
*.db_recovery_file_dest_size=100G
*.db_recovery_file_dest=’/Archivelog’
*.db_create_file_dest=’/oradata/ORCLp’
*.db_unique_name=‘ORCLp’
*.fal_client=‘ORCL_PRI’
*.fal_server=‘ORCL_STD’
*.log_archive_config=‘dg_config=(ORCL,ORCLp)’
*.log_archive_dest_2=‘SERVICE=ORCL_STD LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL’
*.log_archive_dest_state_2=‘DEFER’
*.log_archive_max_processes=8
*.standby_file_management=‘AUTO’
*.db_file_name_convert=’/oradata/ORCL’,’/oradata/ORCLp’
*.log_file_name_convert=’/oradata/ORCL’,’/oradata/ORCLp’
1.2.6. 将备库启动到nomount状态
sqlplus / as sysdba
startup nomount pfile=’/tmp/pfile.ora’;
create spfile=’/oracle/app/oracle/product/19.3.0/db_1/dbs/spfileORCL.ora’ from pfile=’/tmp/pfile.ora’;
shutdown abort;
startup nomount;
alter system set local_listener= ‘(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.200)(PORT=1521))’,’(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.200)(PORT=1525))’;
alter system register;
1.2.7. 备库测试监听程序
sqlplus sys/Passwd123@ORCL_PRI as sysdba
sqlplus sys/Passwd123@ORCL_STD as sysdba
1.2.8. 搭建ADG
备库rman连接
rman target sys/Passwd123@ORCL_STD auxiliary sys/Passwd123@ORCL_PRI
执行rman duplicate:
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate AUXILIARY channel c7 type disk;
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE dorecover NOFILENAMECHECK;
}
exit
1.2.9. 开启同步、启动MRP进程
备库打开日志传输,备库执行:
alter system set log_archive_dest_state_2=enable;
然后在主库打开日志传输,主库执行:
alter system set log_archive_dest_state_2=enable;
备库添加standby log(standby log的组数应该比online redo log的数量多1):
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCLp/redo11.log’) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCLp/redo12.log’) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCLp/redo13.log’) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCLp/redo14.log’) SIZE 200M;
备库开启mrp进程:
alter database recover managed standby database using current logfile disconnect from session;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
1.2.10. 主库 增加standbyredologfile(ADG配置完成后再添加)
在主数据库上创建与联机重做日志大小相同的备用重做日志。这将确保在RMAN复制过程中在备用数据库上自动创建备用重做日志文件,并且在将来发生角色转换且主数据库成为备用数据库之后,备用重做日志文件在当前主数据库上可用。
Oracle建议使用与每个线程的联机重做日志文件数量+1个备用重做日志文件。
例如 主数据库有4个在线重做日志文件,每个线程2个。因此,每个线程需要3个备用重做日志文件,总共6个备用重做日志文件
col member for a60
select * from gv
l
o
g
f
i
l
e
;
s
e
l
e
c
t
b
y
t
e
s
/
1024
/
1024
f
r
o
m
v
logfile; select bytes/1024/1024 from v
logfile;selectbytes/1024/1024fromvlog;
确定相关的日志大小 ,及日志个数
确定每个实例的日志个数,增加的standby log个数为每个实例的日志个数+1, 例如当前每个实例有4个日志组,那么针对每个实例创建5个standby 日志组。
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCL/redo11.log’) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCL/redo12.log’) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCL/redo13.log’) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE (’/oradata/ORCL/redo14.log’) SIZE 200M;
1.2.11. 查看同步状态
–分别在主库、备库执行:
SELECT MAX(SEQUENCE#), THREAD# FROM V$ARCHIVED_LOG GROUP BY THREAD#;
序列一致表示同步正常
–检查归档位置状态
Set lines 200 pages 80
Col DESTINATION for a100
SELECT DESTINATION,
STATUS,
ARCHIVED_THREAD#,
ARCHIVED_SEQ#
FROM V$ARCHIVE_DEST_STATUS
WHERE STATUS <> ‘DEFERRED’ AND STATUS <> ‘INACTIVE’;
1.2.12. 客户端配置
注意该IP地址对应主备库的SERVICE_IP或SCAN_IP地址
ORCLPRIM =
(DESCRIPTION_LIST =
(FAILOVER = ON)
(LOAD_BALANCE = OFF)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCLPRIM)
)
)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCLPRIM)
)
)
)
tnsping ORCLPRIM
sqlplus system/Passwd123@ORCLPRIM
select * from v$instance;
1.2.13. 归档日志管理
mkdir -p /home/oracle/del_arch
cd /home/oracle/del_arch
vi del_arch_ORCL.sh
export ORACLE_SID=ORCL
export ORACLE_HOME=/oracle/app/oracle/product/19.3.0/db_1
export PATH=
O
R
A
C
L
E
H
O
M
E
/
b
i
n
:
ORACLE_HOME/bin:
ORACLEHOME/bin:ORACLE_HOME/OPatch:$PATH
logfile=/home/oracle/del_arch/rman_del_arch_ORCL.log
getsql(){
sqlplus -S “/as sysdba” <<EOF
set head off
set feedback off
set timing off
select ‘delete noprompt archivelog from sequence 0 until sequence ‘||max(sequence# - 50)|| ’ thread ’ || thread# ||’;’
from v$archived_log where applied=‘YES’ group by thread#;
exit;
EOF
}
delArch(){
sql=
(
g
e
t
s
q
l
)
r
m
a
n
t
a
r
g
e
t
/
l
o
g
=
(getsql) rman target / log=
(getsql)rmantarget/log={logfile} <<EOF
$sql
exit;
EOF
}
delArch
#su - oracle -c “sh /home/oracle/del_arch/del_arch_pmddb.sh”
$su - oracle
$crontab -e
0 0, 4, 8, 12, 16, 20 * * sh /home/oracle/del_arch/del_arch_ORCL.sh
$crontab -l
高可用测试
在进行切换过程中,通过swingbench测试软件进行相关测试,数据库切换过程中,不能进行业务连接处理,当ADG切换完成后,业务恢复正常。
ADG switchover测试
3.1. 北京->上海主备角色切换
3.1.1. 停止监听
停止主备库的侦听
lsnrctl stop LISTENER_ADG
3.1.2. 断开应用连接
用oracle用户登录,kill掉主库和备库连接的会话:
sqlplus / as sysdba
set lines 100 pages 200
select ‘kill -9 ‘||spid||’ ;’ from v
s
e
s
s
i
o
n
a
,
v
session a, v
sessiona,vprocess b
where a.paddr=b.addr and a.sid in
(select sid from v$session where username not in (‘SYS’,‘SYSTEM’,‘PUBLIC’)
and username is not null);
exit;
分别在主备库shell环境下执行上述sql生成的内容。
3.1.3. 数据验证
验证主备库数据是否保持同步:
用oracle用户登录,在主库创建一张测试表,并往里面插入一些测试数据:
sqlplus / as sysdba
create table test as select * from dba_objects;
select count(*) from test;
然后在备库检查数据是否存在:
sqlplus / as sysdba
select count(*) from test;
3.1.4. 修改trace
用oracle用户登录,在主库和备库开启ADG的trace:
sqlplus / as sysdba
ALTER SYSTEM SET log_archive_trace=8191;
3.1.5. 创建还原点
以oracle用户创建备库的还原点:
sqlplus / as sysdba
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
CREATE RESTORE POINT SWITCHOVER_START_GRP GUARANTEE FLASHBACK DATABASE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
select name from v$restore_point;
以oracle用户创建主库的还原点:
sqlplus / as sysdba
CREATE RESTORE POINT SWITCHOVER_START_GRP GUARANTEE FLASHBACK DATABASE;
select NAME from v$restore_point;
3.1.6. 检查job和事务运行
用oracle用户登录主备库,确认当前数据库没有job和事务在运行:
sqlplus / as sysdba
select * from dba_jobs_running;
#####确认无job正在运行,无输出为正常。
select * from gv$transaction;
#####确认无事务运行,无输出为正常。
3.1.7. 检查北京主库状态
检查老主库状态:
sqlplus / as sysdba
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
TO STANDBY
验证数据库的状态是否为TO STANDBY或SESSION ACTIVE,这两个结果都是正常的。如果不是这两个结果,则说明日志传输有问题,或者配置不当。
3.1.8. 切换前的验证
使用oracle用户在主库上查询数据库的切换状态:
sqlplus / as sysdba
TO STANDBY
主库上进行切换验证:
alter database switchover to ORCLp verify;
alter database switchover to ORCLp verify
*
ERROR at line 1:
ORA-16475: succeeded with warnings, check alert log for more details
如果返回结果如上或者没有任何警告信息,则说明验证通过,下一步可以进行切换。
3.1.9. 执行主备切换
使用oracle用户在主库上执行如下命令进行主备角色切换
alter database switchover to ORCLp;
3.1.10. 打开新的主库(老的备库)
打开新的主库(备库):
sqlplus / as sysdba
alter database open;
查询其状态
select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
ORCL READ WRITE PRIMARY
3.1.11. 打开新的备库(老的主库)
使用oracle用户在新的备库执行如下命令打开数据库,并打开日志应用:
sqlplus / as sysdba
startup;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
然后查询其状态:
select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
ORCL READ ONLY WITH APPLY PHYSICAL STANDBY
3.1.12. 切换后的数据验证
验证主备库数据是否保持同步:
用oracle用户登录,在新的主库删除测试表:
sqlplus / as sysdba
drop table test;
select count(*) from test;
然后在备库检查数据是否存在:
sqlplus / as sysdba
select count(*) from test;
3.1.13. 恢复归档日志记录级别
使用oracle用户登录主备库,用如下命令关闭数据库ADG诊断trace:
sqlplus / as sysdba
ALTER SYSTEM SET log_archive_trace=0;
3.1.14. 启动主备库的listener
登录主备库打开listener:
lsnrctl start LISTENER_ADG
3.1.15. 删除还原点
使用oracle用户登录主库,用如下命令删除还原点:
select name from v$restore_point;
drop restore point SWITCHOVER_START_GRP;
使用oracle用户登录备库,用如下命令删除还原点:
sqlplus / as sysdba
shutdown immediate;
startup mount;
select name from v$restore_point;
drop restore point SWITCHOVER_START_GRP;
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
3.2. 上海->北京主备角色切换
3.2.1. 停止监听
登录主库(上海)和备库(北京),关闭默认的listener:
lsnrctl stop LISTENER_ADG
3.2.2. 断开应用连接
用oracle用户登录,kill掉主库和备库连接的会话:
sqlplus / as sysdba
set lines 100 pages 200
select ‘kill -9 ‘||spid||’ ;’ from v
s
e
s
s
i
o
n
a
,
v
session a, v
sessiona,vprocess b
where a.paddr=b.addr and a.sid in
(select sid from v$session where username not in (‘SYS’,‘SYSTEM’,‘PUBLIC’)
and username is not null);
分别在主备库shell环境下执行上述sql生成的内容。
3.2.3. 切换前数据验证
验证主备库数据是否保持同步:
用oracle用户登录,在主库创建一张测试表,并往里面插入一些测试数据:
sqlplus / as sysdba
create table test as select * from dba_objects;
select count(*) from test;
然后在备库检查数据是否存在:
sqlplus / as sysdba
select count(*) from test;
3.2.4. 修改trace
用oracle用户登录,在主库和备库开启ADG的trace:
sqlplus / as sysdba
ALTER SYSTEM SET log_archive_trace=8191;
3.2.5. 创建还原点
以oracle用户创建备库的还原点:
sqlplus / as sysdba
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
CREATE RESTORE POINT SWITCHOVER_START_GRP GUARANTEE FLASHBACK DATABASE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
select name from v$restore_point;
以oracle用户创建主库的还原点:
sqlplus / as sysdba
CREATE RESTORE POINT SWITCHOVER_START_GRP GUARANTEE FLASHBACK DATABASE;
select NAME from v$restore_point;
3.2.6. 检查job和事务运行
用oracle用户登录主备库,确认当前数据库没有job和事务在运行:
sqlplus / as sysdba
select * from dba_jobs_running;
#####确认无job正在运行,无输出为正常。
select * from gv$transaction;
#####确认无事务运行,无输出为正常。
3.2.7. 检查北京主库状态
检查主库状态:
sqlplus / as sysdba
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
TO STANDBY
验证数据库的状态是否为TO STANDBY或SESSION ACTIVE,这两个结果都是正常的。如果不是这两个结果,则说明日志传输有问题,或者配置不当。
3.2.8. 切换前的验证
使用oracle用户在主库上查询数据库的切换状态:
sqlplus / as sysdba
alter database switchover to ORCL verify;
ERROR at line 1:
ORA-16475: succeeded with warnings, check alert log for more details
如果返回结果如上或者提示为Database altered而没有任何警告信息,则说明验证通过,下一步可以进行切换。
3.2.9. 执行主备切换
使用oracle用户在主库上执行如下命令进行主备角色切换
alter database switchover to ORCL;
3.2.10. 打开新的主库(老的备库)
打开新的主库(老的备库):
sqlplus / as sysdba
alter database open;
查询其状态:
select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
ORCL READ WRITE PRIMARY
3.2.11. 打开新的备库(老的主库)
使用oracle用户在新的备库执行如下命令打开数据库,并打开日志应用:
sqlplus / as sysdba
startup;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
然后查询其状态:
select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
ORCL READ ONLY WITH APPLY PHYSICAL STANDBY
3.2.12. 切换后的数据验证
验证主备库数据是否保持同步:
用oracle用户登录,在新的主库删除测试表:
sqlplus / as sysdba
drop table test;
select count(*) from test;
然后在备库检查数据是否存在:
sqlplus / as sysdba
select count(*) from test;
3.2.13. 恢复归档日志记录级别
使用oracle用户登录主备库,用如下命令关闭数据库ADG诊断trace:
sqlplus / as sysdba
ALTER SYSTEM SET log_archive_trace=0;
3.2.14. 启动主备库的listener
登录主备库打开listener:
lsnrctl start LISTENER_ADG
3.2.15. 删除还原点
使用oracle用户登录主库,用如下命令删除还原点:
select name from v$restore_point;
drop restore point SWITCHOVER_START_GRP;
使用oracle用户登录备库,用如下命令删除还原点:
sqlplus / as sysdba
shutdown immediate;
startup mount;
select name from v$restore_point;
drop restore point SWITCHOVER_START_GRP;
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
sqlplus / as sysdba
shutdown immediate;
4.1.2. 创建备库还原点
使用oracle用户登录,将备库关闭,并且启动到mount状态创建还原点。
sqlplus / as sysdba
BEFORE_FAILOVER
4.1.3. 查看备库的状态
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
select open_mode, database_role from v$database;
OPEN_MODE DATABASE_ROLE
MOUNTED PHYSICAL STANDBY
结果应该为physical standby
4.1.4. 备库停止恢复日志
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
alter database recover managed standby database finish;
如果执行过程中报错,则使用如下命令:
alter database recover managed standby database finish force;
4.1.5. 备库切为主库
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
alter database commit to switchover to primary;
4.1.6. 打开新的主库
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
alter database open;
查看数据库的状态:
select open_mode, database_role from gv$database;
OPEN_MODE DATABASE_ROLE
READ WRITE PRIMARY
4.1.7. 关闭新的主库日志传输
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
alter system set log_archive_dest_state_2=defer;
4.1.8. 新的主库执行日志切换
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
alter system switch logfile;
4.1.9. 将新的主库闪回到还原点并转为备库
使用oracle用户登录,执行如下命令:
sqlplus / as sysdba
shutdown immediate;
startup mount;
flashback database to restore point before_failover;
alter database convert to physical standby;
4.1.10. 启动备库
使用oracle用户登录,执行如下命令:
shutdown immediate;
startup;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
查看状态:
select open_mode, database_role from gv$database;
OPEN_MODE DATABASE_ROLE
READ ONLY WITH APPLY PHYSICAL STANDBY
4.1.11. 备库删除还原点
sqlplus / as sysdba
shutdown immediate;
startup mount;
select name from v$restore_point;
drop restore point before_failover;
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;