dataguard实现Word文件下载.docx
《dataguard实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《dataguard实现Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。
作为主库的本地归档目录
4设置主库的本地归档目录
altersystemsetlog_archive_dest_1=’location=/oracle/oradata/reddb/local_arch’scope=spfile;
altersystemsetlog_archive_dest_state_1=enablescope=spfile;
startup
在设置了数据库的归档模式后,整个数据库就进入了归档的模式;
如果尚未设置log_archive_start=true,则数据库处于手工归档状态,
如果设置了此参数,则处于自动归档状态;
在自动归档状态下,如果没有设置log_archive_dest,则Oracle会选择一个默认目录作为归档目的地;
如果设置了log_archive_dest,则不能再增设一个log_archive_dest_n;
因此对于DG由于至少需要两个归档目的地(本地和远端),那么就不能设置log_archive_dest.
5测试本地归档
altersystemswitchlogfil;
通过切换,会发现在/oracle/oradata/reddb/arch下
能生成归档日志.
6建立主库的备用归档路径
在/oracle/oradata/reddb下创建stdby_arch目录,
作为主库的备用归档目录;
当主库切换为备库时,其接收的归档日志存放于此目录下.
7为了能是主备进行切换,需要将主库的参数文件进行修改,
添加如下:
LOG_ARCHIVE_DEST_2='
SERVICE=reddbstd'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_ARCHIVE_ENABLE=true
FAL_SERVER=reddbstd
FAL_CLIENT=reddb
DB_FILE_NAME_CONVERT=('
/oracle/oradata/reddb_stdby/'
'
/oracle/oradata/reddb/’)
LOG_FILE_NAME_CONVERT=('
STANDBY_ARCHIVE_DEST/oracle/oradata/reddb/stdby_arch
STANDBY_FILE_MANAGEMENT=AUTO
二备库的创建
1创建备库的数据文件所在的目录
在/oracle/oradata下执行:
mkdirreddb_stdby
2冷备份数据文件
shutdown
$cp/oracle/oradata/reddb/*.dbf/oracle/oradata/reddb_stdby/
$cp/oracle/oradata/reddb/*.log/oracle/oradata/reddb_stdby/
3生成备库的控制文件
ALTERDATABASECREATESTANDBYCONTROLFILEAS
‘/oracle/oradata/reddb_stdby/control_std.ctl’;
此处的控制文件名应该与主库的不一样;
另外,生成控制文件的步骤应该在备份数据文件后面.
4生成备库的参数文件
SQL>
CREATEPFILE=’/oracle/oradata/reddb_stdby/initreddbstd.ora’FROMSPFILE;
5建立备库的本地归档路径
在/oracle/oradata/reddb_stdby/下建立
arch目录
6建立备库的DUMP目录
bdump
cdump
udump
等目录
7修改从库的参数文件
这个参数文件是从主库直接copy过来的,有不合适的地方需要修改.
*.background_dump_dest='
/oracle/admin/reddb/bdump'
修改为
/oracle/oradata/reddb_stdby/bdump'
*.compatible='
9.2.0.0.0'
*.control_files='
/oracle/oradata/reddb/control01.ctl'
/oracle/oradata/reddb/control02.ctl'
/oracle/oradata/reddb/control03.ctl'
修改为:
/oracle/oradata/reddb_stdby/control_std.ctl'
*.core_dump_dest='
/oracle/admin/reddb/cdump'
/oracle/oradata/reddb_stdby/cdump'
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain='
'
*.db_file_multiblock_read_count=16
*.db_name='
reddb'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='
reddbstd'
(实例名)
*.java_pool_size=0
*.large_pool_size=8388608
*.log_archive_dest_1='
location=/oracle/oradata/reddb/local_arch'
location=/oracle/oradata/reddb_stdby/local_arch'
*.log_archive_dest_state_1='
ENABLE'
*.log_archive_start=TRUE
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='
FALSE'
*.remote_login_passwordfile='
EXCLUSIVE'
*.shared_pool_size=83886080
*.sort_area_size=524288
*.star_transformation_enabled='
*.timed_statistics=TRUE
*.undo_management='
AUTO'
*.undo_retention=10800
*.undo_tablespace='
UNDOTBS1'
*.user_dump_dest='
/oracle/admin/reddb/udump'
/oracle/oradata/reddb_stdby/udump'
需要增加的参数:
standby_archive_dest=’/oracle/oradata/reddb_stdby/stdby_arch/'
#Specifythelocationofthearchivedredologsthat
#willbereceivedfromtheprimarydatabase.
#这个参数是指从
db_file_name_convert=(’/oracle/oradata/reddb/’,
’/oracle/oradata/reddb_stdby/’)
log_file_name_convert=(’/oracle/oradata/reddb/’,
log_archive_format=%t_%s.dbf
log_archive_dest_1=(’LOCATION=/oracle/oradata/reddb_stdby/local_arch'
’)
log_archive_dest_1-Specifythelocationwheretheredologsaretobe
archivedonthestandbysystem.(Ifaswitchoveroccursandthisinstance
becomestheprimarydatabase,thenthisparameterwillspecifythelocation
wheretheonlineredologswillbearchived.)
standby_file_management=AUTO
remote_archive_enable=TRUE
lock_name_space=reddbstd
为了是备库能切换为主库的角色,增加参数如下:
FAL_SERVER=reddb
FAL_CLIENT=reddbstd
SERVICE=reddb'
三启动从库
生成口令文件:
$/oracle/product/9.2.0.4/bin/orapwdfile=/oracle/product/9.2.0.4/dbs/orapwreddbstdpassword=sys
$exportORACLE_SID=reddbstd
$sqlplus“/assysdba”
startupnomountpfile=/oracle/oradata/reddb_stdby/initreddbstd.ora
createspfilefrompfile=/oracle/oradata/reddb_stdby/initreddbstd.ora
exit
startupnomount
alterdatabasemountstandbydatabase;
alterdatabaserecovermanagedstandbydatabase
>
disconnectfromsession;
四关闭从库
1先将主库对应的远程归档路径置为无效
主库操作:
altersystemsetlog_archive_dest_state_1=deferscope=memory;
2如果从库正在进行recover,则取消之
从库操作,查看是否有MRP0或MRP进程
SELECTPROCESS,STATUSFROMV$MANAGED_STANDBY;
3
执行
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;
4关闭从库
shutdownimmediate;
五启动主库
修改initreddb.ora文件如上所示.
startuppfile=/oacle/product/9.2.0.4/dbs/initreddb.ora
createspfilefrompfile
shutdown
六配置侦听及网络服务名
由于主备库是在一台机器上,所以只需各配置一个listener.ora和tnsnames.ora文件即可.
Listener.ora文件内容:
LISTENER=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=linux)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=reddb)
(ORACLE_HOME=/oracle/product/9.2.0.4)
(SID_NAME=reddb)
LISTENERSTD=
(ADDRESS=(PROTOCOL=TCP)(HOST=linux)(PORT=1523))
SID_LIST_LISTENERSTD=
(GLOBAL_DBNAME=reddbstd)
(SID_NAME=reddbstd)
tnsnames.ora文件内容:
REDDB=
(ADDRESS_LIST=
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=reddb)
REDDBSTD=
(SERVICE_NAME=reddbstd)
主从库的启动顺序:
从库的listener
从库
主库的listener
主库
七验证备库
1查看从库当前存在的归档日志
SELECTSEQUENCE#,FIRST_TIME,NEXT_TIME
FROMV$ARCHIVED_LOGORDERBYSEQUENCE#;
2在主库上归档当前日志
ALTERSYSTEMARCHIVELOGCURRENT;
3查看从库当前归档的日志
2>
4查看从库当前归档日志是否已被apply
SELECTSEQUENCE#,APPLIEDFROMV$ARCHIVED_LOG
2ORDERBYSEQUENCE#;
5查看从库上app进程的信息
SELECTPROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS
FROMV$MANAGED_STANDBY;
6查看从库归档日志被app的情况
SELECTARCHIVED_THREAD#,ARCHIVED_SEQ#,APPLIED_THREAD#,APPLIED_SEQ#
FROMV$ARCHIVE_DEST_STATUS;
7查看从库的已归档日志信息
SELECTREGISTRAR,CREATOR,THREAD#,SEQUENCE#,FIRST_CHANGE#,
NEXT_CHANGE#FROMV$ARCHIVED_LOG;
8在主库上执行
createtabletest(bnumber);
insertintotestvalues
(1);
commit;
altersystemswitchlogfile;
9在从库上执行
alterdatabaserecovermanagedstandbydatabasecancel;
alterdatabaseopenreadonly;
select*fromtest;
应该能检索出有值为1的记录.
10在主库上执行
insertintotestvalues
(2);
11在从库上执行
这时应没有值为2的记录,因为从库处于openreadonly模式,不能进行恢复;
也就是说managedrecover和readonly是从库两个互斥的运行模式.
Sql>
selectsequence#,archived,appliedfromv$archived_log;
通过这个结果就能发现有个已归档的日志没有被applied.
八监测备库的信息
1检查进程
在备库上执行:
SELECTPROCESS,CLIENT_PROCESS,SEQUENCE#,STATUSFROMV$MANAGED_STANDBY;
2查看归档日志
在主备库上执行
3查看备库上已归档的日志
备库上执行:
SELECTNAME,CREATOR,SEQUENCE#,APPLIED,COMPLETION_TIME
FROMV$ARCHIVED_LOG;
4查看主库的已归档信息
SELECTFIRST_TIME,FIRST_CHANGE#,NEXT_CHANGE#,SEQUENCE#FROMV$LOG_
HISTORY;
5查看从库的刚被apply的日志
SELECTTHREAD#,MAX(SEQUENCE#)AS"
LAST_APPLIED_LOG"
FROMV$LOG_HISTORY
3>
GROUPBYTHREAD#;
或者
SELECTTHREAD#,SEQUENCE#,APPLIEDFROMV$ARCHIVED_LOG;
6查看主库上尚未被传递到从库的日志
假设主库上的本地DEST_ID为1;
远程DEST_ID为2;
这可通过v$archive_dest来确定.
SELECTLOCAL.THREAD#,LOCAL.SEQUENCE#FROM
(SELECTTHREAD#,SEQUENCE#FROMV$ARCHIVED_LOGWHEREDEST_ID=1)LOCAL
WHERE
LOCAL.SEQUENCE#NOTIN
(SELECTSEQUENCE#FROMV$ARCHIVED_LOGWHEREDEST_ID=2AND
THREAD#=LOCAL.THREAD#);
九问题解决
1检查主库上的归档路径是否正确
SELECTDESTINATION,ERRORFROMV$ARCHIVE_DEST;
2如果备库没能收到归档日志
1)先检查主库上的归档路径是否有问题
SELECTDEST_ID"
ID"
STATUS"
DB_status"
DESTINATION"
Archive_dest"
ERROR"
Error"
FROMV$ARCHIVE_DEST;
2)如果上面正常,则检查:
主库上关于备库的servicename正确否?
归档路径正确否?
相应归档路径的state是否为enable
备库上的listener已启动否?
备库启动否?
十相关知识
1三种保护模式
MaximumPerformance
MaximumAvailability
MaximumProtection
2日志传递进程
主库上传递日志的进程可以是LGWR或ARCH.
对于MaximumAvailability和MaximumProtection两种模式,必须由LGWR进行传递,因为主库要求实时获取从库的事务信息;
对于MaximumPerformance模式,则可使用LGWR或ARCH.
如果是LGWR传递,则从库的接收者是RFS进程,接收的日志信息写入standbyredolog;
当主库进行日志switch时,会触发从库的arch进程也将standbyredolog归档到log_archive_dest_n所指定的本地归档路径.
如果时ARCH传递,则从库的接收者是RFS进程,每当主库进行日志switch时,从库会接收到一个完整的redo文件,RFS会将其直接放到standby_archive_dest路径下;
此时,主库上的每个arch进程会在从库对应一个RFS进程.
十一保护模式的转换
1在缺省情况下,备库是处于MaximumPerformance模式;
主库的日志传递进程是Arch
在主库上查询:
selectprotectionfromv$archive_dest_status;
在从库上查询:
selectprocess,client_processfromv$managed_standby;