Oracle 9I dataguard
一个主数据库可以有物理standby或逻辑的standby,也可以有两者都有。数据的同步主要是主库将archive log 传送到standby系统上面,然后standby上将archive log恢复(即物理的standby)或者使用logmnr生成sql语句写到standby库上(即逻辑的standby),这样的机制数据是不会立即从主库上到standby上面,不能提供实时性要求高的查询。逻辑standby的数据库可以提供查询功能,物理的standby需要先切换到readonly模式下才能提供查询功能。
物理standby
物理standby在read only状态下不能够恢复redo log,但是可以继续从主库上接收redo log,如果需要的话可以重复转换readonly状态和recovery(redo apply)状态。
物理standby可以作为一个工具去克隆一个新的数据库和原来的一模一样,克隆完了可以直接open(read/write),此时不能接收redo data 从主库上,也不能提供灾难保护。
物理standby 的优点:
1、灾难恢复和高可用性
当主库发生问题时,容易的主备切换机制,可以立即切换到standby,保证最短的宕机时间。
2、数据保护
可以确保数据不丢失,其支持主库支持的任何数据类型、对象以及sql。主库上存储级的物理错误不会被传递到standby上面。Standby在应用日志的时候还会去校验一下redo log的。
3、减低主库的工作压力
首先备份可以使用standby去备份,standby还可以打开刀readonly状态提供查询。
4、性能
应用日志是使用底层的机制去恢复数据,绕过了sql级的代码层,所以对于大量的数据来说它是最有效的恢复机制。
逻辑standby
逻辑standby初始时拷贝了一个和主库一样的数据库,逻辑数据库是执行sql语句生成的数据,即它是处在open的状态下的,可以read/write,但是通过sql重新生成的表是只读的。当表被更新生成时也是可以查询生成报表的,当然可以另外的创建索引去提高性能。逻辑standby是有数据类型、表的类型及sql类型等的限制的。
逻辑standby的优点:
有效的使用了standby库的硬件资源
降低主库的压力
测试例子:
主库: primarydb net service:pdb
备库: standbydb net service:sdb
第一阶段:创建一个物理的standby:
1、修改主库的初始化参数
LOG_ARCHIVE_DEST_2=’SERVICE=sdb optional reopen=180’
LOG_ARCHIVE_DEST_STATE_2=ENABLE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=SDB
FAL_CLIENT=PDB
LOG_ARCHIVE_DEST_2作为主库角色时,说明了主库会将日志通过net8传输到net service name为sdb的数据库上,即备库上。Optional是指当主库的联机重做日志没有成功的归档到该地(sdb),也可以被循环使用。此处还有参数mandatory,强制规定联机重做日志归档到该位置后才能够被循环使用。Reopen是指归档过程中发生故障,是否是强制尝试重新归档到目标,此处的reopen=180,是指经过180秒后将尝试重新归档。STANDBY_FILE_MANAGEMENT=AUTO 说明了主库的数据文件的增加删除会自动地应用到备库。FAL_SERVER参数是说明本库作为standby角色时,日志出现传输丢失,告诉standby去哪一个主库去取日志。FAL_CLIENT参数是说明从主库取回日志后送到哪个standby去。
如果主库和备库的数据文件目录不一致,需要在初始化参数中增加:
DB_FILE_NAME_CONVERT=’/data/oradata/primarydb/’,’/data/oradata/standbydb/’
LOG_FILE_NAME_CONVERT=’/arch1/pdb/’,’/arch1/sdb/’,’/arch2/pdb/’,’/arch2/sdb/’
2、主库处于归档模式运行,如果不是请更改为归档模式:
sql>shutdown immediate
sql>startup mount;
sql>alter database archivelog;
sql>alter database open;
sql>
修改初始化参数文件,增加:
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_1=/arch/oradata/
LOG_ARCHIVE_START=TRUE
3、备份主库:冷备或者rman
冷备:将主库shutdown,拷贝数据文件、归档日志文件、在线日志文件。
Rman:
备份数据文件:
Backup database filesperset 2 format='/disk3/oradata/backup/%U_%s.bak';
归档当前日志:
sql "Alter System Archive Log Current";
检查归档日志删除过期的:
Crosscheck archivelog all;
Report obsolete;
Delete noprompt expired archivelog all;
Delete noprompt obsolete;
创建控制文件并备份控制文件和归档日志:
Backup filesperset 10 archivelog all format=’/disk3/oradata/backup/%U_%s.log’;
在sql环境下执行:
Alter database create standby controlfile as ‘/data/oradata/test2/control01.ctl’;
4、给备库准备初始化参数文件
在主库上执行:
sql>create pfile=’/tmp/initpdb.ora’ from spfile;
将该初始化参数文件搞到备库上去。
备库上的目录环境如果按照主库上的一样,则可以不用修改,如果不一样,请修改为备库上的目录环境,主要是控制文件的位置,db_file_name_convert和log_file_name_convert是根据需要来设定的。
Log_archive_dest_1=’location=/arch/sdb/’
Log_archive_dest_2=’service=pdb optional reopen=180’
Fal_server=pdb
Fal_client=sdb
Standby_file_management=auto
当作为standby角色时Log_archive_dest_1这个参数是说明从主库传过来的日志放到的位置,Log_archive_dest_2作为standby角色时是被忽略掉的。
5、将主库备份的数据文件拷到备库
在备库上创建与主库一致的路径(也可以不一致,但是需要和初始化参数文件中指定的一致),将主库的密码文件拷贝到备库,放到相应的位置:$ORACLE_HOME/dbs/。将3步中生成的standby的控制文件拷到对应的目录下,注意要和初始化参数文件中指定的路径数量一致。
启动standby数据库:
sql>Startup nomount pfile=’/opt/oracle/products/9.2.0/dbs/initinstancename.ora’
sql>alter database mount standby database;
如果是冷备,将相应的文件拷贝到对应的位置;
如果是rman备份,使用rman命令进行
rman>restore database;
rman>recover database;此时可能会出现错误,需要手工将主库日志归档,然后拷到备库的日志对应的路径,然后注册alter database register logfile ‘..’,再进行恢复recover automatic standby database until cancel;。
完毕后,将数据库直接启动到自动恢复模式即可:
Alter database recover managed standby database disconnect from session;
至此物理的standby搭建完毕.
可以进行日志切换来测试是否配置成功,alter system switch logfile;
第二阶段:主备库切换
下面介绍物理standby进行相互转换得过程,如上配置已经完全满足了主备库相互转换的要求。
在主库上执行:
sql>alter database commit to switchover to physical standby with session shutdown;
sql>hutdown immediate
sql>tartup nomount pfile=’’
sql>alter database mount standby database;
sql>alter database recover managed standby database disconnect from session;
在备库上执行:
Sql>alter database commit to switchover to primary;
Sql>shutdown immediate
Sql>startup
第三阶段:恢复模式和只读模式切换
Standby从shutdown状态到read only状态。
SQL> STARTUP NOMOUNT pfile=initSTANDBY.ora
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE OPEN READ ONLY;
Standby从manual recovery模式下到read only状态
SQL> RECOVER CANCEL
SQL> ALTER DATABASE OPEN READ ONLY;
Standby从managed recovery模式下到read only状态
SQL> RECOVER MANAGED STANDBY DATABASE CANCEL
SQL> ALTER DATABASE OPEN READ ONLY;
从只读模式转到自动恢复模式
SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION
从只读模式转到手工恢复模式
SQL> RECOVER STANDBY DATABASE DISCONNECT FROM SESSION
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/386081/viewspace-213875/ ,如需转载,请注明出处,否则将追究法律责任。