使用duplicate创建物理standby
1.环境准备
服务器信息
| 主库DG1 | 备库DG2 | |
|---|---|---|
| 主机IP | 192.168.5.79 | 192.168.5.80 |
| db_name | orcl11g | orcl11g |
| db_unique_name | orcl11g | orcl11gdg |
| ORACLE_BASE | /u01/app/oracle | /u01/app/oracle |
| ORACLE_HOME | /u01/app/oracle/product/11.2.0/db | /u01/app/oracle/product/11.2.0/db |
| 主机名 | primarynode | standbynode |
| 数据库版本 | 11.2.0.4 | 11.2.0.4 |
| 操作系统 | centos8 | centos8 |
| instance_name | orcl11g | orcl11g |
| service_name | orcl11g | orcl11g |
| 数据库安装 | 安装数据库软件,创建监听和数据库实例 | 仅安装数据库软件 |
注意:
- 数据盘目录需要一致。
- 操作系统需要一致。
- Oracle版本需要一致,必须是完全一致。
- 两台服务器时间需要一致,否则会出现主备不同步。
- 两台机器的网络带宽应该根据同步的数据量去评估。
上传软件

使用服务器将文件传输到192.168.5.80上

在192.168.5.80上查看

挂载镜像
在两台服务器分别执行以下语句
$ mkdir -p /mnt/cdrom
$ mount CentOS-8.4.2105-x86_64-dvd1.iso /mnt/cdrom
$ df -h|grep /mnt

2.安装数据库
- 主库
安装数据库软件,创建监听和数据库实例
执行脚本一键安装
$ chmod -R 775 OracleShellInstall
$ ./OracleShellInstall -lf ens160 `# local ip ifname`\
-n primarynode `# hostname`\
-op oracle `# oracle password`\
-d /u01 `# software base dir`\
-ord /oradata `# data dir`\
-o orcl11g `# dbname`\
-dp oracle `# sys/system password`\
-ds AL32UTF8 `# database character`\
-ns AL16UTF16 `# national character`\
-redo 50 `# redo size`\
-opd Y `# optimize db`

二、备库
只安装数据库软件
$ chmod -R 775 OracleShellInstall
$ ./OracleShellInstall -lf ens160 `# local ip ifname`\
-n standbynode `# hostname`\
-op oracle `# oracle password`\
-d /u01 `# software base dir`\
-ord /oradata `# data dir`\
-o orcl11g `# dbname`\
-dp oracle `# sys/system password`\
-ds AL32UTF8 `# database character`\
-ns AL16UTF16 `# national character`\
-ud Y `# 只安装数据库软件`

3.部署DG
(一)基础环境配置
两个节点都执行:
修改主备库的主机名并进行hosts文件配置
#主库
hostnamectl set-hostname primarynode
#备库
hostnamectl set-hostname standbynode
将IP解析写入文件
cat <<EOF >>/etc/hosts
192.168.5.79 primarynode
192.168.5.80 standbynode
EOF


注意:注意修改listener.ora和tnsnames.ora两个文件对应的HOST。
路径为/u01/app/oracle/product/11.2.0/db/network/admin
(二)主库DG1配置
1、开启归档
关闭数据库
SQL> shutdown immediate
启动数据库到 mount
SQL> startup mount;
开启归档
SQL> alter database archivelog;
打开数据库
SQL> alter database open;

查询归档模式是否开启
select name,open_mode,log_mode from v$database;

查询是否启用强制归档
SQL>select force_logging from v$database;
SQL>archive log list;

2、主库启用强制记录日志功能
查询是否启用强制记录日志
SQL>select force_logging from v$database;
如果未启用,则使用下面语句来开启强制记录日志
SQL> alter database force logging;

3、主库参数配置
一共11个参数需要进行配置。这是关键,如果参数有误,那么搭建会失败。
1、db_unique_name
SQL> alter system set db_unique_name = 'orcl11g' scope=spfile;

2、log_archive_config**
SQL> alter system set log_archive_config='DG_CONFIG=(orcl11g,orcl11gdg)' scope=spfile;

3、log_archive_dest_1
查看归档日志的目录位置
SQL> select name, archived, dest_id, completion_time from v$archived_log order by completion_time desc;

把上面查到的目录路径【/u01/app/oracle/fast_recovery_area/ORCL11G/archivelog】放到下面来。备注:各自的库不一样,根据自己的实际路径来,文章中只做示例
SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/ORCL11G/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl11g' scope=both;

