主库准备工作
主库需要开启归档模式,打开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)
)
)
|
测试和备库服务是否连通:
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,需要为每个节点创建6组standby 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;
|