dataguard配置手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE10G DATAGUARD PHYISCAL STANDBY配置指导
修订记录
目录
1、部署环境: (4)
2、准备工作 (4)
3、正式开始配置 (5)
3.1 设置主数据库为 force logging 模式 (5)
3.2 设置主数据库为归档模式 (5)
3.3 数据文件拷贝 (5)
3.31、拷贝主库的数据文件到备库中 (5)
3.32、创建从库的控制文件 (6)
3.33 从库创建admin 目录 (6)
3.34 在从库上创建密码文件 (6)
3.35 创建从库flash_recovery_area 目录 (7)
3.4修改spfile 文件 (7)
3.41、创建pfile 文件 (7)
3.42、创建spfile 文件 (9)
3.5创建备机redo日志 (10)
3.6配置网络,修改listener.ora ,tnsnames.ora (10)
3.61 配置 (10)
3.62 测试网络配置 (14)
3.7启动主备服务 (14)
3.71 主库 (15)
3.72 备库 (15)
3.73 测试归档 (15)
4、日常维护 (16)
4.1 正确打开主库和备库 (16)
4.2 正确关闭顺序 (16)
4.3 备库Read-only模式打开 (16)
4.4 日志传输状态监控 (17)
4.5 备库归档目录维护 (17)
5、主库正常切换 (18)
5.1人工干预正常切换 (18)
5.2 通过运行脚本实现主库正常切换 (19)
6、主库灾难切换 (19)
6.1 人工干预主库灾难切换 (19)
6.2通过运行脚本实现主库灾难切换 (20)
1、部署环境:
Oracle 10G DataGuard
主库:HOSTNAME: primary IP: 139.0.0.31 SID=ccpbs
备库:HOSTNAME: standby IP: 139.0.0.32 SID=ccpbs
oracle version:10.2.0.1
OS platform : OEL5.4
VMware 运行主备虚拟机
Data Guard 默认是 maximize performance,可以用以下语句来进行模式间的切换。
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE};
修改主数据库保护模式需要重启数据库才能生效。
select protection_mode,protection_level from v$database;
2、准备工作
1、在主备机分别安装 OEL5.4 操作系统分别设置 HOSTNAME 为“odd”、“even”;
2、在主备机上分别安装 oracle 10gR2 数据库,安装时注意选择“高级”,只安装“数据库软件;”
3、只在主机上用 dbca 新建数据库实例,选择默认选项,SID 名和 SERVICE 名设定为“ccpbs”;
3、正式开始配置
3.1 设置主数据库为 force logging 模式
$ sqlplus / nolog;
SQL> conn / as sysdba;
SQL>alter database force logging;
3.2 设置主数据库为归档模式
SQL> archive log list
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> archive log list
3.3 数据文件拷贝
数据文件的拷贝可以分为两种模式:rman 和文件的直接拷贝,由于我们的系统可以停机,所以会采用第二种方式。
注意不用拷贝 redo 文件,备用机在启动的时候会自动的创建redo 文件。
控制文件也不用拷贝。
3.31、拷贝主库的数据文件到备库中
SQL> SELECT NAME FROM v$datafile;
SQL> select name from v$tempfile;
把主库的以上数据文件拷贝到备库上同样目录
3.32、创建从库的控制文件
在主库上为从库创建控制文件(不要和主库控制文件重名),然后拷贝到从库
/home/oracle/oracle10g/oradata/ccpbs/ 目录下。
(记住这个目录,在下面从库的 spfile 配置中要用到)。
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE
AS'/home/oracle/standby.ctl';
3.33 从库创建admin 目录
将主库的 /home/oracle/oracle10g/admin/ccpbs 目录及文件夹拷贝到从库的相同目录。
3.34 在从库上创建密码文件
缺省情况下, linux 下的格式是 orapwSID(大小写敏感)
在$ORACLE_HOME/dbs目录下,创建密码文件:
orapwd file=orapwccpbs password=oracle
建议直接拷贝主库该位置的文件到备库对应位置。
3.35 创建从库flash_recovery_area 目录
在 /home/oracle/oracle10g目录中创建 flash_recover_area 目录,该目录参数在从库中有设定,为*.db_recovery_file_dest 项的值,如果没有会出错。
3.4修改spfile 文件
说明:我们在这里需要先根据 spfile生成 pfile 文件,然后修改好对应的参数值,再依据 pfile 生成 spfile 文件。
3.41、创建pfile 文件
在主库上创建 pfile 文件
SQL>CREATE PFILE FROM SPFILE;
生成的pfile文件,默认格式为 initSID.ora,此处为initccpbs.ora
文件路径为/home/oracle/oracle10g/product/10.2.0/db_1/dbs
将主库生成的pfile文件,拷贝到从库相同目录下。
修改主库的 initccpbs.ora 文件如下,红色部分为需要新加入的内容,蓝色部分是特别需要注意的部分:
--------------------------initccpbs.ora----------------------------------------------------------------
ccpbs.__db_cache_size=188743680
ccpbs.__java_pool_size=4194304
ccpbs.__large_pool_size=4194304
ccpbs.__shared_pool_size=83886080
ccpbs.__streams_pool_size=0
*.audit_file_dest='/home/oracle/oracle10g/admin/ccpbs/adump'
*.background_dump_dest='/home/oracle/oracle10g/admin/ccpbs/bdump' *.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oracle10g/oradata/ccpbs/control01.c tl','/home/oracle/oracle10g/oradata/ccpbs/control02.ctl','/home/o racle/oracle10g/oradata/ccpbs/control03.ctl'
*.core_dump_dest='/home/oracle/oracle10g/admin/ccpbs/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='ccpbs'
*.db_recovery_file_dest='/home/oracle/oracle10g/flash_recovery_ar
ea'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ccpbsXDB)'
*.job_queue_processes=10
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=335
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/oracle10g/admin/ccpbs/udump'
*.db_unique_name='pri'
*.fal_server='stdby'
*.fal_client='pri'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri,stdby)'
*.log_archive_dest_1='LOCATION=/home/oracle/arch1/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri'
*.LOG_ARCHIVE_DEST_2='SERVICE=stdby LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stdby'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.standby_archive_dest='/home/oracle/arch1/'
*.standby_file_management='AUTO'
------------------------------------------------------------------------------------------
修改从库的 initccpbs.ora文件加入如下:
----------------------------------------initccpbs.ora--------------------------------------------------
ccpbs.__db_cache_size=188743680
ccpbs.__java_pool_size=4194304
ccpbs.__large_pool_size=4194304
ccpbs.__shared_pool_size=83886080
ccpbs.__streams_pool_size=0
*.audit_file_dest='/home/oracle/oracle10g/admin/ccpbs/adump'
*.background_dump_dest='/home/oracle/oracle10g/admin/ccpbs/bdump' *.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oracle10g/oradata/ccpbs/stdby.ctl' *.core_dump_dest='/home/oracle/oracle10g/admin/ccpbs/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='ccpbs'
*.db_recovery_file_dest='/home/oracle/oracle10g/flash_recovery_ar ea'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ccpbsXDB)'
*.job_queue_processes=10
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=335
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/oracle10g/admin/ccpbs/udump'
*.db_unique_name='stdby'
*.fal_server='pri'
*.fal_client='stdby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri,stdby)'
*.log_archive_dest_1='LOCATION=/home/oracle/arch1/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stdby'
*.LOG_ARCHIVE_DEST_2='SERVICE=pri LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='/home/oracle/arch1','/home/oracle/arch1' *.standby_archive_dest='/home/oracle/arch1/'
*.standby_file_management='AUTO'
------------------------------------------------------------------------------------------
3.42、创建spfile 文件
从库:备份原spfile文件,将修改完成的 pfile 重新生成spfile文件
SQL> CREATE SPFILE FROM PFILE;
从库:
SQL>CREATE SPFILE FROM PFILE;
启动从库到mount状态
SQL>startup mount;
3.5创建备机redo日志
因为我们使用 LGWR 所以我们要创建 standby redo 日志。
一定要日志注意的大小,要和主库一样。
万一加错了日志可以使用下面的语句进行删除。
ALTER DATABASE DROP LOGFILE GROUP 8;
先查看日志文件位置:
SQL>select * from v$logfile;
再添加:
SQL> alter database add standby logfile group 4 /home/oracle/oracle10g/oradata/ccpbs/redo04.log size 50m;
SQL> alter database add standby logfile group 5 /home/oracle/oracle10g/oradata/ccpbs/redo05.log size 50m;
SQL> alter database add standby logfile group 6 /home/oracle/oracle10g/oradata/ccpbs/redo06.log size 50m;
SQL> alter database add standby logfile group 7 /home/oracle/oracle10g/oradata/ccpbs/redo07.log size 50m;
3.6配置网络,修改listener.ora ,tnsnames.ora
3.61 配置
先在主从库上分别用 netca 命令配置监听和本地服务名,再分别编辑主、从库的listener.ora,tnsnames.ora,参数以下
主库的 listener.ora 文件如下:
################################################################# #####################################
# listener.ora Network Configuration File: /home/oracle/oracle10g/product/10.2.0/db_1/network/admin/listener .ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/oracle/oracle10g/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=ccpbs)
(ORACLE_HOME=/home/oracle/oracle10g/product/10.2.0/db_1)
(SID_NAME=ccpbs)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = odd)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
################################################################# #####################################
主库的 tnsnames.ora 文件如下:
################################################################# #####################################
# tnsnames.ora Network Configuration File: /home/oracle/oracle10g/product/10.2.0/db_1/network/admin/tnsnames .ora
# Generated by Oracle configuration tools.
CCPBS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 139.0.0.31)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = ccpbs)
)
)
pri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 139.0.0.31)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = ccpbs)
)
)
stdby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 139.0.0.32)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = ccpbs)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
################################################################# #####################################
从库的 listeners.ora 如下
################################################################# #####################################
# listener.ora Network Configuration File: /home/oracle/oracle10g/product/10.2.0/db_1/network/admin/listener .ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/oracle/oracle10g/product/10.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=ccpbs)
(ORACLE_HOME=/home/oracle/oracle10g/product/10.2.0/db_1)
(SID_NAME=ccpbs)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = even)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
################################################################# #####################################
从库的 tnsnames.ora 文件如下:
################################################################# #####################################
# tnsnames.ora Network Configuration File: /home/oracle/oracle10g/product/10.2.0/db_1/network/admin/tnsnames .ora
# Generated by Oracle configuration tools.
CCPBS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 139.0.0.32)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = ccpbs)
)
)
pri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 139.0.0.31)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = ccpbs)
)
)
stdby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 139.0.0.32)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = ccpbs)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
################################################################# #####################################
在上面配置完成之后,需要在主、备机上重启监听服务
$ Lsnrctl stop
$ lsnrctl start
可以使用 lsnrctl status
命令查看监听器状态
3.62 测试网络配置
如果配置成功,在主机上测试
$ tnsping pri
$ tnsping stdby 也能得到相似结果
$ sqlplus sys/oracle@pri as sysdba;
$ sqlplus sys/oracle@stdby as sysdba; 也能得到相似结果
在备机上执行上面四条指令也能得到正确的结果,则说明网络配置成功。
3.7启动主备服务
上面配置完成后先将主、备数据库关闭
SQL> shutdown immediate;
然后分别在主、备机上重启监听器
CMD> lsnrctl stop
CMD> lsnrctl start
然后依次打开主库和备库
3.71 主库
SQL>CONN / AS SYSDBA
SQL> STARTUP
3.72 备库
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
到次为止,最关键的时刻来了,我们要测试看是否配置成功,如果成功的话在主机上的归档就能顺利传到
3.73 测试归档
1. 测试主库产生的归档日志是否能正常传送到归档日志
在主机上
SQL>archive log list;
SQL>alter system archive log current;
SQL>archive log list;
主库进行日志切换:
SQL>Alter system switch logfile;
然后分别查看主库和备库的 /home/oracle/arch1 目录下是否产生了同样的归档日志
文件。
select max(sequence#) from v$archived_log;
select max(sequence#) from v$log_history;
select group#,sequence#,archived,status from v$log;
select name,sequence#,applied from v$archived_log;
select sequence#,applied from v$archived_log;
若不同步,
1. 看 log 日志, archive 是否有丢失
2. 可以在备库做如下操作:
alter database recover managed standby database cancel;
alter database recover managed standby database disconnect from session;
4、日常维护
4.1 正确打开主库和备库
主库:
SQL>CONN / AS SYSDBA
SQL> STARTUP
备库:
SQL> STARTUP MOUNT;
SQL>ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEDISCONNECT FROM SESSION;
4.2 正确关闭顺序
备库:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>SHUTDOWN IMMEDIATE;
主库
SQL>SHUTDOWN IMMEDIATE;
4.3 备库Read-only模式打开
当前主库正常 OPEN 状态、备库处于日志传送状态.
1 在备库停止日志传送
SQL> recover managed standby database cancel;
2 备库 Read-only 模式打开
SQL> alter database open read only;
3 备库回到日志传送模式
SQL> recover managed standby database disconnect from session;
SQL> select status from v$instance;
4.4 日志传输状态监控
1 主库察看当前日志状况
SQL> select sequence#,status from v$log;
2 备库察看 RFS(Remote File Service)接收日志情况和 MRP 应用日志同步主库
情况
SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
3 察看备库是否和主库同步
SQL> SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS;
4 察看备库已经归档的 redo
SQL> SELECT REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE# FROM V$ARCHIVED_LOG;
5 察看备库已经应用的 redo
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#
FROM V$LOG_HISTORY;
6 察看备库接收,应用 redo 数据过程.
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
4.5 备库归档目录维护
1 找到备库归档目录
SQL> show parameter log_archive_dest_1
2 维护策略
每周 2,4,7 删除已经应用的归档文件
5、主库正常切换
5.1人工干预正常切换
1 在主库端检验数据库可切换状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS:TO STANDBY 表示可以正常切换.
如果 SWITCHOVER_STATUS 的值为 SESSIONS ACTIVE,表示当前有会话处于 ACTIVE 状态
2 开始主库正常切换
如果 SWITCHOVER_STATUS 的值为 TO STANDBY 则:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
如果 SWITCHOVER_STATUS 的值为 SESSIONS ACTIVE 则:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSIONSHUTDOWN;
成功运行这个命令后,主库被修改为备库
3 重启先前的主库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
4 在从库验证可切换状态
主库未执行切换命令时的从库可切换状态如下:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
NOT ALLOWED
主库执行切换命令后的从库可切换状态如下:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
1 row selected
5 将目标备库转换为主库
如果 SWITCHOVER_STATUS 的值为 TO STANDBY 则:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
如果 SWITCHOVER_STATUS 的值为 SESSIONS ACTIVE 则:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
成功运行这个命令后,备库被修改为主库
6 重启目标备库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
7 先前主库启动日志传送进程
SQL> alter database recover managed standby database disconnect; 总结: 这样主库的一次正常切换完成.切换后的状态,原先的主库变为备库,原先的备库变为主库.
5.2 通过运行脚本实现主库正常切换
6、主库灾难切换
6.1 人工干预主库灾难切换
从库:
SQL>alter database recover managed standby database cancel;
SQL>shutdown immediate
SQL>startup mount
SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; SQL>alter database recover managed standby database finish;
-- switch
SQL>alter database commit to switchover to primary with session shutdown;
-- open
SQL>shutdown immediate
SQL>startup
6.2通过运行脚本实现主库灾难切换。