【Oracle】Oracle 10g的Data Gaurd环境搭建(备份容灾机制)

来源:互联网 发布:网络诊断dns未响应原因 编辑:程序博客网 时间:2024/06/07 06:36

Oracle 10g R2 DG配置

目录

1 安装与配置

2 datagaurd环境搭建

2.1 设置为强制日志模式

2.2 设置为归档日志模式

2.3 拷贝数据文件

2.4 创建备库的控制文件和初始化文件(即pfile文件)

2.5 复制控制文件和初始化文件

2.6 在备库上创建一个Windows服务和密码文件

2.7 备库创建admin目录

2.8 修改备库pfile文件(红色部分)

2.9 备库上创建spfile文件

2.10 重启监听服务

2.11 启动主备服务

3 测试主库、备库是否同步

4 在主库上创建新用户,创建新表,看备库是否同步

5 角色切换

相关说明:

环境:windows 7 32位ORACLE版本:10.2

注:本文档给出的是datagaurd创建物理standby的过程,默认最大性能模式。

1 安装与配置

安装文档参考《oracle相关基础知识》

安装过程中需要注意的:
主库要建立数据库实例,备库不需要建立

主库listener.ora:

SID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (SID_NAME = PLSExtProc)      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)      (PROGRAM = extproc)    )   (SID_DESC =    (GLOBAL_DBNAME = ORAC)    (ORACLE_HOME = d:\oracle\product\10.2.0\db_1)       (SID_NAME = ORAC)    )  )LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))      (ADDRESS = (PROTOCOL = TCP)(HOST = USER-20151216PL)(PORT = 1521))    )  )

主库tnsnames.ora:

ORAC =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.73.198.140)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orac)    )  )primary =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.73.198.140)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orac)    )  )standby =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.73.198.134)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orac)    )  )EXTPROC_CONNECTION_DATA =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))    )    (CONNECT_DATA =      (SID = PLSExtProc)      (PRESENTATION = RO)    )  )

备库listener.ora:

SID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (SID_NAME = PLSExtProc)      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)      (PROGRAM = extproc)    )  (SID_DESC =    (GLOBAL_DBNAME = ORAC)    (ORACLE_HOME = d:\oracle\product\10.2.0\db_1)       (SID_NAME = ORAC)    )  )LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = TCP)(HOST = USER-20151216PL)(PORT = 1521))      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))    )  )

备库tnsnames.ora:

PRIMARY =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.73.198.140)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = ORAC)    )  )STANDBY =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.73.198.134)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = ORAC)    )  )EXTPROC_CONNECTION_DATA =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))    )    (CONNECT_DATA =      (SID = PLSExtProc)      (PRESENTATION = RO)    )  )

2 datagaurd环境搭建

Oracle安装完成之后,环境为:
primary(主库):

操作系统 :win7 32位旗舰版   IP:10.73.198.140数据库:oracle 10.2  企业版  sid:orac

standby (备库):

操作系统:win7 32位旗舰版   IP:10.73.198.14数据库:oracle 10.2  企业版SID:无(只安装软件,不安装实例数据库)

要求:数据库的版本最好一致,最好安装路径一致;

2.1设置为强制日志模式

cmd> sqlplus / nolog;SQL> conn / as sysdba;SQL>alter database force logging;

2.2设置为归档日志模式

SQL> archive log listSQL> shutdown immediateSQL> startup mountSQL> alter database archivelog;SQL> archive log list

2.3拷贝数据文件

数据文件的拷贝可以分为两种模式:rman 和文件的直接拷贝。本文采用的是远程文件拷贝

拷贝主库的数据文件到备库中

在主库上进行如下两条命令获取数据文件的路径

SQL> select name from v$datafile;SQL> select * from v$tempfile;

把主库的以上数据文件(D:\oracle\product\10.2.0\oradata\orac)拷贝到备库上同样目录,如果备库上没

有这个路径,就创建一模一样的路径,然后复制数据文件。

2.4创建备库的控制文件和初始化文件(即pfile文件)

