生产库上在线不停机搭建dataguard
此方案适合于生产运营中的数据库,DB服务器停机时间非常苛刻,或无法停机维护的情况下,如支付,电商等业务,可通过该方案在线部署Dataguard,对客户系统无任何影响。
此方案适合于生产运营中的数据库,DB服务器停机时间非常苛刻,或无法停机维护的情况下,如支付,电商等业务,可通过该方案在线部署Dataguard,对客户系统无任何影响。
一、基础信息
操作系统:windows2008
数据库:11.2.0.3
配置信息:
说明 | 主机名 | IP地址 | db_name | sid | DB_UNIQUE_NAME | Service_name |
---|---|---|---|---|---|---|
主库 | dg1 | 192.168.16.14 | orcl | orcl | orcl | orcl |
备库 | dg2 | 192.168.16.15 | orcl | orcl | orclbak | orclbak |
二、准备工作
按照要求创建相应的主数据库和备用数据库,并删除备用数据库的数据文件、控制文件,两个数据库的所有路径需要一致;
三、搭建数据库
主库的操作:
确认主库参数
SQL> select name,open_mode,database_role,log_mode,force_logging from v$database;
NAME OPEN_MODE DATABASE_ROLE LOG_MODE FOR
--------- -------------------- ---------------- ------------ ---
ORCL READ WRITE PRIMARY ARCHIVELOG YES
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string orcl
db_unique_name string orcl
global_names boolean FALSE
instance_name string orcl
lock_name_space string
log_file_name_convert string
processor_group_name string
service_names string orcl
设置数据库的归档模式
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 E:u01fast_recovery_areaorcl
最早的联机日志序列 833
下一个存档日志序列 835
当前日志序列 835
归档模式的设置:
1、shutdown abort;
2、alter database mount;
3、alter database archive log;
4、alter database open;
3.开启force logging
SQL> alter database force logging;
SQL> select name,DB_UNIQUE_NAME,database_role,log_mode,force_logging from v$database;
NAME DB_UNIQUE_NAME DATABASE_ROLE LOG_MODE FOR
--------- ------------------------------ ---------------- ------------ ---
ORCL orcl PRIMARY ARCHIVELOG YES
主库配置监听
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:u01product11.2.0dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:u01product11.2.0dbhome_1inoraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN-QS00S09CJ12)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = E:u01
配置主库的TNSNAMES.ORA并和密码文件一起传到备库
# tnsnames.ora Network Configuration File: E:u01product11.2.0dbhome_1NETWORKADMIN
nsnames.ora
# Generated by Oracle configuration tools.
ORCL=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = ORCL)
(UR=A)
)
)
ORCLBAK =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.14.15)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orclbak)
(UR=A) --这里记得加这个,否无法连接nomount状态下备库
)
)
传输监听文件到备库:
修改主库pfile参数
--前提是采用spfile启动,并且业务不能停,可用下列命令动态设置:
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG="DG_CONFIG=(orcl,orclbak)" ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= "LOCATION=E:u01fast_recovery_areaorcl VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl"
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2="SERVICE=orclbak LGWR ASYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclbak"
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1="ENABLE";
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2="DEFER"; --这里先设置关闭
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT="AUTO";
ALTER SYSTEM SET FAL_SERVER=orclbak;
ALTER SYSTEM SET FAL_CLIENT=orcl;
下面是可选,如果路相同,忽略下面操作:
ALTER SYSTEM SET DB_FILE_NAME_CONVERT="E:u01oradataorcl","E:u01oradataorcl" scope=spfile;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT="E:u01oradataorcl","E:u01oradataorcl" scope=spfile;
全备主库,并传输备份集到备库的相同位置
run
{
allocate channel c0 device type disk;
allocate channel c1 device type disk;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO "e:orabakman/%F";
backup database format "e:orabakora11g_full_db_%d_%T_%u.bak";
BACKUP ARCHIVELOG ALL FORMAT "e:orabakora11g_arc_%s_%p_%t.bak";
}
修改备库参数并将备库启动至nomount状态(参考主库进行,主要是service_name要反过来)
DB_UNIQUE_NAME=orclbak
LOG_ARCHIVE_CONFIG="DG_CONFIG=(orcl,orclbak)"
LOG_ARCHIVE_DEST_1= "LOCATION=E:u01fast_recovery_areaorcl VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orclbak"
LOG_ARCHIVE_DEST_2= "SERVICE=orcl LGWR ASYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl"
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
FAL_SERVER=orcl
FAL_CLIENT=orclbak
STANDBY_FILE_MANAGEMENT=AUTO
9.启动备库监听
# listener.ora Network Configuration File: E:u01product11.2.0dbhome_1
etworkadminlistener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = E:u01product11.2.0dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:u01product11.2.0dbhome_1inoraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN-4GH7UKQEEOC)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = E:u01product11.2.0dbhome_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = E:u01
进行备库的恢复
C:UsersAdministrator>rman target /
恢复管理器: Release 11.2.0.3.0 - Production on 星期五 2月 26 17:35:52 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (DBID=1389423916)
RMAN> connect auxiliary sys/*******@orclbak
已连接到辅助数据库: ORCL (未装载)
开始复制数据库:
RMAN> duplicate target database for standby nofilenamecheck;
启动 Duplicate Db 于 26-2月 -16
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=2091 设备类型=DISK
内存脚本的内容:
{
restore clone standby controlfile;
}
正在执行内存脚本
启动 restore 于 26-2月 -16
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集
通道 ORA_AUX_DISK_1: 正在还原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份片段 D:ORABAKC-1389423916-20160226-00
通道 ORA_AUX_DISK_1: 段句柄 = D:ORABAKC-1389423916-20160226-00 标记 = TAG20160226T140701
通道 ORA_AUX_DISK_1: 已还原备份片段 1
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:04
输出文件名=E:U01ORADATAORCLCONTROL01.CTL
完成 restore 于 26-2月 -16
内存脚本的内容:
{
sql clone "alter database mount standby database";
}
正在执行内存脚本
sql 语句: alter database mount standby database
内存脚本的内容:
{
set newname for tempfile 1 to
"E:U01ORADATAORCLTEMP01.DBF";
switch clone tempfile all;
set newname for datafile 1 to
"E:U01ORADATAORCLSYSTEM01.DBF";
set newname for datafile 2 to
"E:U01ORADATAORCLSYSAUX01.DBF";
set newname for datafile 3 to
"E:U01ORADATAORCLUNDOTBS01.DBF";
set newname for datafile 4 to
"E:U01ORADATAORCLUSERS01.DBF";
set newname for datafile 5 to
"E:U01ORADATAORCLGIS01.DBF";
set newname for datafile 6 to
"E:U01ORADATAORCLGIS02.DBF";
set newname for datafile 7 to
"E:U01ORADATAORCLGIS03.DBF";
set newname for datafile 8 to
"E:U01ORADATAORCLGIS04.DBF";
set newname for datafile 9 to
"E:U01ORADATAORCLGIS05.DBF";
set newname for datafile 10 to
"E:U01ORADATAORCLGIS06.DBF";
set newname for datafile 11 to
"E:U01ORADATAORCLGIS07.DBF";
set newname for datafile 12 to
"E:U01ORADATAORCLGIS08.DBF";
set newname for datafile 13 to
"E:U01ORADATAORCLGIS09.DBF";
set newname for datafile 14 to
"E:U01ORADATAORCLGIS10.DBF";
restore
clone database
;
}
正在执行内存脚本
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 E:U01ORADATAORCLTEMP01.DBF
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 26-2月 -16
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_AUX_DISK_1: 将数据文件 00001 还原到 E:U01ORADATAORCLSYSTEM01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00002 还原到 E:U01ORADATAORCLSYSAUX01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00006 还原到 E:U01ORADATAORCLGIS02.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00008 还原到 E:U01ORADATAORCLGIS04.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00010 还原到 E:U01ORADATAORCLGIS06.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00012 还原到 E:U01ORADATAORCLGIS08.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00014 还原到 E:U01ORADATAORCLGIS10.DBF
通道 ORA_AUX_DISK_1: 正在读取备份片段 D:ORABAKORCL_FULL_DB_ORCL_20160226_39QUSTI8.BAK
通道 ORA_AUX_DISK_1: 段句柄 = D:ORABAKORCL_FULL_DB_ORCL_20160226_39QUSTI8.BAK 标记 = TAG20160226T105816
通道 ORA_AUX_DISK_1: 已还原备份片段 1
通道 ORA_AUX_DISK_1: 还原完成, 用时: 02:08:38
通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_AUX_DISK_1: 将数据文件 00003 还原到 E:U01ORADATAORCLUNDOTBS01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00004 还原到 E:U01ORADATAORCLUSERS01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00005 还原到 E:U01ORADATAORCLGIS01.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00007 还原到 E:U01ORADATAORCLGIS03.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00009 还原到 E:U01ORADATAORCLGIS05.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00011 还原到 E:U01ORADATAORCLGIS07.DBF
通道 ORA_AUX_DISK_1: 将数据文件 00013 还原到 E:U01ORADATAORCLGIS09.DBF
通道 ORA_AUX_DISK_1: 正在读取备份片段 D:ORABAKORCL_FULL_DB_ORCL_20160226_38QUSTI8.BAK
通道 ORA_AUX_DISK_1: 段句柄 = D:ORABAKORCL_FULL_DB_ORCL_20160226_38QUSTI8.BAK 标记 = TAG20160226T105816
通道 ORA_AUX_DISK_1: 已还原备份片段 1
通道 ORA_AUX_DISK_1: 还原完成, 用时: 02:36:38
完成 restore 于 26-2月 -16
内存脚本的内容:
{
switch clone datafile all;
}
正在执行内存脚本
数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=2 STAMP=904861333 文件名=E:U01ORADATAORCLSYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=3 STAMP=904861334 文件名=E:U01ORADATAORCLSYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=4 STAMP=904861334 文件名=E:U01ORADATAORCLUNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=5 STAMP=904861334 文件名=E:U01ORADATAORCLUSERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=6 STAMP=904861334 文件名=E:U01ORADATAORCLGIS01.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 RECID=7 STAMP=904861334 文件名=E:U01ORADATAORCLGIS02.DBF
数据文件 7 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=904861334 文件名=E:U01ORADATAORCLGIS03.DBF
数据文件 8 已转换成数据文件副本
输入数据文件副本 RECID=9 STAMP=904861334 文件名=E:U01ORADATAORCLGIS04.DBF
数据文件 9 已转换成数据文件副本
输入数据文件副本 RECID=10 STAMP=904861335 文件名=E:U01ORADATAORCLGIS05.DBF
数据文件 10 已转换成数据文件副本
输入数据文件副本 RECID=11 STAMP=904861335 文件名=E:U01ORADATAORCLGIS06.DBF
数据文件 11 已转换成数据文件副本
输入数据文件副本 RECID=12 STAMP=904861335 文件名=E:U01ORADATAORCLGIS07.DBF
数据文件 12 已转换成数据文件副本
输入数据文件副本 RECID=13 STAMP=904861335 文件名=E:U01ORADATAORCLGIS08.DBF
数据文件 13 已转换成数据文件副本
输入数据文件副本 RECID=14 STAMP=904861335 文件名=E:U01ORADATAORCLGIS09.DBF
数据文件 14 已转换成数据文件副本
输入数据文件副本 RECID=15 STAMP=904861335 文件名=E:U01ORADATAORCLGIS10.DBF
完成 Duplicate Db 于 26-2月 -16
RMAN>
将主库的LOG_ARCHIVE_DEST_STATE_2设置为ENABLE
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2="ENABLE";
添加standby redo log --如本身主库已建立standby redo log,此步骤可省去
SQL> select member from v$logfile;
#主库增加 STANDBY LOGFILE
ALTER DATABASE ADD STANDBY LOGFILE group 4("E:u01oradatastandby_logslog1.rdo") SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE group 5("E:u01oradatastandby_logslog2.rdo") SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE group 6("E:u01oradatastandby_logslog3.rdo") SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE group 7("E:u01oradatastandby_logslog4.rdo") SIZE 200M;
#备库增加STANDBY LOGFILE
SQL> select member from v$logfile;
ALTER DATABASE ADD STANDBY LOGFILE group 4("E:u01oradatastandby_logslog1.rdo") SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE group 5("E:u01oradatastandby_logslog2.rdo") SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE group 6("E:u01oradatastandby_logslog3.rdo") SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE group 7("E:u01oradatastandby_logslog4.rdo") SIZE 200M;
最后在备库开启active dataguard
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE 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 FROM SESSION;
©版权声明:本文为天凯DBS的原创文章,转载请附上原文出处链接及本声明,否则将追究法律责任。
更多DBA案例请关注访问天凯DBS!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341