4、log_archive_dest_2
SQL> alter system set log_archive_dest_2='SERVICE=tnsorcl11gstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11gdg' scope=spfile;

5、log_archive_dest_state_1
SQL> alter system set log_archive_dest_state_1 = ENABLE;

6、log_archive_dest_state_2
SQL> alter system set log_archive_dest_state_2 = ENABLE;

7、db_file_name_convert
查找数据文件的位置
SQL> select name from v$datafile;

上述语句查出的目录路径 【/oradata/orcl11g】写入下面的语句中替换。备注:各自的库不一样,根据自己的实际路径来,文章中只做示例
SQL> alter system set db_file_name_convert='/oradata/orcl11g','/oradata/orcl11g' scope=spfile;

8、log_file_name_convert
查看在线日志文件的位置:
SQL> select member from v$logfile;

上述语句查出的目录路径 【/oradata/orcl11g】写入下面的语句中替换。备注:各自的库不一样,根据自己的实际路径来,文章中只做示例
SQL> alter system set log_file_name_convert='/oradata/orcl11g','/oradata/orcl11g' scope=spfile;

9、standby_file_management
SQL> alter system set standby_file_management=auto scope=spfile;

10、fal_client
SQL> alter system set fal_client='tnsorcl11g' scope=both;

11、fal_server
SQL> alter system set fal_server='tnsorcl11gstandby' scope=both;

4、主库静态监听配置
配置 listener.ora和 tnsnames.ora
$ cd /u01/app/oracle/product/11.2.0/db/network/admin

$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = primarynode)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=orcl11g) #修改GLOBAL_DBNAME
(SID_NAME = orcl11g) #修改SID_NAME
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db)
)
)
ADR_BASE_LISTENER = /u01/app/oracle

$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
tnsorcl11g =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.79)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
tnsorcl11gstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.80)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)

主库重启监听程序
$ lsnrctl status
$ lsnrctl stop
$ lsnrctl start
查看监听状态:
$ lsnrctl status

(三)备库DG2配置
1、密码文件
在dataguard中,主库与备库sys密码需一致,需要将主库的密码文件拷贝到备库中。
[oracle@primarynode admin]$ cd $ORACLE_HOME/dbs
[oracle@primarynode admin]$ scp orapworcl11g oracle@192.168.5.80:/u01/app/oracle/product/11.2.0/db/dbs
如果不拷贝密码文件,直接使用 orapwd生成一个新的密码文件,密码需与主库一致:
[oracle@primarynode dbs]$ orapwd file=orapworcl11g password='oracle';

2、监听文件
由于备库只安装数据库软件,未安装实例以及创建监听,备库可能不存在 tnsnames.ora,可以将主库的文件传输到备库。传输前先查看备库是否存在 tnsnames.ora;
[oracle@primarynode admin]$ scp tnsnames.ora oracle@192.168.5.80:/u01/app/oracle/product/11.2.0/db/network/admin

进入到监听文件存放位置,做下一步配置
[oracle@standbynode dbs]$ cd /u01/app/oracle/product/11.2.0/db/network/admin/

1、配置备库 listener.ora
配置listener.ora 文件
[oracle@standbynode admin]$ vi listener.ora
#新增以下内容
# listener.ora Network Configuration File: /u01/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = standbynode)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=orcl11g)
(SID_NAME = orcl11g)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db)
)
)
ADR_BASE_LISTENER = /u01/oracle
2、配置备库 tnsnames.ora
[oracle@standbynode admin]$ cat tnsnames.ora
tnsorcl11g =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.79)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
tnsorcl11gstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.80)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)

查看监听状态是否启用,未启用则开启
[oracle@standbynode admin]$ lsnrctl status;
[oracle@standbynode admin]$ lsnrctl start;
3、初始化参数文件
1、在主库生成初始化参数文件
SQL> create pfile from spfile;

2、拷贝主库的参数文件到备库
[oracle@primarynode dbs]$ scp initorcl11g.ora oracle@192.168.5.80:/u01/app/oracle/product/11.2.0/db/dbs
主库操作

备库查看

