主库准备工作

主库需要开启归档模式,打开Oracle 附加日志(supplemental log)、FORCE LOGGING模式:

1
2
3
4
5
6
7
8
9
alter database archivelog;
alter database add supplemental log data;
alter database force logging;
#查看force_logging状态
select force_logging from v$database;
#查看归档状态
archive log list
#查看附加日志是否打开:
SELECT supplemental_log_data_min FROM v$database;

1.主库所在节点配置/etc/hosts文件

需要添加standby ip(dg备库ip)及主机名

1
2
#备库ip    备库机器名
10.197.163.106 os_ora_00000178

2.配置主库tnsnames.ora文件

1
vim $ORACLE_HOME/network/admin/tnsnames.ora

添加如下,HOST,PORT等配置改为备库信息

1
2
3
4
5
6
7
8
9
stb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = os_ora_00000178)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = stb)
    )
  )

测试和备库服务是否连通:

1
tnsping stb

3.sqlplus 登陆修改主库参数

这里主库oracle环境变量的ORACLE_UNQNAME值为ymloracle,备库oracle环境变量的ORACLE_UNQNAME值为stb

1
2
3
4
5
6
alter system set log_archive_config='DG_CONFIG=(ymloracle,stb)' scope=both sid='*';
#查看归档信息:
show parameter log_archive
#比如我要用log_archive_dest_state_2,则看看这个有没有被使用,被使用就换一个
#确认已开启归档后:
alter system set log_archive_dest_2='SERVICE=stb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb' scope=both;

“SERVICE=stb” 的”stb”为第二步中tnsnames的网络服务名,“DB_UNIQUE_NAME=stb”的”stb”为dg备库oracle环境变量的ORACLE_UNQNAME值。 查看配置是否生效,通过下列语句查询

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
set linesize 500 pages 0
col value for a90
col name for a50
select name, value from v$parameter where name in ('db_name','db_unique_name','log_archive_config', 'log_archive_dest_1','log_archive_dest_2','log_archive_dest_state_1','log_archive_dest_state_2','remote_login_passwordfile','log_archive_format','log_archive_max_processes','fal_server','db_file_name_convert', 'log_file_name_convert', 'standby_file_management');
#打印如下
db_file_name_convert
log_file_name_convert
log_archive_dest_1				   LOCATION=/home/oracle/ora_arch valid_for=(ALL_LOGFILES, ALL_ROLES) db_unique_name=ymloracle

log_archive_dest_2				   SERVICE=stb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb
log_archive_dest_state_1			   enable
log_archive_dest_state_2			   enable
fal_server
log_archive_config				   DG_CONFIG=(ymloracle,stb)
log_archive_format				   %t_%s_%r.dbf
log_archive_max_processes			   4
standby_file_management 			   MANUAL
remote_login_passwordfile			   EXCLUSIVE
db_name 					   ymloracl
db_unique_name					   ymloracle
14 rows selected.

4.将主库上密码文件拷贝至备库

11g:

1
scp $ORACLE_HOME/dbs/orapwymloracle oracle@os_ora_00000178:/u01/app/oracle/product/11.2.0.4/db_1/dbs/orapwstb

注:orapwymloracle 中ymloracle的为登陆节点的的实例名,/u01/app/oracle/product/11.2.0.4/db_1/dbs/orapwstb 路径中orapwstb的stb是备库实例名,传送过去后需要查看主备库密码文件的属主是否一致,不一致则需要修改为主库一致的属主。

5.将备库启动至nomount状态

1
2
3
startup nomount;
#ORA-01127: database name 'ymloracle' exceeds size limit of 8 characters
#数据库名有长度限制这里修改/u01/app/oracle/product/11.2.0.4/db_1/dbs/initstb.ora中的db_name改为ymloracl

6.数据拷去备库

主库所在节点oracle用户下操作:

1
2
3
4
#sys/后面的是sys账号的密码@备库实例名
rman target / auxiliary sys/sys@stb

DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;

7.在备库创建standby log

1
2
3
4
5
6
7
alter system set standby_file_management=manual;

#size:日志大小根据主库的v$log中的bytes列来计算thread rac 节点号,standby redo log组数=(所有节点中日志组数最大值+1*RAC节点数(如:rac节点数为2,节点中日志组数最大的为2,那就是(2+1)*2=6,需要为每个节点创建6standby redo )
#此处部署的是单机模式所以thread为1
alter database add standby logfile thread 1 group 30 size 50M ,group 31 size 50M ,group 32 size 50M,group 33 size 50M,group 34 size 50M,group 35 size 50M ;

alter system set standby_file_management=auto;

8.开启备库

1
alter database open read only;

9.备库开启日志应用

1
alter database recover managed standby database using current logfile disconnect from session;