oracle 9i

Oracle9i+RMAN+DataGuard 实施手记
郭岳(** ID:David.Guo ITPUB ID:gytyl)
Blog: http://www.oracledba.com.cn
原文来自 www.oracledba.com.cn,如需转载,请勿更改文档任何部分
一:硬件环境
主 机 环 境 :IBM P570,1.65G CPU2 颗, 内存4GB, 本地硬盘
73GB*2,DS4300 阵列,硬盘300GB*14
备 机 环 境 : IBM P570,1.65G CPU2 颗, 内存4GB, 本地硬盘
73GB*2,DS4300 阵列,硬盘300GB*14
二:软件环境
主机环境:AIX 5.3 ML03,Oracle 9.2.0.7.0.
备机环境:AIX5.3 ML03,Oracle 9.2.0.7.0
三:实施过程
3.1:切换主数据库到归档模式
首先, 生成一个pfile,然后,使用命令shutdown immediate,将数据库
关闭,切记在这步操作不可以使用shutdown abort,因为如果使用了
abort 模式关闭主库,则在启动的时候,无法将数据库启动到归档模式,
会提示数据库需要进行recover.
关闭数据库以后,修改pfile,将其中的参数log_archive_start 设置
为true,并且设置好归档路径log_archive_dest,然后从pfile 将数据库
mount 起来.
Mount 数据库以后,执行alter database archivelog;将数据库启动到
归档模式
3.2:备份主数据库
数据库到归档模式以后,要作的就是备份主数据库了.因为主数据
库的所有数据文件都是裸设备,因此必须使用rman 来进行备份.
在主库上,用rman 启动rman 命令,因为我们的备份不使用catalog,
因此直接使用控制文件来代替catalog.
在rman 提示符下,用如下命令备份整个数据库
RMAN> run {
2> allocate channel dev1 type disk;
3> set limit channel dev1 kbytes 10000000;
4> backup full database format '/archive_log/backup_%t%s';
5> }
数据库备份后,将所有的备份文件拷贝到备机.注意如果是ftp
模式,必须使用bin 的模式,否则可能会导致文件损坏而无法恢复.
3.3:备库创建裸设备
在备库上要创建和主库一样的裸设备,有个简单的方法.
在备库上,执行:
lsvg –l datavg >/tmp/mklv.sh
其中的记录应该是类似这样的:
system jfs 8 8 1 open/syncd N/A
然后,将这个脚本修改为类似:
mklv -y system -w n -s n -r n -t jfs datavg 8
的形式,然后执行之,
裸设备创建好以后,要修改裸设备的属主和权限
修改属主使用类似如下的语句执行:
chown oracle:dba /dev/rsystem
修改权限使用类似如下的语句执行:
chmod 777 /dev/rsystem
执行完成这些以后,需要仔细检查和主库的是否一样,否则会导致
在rman 恢复过程中无法完成.
3.4:创建standby controlfile 以及pfile
在主库上,登陆到sqlplus 中
执行以下语句:
SQL>connect /as sysdba;
SQL>alter database create standby controlfile to
‘/backup/standby.ctl’;
SQL>create pfile=’/backup/pfile.ora’ from spfile;
然后将生成的控制文件和pfile 文件传输到备库,并修改好pfile 文
件.
以下贴出备库的pfile 的内容:
*.background_dump_dest='/oracle/product/9.2.0/admin/oradb/bdump'
*.compatible='9.2.0.0.0'
*.control_files='/oracle/standby1.ctl','/oracle/standby2.ctl','/oracle/standby3.ctl'
*.core_dump_dest='/oracle/product/9.2.0/admin/oradb/cdump'
*.db_block_size=8192
*.db_cache_size=1572864000
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='oradb'
*.fast_start_mttr_target=300
*.global_names=TRUE
*.hash_join_enabled=TRUE
*.instance_name='oradb'
*.java_pool_size=52428800
*.job_queue_processes=20
*.large_pool_size=52428800
#*.log_archive_dest='/archive_log'
*.log_archive_start=true
*.open_cursors=300
*.open_links=15
*.open_links_per_instance=15
*.pga_aggregate_target=209715200
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.service_names='ORADB'
*.shared_pool_size=209715200
*.sort_area_size=1048576
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/product/9.2.0/admin/oradb/udump'
*.log_archive_dest_1='LOCATION=/archive_log'
*.log_archive_dest_state_1=enable
*.log_archive_format=%t_%s.dbf
*.log_archive_start=true
*.standby_archive_dest='/archive_log'
*.standby_file_management=auto
*.fal_server=standby
*.fal_client=primary
*.remote_archive_enable=true
同时,将主库的pfile 也修改一下,要配置一定的data guard 的参数,
以下为主库的pfile 的内容
*.background_dump_dest='/oracle/product/9.2.0/admin/oradb/bdump'
*.compatible='9.2.0.0.0'
*.control_files='/dev/rconctl01','/dev/rconctl02','/dev/rconctl03'
*.core_dump_dest='/oracle/product/9.2.0/admin/oradb/cdump'
*.db_block_size=8192
*.db_cache_size=1572864000
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='oradb'
*.fast_start_mttr_target=300
*.global_names=TRUE
*.hash_join_enabled=TRUE
*.instance_name='oradb'
*.java_pool_size=52428800
*.job_queue_processes=20
*.large_pool_size=52428800
#*.log_archive_dest='/archive_log'
*.log_archive_start=true
*.open_cursors=300
*.open_links=15
*.open_links_per_instance=15
*.pga_aggregate_target=209715200
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.service_names='ORADB'
*.shared_pool_size=209715200
*.sort_area_size=1048576
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/product/9.2.0/admin/oradb/udump'
*.log_archive_dest_1='LOCATION=/archive_log'
*.log_archive_dest_2='SERVICE=standby reopen=60'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_format=%t_%s.dbf
*.log_archive_start=true
*.remote_archive_enable=true
都修改好以后,就可以在备库上作restore 了.
3.5:备库作恢复
在备库上,将数据库启动到nomount 状态
然后用
SQL>alter database mount standby database
启动备库到standby 模式.
试用rman 作恢复,注意,因为备库放备份的地方要和主库一致.才
可以正常恢复,否则需要修改参数,才可以作恢复.
恢复的命令如下:
RMAN>restore database
执行时间会比较久,在全部执行完成后.稍微等待几分钟,在主库
执行如下的sql:
SQL>select status, error from v$archive_dest where dest_id=2;
结果必须为vilid,表示主库到备库的log 归档正确,可以在稍等后,
去查看备库的归档路径上是否在rman 过程中,以及备份文件传输以及
restore 过程中产生的log 是否自动过来.如果过来了,在备库执行一下
语句作recover
SQL>recover automatic standby database;
等所有的日志都recover 以后,将备库启动到recover 模式
SQL>recover managed standby database disconnect from session;
此时备库将自动应用在recover 模式, 可以通过查询
v$archived_log 来看新过来的log 有否自动应用.
一般可试用如下语句查看:
SQL>SELECT * FROM v$archived_log WHERE applied='YES';
查询的结果,即为已经在备库成功应用的log.
3.5:清理已经应用过的log
在主库和备库上,都会产生大量的归档log,这些log 在应用到备库
后,就需要删除,我们的删除方法试用了crontab 的自动执行的模式.
在备库, 有脚本
get_archive_log.sql,get_archive_log.sh,rm_archive_log.sh
这三个脚本的内容如下:
Get_archvie_log.sql 内容如下:目的是为了得到已经应用的log 的
名称
sqlplus -S /nolog set heading off
set echo off
set feedback off
spool /archive_log/rmlog.sh
SELECT 'rm -f '||'1_'||to_char(SEQUENCE#)||'.dbf' FROM v\$archived_log WHERE
applied='YES';
spool off
get_archive_log.sh 内容如下,目的是为了执行上面的sql
su - oracle -c "/archive_log/get_archive_log.sql"
rm_archive_log.sh 内容如下,目的是作删除
cd /archive_log
./get_archive_log.sh
./rmlog.sh
主机上有两个脚本 getrmlog.sh 以及rm_archive_log.sh
getrmlog.sh 的内容如下,目的是为了从备机上得到rmlog.sh 文件,
因为日志是否应用,备机上是最准确的,因此从备机去获得rmlog.sh 文
件过来执行.
ftp -i -in user root rootpass
lcd /archive_log
cd /archive_log
get rmlog.sh
bye
rm_archive_log.sh 内容如下,目的是为了执行删除工作.
cd /archive_log
./getrmlog.sh
./rmlog.sh
然后在主库的crontab 中增加如下的内容:
0 7 * * * /archive_log/rm_archive_log.sh
表示每天早上7 点清除已经应用的log
在备库的crontab 中增加如下的内容:
0 6 * * * /archive_log/rm_archive_log.sh
表示每天早上6 点清除已经应用的log,备库必须比主库先开始,
因为主库要去获得备库的rmlog.sh 来执行.
3.6:日常检查工作
对于 data guard 数据库,由于备库一直出于recover 模式,因此,从外
部是无法连接的.
日常检查可以从以下几个方面进行
1:可以查看主库和备库的/archive_log 目录中的log 是否正常删除
了,如果没有,则有可能是因为日志没有应用导致的,如果主库上有大
量log,备库没有,则可能是网络问题导致主库的log 没有正常应用到备
库.
2:在备库上依次执行如下操作:
SQL>connect /as sysdba
SQL>recover managed standby database cancel;
SQL>alter database open read only;
然后进行查询,看主库最近的应用数据有没有在备库中.
执行了上面的操作,可以通过下面的操作将备库继续运行到
recover 模式
SQL>recover managed standby database disconnect from session;
以上为简单的记录,特别感谢巴乔和piner 的支持,欢迎讨论
Email:[email protected]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13158758/viewspace-618453/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13158758/viewspace-618453/

你可能感兴趣的:(oracle 9i)