Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx

上传人:b****8 文档编号:22891552 上传时间:2023-02-05 格式:DOCX 页数:20 大小:28.83KB
下载 相关 举报
Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx_第1页
第1页 / 共20页
Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx_第2页
第2页 / 共20页
Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx_第3页
第3页 / 共20页
Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx_第4页
第4页 / 共20页
Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx

《Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

Oracle 11g Data Guard 物理备库快速配置Word文档格式.docx

dev-db2 

的服务器上。

不需要提的基本前提

有一些任何生产库都应该有的基本的设置。

其中一个就是归档模式。

对于生产库,这应该是一个明显的必须配置。

如果你的生产库没有适用归档模式,你要么需要马上开始读点书,要么你得有一个非常非常好的理由。

我不大确定谁真能找出一个理由,但任何准则都有例外。

如何修改你的数据库为归档模式:

SQL>

shutdownimmediateSQL>

startupmountSQL>

alterdatabasearchivelog;

SQL>

alterdatabaseopen;

archiveloglist;

主库准备

首先,备库要成为主库的完全相同的复制,它必须接收来自主库的重做日志。

Oracle数据库中,一个用户可以用指定某操作不产生日志(比如使用 

NOLOGGING 

语句)。

对于备库来说,这是个问题。

你必须确认用户无法指示数据库不产生重做日志,这需要启用数据库的强制日志功能。

启用方法如下:

alterdatabaseforcelogging;

selectname,force_loggingfromv$database;

你应该看到 

force_logging 

列为 

YES。

其次,你要确认当主库添加或删除数据文件时,这些文件也会在备库添加或删除。

启用此功能的方法如下:

altersystemsetstandby_file_management='

AUTO'

;

再次,我们要确认书库有备用日志文件(StandbyLogFiles)。

备库使用备用日志文件来来保存从主库接收到的重做日志。

主库上也建立备用日志文件有两个原因,一是主库可能转换成备库,备库需要备用日志,二是如果主库建了备用日志,备库会自动建。

备用日志应该跟在线日志一样大,组数应该至少跟在线日志一样多,或者更多。

我喜欢给备用日志一个跟在线日志不同范围的编号,比如在线日志组是1到6,备用日志就是11到16。

创建备用日志的方法如下:

alterdatabaseaddstandbylogfilegroup11('

/oradata/JED/g11m01.sdo'

'

/oradata/JED/g11m02.sdo'

)size50M;

如果你不是使用 

SSL 

做重做日志传输验证(一般来说不会),那么你需要使用密码文件做验证。

你必须创建密码文件,并且设置参数 

REMOTE_LOGIN_PASSWORDFILE 

为 

EXCLUSIVE 

或 

SHARED。

一般数据库默认就有密码文件,并且此参数默认为 

EXECUSIVE。

先检查下这两项,如果不是默认,设置方法如下:

altersystemsetremote_login_passwordfile=exclusivescope=spfile;

OS>

orapwdpassword=<

sys用户密码>

最后,检查数据库的 

db_unique_name 

参数是否设置。

如果没有,使用 

altersystem 

进行设置:

showparamterdb_unique_name;

altersystemsetdb_unique_name=some_namescope=spfile;

闪回数据库

我强烈建议开启数据库闪回功能。

闪回允许你将数据库还原到以前的某一时间点。

当发生故障转移时,这个功能非常有用,它能让你将老的主库闪回到故障前,然后将其转换为备库。

如果没有启用闪回功能,你就必须重建备库,意味着要再复制一次数据文件。

除了这个好处,闪回还能在某些情况下让你避免从备份恢复数据。

启用闪回功能,必须先配置快速恢复区(Flash/FastRecoveryArea).方法如下:

altersystemsetdb_recovery_file_dest='

&

快速恢复区目录或ASM磁盘组名'

altersystemsetdb_recovery_file_dest_size=400G;

配置好快速恢复区后,就可以启用闪回日志功能:

alterdatabaseflashbackon;

selectflashback_onfromv$database;

FLASHBACK_ON 

这列的值应该是 

如果你碰到 

ORA-01153 

报错,那一定是在备库进行此操作。

你需要先取消重做日志应用,启用闪回日志,然后重新启用日志应用。

在主库启用闪回日志,不会同步备库也启用。

你必须手动在主库和备库上均启用闪回日志。

如果不启用闪回日志,当出现故障转移时,你将需要完全重新开始创建一个备库。

