Dataguard创建物理备份数据库
一、 实验环境
1. 虚拟机:VMware-workstation-5.5.1-19175。 2. 数据库版本 oracle10gR2。 3. 数据库DB_UNIQUE_NAME:主库primary、物理备份库standby。 4. 网络环境:primary库IP 172.168.1.211、standby库IP 172.168.1.212。 5. 操作系统:windows 2003企业版。 6. 系统环境:Primary机子上已经安装了数据库软件并创建了一个Primary的数据库,而standby机子上只按照了数据库软件并没有创建数据库。 |
二、 两个库的相关目录
2.1.Primary数据库
C:oracleproduct10.1.0oradataarchive ------存放本地归档。 C:oracleproduct10.1.0oradataprimary ------存放数据文件、联机日志文件、控制文件、重做日志文件(Standby redo log)。 C:oracleproduct10.1.0adminprimaryadump bdump cdump udump ------存放告警日志文件。 |
2.2 Standby 数据库
C:oracleproduct10.1.0oradataarchive ------存放本地归档。 C:oracleproduct10.1.0oradatastandby ------存放数据文件、联机日志文件、控制文件、重做日志文件(Standby redo log)。 C:oracleproduct10.1.0adminstandbyadump bdump cdump udump ------存放告警日志文件。 |
三、配置好主备机子的监听程序
3.1Primary数据库配置监听
1.启动netca. 2. 选择监听程序配置 3.选择本地NET服务名配置 配置完的文件: #listener.ora文件 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = primary) (ORACLE_HOME = C:oracleproduct10.1.0Db_1)
) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.211)(PORT = 1521)) ) ) ) # tnsnames.ora 文件 PRIMARY = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.211)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = primary) ) ) STANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.212)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = standby) ) ) |
3.2 Standby监听程序配置
1.启动netca. 2. 选择监听程序配置 3.选择本地NET服务名配置 配置完的文件: #listener.ora文件 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = standby) (ORACLE_HOME = C:oracleproduct10.1.0Db_1)
) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.212)(PORT = 1521)) ) ) ) # tnsnames.ora 文件 PRIMARY = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.211)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = primary) ) ) STANDBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.212)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = standby) ) ) |
3.3监听程序测试
1.确保oracle监听的服务进程重新启动 2.分别在主备机子上测试如下命令:tnsping sidname 例如:tnsping primary、tnsping standby |
四、Primary数据库相关操作
4.1打开强制记录模式
SQL>alter database force logging; |
4.2创建密码文件
首先检查下C:oracleproduct10.1.0Db_1database目录下是否存在密码文件。如果有的话就不用创建。如果没有的话请按如下方式创建一个: C:Documents and SettingsAdministrator> Orapwd file=C:oracleproduct10.1.0Db_1databasepwdprimary.ora password=abc.123 entries=10 Note:every database in a dataguard configuration must be use a password file,and the password for the SYS user must be identical on every system for redo data transmission to succeed .Dataguard中的每一个数据库的SYS用户密码必须一致,以保证在传递重做数据的成功。注意这包括其中的entries选项。 |
4.3修改Primary的初始化参数文件
Primary的初始化参数文件:INITPRIMARY.ORA primary.__db_cache_size=75497472 primary.__java_pool_size=4194304 primary.__large_pool_size=4194304 primary.__shared_pool_size=46137344 *.background_dump_dest='C:oracleproduct10.1.0adminprimarybdump' *.compatible='10.1.0.2.0' *.control_files='C:oracleproduct10.1.0oradataprimarycontrol01.ctl','C:oracleproduct10.1.0oradataprimarycontrol02.ctl','C:oracleproduct10.1.0oradataprimarycontrol03.ctl' *.core_dump_dest='C:oracleproduct10.1.0adminprimarycdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='primary' *.dispatchers='(PROTOCOL=TCP) (SERVICE=primaryXDB)' *.job_queue_processes=10 *.log_archive_format='ARC%S_%R.%T' *.open_cursors=300 *.pga_aggregate_target=37748736 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=134217728 *.sort_area_size=65536 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='C:oracleproduct10.1.0adminprimaryudump' ##primary role initialization parametrs## *.DB_UNIQUE_NAME=primary *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)' *.LOG_ARCHIVE_DEST_1= 'LOCATION=C:oracleproduct10.1.0oradataarchive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' *.LOG_ARCHIVE_DEST_2= 'SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE ##standby role initialization parametrs## *.FAL_SERVER=standby *.FAL_CLIENT=primary *.DB_FILE_NAME_CONVERT='C:oracleproduct10.1.0oradatastandby','C:oracleproduct10.1.0oradataprimary' *.LOG_FILE_NAME_CONVERT= 'C:oracleproduct10.1.0oradatastandby','C:oracleproduct10.1.0oradataprimary' *.STANDBY_FILE_MANAGEMENT=AUTO |
4.4开启归档模式并重新生产spfile
SQL>shutdown immediate; SQL>startup mount pfile=’ C:oracleproduct10.1.0Db_1databaseinitprimary.ora’ ; SQL>alter database archivelog; SQL>alter database open; SQL>create spfile from pfile; |
4.5冷备份Primary数据库
SQL>shutdown immediate; 到standby的机子上创建如2.2的相关目录,拷贝2.1里面的数据文件到2.2相应目录里面。 当然我们还需要拷贝primary的初始化参数文件(initprimary.ora)、密码文件(pwdprimary.ora) |
4.6为standby创建一个控制文件
SQL>startup mount; SQL>Alter database create standby controlfile as ‘c:oraclestandby.ctl’; Sql>alter database open; Note:拷贝c:oraclestandby.ctl文件到备份机子上面的C:oracleproduct10.1.0oradatastandby目录下复制三份,分别命名control01.ctl、control02.ctl、control03.ctl(即覆盖之前拷贝过来的控制文件)。 |
五、 Standby数据库上的操作
5.1创建实例名
使用如下命令创建一个standby的实例名 |
5.2修改口令文件
对从Primary拷贝过来的口令文件pwdprimary.ora文件进行重新命名为pwdstandby.ora并存放到: C:oracleproduct10.1.0Db_1databasepwdstandby.ora |
5.3修改初始化参数
修改从primary拷贝过来的初始化参数文件initprimary.ora文件的文件名为initstandby.ora,并修改里面的相关参数如下: primary.__db_cache_size=75497472 primary.__java_pool_size=4194304 primary.__large_pool_size=4194304 primary.__shared_pool_size=46137344 *.background_dump_dest='C:oracleproduct10.1.0adminstandbybdump' *.compatible='10.1.0.2.0' *.control_files='C:oracleproduct10.1.0oradatastandbycontrol01.ctl','C:oracleproduct10.1.0oradatastandbycontrol02.ctl','C:oracleproduct10.1.0oradatastandbycontrol03.ctl' *.core_dump_dest='C:oracleproduct10.1.0adminstandbycdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='primary' *.dispatchers='(PROTOCOL=TCP) (SERVICE=primaryXDB)' *.job_queue_processes=10 *.log_archive_format='ARC%S_%R.%T' *.open_cursors=300 *.pga_aggregate_target=37748736 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=134217728 *.sort_area_size=65536 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='C:oracleproduct10.1.0adminstandbyudump' ##primary role initialization parametrs## *.DB_UNIQUE_NAME=standby *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)' *.LOG_ARCHIVE_DEST_1= 'LOCATION=C:oracleproduct10.1.0oradataarchive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby' *.LOG_ARCHIVE_DEST_2= 'SERVICE=primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary' *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE ##standby role initialization parametrs## *.FAL_SERVER=primary *.FAL_CLIENT=standby *.DB_FILE_NAME_CONVERT='C:oracleproduct10.1.0oradataprimary','C:oracleproduct10.1.0oradatastandby' *.LOG_FILE_NAME_CONVERT= 'C:oracleproduct10.1.0oradataprimary','C:oracleproduct10.1.0oradatastandby' *.STANDBY_FILE_MANAGEMENT=AUTO |
5.4 Standby redo logfile文件相关知识补充
1.standby redo logfile的作用? 当数据库处于最大保护和最大可用性的时候,系统是需要standby redo logfile的,能够实现实时更新,能够冲standby redo file中获取更多的恢复数据。正常情况下仅需要在Standby端进行配置,考虑到主备切换,在primary端亦进行配置。 2.standby redo logfile文件的大小如何确定? Standby redo logfile的大小应该和联机日志文件一样大。 在本机中我们使用如下命令查看联机日志文件的大小为10M。 3.如何确定合适的standby redo group组数? Standby redo组的数量=(每个线程所管理的组数+1)*线程数 本例子中:(3+1)*1=4 |
5.5挂载备数据库并创建主备的standby redo logfile
备数据库上: SQL>startup nomount pfile=’c:oracleproduct10.1.0Db_1databaseinitstandby.ora’ ; SQL> Alter database mount standby databse; 这个时候数据库正处于恢复阶段,在这个时候添加重做日志文件有可能会失败。 差不多5分钟过后: SQL> alter database add standby logfile group 4 (''C:oracleproduct10.1.0oradatastandbyredo04.log’) size 10m; SQL> alter database add standby logfile group 5 (''C:oracleproduct10.1.0oradatastandbyredo05.log’) size 10m; SQL> alter database add standby logfile group 6 (''C:oracleproduct10.1.0oradatastandbyredo06.log’) size 10m; SQL> alter database add standby logfile group 7 (''C:oracleproduct10.1.0oradatastandbyredo07.log’) size 10m; 主数据库上: SQL> alter database add standby logfile group 4 (''C:oracleproduct10.1.0oradataprimaryredo04.log’) size 10m; SQL> alter database add standby logfile group 5 (''C:oracleproduct10.1.0oradata primary redo05.log’) size 10m; SQL> alter database add standby logfile group 6 (''C:oracleproduct10.1.0oradata primary redo06.log’) size 10m; SQL> alter database add standby logfile group 7 (''C:oracleproduct10.1.0oradata primary redo07.log’) size 10m; 验证standby redo logfile文件是否创建成功: SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG; |
5.6启动redo应用,后台运行模式
alter database recover managed standby database disconnect from session; 或者 启用实时应用模式 alter database recover managed standby database using current logfile disconnect from session; 关闭redo应用 alter database recover managed standby database cancel; |
5.7测试standby数据库是否正常工作
归档传递测试: 1.在primary库上,查看当前的归档: SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 2.在primary上使用强制手动归档 SQL>alter system switch logfile; 3.查看standby数据库上的归档 --------这个差不多要等1分钟后再查看 SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 查看归档是否从主库上传递到备份数据库上。 数据文件传递测试: 1. 在primary数据库上给system表空间添加一个数据文件。 SQL> Alter tablespace system add datafile " C:oracleproduct10.1.0oradataprimarysystem02.dbf" size 100m; 2. 切换日志,告诉standby进行redo应用 SQL>alter system switch logfile; 3.到standby备库上查看是否都了一个system02.dbf的数据库文件 |
六、 角色互换
五、角色互换 1. Switchover模式下切换 Primary端: select switchover_status from v$database; 如果是to standby 表可以正常切换. 直接执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 否则执行: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; shutdown immediate; alter database mount standby database; alter database recover managed standby database disconnect from session; Standby端: SELECT SWITCHOVER_STATUS FROM V$DATABASE; 如果是to_primary 表可以正常切换. 执行:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 否则执行: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; shutdown immediate; startup; |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13062352/viewspace-1028423/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13062352/viewspace-1028423/