注:
pfile文件和spfile文件其实记录的信息可以等价的,pfile是文本文件,spfile是二进制文件
在主库上为从库创建控制文件,然后拷贝到从库D:\oracle\product\10.2.0\db_1\database目录下。
(记住这个目录,在下面备库的spfile 配置中要用到)。


SQL>alter database create standby controlfile as ‘d:\backup\standby.ctl’;(将控制文件暂时存储在d:\backup\路径下,可以自己定,该文件需要复制到备库上)
SQL>create pfile from spfile;

在D:\oracle\product\10.2.0\db_1\database目录下找到pfile(initorac.ora);

修改其参数(红色部分,对于归档路径log_archive_dest_1可以自定义)

orac.__db_cache_size=411041792
orac.__java_pool_size=4194304
orac.__large_pool_size=4194304
orac.__shared_pool_size=155189248
orac.__streams_pool_size=0
*.audit_file_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/adump’
*.background_dump_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/bdump’
*.compatible=’10.2.0.1.0’
*.control_files=’D:\oracle\product\10.2.0\oradata\orac\control01.ctl’,’D:\oracle\product\10.2.0\oradata\orac\control02.ctl’,’D:\oracle\product\10.2.0\oradata\orac\control03.ctl’
*.core_dump_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’orac’
*.db_recovery_file_dest=’D:\oracle\product\10.2.0\db_1/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=oracXDB)’
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=192937984
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=580911104
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1’
*.user_dump_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/udump’

*.DB_UNIQUE_NAME=’primary’
*.FAL_CLIENT=’primary’
*.FAL_SERVER=’standby’
*.log_archive_config=’DG_CONFIG=(primary,standby)’
*.log_archive_dest_1=’location=D:\oracle\product\10.2.0\archive\ 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’
.log_archive_format=’%T%S%r.ARC’*

然后保存,在主库上执行

SQL> shutdown immediate;

2.5复制控制文件和初始化文件

将主库上的控制文件和初始化文件复制到备库上相应目录,具体目录路径,参考主库的路径。

注:控制文件的复制,需要先关掉数据库

其中主库的控制文件的路径为:
D:\oracle\product\10.2.0\oradata\orac\

主库的pfile文件路径为:
D:\oracle\product\10.2.0\db_1\database\

继续(在主库上进行以下两条命令):

SQL>startup pfile=’D:\oracle\product\10.2.0\db_1\database\initorac.ora’
SQL> create spfile from pfile; //创建spfile文件

2.6 在备库上创建一个Windows服务和密码文件

创建服务

C:\Documents and Settings\Administrator>oradim -new -sid orac -startmode auto

复制密码文件,将主库上的密码文件复制到备库上,密码文件的路径为D:\oracle\product\10.2.0\db_1\database\PWDorac.ora

注:主备库的密码文件需要相同,所以如果是利用命令创建的密码文件,需要密码一样。

2.7 备库创建admin目录

将主库的d:\oracle\product\10.2.0\admin\orac 目录及文件夹(adump,bdump,cdump,dpdump,pfile,udump)拷贝到备库的相同目录。

2.8修改备库pfile文件(红色部分)

修改备库的D:\oracle\product\10.2.0\db_1\database\initorac.ora文件如下

orac.__db_cache_size=411041792
orac.__java_pool_size=4194304
orac.__large_pool_size=4194304
orac.__shared_pool_size=155189248
orac.__streams_pool_size=0
*.audit_file_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/adump’
*.background_dump_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/bdump’
*.compatible=’10.2.0.1.0’
*.control_files=’D:\oracle\product\10.2.0\oradata\orac\STANDBY.CTL’
*.core_dump_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’orac’
*.db_recovery_file_dest=’D:\oracle\product\10.2.0\db_1/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=oracXDB)’
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=192937984
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=580911104
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1’
*.user_dump_dest=’D:\oracle\product\10.2.0\db_1/admin/orac/udump’

*.DB_UNIQUE_NAME=’standby’
*.FAL_CLIENT=’standby’
*.FAL_SERVER=’primary’
*.log_archive_config=’DG_CONFIG=(primary,standby)’
*.log_archive_dest_1=’location=D:\oracle\product\10.2.0\archive\ 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’
*.log_archive_format=’%T%S%r.ARC’