SQL*NET配置

在创建备库前,要确认两台服务器的数据库之间能通信,如果我们要用RMAN的 

duplicatefromactivedatabase 

命令创建备库的话。

我们需要配置监听和TNS名。

你可以手动配置,也可以使用网络配置工具(netca)。

我更喜欢手动配置,因为我比较老派,并且这些配置文件又不复杂,

首先需要配置主备库的监听。

虽然数据库会自动注册监听,但如果要使用RMAN的 

duplicate 

命令创建备库,备库必须首先处于 

NOMOUNT 

状态。

在 

状态下,数据库实例不会自动注册监听,你必须配置静态监听。

另外必须要注意的一点是,NOMOUNT 

状态下的数据库必须使用专用模式(dedicatedserver)连接。

两台服务器上的TNS名字文件必须配置好,让主备库能用 

LOG_ARCHIVE_DEST_N 

和 

FAL_SERVER 

参数(稍后会介绍这些参数)中的服务名(ServiceNames)找到对方。

具体配置应类似下例。

主库(dev-db1)的监听配置:

SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=JED)(ORACLE_HOME=/oracle/product/11.2.0)(SID_NAME=JED)))

备库(dev-db2)的的监听配置:

SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=JED2)(ORACLE_HOME=/oracle/product/11.2.0)(SID_NAME=JED2)))

主库的TNS名字文件配置:

JED2=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dev-db2)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=JED2)))

备库的TNS名字文件配置:

JED=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dev-db1)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=JED)))重做日志传输配置

现在主备库之间依旧可以互相通信了,下一步是配置归档位置和重做日志传输。

我们将先在主库上进行配置,然后等备库创建好后,修改备库的配置。

配置归档位置:

altersystemsetlog_archive_dest_1='

location=use_db_recovery_file_destvalid_for=(all_logfiles,all_roles)db_unique_name=JED'

这个命令指定快速恢复区作为归档位置,此归档位置用于在所有数据库角色下归档所有的日志文件。

官方文档里说使用 

valid_for=(online_logfiles,all_roles),这将导致备库无法归档备用日志文件,因为它们不是在线日志。

但如果使用 

all_logfiles 

选项,主备库将都能归档在线以及备用日志。

如果你想在备库进行备份,并同时备份归档日志的话,必须使用 

all_logfiles。

然后配置重做日志传输到备库:

altersystemsetlog_archive_dest_2='

service=JED2asyncvalid_for=(online_logfile,primary_role)db_unique_name=JED2'

这条语句说,如果这是主库,就使用服务名 

JED2 

传输在线日志,目标库名叫 

JED2。

要注意STANDBY_ARCHIVE_DEST 

参数不需要,已经被官方弃用。

当调试时,不少人好心建议我设置此参数,但设置此参数后启动数据库,只会报 

ORA-32004:

obsoleteordeprecatedparameter(s)specifiedforRDBMSinstance 

错。

另一个要设置的参数是 

FAL_SERVER。

这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。

它用在备库接收的到的重做日志间有缺口的时候。

这种情况会发生在日志传输出现中断时,比如你需要对备库进行维护操作。

在备库维护期间,没有日志传输过来,这时缺口就出现了。

设置了这个参数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。

altersystemsetfal_server='

JED2'

注意 

FAL_CLIENT 

参数在11g里已经弃用。

然后我们要让主库知道DataGuard配置里的另外一个库的名字:

altersystemsetlog_archive_config='

dg_config=(JED,JED2)'

这一步做完后,我们就可以准备好备库的环境,并开始创建备库了。

备库环境准备

现在开始准备备库环境。

有很多种方法来执行这些步骤。

我这里写的是我觉得最适合我的方法。

你应该实验多种方法,看哪种比较适合你。

首先,我们要为备库创建密码文件和参数文件(spfile)。

密码文件可以直接复制过去,只需要改下名字就行。

比如,主库上的密码文件是 

$ORACLE_HOME/dbs/orapwJED。

我们把它复制到备库服务器的相同位置,用备库的 

SID 

取代主库,修改其名字为 

orapwJED2。

为了创建备库 

spfile,先创建一个启动参数文件(pfile):

createpfilefromspfile;

我想介绍一个看起来挺不错新功能,使用 

RMAN 

创建备库 

SPFILE。

我不使用这个功能的理由是:

