如何构建oracle DataGuard

分类:编程技术 时间:2024-02-20 15:46 浏览:0 评论:0
0
本文介绍“如何构建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

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 a30

col status for a10

col error for a50

select dest_id,dest_name,status,error from v$archive_dest;

show参数dest

退出

如果主库已经有dg库,注意_sec变量名要改,这样不冲突的名称

log_archive_dest_2参数必须更改为不冲突的通道

2.操作步骤

1.配置主库tnsnames.ora(与备库同)

vi $ORACLE_HOME/network/admin/tnsnames.ora

=

< p> (DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = <主库 IP>)(PORT = <主库端口>))< /p>

)

(CONNECT_DATA =

(SERVICE_NAME = )

)

 )

_sec =

(描述=

(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_ = /u01/oracle< /p>

INBOUND_CONNECT_TIMEOUT_=60

SECURE_REGISTER_ = (TCP)

ADMIN_RESTRICTIONS_ =ON

DIAG_ADR_ENABLED_ = ON

vi $ORACLE_HOME/network/admin/sqlnet.ora

SQLNET.INBOUND_CONNECT_TIMEOUT =60

sqlnet.expire_time =10

< p>sqlnet.allow_logon_version =8

DIAG_ADR_ENABLED_ =ON

lsnrctl start

主备数据库

tnsping

tnsping _sec

3.主库传输必要的文件(密码文件、参数文件、控制文件)

export ORACLE_SID=

sqlplus / as sysdba

create pfile= '/tmp/init.ora' from spfile;

退出

scp $ORACLE_HOME/dbs/orapw <备用IP>:/home/oracle

scp /tmp/init.ora <备用IP>:/tmp

scp /usr/openv/scripts/_controlfile.ctl <备用IP IP>:/ tmp

备用数据库执行

mv /home/oracle/orapw $ORACLE_HOME/dbs

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.ora' 创建 spfile;

startup nomount;

< p>更改系统设置standby_file_management=auto; #主库添加数据文件时,dg库自动添加

alter system set filesystemio_options=setallscope=spfile; #设置异步IO

alter system setparallel_execution_message_size=32768scope=spfile; #并行执行消息大小,迁移时不设置此参数

退出

引导挂载

rman目标/

恢复控制文件来自'/tmp/_controlfile.ctl';

退出

sqlplus / as sysdba

更改数据库挂载;

更改数据库创建备用控制文件为'/tmp/control01.ctl ';

立即关闭;

启动nomount;

退出

rman目标/

从'/恢复控制文件临时/控制l01.ctl';

退出

sqlplus / as sysdba

更改数据库挂载;

退出

5.主库配置日志传输通道,备库部署自删除脚本

主库配置日志传输通道

COMPRESSION=启用压缩参数

更改系统设置 log_archive_dest_2='service=_sec LGWR ASYNC NOAFFIRM NET_TIMEOUT=30';

更改系统设置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 / << p>删除 noprompt 强制归档日志,直到序列 ${SEQ1} 线程 1;

退出;

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

< p>0 * * * * sh /home/oracle/scripts_/dg_rm_applied_arclog.sh >/dev/null 2>&1

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;

p>

}

nohup sh res.sh &

************************ ****************************************************** *********************************************************

如果是新数据库,数据量较小,可以通过这种方式恢复

6.主库副本发起恢复(只能在17:00之后发起)

DG开始以nomount模式启动(无论是主库还是dg库)

rman target sys/<主库sys密码>@auxiliary sys/<主库sys密码>@_sec nocatalog

从活动数据库复制备用目标数据库 dorecover nofilenamecheck;

************************ **** ************************************************** ***** *************************************************

************************************************ ***** ************************************************* ****** **************************

6.主数据库压缩全备份方式恢复

完成全数据库压缩备份

mkdir //db_dg_arc//rman

cd !$< /p>

vi backup.sql

运行

{

分配通道c1类型磁盘maxpiecesize 10G;

分配通道c2类型磁盘maxpiecesize 10G;

分配通道c3类型磁盘maxpiecesize 10G;

分配通道c4类型磁盘maxpiecesize 10G;

备份为压缩备份设置数据库格式 '//db_dg_arc//rman/bk_%d_%T_%U';

释放通道 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 //db_dg_arc//rman

主库

scp bk* <备用IP>://db_dg_arc//rman/

用于完整数据库恢复的备用数据库

cd //db_dg_arc// rman/

rman 目标 /

将默认设备类型配置到磁盘;

目录以 '//db_dg_arc//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 //db_dg_arc/

rm -rf rman

************************************ ****************************************************** *** ******************************************

7 。恢复后配置

******************************************** ****************************************************** *** **********************************

如果文件系统不一致,则需要重命名redolog(dg库需要挂载状态,取消日志申请on)

从 v$logfile 中选择成员; #主库查询当前重做日志的名称

rename文件系统:

showparameterstandby_file_management

p>

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 ('//stdredo30.log') SIZE <与主数据库大小相同library>;

......

主库重启通道(没有重启查询同步时间报错)

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='_sec';

显示参数 fal

shu instant

启动nomount

更改数据库挂载;

显示参数转换

8.应用日志

alter database open read only;

(直接执行不报错,如果没有standby redo则不会使用。使用当前日志文件添加)

alterdatabaserecover Managedstandbydatabaseusingcurrentlogfiledisconnectfromsession;

(如果报错,执行以下四个步骤,如果没有standbyredo,则无需使用当前日志文件进行添加。)

alterdatabaserecover 托管备用数据库与会话断开连接; #应用到最新的日志,可能需要很长时间,可能会有间隙

alter database Recovery Managed Standby Database Cancel;

p>

更改数据库打开只读;

更改数据库使用当前日志文件恢复托管备用数据库与会话断开连接;

“如何构建 oracle DataGuard” 这就是全部内容就介绍到这里,感谢大家的阅读。如果您想了解更多行业资讯,可以关注网站,小编将为大家输出更多优质实用文章!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何构建oracle DataGuard

用户评论