2.9、在备库上创建spfile文件

在备库上执行以下命令:

C:\Documents and Settings\Administrator>set oracle_sid=orac;


注:上面创建的数据库实例名称需要与主库相同,具体DB_NAME、DBID、DB_UNIQUE_NAME、SERVICE_NAME、SID、INSTANCE_NAME、GLOBAL_DATABASE_NAME之间的区别,可参考相关的文档。一般情况下,对于单实例数据库,db_name=service_name=sid=instance_name。但是db_unique_name可以不一致。

C:\Documents and Settings\Administrator>sqlplus / as sysdba;SQL> startup pfile='D:\oracle\product\10.2.0\db_1\database\initorac.ora';SQL> create spfile from pfile='d:\oracle\product\10.2.0\db_1\database\initorac.ora';

2.10、重启监听服务

在上面配置完成之后,需要在主、备机上重启监听服务

CMD> Lsnrctl stop
CMD> lsnrctl start

可以使用lsnrctl status 命令查看监听器状态

2.11、启动主备服务

主库:

CMD> sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

备库:

SQL> startup mount;
SQL> alter database recover managed standby database disconnect from session;

3 测试主库、备库是否同步

主库上操作:

SQL>Alter system switch logfile;
SQL> select max(sequence#) from v$archived_log;//查看最大日志最大序列号

备库上操作:

SQL>alter database recover managed standby database cancel;
SQL>alter database recover managed standby database disconnect from session;
SQL> select max(sequence#) from v$archived_log;//查看最大日志最大序列号

看两者日志最大序列号是否相同,相同说明,主库产生的归档日志传输到了备库上,其实也可以直接在归档路径下查看备库归档日志是否都已接收。如果没有接收日志,需要查看rfs进程是否开启。

查看rfs进程是否开启的sql命令如下:

SQL>select process,status from v$managed_standby;


注:如datagaurd出现异常现象,则可以通过altert.log来查看哪里出了问题。
Altert.log的路径:D:\oracle\product\10.2.0\db_1\admin\orac\bdump。还可以根据alter.log中所说的trace文件中查找问题。

4 在主库上创建新用户,创建新表,看备库是否同步

主库上:

SQL>conn / as sysdba;
SQL>create user user_name identified by password;
SQL>grant create session,recource to user_name;
SQL>conn user_name/password;
SQL>create table t1 as select * from dual;
SQL>commit;
SQL>alter system switch logfile;

备库上:

SQL>conn / as sysdba;
SQL>alter database recover managed standby database cancel;
SQL>alter database recover managed standby database disconnect from session;
SQL>alter database open;
SQL>select * from all_users;
SQL>conn user_name/password;
SQL>select * from t1;

在备库上查看是否创建了同样的用户和新表

注:在备库上进行查询的时候,需要将数据库open

5 角色切换

主库

(1) 查看switchover_status

select database_role, switchover_status from v$database;

如果switchover_status为:to standby 则:

alter database commit to switchover to physical standby

否则用:

alter database commit to switchover to physical standby with session shutdown;

(2)重启数据库

shutdown immediate;
startup nomount;

(3)以备库mount

alter database mount standby database;

(4)查看数据库的角色

select database_role from v$database;

备库

(1) 应用redo

alter database recover managed standby database disconnect from session;

(2)查看switchover_status

select database_role, switchover_status from v$database;

如果switchover_status为:to primary 则:

alter database commit to switchover to primary

否则用:

alter database commit to switchover to primary with session shutdown;

(3)重启数据库

shutdown immediate;
startup;

(4)查看数据库的角色

select database_role from v$database;


注:需要尝试的技能
1, 利用rman进行备份数据文件,控制文件,初始化文件
2, 本文档是在windows平台下进行,网上大多数教程是在linux下操作,学会linux操作
3, 对于数据库异常处理的解决办法,例如日志不同步,日志未应用,日志出现gap现象等一系列异常处理

1 0
原创粉丝点击