3、修改备库的参数文件内容
[oracle@standbynode:/u01/app/oracle/product/11.2.0/db/dbs]$ cat initorcl11g.ora
orcl11g.__db_cache_size=4311744512
orcl11g.__java_pool_size=16777216
orcl11g.__large_pool_size=33554432
orcl11g.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl11g.__pga_aggregate_target=1308622848
orcl11g.__sga_target=5200936960
orcl11g.__shared_io_pool_size=0
orcl11g.__shared_pool_size=805306368
orcl11g.__streams_pool_size=0
*._b_tree_bitmap_plans=FALSE
*._cleanup_rollback_entries=2000
*._datafile_write_errors_crash_instance=FALSE
*._index_partition_large_extents='FALSE'
*._memory_imm_mode_without_autosga=FALSE
*._optimizer_adaptive_cursor_sharing=FALSE
*._optimizer_extended_cursor_sharing='NONE'
*._optimizer_extended_cursor_sharing_rel='NONE'
*._optimizer_null_aware_antijoin=FALSE
*._optimizer_use_feedback=FALSE
*._partition_large_extents='FALSE'
*._PX_use_large_pool=TRUE
*._undo_autotune=FALSE
*._use_adaptive_log_file_sync='FALSE'
*.audit_file_dest='/u01/app/oracle/admin/orcl11g/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.control_file_record_keep_time=31
*.control_files='/oradata/orcl11g/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl11g/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='/oradata'
*.db_domain=''
*.db_file_name_convert='/oradata/orcl11g','/oradata/orcl11g'
*.db_files=5000
*.db_name='orcl11g' #数据库名保持一致
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.db_unique_name='orcl11gdg' #修改为备库
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl11gXDB)'
*.enable_ddl_logging=TRUE
*.event='28401 trace name context forever,level 1','10949 trace name context forever,level 1'
*.fal_server='tnsorcl11g' #与主库调换
*.fal_client='tnsorcl11gstandby' #与主库调换
*.log_archive_config='DG_CONFIG=(orcl11g,orcl11gdg)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/ORCL11G/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl11gdg' #DB_UNIQUE_NAME与主库调换
*.log_archive_dest_2='SERVICE=tnsorcl11g LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11g' #SERVICE配置主库 DB_UNIQUE_NAME与主库调换
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=1000
*.parallel_max_servers=64
*.pga_aggregate_target=1298137088
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=TRUE
*.resource_manager_plan='force:'
*.sec_case_sensitive_logon=FALSE
*.session_cached_cursors=300
*.sga_max_size=5194645504
*.sga_target=5194645504
*.standby_file_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
修改后的参数文件
orcl11g.__db_cache_size=4311744512
orcl11g.__java_pool_size=16777216
orcl11g.__large_pool_size=33554432
orcl11g.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl11g.__pga_aggregate_target=1308622848
orcl11g.__sga_target=5200936960
orcl11g.__shared_io_pool_size=0
orcl11g.__shared_pool_size=805306368
orcl11g.__streams_pool_size=0
*._b_tree_bitmap_plans=FALSE
*._cleanup_rollback_entries=2000
*._datafile_write_errors_crash_instance=FALSE
*._index_partition_large_extents='FALSE'
*._memory_imm_mode_without_autosga=FALSE
*._optimizer_adaptive_cursor_sharing=FALSE
*._optimizer_extended_cursor_sharing='NONE'
*._optimizer_extended_cursor_sharing_rel='NONE'
*._optimizer_null_aware_antijoin=FALSE
*._optimizer_use_feedback=FALSE
*._partition_large_extents='FALSE'
*._PX_use_large_pool=TRUE
*._undo_autotune=FALSE
*._use_adaptive_log_file_sync='FALSE'
*.audit_file_dest='/u01/app/oracle/admin/orcl11g/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.control_file_record_keep_time=31
*.control_files='/oradata/orcl11g/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl11g/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='/oradata'
*.db_domain=''
*.db_file_name_convert='/oradata/orcl11g','/oradata/orcl11g'
*.db_files=5000
*.db_name='orcl11g'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.db_unique_name='orcl11gdg'
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orcl11gXDB)'
*.enable_ddl_logging=TRUE
*.event='28401 trace name context forever,level 1','10949 trace name context forever,level 1'
*.fal_server='tnsorcl11g'
*.fal_client='tnsorcl11gstandby'
*.log_archive_config='DG_CONFIG=(orcl11g,orcl11gdg)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/ORCL11G/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl11gdg'
*.log_archive_dest_2='SERVICE=tnsorcl11gstandby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11g'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=1000
*.parallel_max_servers=64
*.pga_aggregate_target=1298137088
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=TRUE
*.resource_manager_plan='force:'
*.sec_case_sensitive_logon=FALSE
*.session_cached_cursors=300
*.sga_max_size=5194645504
*.sga_target=5194645504
*.standby_file_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
注意:里面涉及到路径的需要手动创建
[oracle@standbynode dbs]$ mkdir -p /u01/app/oracle/admin/orcl11g/adump
[oracle@standbynode oracle]$ mkdir -p /u01/app/oracle/fast_recovery_area/ORCL11G/archivelog
[oracle@standbynode dbs]$ mkdir -p /u01/app/oracle/oradata/orcl11g
[oracle@standbynode fast_recovery_area]$ mkdir -p /u01/app/oracle/fast_recovery_area/orcl11g/

