当前位置: 首页 > 工具软件 > ADG > 使用案例 >

19c单机ADG

公冶森
2023-12-01
  1. ADG部署步骤
    主库IP:192.168.1.9 北京
    备库IP:192.168.1.200 上海
    1.1. 主库相关配置操作
    1.1.1. 主库归档模式开启
    sqlplus / as sysdba
    select open_mode from gv$database;
    OPEN_MODE

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

  1. 高可用测试
    在进行切换过程中,通过swingbench测试软件进行相关测试,数据库切换过程中,不能进行业务连接处理,当ADG切换完成后,业务恢复正常。

  2. 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;

SWITCHOVER_STATUS

TO STANDBY

验证数据库的状态是否为TO STANDBY或SESSION ACTIVE,这两个结果都是正常的。如果不是这两个结果,则说明日志传输有问题,或者配置不当。
3.1.8. 切换前的验证

使用oracle用户在主库上查询数据库的切换状态:

sqlplus / as sysdba

SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS

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;

SWITCHOVER_STATUS

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;

  1. ADG failover测试
    4.1. 上海切换为主生产
    4.1.1. 关闭主库
    使用oracle用户登录,执行shutdown immediate命令

sqlplus / as sysdba

shutdown immediate;

4.1.2. 创建备库还原点
使用oracle用户登录,将备库关闭,并且启动到mount状态创建还原点。

sqlplus / as sysdba

shutdown immediate;
startup mount;
create restore point before_failover guarantee flashback database;
select name from v$restore_point;
查询输出结果如下:
NAME

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;

 类似资料: