如何构建oracle DataGuard
1.备库环境变量
复制主数据库环境变量保持一致。注意sid、$ORACLE_BASE、$ORACLE_HOME
2.软件和补丁
查看主库中的补丁版本
select COMMENTS from dba_registry_history;
或者opatch lsinv
mkdir /u01 /oracle/software
cd /u01/oracle/software
注意:所有7u4系统都必须下载此补丁包
get software/oracle/db/PSU171017 /p19692824_112040_Linux-x86-64.zip
sftp
sftp> cd software/oracle/db
获取 p13390677_112040_Linux-x86-64_1of7.zip <数据库安装包>
获取 p13390677_112040_Linux-x86-64_2of7.zip <数据库安装补丁包>
获取p6880880_112000_Linux-x86-64.zip <补丁安装OPatch包>
获取<补丁版本>
再见
解压缩p13390677_112040_Linux-x86-64_1of7.zip
解压缩p13390677_112040_Linux-x86-64_2of7.zip
解压缩p6880880_112000_Lin ux-x86-64.zip
解压缩p19 692824_112040_Linux- x86-64.zip
解压<补丁版本>
cd数据库
xclock
./runInstaller
运行脚本
完成
cd ..
mv $ORACLE_HOME/OPatch/ $ORACLE_HOME/OPatch .bak
mv /u01 /oracle/software/OPatch/ $ORACLE_HOME/
打补丁需要环境变量
cd 19692824
opatch apply
cd 。 .
cd <补丁版本>
opatch apply(如果无法应用补丁,请检查监控是否关闭)
opatch lsinv
3.主库参数检查
检查主备库cpu、内存和文件系统
备库尽量与主库一致Consistent
free -g
lscpu
df -h
主库参数检查(确保归档和强制日志记录已打开)
df -h
p>
设置第 200 行
为 a30 设置 col DATABASE_ROLE
为 a20 设置 col DB_UNIQUE_NAME p>
a30 的 col OPEN_MODE
a30 的 col LOG_MODE
从 v$database 选择database_role、db_unique_name、open_mode、log_mode、force_logging;
Main库参数检查(数据文件是否全部在线或系统)
select different status from v$datafile;
主库参数检查(表空间是否全部在线)
从 dba_tablespaces 中选择不同的 STATUS;
主库参数检查(全部为 FULL)
显示参数 DB_BLOCK_CHECKING;
显示参数 DB_LOST_WRITE_PROTECT;
>show参数DB_BLOCK_CHECKSUM;
如果没有,检查修改是否需要重启。如果不是,请修改
alter system set DB_BLOCK_CHECKING='FULL';
alter system set DB_LOST_WRITE_PROTECT ='FULL';
alter system set DB_BLOCK_CHECKSUM ='FULL';
主库通道检查
设置linesize 200页999
col dest_id为9999
< p>col dest_name for a30col status for a10
col error for a50
select dest_id,dest_name,status,error from v$archive_dest;
show参数dest
退出
如果主库已经有dg库,注意
log_archive_dest_2参数必须更改为不冲突的通道
2.操作步骤
1.配置主库tnsnames.ora(与备库同)
vi $ORACLE_HOME/network/admin/tnsnames.ora
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <主库 IP>)(PORT = <主库端口>))< /p>
)
(CONNECT_DATA =
(SERVICE_NAME =
)
)
(描述=
(ADDRESS_LIST =
(ADDRESS = (协议 = TCP)) (HOST = <备用 IP>)(PORT = <备用端口>))
)< /p>
(CONNECT_DATA =
(SERVICE_NAME =
)
)
2.备库listener.ora和sqlnet.ora
vi $ORACLE_HOME/network/admin /listener.ora
SID_LIST_
(SID_LIST =< /p>
(SID_DESC =
(GLOBAL_DBNAME =
(ORACLE_HOME = /u01/oracle/product/db11gr2)
( SID_NAME =
)
)
(描述 =
(ADDRESS = (协议 = TCP)(HOST = <备用 IP>)(PORT = <备用端口>))
)
ADR_BASE_ INBOUND_CONNECT_TIMEOUT_ SECURE_REGISTER_ ADMIN_RESTRICTIONS_ DIAG_ADR_ENABLED_ vi $ORACLE_HOME/network/admin/sqlnet.ora SQLNET.INBOUND_CONNECT_TIMEOUT =60 sqlnet.expire_time =10
DIAG_ADR_ENABLED_
lsnrctl start
主备数据库
tnsping
tnsping
3.主库传输必要的文件(密码文件、参数文件、控制文件)
export ORACLE_SID=
sqlplus / as sysdba
create pfile= '/tmp/init
退出
scp $ORACLE_HOME/dbs/orapw scp /tmp/init scp /usr/openv/scripts/ 备用数据库执行 mv /home/oracle/orapw 4.修改参数并开始挂载 修改参数文件: 如果是迁移的dg库,则不要修改参数文件 如果是是一个简单的dg库,根据备库实际情况进行内存等修改 一般来说,修改归档路径、fal_server和fal_client,创建归档文件和审计文件路径 xmata.__oracle_base='/u01/oracle'#ORACLE_BASE set from environment #修改目录 *.audit_file_dest='/db_audit_file_dest/xmata' #修改目录 *.control_files='/xmata/xmatasys_u01/xmata /control01 .ctl','/xmata/xmatardo_u01/xmata/control02.ctl','/xmata/xmataudo_u01/xmata/control03.ctl' #修改目录 *.db_cache_size=4294967296 #修改大小 *.diagnostic_dest='/u01/oracle' #修改目录 *.fal_client='xmata_new' #修改名称client为你自己 *.fal_server = 'xmata' #修改名称 *.java_pool_size=134217728 #修改大小 *.large_pool_size=268435456 #修改大小 *.log_archive_dest_1='LOCATION = /oraarchivelog/xmata' #修改目录 *.log_archive_dest_2='service=zdhdb_sec LGWR ASYNC NOAFFIRM NET_TIMEOUT=30' #删除这一行 *.log_archive_format='%t_%s_ %r.arc' #添加此行(使存档文件以.arc结尾) *.pga_aggregate_target=2147483648 #修改大小 *.sga_max_size=12884901888 #修改大小< /p> *.shared_pool_size=1073741824 #修改大小 *.utl_file_dir='/oraarchivelog/xmata' #修改目录 开机nomount并修改参数 export ORACLE_SID= sqlplus / as sysdba 从 pfile ='/tmp/init startup nomount;
alter system set filesystemio_options=setallscope=spfile; #设置异步IO
alter system setparallel_execution_message_size=32768scope=spfile; #并行执行消息大小,迁移时不设置此参数
退出
引导挂载
rman目标/
恢复控制文件来自'/tmp/
退出
sqlplus / as sysdba
更改数据库挂载;
更改数据库创建备用控制文件为'/tmp/control01.ctl ';
立即关闭;
启动nomount;
退出
rman目标/
从'/恢复控制文件临时/控制l01.ctl';
退出
sqlplus / as sysdba
更改数据库挂载;
退出
5.主库配置日志传输通道,备库部署自删除脚本
主库配置日志传输通道
COMPRESSION=启用压缩参数
更改系统设置 log_archive_dest_2='service=
更改系统设置log_archive_dest_state_2='enable';
col dest_name format a30
select DEST_ID,DEST_NAME,STATUS,error from v$archive_dest_status;
备库部署自删除脚本
< p>mkdir -p /home/oracle/scripts_cd /home/oracle/scripts_
vi dg_rm_applied_arclog.sh(修改脚本sid,$ ORACLE_HOME, $ORACLE_BASE)
##########DG构建的部署自动删除归档日志的定时任务##########
< p>导出 ORACLE_BASE=/u01/oracle导出 ORACLE_HOME=/u01/oracle/product/db11gr2
导出 ORACLE_SID=
导出 ORACLE_TERM=xterm
导出 nls_lang = American_america.al32utf8
导出 Ora_nls10 = $ Oracle_home /NLS/DATA
导出 LIBPATH = $ Oracle_home/Lib: $ Oracle_home/ctx/lib JAVA_HOME=$ORACLE_HOME/jdk OME/doc ; usr/vacpp/bin:/usr/ccs/bin
导出 CLASSPATH = $ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib nbsp;年-月-日 hh34:mi:ss's.ff' p>
导出 NLS_TIMESTAMP_TZ_FORMAT='yyyy-mm-dd hh34:mi:ss.ff' ####删除存档日志步骤 1
SEQ1=`sqlplus -s "/ as sysdba" < 设置标题关闭反馈关闭页面大小 0 验证关闭回显关闭 numwidth 9 选择 max(SEQUENCE#)。 v\\\$archived_log al 其中 al.first_time<=sysdate-1/2 和 al.first_time>=sysdate-7 和 al.first_time<(select min( checkpoint_time) 来自 v\\\$datafile_header) -1/48 和 al.APPLIED='YES' 和 al.deleted='NO' 和 al.THREAD#= 1; 退出; EOF` echo 'DELETE ARC BEFORE' $SEQ1 `date` > rm_thread1.log rman target / < 退出; EOF # #####如果 PRIMARY 是 RAC,则删除归档日志线程 2 SEQ2=`sqlplus -s "/ as sysdba" < 设置标题关闭反馈关闭页面大小 0 验证off echo off numwidth 9 选择 max(SEQUENCE#) > 和 al.first_time<(select min(checkpoint_time) from v\\\$datafile_header)-1/48 和 al.APPLIED='YES' 和 al.deleted='NO' 和 al.THREAD#=2; 退出; EOF` echo 'DELETE ARC BEFORE' $SEQ2 `date` > rm_thread2 .log if [ ! -n "$SEQ2" ];然后 exit 0; else rman target / < 删除无提示强制归档日志直到序列${SEQ2}线程2; 退出; EOF fi crontab -e crontab - l 6.磁带库模式恢复 配置恢复脚本(只能在17:00后启动) ******************** ****************************************************** ********** **************************** 如果主要和从库文件系统一致,则忽略此操作 如果主从数据库文件系统不一致,则在主库执行以下语句,修改从库路径为辅助数据库,并在恢复之前将其粘贴到 res.rcv 脚本中 选择“set newname for datafile '||file#||”到 '||''''||'' || '/' || '数据文件tihuanlujing'||'/'|| substr(名称,instr(名称,'/',1, 3)+1)||''''||';'从 v$datafile 联合所有 选择“为临时文件'||file#||'设置新名称”到 '||''''||'' || '/' || '诱惑环景' ||'/' || substr(名称,instr(名称,'/',1,3)+1)|| ''''||';' from v$tempfile; 或 选择“更改数据库重命名文件‘||file_name||’”到'||'''' ||'目标数据路径'|| '/' || substr(文件名,instr(文件名,'/',1,3)+1)||''''||';' from dba_data_files; 在恢复之后和恢复之前将以下语句粘贴到 res.rcv 脚本中 switch datafile all; ******** *** ************************************************** **** ************************************************** ***** grep CLIENT_NAME /usr/openv/netbackup/bp.conf #主数据库主机名查询 备库恢复脚本: mkdir /home/oracle/ rman_ cd /home/oracle/rman_ vi res.sh DATE=`日期 +% Y%m%d %H` 导出 ORACLE_SID= rman nocatalog target / cmdfile=res.rcv msglog=res.log.$DATE vi res. rcv 运行{ 分配通道 ch00 类型“SBT_TAPE”参数“ENV=(NB_ORA_CLIENT=<主库主机名>)”; 分配通道 ch01 TYPE 'SBT_TAPE' parms 'ENV=(NB_ORA_CLIENT=<主库主机名>)'; 分配通道 ch02 TYPE 'SBT_TAPE' parms 'ENV=(NB_ORA_CLIENT=<主库主机名>)'; ALLOCATE CHANNEL ch03 TYPE 'SBT_TAPE' parms 'ENV=(NB_ORA_CLIENT=<主数据库主机名>)'; 恢复数据库; 恢复数据库删除archivelog; 发布通道ch00; 发布通道ch01; 发布通道ch02; 发布通道ch03; } nohup sh res.sh & ************************ ****************************************************** ********************************************************* 如果是新数据库,数据量较小,可以通过这种方式恢复 6.主库副本发起恢复(只能在17:00之后发起) DG开始以nomount模式启动(无论是主库还是dg库) rman target sys/<主库sys密码>@ 从活动数据库复制备用目标数据库 dorecover nofilenamecheck; ************************ **** ************************************************** ***** ************************************************* ************************************************ ***** ************************************************* ****** ************************** 6.主数据库压缩全备份方式恢复 完成全数据库压缩备份 mkdir / cd !$< /p> vi backup.sql 运行 { 分配通道c1类型磁盘maxpiecesize 10G; 分配通道c2类型磁盘maxpiecesize 10G; 分配通道c3类型磁盘maxpiecesize 10G; 分配通道c4类型磁盘maxpiecesize 10G; 备份为压缩备份设置数据库格式 '/ 释放通道 c1; 释放通道c2; 释放通道c3; 释放通道c4; } vi rman_backup .sh 导出 ORACLE_SID= rman nocatalog 目标 / cmdfile=backup.sql msglog=backup.log nohup sh rman_backup.sh & < /p> 后台执行开始全库压缩,注意目录空间是否足够存放全量备份集 备份完成后,将备份片转移到相应目录下成都 DG mkdir -p / 主库 scp bk* <备用IP>:/ 用于完整数据库恢复的备用数据库 cd / rman 目标 / 将默认设备类型配置到磁盘; 目录以 '/ 退出 vi recovery.sql 运行 { 分配通道c1 type磁盘maxpiecesize 10G; 分配通道c2类型磁盘maxpiecesize 10G; 分配通道c3类型磁盘maxpiecesize 10G; 分配通道c4类型磁盘maxpiecesize 10G; 恢复数据库; 恢复数据库; 释放通道c1; 释放通道c2; 释放通道c3; 释放通道c4; } vi rman_recover.sh 导出ORACLE_SID= rman nocatalog 目标 / cmdfile=recover.sql msglog=recover.log nohup sh rman_recover.sh & cd / rm -rf rman ************************************ ****************************************************** *** ****************************************** 7 。恢复后配置 ******************************************** ****************************************************** *** ********************************** 如果文件系统不一致,则需要重命名redolog(dg库需要挂载状态,取消日志申请on) 从 v$logfile 中选择成员; #主库查询当前重做日志的名称 rename文件系统: showparameterstandby_file_management altersystemsetstandby_file_management=manual;< /p> 更改数据库重命名文件'+DATA/zdhdb/onlinelog/group_1.257.876509499'为'/zdhdb/zdhdbrdo_u01/zdhdb/redo01'; ...... 修改系统设置standby_file_management=auto; 显示参数转换 修改系统设置log_file_name_convert='+DATA/ zdhdb/onlinelog','/zdhdb/zdhdbrdo_u01/zdhdb' scope=spfile; 更改系统设置db_file_name_convert='+DATA/zdhdb/datafile','/zdhdb/zdhdbdata_u01/zdhdb','+DATA01 /zdhdb/datafile','/zdhdb/zdhdbdata_u01/zdhdb 'scope=spfile; #添加路径转换参数:(主库添加新数据文件,备库可通过该参数自动转换文件名) ** ****************************************************** ********************************************************** ************************** 在备机上创建备日志文件(迁移的dg库不需要创建)此步骤) 设置 pagesize 2000 设置 linesize150 a50 的 col 成员 a20 的 col 状态 从 v$log g、v$logfile f 中选择 g.group#、g.thread#、g.status、f.member、g .members、g.bytes/1024/1024 MB、g.sequence#,其中g.group#=f.group# order by 1; #主库检查重做日志路径和大小 备用日志文件需要比重做日志文件多一组。每个群组只能创建一名成员。组号不能重复。组编号比主数据库上的最大组号大 20 ALTER DATABASE ADD STANDBY LOGFILE group 30 ('/ ...... 主库重启通道(没有重启查询同步时间报错) sqlplus / as sysdba 更改系统设置log_archive_dest_state_2=defer; alter system set log_archive_dest_state_2=enable; 备用数据库 show参数fal #如果没有,请设置 alter system set fal_server=' alter system set fal_client=' 显示参数 fal shu instant p> 启动nomount 更改数据库挂载; 显示参数转换 8.应用日志 alter database open read only; (直接执行不报错,如果没有standby redo则不会使用。使用当前日志文件添加) p> alterdatabaserecover Managedstandbydatabaseusingcurrentlogfiledisconnectfromsession; (如果报错,执行以下四个步骤,如果没有standbyredo,则无需使用当前日志文件进行添加。) alterdatabaserecover 托管备用数据库与会话断开连接; #应用到最新的日志,可能需要很长时间,可能会有间隙 alter database Recovery Managed Standby Database Cancel; 更改数据库打开只读; 更改数据库使用当前日志文件恢复托管备用数据库与会话断开连接; “如何构建 oracle DataGuard” 这就是全部内容就介绍到这里,感谢大家的阅读。如果您想了解更多行业资讯,可以关注网站,小编将为大家输出更多优质实用文章!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何构建oracle DataGuard