4、测试网络连通性
主备之间互相测试连通性
[oracle@standbynode admin]$ tnsping tnsorcl11g
[oracle@primarynode dbs]$ tnsping tnsorcl11gstandby
主库:

备库:

5、在主库进行登录测试
[oracle@primarynode dbs]$ sqlplus sys/oracle@tnsorcl11g as sysdba

[oracle@primarynode dbs]$ sqlplus sys/oracle@tnsorcl11gstandby as sysdba

备库如果登录不上报错【ORA-01017】时,检查1、密码文件此步骤是否配置完成;
6、添加主库和备库的standby日志组
查询当前的 redo_log组。原则上 standby比当前多一组,且大小一致;
SQL> select group#,BYTES/1024/1024,members from v$log;
先查看 redo日志的位置
SQL> select member from v$logfile;

在主库创建 standby日志组
编写4个日志组,根据上面查出来的编号进行排序。
SQL> alter database add standby logfile group 9 '/oradata/orcl11g/standby09.log' size 50M;
alter database add standby logfile group 10 '/oradata/orcl11g/standby10.log' size 50M;
alter database add standby logfile group 11 '/oradata/orcl11g/standby11.log' size 50M;
alter database add standby logfile group 12 '/oradata/orcl11g/standby12.log' size 50M;
alter database add standby logfile group 13 '/oradata/orcl11g/standby13.log' size 50M;
alter database add standby logfile group 14 '/oradata/orcl11g/standby14.log' size 50M;
alter database add standby logfile group 15 '/oradata/orcl11g/standby15.log' size 50M;
alter database add standby logfile group 16 '/oradata/orcl11g/standby16.log' size 50M;
alter database add standby logfile group 17 '/oradata/orcl11g/standby17.log' size 50M;
SQL> alter system set standby_file_management=auto;

添加备库的standby日志组(可以 不添加)
SQL> alter database add standby logfile group 9 '/oradata/orcl11g/standby09.log' size 50M;
alter database add standby logfile group 10 '/oradata/orcl11g/standby10.log' size 50M;
alter database add standby logfile group 11 '/oradata/orcl11g/standby11.log' size 50M;
alter database add standby logfile group 12 '/oradata/orcl11g/standby12.log' size 50M;
alter database add standby logfile group 13 '/oradata/orcl11g/standby13.log' size 50M;
alter database add standby logfile group 14 '/oradata/orcl11g/standby14.log' size 50M;
alter database add standby logfile group 15 '/oradata/orcl11g/standby15.log' size 50M;
alter database add standby logfile group 16 '/oradata/orcl11g/standby16.log' size 50M;
alter database add standby logfile group 17 '/oradata/orcl11g/standby17.log' size 50M;

7、创建spfile
在备库使用 pfile文件创建 spfile文件
在备库中登陆到 idle数据库
[oracle@standbynode dbs]$ sqlplus / as sysdba;
SQL> create spfile from pfile;
SQL> startup nomount;

如有 ORA-00845报错,需要进行以下配置:
vi /etc/fstab
#新增
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0
mount -o remount /dev/shm
然后继续执行 startup nomount
SQL> startup nomount
8、使用duplicate创建物理standby(有很多种办法,此处介绍一种),在备库执行
(1)连接到主备库
[oracle@primarynode dbs]$ rman target sys/oracle@tnsorcl11g auxiliary sys/oracle@tnsorcl11gstandby nocatalog

