ITPub博客

首页 > 数据库 > Oracle > Dataguard创建物理备份数据库

Dataguard创建物理备份数据库

原创 Oracle 作者:qq19398962 时间:2009-11-04 11:31:39 0 删除 编辑
Dataguard创建物理备份数据库[@more@]

Dataguard创建物理备份数据库

一、 实验环境

1. 虚拟机:VMware-workstation-5.5.1-19175

2. 数据库版本 oracle10gR2

3. 数据库DB_UNIQUE_NAME:主库primary、物理备份库standby

4. 网络环境:primaryIP 172.168.1.211standbyIP 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 primarytnsping 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.6standby创建一个控制文件

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.ctlcontrol02.ctlcontrol03.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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-08-08

  • 博文量
    22
  • 访问量
    30819