1.1主库允许强制记日志
ALTER DATABASE FORCE LOGGING;
1.2创建口令文件
如果没有存在的口令文件则创建一个。在 Data Guard 配置中的每个数据库必须使
用口令文件,并且对于SYS 用户的口令文件在每个系统上必须相同,以确保重做数据传输
成功(最好是将口令文件传输到备库,不能用alter sys 改口令。
创建密码文件命令
orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>
1.3 Data Guard 用的归档日志来完成同步,主库必须是归档模式
主数据库配置RAC归档模式
alter system set log_archive_dest_1='location=/archivelog' scope=spfile sid='fund1';
alter system set log_archive_dest_1='location=/archivelog' scope=spfile sid='fund2';
关闭数据库
su - oracle -c "srvctl stop instance -d fund -i fund1"
su - oracle -c "srvctl stop instance -d fund -i fund2"
一个节点启动到MOUNT,执行alter database archivelog;
最后把数据库打开两个节点都OPEN.
1.4 配置主备库监听
1.4.1主库增加专门网络的LISTENER,使用ORACLE用户登入集群一节点
$ more listener.ora
# listener.ora Network Configuration File: /oracle/db/product/11.2/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =102.200.xx.236 )(PORT = 1522))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/db/product/11.2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = fund)
(ORACLE_HOME = /oracle/db/product/11.2)
(SID_NAME = fund1)
)
)
ADR_BASE_LISTENER2 = /oracle/db
1.4.2主库增加专门网络的LISTENER,使用ORACLE用户登入集群二节点
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =102.200.xx..237 )(PORT = 1522))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/db/product/11.2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = fund)
(ORACLE_HOME = /oracle/db/product/11.2)
(SID_NAME = fund2)
)
)
ADR_BASE_LISTENER2 = /oracle/db
1.4.3 主库增加连接备用库的tnsname,使用ORACLE用户登入一、二节点
备用数据库 DB_UNIQUE_NAME为fundsty,Oracle 网络服务名fundsty,
节点A和节点B的tnsnames.ora 文件是一致的。 修改成如下:
fundsty =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 102.200.xx..238)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fundsty)
(INSTANCE_NAME = fundsty )
)
)
1.4.4 备库增加连接主库的tnsname和listener.ora文件
fund1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 102.200.xx.236)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fund)
(INSTANCE_NAME = fund1)
)
)
fund2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 102.200.xx..237)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fund)
(INSTANCE_NAME = fund2)
)
)
1.4.5 备库监听器配置
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =102.200.xx..238 )(PORT = 1522))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/db/product/11.2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = fundsty)
(ORACLE_HOME = /oracle/db/product/11.2)
(SID_NAME = fundsty)
)
)
ADR_BASE_LISTENER2 = /oracle/db
全部配置完成后必须达到,主库两个节点可以以远程的方式访问备库.
备库可以远程的方式连接到主库的任意节点.
测试方法
sqlplus sys/<password>@tnsname as sysdba
1.5 修改主库参数文件
备份主数据库参数文件
create pfile='/rmanbak/fundpfile.ora' from spfile;
修改主库参数文件
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(fund,fundsty)' sid='*';
ALTER SYSTEM SET log_archive_dest_2='SERVICE=fundsty ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fundsty' SCOPE=BOTH SID='*';
alter system set FAL_SERVER=fundsty sid='*';
alter system set FAL_CLIENT=fund sid='*';
alter system set STANDBY_FILE_MANAGEMENT=AUTO sid='*';
**************************************************************************************************************************
相关参数知识:
这里要注意的地方:
1.因为RAC 主库是用ASM 来存放的,所以这里设置的目录与ASM 目录是不一致的, 这种情况下,我们就需要在参数文件里用db_file_name_convert和 log_file_name_convert 参数来进行转换。
db_file_name_convert='+ASMVG1/ysgx/datafile','/ysgxdata','+ASMVG1/ysgx/tempfile','/ysgxdata'
log_file_name_convert='+ASMVG1/ysgx/onlinelog','/archivelog'
2.备库配置——当是备库角色时需要的参数
LOG_ARCHIVE_CONFIG 在这个参数上指定DG_CONFIG 属性,以在Data Guard 配置,中列出主和备数据库的DB_UNIQUE_NAME;
3.STANDBY_FILE_MANAGEMENT=AUTO (主库建表空间时,自动在备库也创建相应的表空间)
4.FAL_SERVER 指定FAL 服务器(典型地这是运行在主角色的数据库)的Oracle 网络服务名。当fund数据库运行在备角色,它使用fund1,fund2 数据库作为FAL 服务器,如果fund 无法自动发送丢失的日志文件,可以从那里取得(请求)丢失的归档重做日志文件。
5.FAL_CLIENT 指定fund数据库的Oracle 网络服务名。FAL 服务器拷贝丢失的归档重做日志文件到备数据库。
6.
7.
**************************************************************************************************************************
1.6 把主库的参数文件传到备库修改
生成主库PFILE传到备库ORACLE_HOME/dbs下打开编辑把集群的参数删除.
create pfile='/rmanbak/fundstypfile.ora' from spfile;
scp fundstypfile.ora 102.200.128.238:/oracle/db/product/11.2/dbs
创建备库DUMP目录
mkdir -p /oracle/db/admin/fundsty/adump
修改好参数文件后生成SPFILE并且修改以下参数
*******************************************************************************************************************************
注意相关参数的修改:
undo_tablespace='UNDOTBS1' (取RAC数据库中的一个)
db_name='fund' (同RAC主库)
DB_UNIQUE_NAME='fundsty' (可设置,不用于RAC主库)
*******************************************************************************************************************************
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(fund,fundsty)';
alter system set log_archive_dest_1='location=/archivelog';
alter system set FAL_SERVER='fund1','fund2';
alter system set STANDBY_FILE_MANAGEMENT=AUTO;
alter system set FAL_CLIENT=fundsty ;
1.7 把主库其中一个节点的密码文件传到备库
scp orapwfund1 102.200.128.238:/oracle/db/product/11.2/dbs
1.8 RMAN备份主数据库
主库执行备份并将backup 传到从库(放置在同一个/rmanbak目录下)
主库上运行
run {
allocate channel c1 device type disk ;
allocate channel c2 device type disk ;
backup full database filesperset 5 format '/rmanbak/full_%U_%d_%T';
release channel c1;
release channel c2;
}
run {
allocate channel c1 device type disk ;
allocate channel c2 device type disk ;
sql 'alter system archive log current';
backup archivelog all filesperset 5 format '/rmanbak/arch_%U_%d_%T'delete input;
backup current controlfile for standby format '/rmanbak/controlfile_%u_%d_%T';
release channel c1;
release channel c2;
}
1.9 RMAN恢复备数据库
将数据库备份文件从主库传到备用数据库/rmanbak目录
将备库启动到nomout状态
恢复控制文件:restore standby controlfile from '/rmanbak/controlfileXXX';
ALTER DATABASE MOUNT STANDBY DATABASE;
恢复数据库
run
{
allocate channel c1 device type disk ;
allocate channel c2 device type disk ;
allocate channel c3 device type disk ;
allocate channel c4 device type disk ;
restore database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
recover database;
1.10备用库创建standby redo log file用于接收主库传过来的日志
alter database add standby logfile group 13 '+ASMVG1/fundsty/onlinelog/standbylog13.log' size 500m;
alter database add standby logfile group 14 '+ASMVG1/fundsty/onlinelog/standbylog14.log' size 500m;
alter database add standby logfile group 15 '+ASMVG1/fundsty/onlinelog/standbylog15.log' size 500m;
alter database add standby logfile group 16 '+ASMVG1/fundsty/onlinelog/standbylog16.log' size 500m;
alter database add standby logfile group 17 '+ASMVG1/fundsty/onlinelog/standbylog17.log' size 500m;
alter database add standby logfile group 18 '+ASMVG1/fundsty/onlinelog/standbylog18.log' size 500m;
alter database add standby logfile group 19 '+ASMVG1/fundsty/onlinelog/standbylog19.log' size 500m;
alter database add standby logfile group 20 '+ASMVG1/fundsty/onlinelog/standbylog20.log' size 500m;
alter database add standby logfile group 21 '+ASMVG1/fundsty/onlinelog/standbylog21.log' size 500m;
alter database add standby logfile group 22 '+ASMVG1/fundsty/onlinelog/standbylog22.log' size 500m;
alter database add standby logfile group 23 '+ASMVG1/fundsty/onlinelog/standbylog23.log' size 500m;
alter database add standby logfile group 24 '+ASMVG1/fundsty/onlinelog/standbylog24.log' size 500m;
alter database add standby logfile group 25 '+ASMVG1/fundsty/onlinelog/standbylog25.log' size 500m;
alter database add standby logfile group 26 '+ASMVG1/fundsty/onlinelog/standbylog26.log' size 500m;
提示:如果主库已经提前创建好了standby redo log file,备库会根据LOG_FILE_NAME_CONVERT参数转换后自动创建与之对应的standby redo log file日志组。因此此步骤可省略。
如有主库未创建standby redo logfile,则备库必须手工创建日志文件组
公式如下:
如果主库是单实例数据库:Standby Redo Log组数=主库日志组总数+1
如果住口是RAC数据库:Standby Redo Log组数=(所有节点中日志组数最大值 + 1) * RAC节点数
1.11 启动备数据库至RECOVER_MODE
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
执行命令后会报没有找到TEMP文件。
需要增加临时文件
alter tablespace FUND_TMP add tempfile '+asmvg1/fund/tempfile/fund_temp1' size 30g;