1.反正我也需要复制密码文件到备库服务器,所以它并没有节省我复制文件的时间。

2.要使用这个功能,你仍然需要使用 

parameter_value_convert 

参数做很多替换工作,还有使用 

SPFILE 

语句和多个 

SET 

语句以确保一切正确。

我发现复制 

pfile 

过去更容易(你甚至可以直接粘贴复制),只要改下名字,然后改几个里面的参数就行。

这很容易,你也可以在手动修改和调试的过程中学到很多。

我发现手动改比用 

的SPFILE创建功能更快。

创建好了主库的 

后,将其复制到备库服务器的相同位置,使用备库的 

修改其名字。

你需要对 

做如下修改:

∙根据你备库的配置和文件位置,你可能需要修改 

AUDIT_FILE_DEST,CONTROL_FILES 

DISPATCHERS 

参数(也许还有其他需要修改的参数)。

∙LOG_ARCHIVE_DEST_1 

参数中的 

修改为备库的相应唯一名(这里是 

JED2)。

∙LOG_ARCHIVE_DEST_2 

参数,修改为主库对应的服务名和数据库唯一名(这里是 

JED)。

∙FAL_SERVER 

参数修改指向主库的服务名。

∙增加如下参数:

∙db_unique_name=JED2

∙db_file_name_convert 

log_file_name_convert。

如果主备库的数据文件、日志文件位置不同,需要设置这两个参数。

然后在备库服务器上创建所需目录结构和修改相关文件。

至少需要修改如下创建目录和文件:

∙$ORACLE_BASE/admin/$ORACLE_SID

∙$ORACLE_BASE/admin/$ORACLE_SID/adump(audit_file_dest配置的目录)

∙数据文件目录

∙控制文件目录

∙日志文件目录

∙快速恢复区目录

∙将备库信息加到 

/etc/oratab 

文件

现在可以准备启动备库实例来创建数据库了。

在启动过程中创建一个 

spfile。

startupnomountpfile=initJED2.oraSQL>

createspfilefrompfile;

shutdownSQL>

startupnomountSQL>

showparameterspfileSQL>

exit

showparameterspfile 

显示 

spfile 

的位置,这时备库处于 

备库创建

就像之前的步骤一样,创建数据库这一步也可以有多种方法。

在11g中,我将使用 

的复制功能,因为它很容易。

在上一步里,我们复制了密码文件和参数文件到备库服务器,修改好了参数文件,并创建了 

这让使用 

复制功能更加容易,当然,你也可以跳过手工复制密码和参数文件这步,让 

使用 

SPFILE,PARAMETER_VALUE_CONVERT 

SET等命令帮你自动完成。

创建备库的命令非常简单。

它指示 

直接复制当前活动的数据库(主库)到辅助数据库(备库)。

这样你就不需要现将主库的备份复制到备库服务器上,再还原数据库。

在今天的存储技术下,我们有更快更简单的方式复制数据库,但为了展示11g的这个新功能,并且这个功能又很简单,我喜欢尽可能使用它。

RMAN>

connecttargetsys@JEDRMAN>

connectcatalog<

catalogowner>

@<

catalogdb>

RMAN>

connectauxiliarysys@JED2RMAN>

duplicatetargetdatabaseforstandbyfromactivedatabase;

11.2.0.2.0 

版本后,你可以直接使用 

connecttarget 

连接辅助数据库,但如果不指定用户名和密码,在复制到备库时将报 

invalidusername/password 

当复制命令在执行时,我喜欢 

tail 

备库的告警日志文件,观察复制进行到了哪一步和查看是否有报错。

注意,针对在线和备用日志文件报 

ORA-27037:

unabletoobtainfilestatus 

错是正常的。

你也可以并行复制以提高性能。

需要分派主库和备库多个通道后,再执行复制命令:

run{allocatechannelchan1typedisk;

allocatechannelchan2typedisk;

allocatechannelchan3typedisk;

allocatechannelchan4typedisk;

allocateauxiliarychannelaux1typedisk;

allocateauxiliarychannelaux2typedisk;

allocateauxiliarychannelaux3typedisk;

allocateauxiliarychannelaux4typedisk;

}

如果一切正常,你将看到 

报出类似如下信息:

FinishedDuplicateDbat07-MAY-10

当备库复制完成后,我喜欢在备库启用闪回日志:

启动重做日志应用