(2)使用duplicate复制数据库
RMAN> duplicate target database for standby from active database nofilenamecheck;

...等待程序跑完...

9、开始同步数据库,在备库上执行
SQL>alter database open;
10、开启实时同步
SQL> alter database recover managed standby database using current logfile disconnect from session;
至此DG搭建完成
(四)查看主备库状态
主库检查
SQL>set line 200
set pagesize 200
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

备库检查
SQL>set line 200
set pagesize 200
select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

查询主备库日志是否同步(确保最大 SEQUENCE#相同)
SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
主库:

备库:
检查日志是否被备库使用(APPLIED 值为 yes)
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
(五)DataGuard测试
在主库上创建测试表并插入数据
SQL> create table test(id number,name varchar2(255));
insert into test values(1,'zhangsan');
insert into test values(2,'lisi');
commit;

在 standby数据库上查询测试表,验证数据同步成功
SQL>select * from test;

日常运维必备命令
主备库角色状态查询
SQL> select switchover_status,database_role from v$database;
查看 dataguard最新状态
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set line 160
set pagesize 1000
col type for a20
select process, status, thread#,sequence#, block#, blocks from v$managed_standby;
select GROUP#,THREAD#,SEQUENCE#,STATUS,LAST_CHANGE#,LAST_TIME from v$standby_log;
select START_TIME,TYPE, ITEM,UNITS,SOFAR,TIMESTAMP from v$recovery_progress where ITEM='Last Applied Redo';
查看 redo_log
主库查看 redo log
SQL> select group#,thread#,bytes/1024/1024 M,status from v$log;
备库查看 standby log
SQL> select group#,thread#,bytes/1024/1024M,status,last_change#,last_time from v$standby_log;
主、备库查看当前日志状况
SQL> select sequence#,status from v$log;
手动启动MRP0进程
SQL> alter database recover managed standby database disconnect from session;
SQL> select open_mode,current_scn from v$database;
SQL> select * from v$standby_log;
SQL> select process,client_process,sequence#,status,BLOCK#,BLOCKS,THREAD# from v$managed_standby;
开启数据库闪回
SQL> alter database flashback on;
重启监听并查看状态
[oracle@myoracle admin]$ lsnrctl stop
[oracle@myoracle admin]$ lsnrctl start
[oracle@myoracle admin]$ lsnrctl status
如看不到服务,需执行以下命令:
显示服务名:
SQL>show parameter service_names
强制注册服务:
SQL>alter system register;
主备库切换
1、主库切换到备库
SQL> alter database commit to switchover to physical standby;
SQL> alter database commit to switchover to physical standby with session shutdown;
#如果状态显示SESSION ACTIVE,在切换的时候可以指定with session shutdown 子句强制关闭活动的会话。
SQL> shutdown immediate
SQL> startup mount
2、备库切换到主库
SQL> alter database commit to switchover to primary;
SQL> alter database open;
#原主库(新备库)执行APPLY LOG命令
--启用备库mount状态下的APPLY LOG
SQL> alter database recover managed standby database disconnect from session;
--启用open状态(READ ONLY WITH APPLY)下的APPLY LOG
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database disconnect from session;
SQL> select switchover_status,database_role,open_mode from v$database;
恢复主备GAP(适用于11g以后版本)
SQL> recover database from service orcl11g noredo using compressed backupset;
同步情况检查
SQL>archive log list;#检查当前log号 Current log sequence和主库一致
查看DG库归档是否有缺失
SQL> select thread#,low_sequence#,high_sequence# from v$archive_gap;
开启归档应用
SQL>alter database recover managed standby database disconnect from session;
如果开启了实时归档,可以执行以下命令
SQL>alter database recover managed standby database cancel;
SQL>alter database open;
SQL>alter database recover managed standby database using current logfile disconnect;
开启和关闭 DG
开启 DG
#启动备库(mount)——启动主库(open)——启动备库日志同步
#登录备库:
$lsnrctl start
SQL>startup mount;
#登录主库:
$lsnrctl start
SQL>startup
#登录备库:
SQL> alter database recover managed standby database disconnect from session;
关闭 DG(请确保应用程序已经断开数据库连接或关闭)
#关闭备库日志同步——关闭主库——关闭备库
#登录备库:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
#登录主库:
SQL>shutdown immediate
$lsnrctl stop
#登录备库
SQL>shutdown immediate
$lsnrctl stop
评论区