启动或者停止重做日志应用非常容易。

启动日志应用:

ALTERDATABASERECOVERMANAGEDSTANDBYDATABASEUSINGCURRENTLOGFILE

DISCONNECTFROMSESSION;

这个命令指示备库开始使用备用日志文件进行恢复。

它也告诉备库命令完成后回到命令行界面。

如果你想停止恢复:

ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;

确认日志应用正常

你要确认重做日志正在应用到备库。

首先我们要确认主备库里的归档目的地配置都是有效的:

selectDEST_ID,STATUS,DESTINATION,ERRORfromV$ARCHIVE_DESTwhereDEST_ID<

=2;

目的地状态应该显示为 

VALID。

然后确认重做日志是否真的被应用了,在主库执行:

selectSEQUENCE#,FIRST_TIME,NEXT_TIME,APPLIED,ARCHIVEDfromV$ARCHIVED_LOGwherename='

orderbyFIRST_TIME;

如果归档和日志应用均正常,APPLIED 

ARCHIVED 

列都应该是 

很多教程里都让这个查询以 

SEQUENCE# 

列排序,但我不推荐。

如果以 

列排序,当你做了一次故障转移后,序列号会再从1开始,这时使用这个查询,你将不能在结果最后看到最新的记录。

我曾经很奇怪为什么查不到新记录,其实是因为新记录不是出现在最后,我没看到。

所以,这个查询都是以 

FIRST_TIME 

列排序。

如果你发现日志没有被应用,那可能是重做日志有了缺口,这种情况下备库无法进行日志应用。

但如果你的 

参数设置正确,这应该不会有问题。

你可以在主库上检查是否有重做日志缺口:

selectSTATUS,GAP_STATUSfromV$ARCHIVE_DEST_STATUSwhereDEST_ID=2;

如果一切正常,应该返回 

VALID 

NOGAP。

如果你想测试下 

这个参数是怎么工作的。

可以先把备库关掉,然后在主库切换几次日志,等一会,启动备库,再切换一次日志。

这样缺口很快就会出现。

如果 

设置正常,缺少的重做日志会被传输过来并应用。

V$DATAGUARD_STATUS 

视图对查找错误和了解发生了什么非常有用。

可以在主备库上执行以下查询查看数据库状态:

select*fromV$DATAGUARD_STATUSorderbyTIMESTAMP;

有时候你手工想确认下数据真的同步了。

一个更让人信服的方法是,直接查询备库,看新数据是否存在。

你可以将备库打开为只读状态,首先取消日志应用,再执行如下命令:

ALTERDATABASEOPENREADONLY;

这时你可以查询变化了的数据是否同步过来。

11g已经支持活动备库,可以让数据库在只读状态下打开,同时启动日志应用。

总结

现在你有一个配置好的 

DataGuard,也就有了一个冗余的数据库。

我不想留下主备转换、故障转移、重建库等不讲,这些主题将放到本文的第二部分。

我希望本文能帮助你更容易和更快速地创建你的 

DataGuard 

环境。

第二部分作者介绍

作者JedWalker是科罗拉多CentennialComcast媒体中心的数据操作经理(ManagerofDatabseOperation)。

他从1997年开始做Oracle数据库相关工作,是9i,10g和11g的OCP。

简介

本文的第一部分讲解了如何配置一个基本的DataGuard环境。

在第二部分里,我将介绍主备切换、故障转移(数据库和客户端)等其他主题。

回顾

在本文第一部分中,我们配置了一个物理备库。

在这第二部分中,我将介绍主备切换(Switchover),故障转移(Failover),客户端故障转移(ClientFailover),使用闪回数据库重建库,活动数据卫士(ActiveDataGuard),还讨论了一点备份。

故障转移配置

现在你已经配好了一个物理备库,你可能想试试主备切换(switchover),甚至故障转移(failover),但你先得确定客户端会跟着切换和转移。

我们需要配置数据库和客户端来支持这些功能。

要确定你的客户端能连接到正确的数据库,你要在数据库里配置一个支持故障转移的服务,并配置客户端的TNS,让它知道如何在一个DataGuard集群里找到主库。

首先,创建一个支持故障转移的服务。

我们要创建此服务,确定它在主库上启动,并确定它只在主库上启动。

创建服务使用如下SQL:

beginDBMS_SERVICE.CREATE_SERVICE(service_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1