CentOS 下Oracle11g DataGuard部署配置

本文详细介绍了在CentOS 5.5上使用Oracle11g设置DataGuard的过程,包括开启强制日志模式、设置归档、复制密码文件、创建standby日志文件、配置初始化参数、复制控制文件和数据文件,以及配置listener和tnsname等步骤。确保主备库之间的实时同步和数据库热备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle DataGuard可以实现数据库的热备,11g后也可以用来作为实时的读写分离方案。下文以CentOS5.5+Oracle11g为例说明部署步骤。

主库
ip:192.168.1.232
host:oracleTkBak.ipmph.com
sid:orcl

备库
ip:192.168.1.50
host:testOracle2.ipmph.com
sid:orcl


50备库:vim /etc/hosts:备库的hosts里面加主库IP,主库的hosts里面加备库IP

127.0.0.1 testOracle2.ipmph.com testOracle2 localhost.localdomain localhost

192.168.1.232 oracleTkBak.ipmph.com


232主库 vim /etc/hosts

127.0.0.1 oracleTkBak.ipmph.com oracleTkBak localhost.localdomain localhost

192.168.1.50 testOracle2.ipmph.com

安装时备库先不用装数据库,只安装程序。数据文件由主库复制。

1.primary库操作
1)打开强制日志模式

先查询:select  FORCE_LOGGING  from  v$database;

如果是NO就执行下面的alter
alter database force logging;
修改完之后再执行上面的查询
2)检查是否是归档模式
archive log list

如果为如下日志,则未归档
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Current log sequence           2

shutdown immediate
startup mount
alter database archivelog;


3)复制密码文件
scp /opt/11g/oracle/product/11.2.0/db_1/dbs/orapworcl 192.168.1.50:/opt/11g/oracle/product/11.2.0/db_1/dbs/orapworcl

在备库的/opt/11g/oracle/product/11.2.0/db_1/dbs/ 目录下把orapworcl文件拷贝一份并重命名成orapwstandby(不能是.ora文件,如果是.ora的话会报:ORA-16191: Primary log shipping client not logged on standby这个错误)

4)设置归档文件地址
建立归档目录 mkdir /opt/11g/oracle/oradata/orcl/archive
alter system set log_archive_dest_1='location=/opt/11g/oracle/oradata/orcl/archive';


5)增加standby日志文件
startup mount
alter database add standby logfile group 4('/opt/11g/oracle/oradata/orcl/standby_redo01.log') size 100M;
alter database add standby logfile group 5('/opt/11g/oracle/oradata/orcl/standby_redo02.log') size 100M;
alter database add standby logfile group 6('/opt/11g/oracle/oradata/orcl/standby_redo03.log') size 100M;
alter database add standby logfile group 7('/opt/11g/oracle/oradata/orcl/standby_redo04.log') size 100M;
alter database add standby logfile group 8('/opt/11g/oracle/oradata/orcl/standby_redo05.log') size 100M; 
检查结果
select group#,type,member from v$logfile;


6)创建primary数据库初始化参数

通过修改创建的pfile,然后重新生成spfile,

SQL> create pfile from spfile;

File created.


备份pfile,路径/opt/11g/oracle/product/11.2.0/db_1/dbs/initorcl.ora

备份完后vi initorcl.ora 把下面的添加到文件末尾,删除合并重复的行
主库

*.db_name='orcl'
*.db_unique_name='primary'
*.log_archive_config='dg_config=(primary,standby)'
*.log_archive_dest_1='LOCATION=/opt/11g/oracle/oradata/orcl/archive valid_for=(all_logfiles,all_roles)  db_unique_name=primary'
*.log_archive_dest_state_1=enable
*.log_archive_dest_2='SERVICE=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=standby'
*.log_archive_dest_state_2=enable
*.fal_server=standby
*.fal_client=primary
*.standby_file_management=auto
*.remote_login_passwordfile='EXCLUSIVE'
*.log_archive_format=%t_%s_%r.arc
DB_FILE_NAME_CONVERT='oradata/orcl','oradata/orcl'
LOG_FILE_NAME_CONVERT='oradata/orcl','oradata/orcl'


用pfile启动数据库,使配置生效
shutdown immediate
startup pfile='/opt/11g/oracle/product/11.2.0/db_1/dbs/initorcl.ora'
create spfile from pfile='/opt/11g/oracle/product/11.2.0/db_1/dbs/initorcl.ora';
shutdown immediate
startup


将initorcl.ora复制到备库
scp /opt/11g/oracle/product/11.2.0/db_1/dbs/initorcl.ora 192.168.1.50:/opt/11g/oracle/product/11.2.0/db_1/dbs/

修改备库中的initorcl.ora 文件:
*.db_name='orcl'
*.db_unique_name='standby'
*.log_archive_config='dg_config=(primary,standby)'
*.log_archive_dest_1='LOCATION=/opt/11g/oracle/oradata/orcl/archive valid_for=(all_logfiles,all_roles) db_unique_name=standby'
*.log_archive_dest_state_1=enable
*.log_archive_dest_2='SERVICE=primary lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=primary'
*.log_archive_dest_state_2=enable
*.fal_server=primary
*.fal_client=standby
*.standby_file_management=auto
*.remote_login_passwordfile='EXCLUSIVE'
*.log_archive_format=%t_%s_%r.arc
DB_FILE_NAME_CONVERT='oradata/orcl','oradata/orcl'
LOG_FILE_NAME_CONVERT='oradata/orcl','oradata/orcl'


7)在主库中创建备库的控制文件,注意备库的控制文件要在主库的MOUNT状态下创建。
shutdown immediate
startup mount
alter database create standby controlfile as '/home/oracle/standby.ctl';

复制控制文件到备库
scp /home/oracle/standby.ctl 192.168.1.50:/home/oracle/standby.ctl

复制数据文件到备库
alter database open;
alter database begin backup;
SQL> !scp /opt/11g/oracle/oradata/orcl/system01.dbf 192.168.1.50:/opt/11g/oracle/oradata/orcl/

oracle@192.168.1.245's password: 


scp: /opt/11g/oracle/oradata/orcl/: No such file or directory

这里会报备库没有那个目录,到备库去mkdir这个目录
alter database end backup;

8)配置listener和tnsname

配置listener
vi /opt/11g/oracle/product/11.2.0/db_1/network/admin/listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /opt/11g/oracle/product/11.2.0/db_1/)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /opt/11g/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
     )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracleTkBak.ipmph.com)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /opt/11g/oracle
配置tnsname 
vi /opt/11g/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracleTkBak.ipmph.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = testOracle2.ipmph.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

复制文件到备库
scp /opt/11g/oracle/product/11.2.0/db_1/network/admin/*.ora 192.168.1.50:/opt/11g/oracle/product/11.2.0/db_1/network/admin/
注意修改对应的listener的HOST

至此主库的操作完成。

2.standby备库操作
备库一般只需安装程序而不需要安装数据库,因此相关的文件需要从主库拷贝到备库。在上述过程中scp操作已经拷贝了部分数据。

1)建立相关admin、flash_recovery_area目录,这些目录都是 在oracle用户创建

cd /opt/11g/oracle/

mkdir admin

然后在admin目录下创建orcl目录
mkdir  orcl

在orcl目录下创建下面三个目录

mkdir adump 
mkdir  dpdump
mkdir  pfile


cd /opt/11g/oracle/ 
mkdir flash_recovery_area

cd flash_recovery_area/
mkdir orcl

cd /opt/11g/oracle/oradata/orcl

mkdir archive

2)复制控制文件
mv /home/oracle/standby.ctl  /opt/11g/oracle/oradata/orcl/control01.ctl

cd /opt/11g/oracle/oradata/orcl/
cp control01.ctl control02.ctl
cp control01.ctl control03.ctl

注意需要将control02.ctl复制到flash_recovery_area/orcl下

cp control02.ctl /opt/11g/oracle/flash_recovery_area/orcl/



3)切换pfile

切换到root用户后执行:setenforce 0

然后切换到oracle用户进入sqlplus
shutdown immediate
startup pfile='/opt/11g/oracle/product/11.2.0/db_1/dbs/initorcl.ora'
create spfile from pfile='/opt/11g/oracle/product/11.2.0/db_1/dbs/initorcl.ora';
shutdown immediate
startup


4)测试
测试listener是否配置成功,可通过 tnsping测试
测试权限是否正确
sqlplus sys/oracle@standby as sysdba


3.测试
1)正常启动主库
sqlplus / as sysdba;
startup

2)启动备库
sqlplus /nolog
conn / as sysdba;
startup mount

ALTER DATABASE OPEN READ ONLY; 


ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

3)在主库上做一次日志切换
ALTER SYSTEM SWITCH LOGFILE;

在主备上查看对应的归档日志情况
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

也可以在主库上查看错误信息
Select status,dest_name,error from v$archive_dest where rownum<10;

4)在主库上建表插入数据并在备库查询
create table zetest(id integer,name char(10),memo char(20));
insert into zetest values(1,'test','xxxx');
commit;

5)在备库上查询是否同步
select * from test;
11g备库第一次查询可能会报 数据库没打开的错误,按照下面10G的方法执行一遍以后就可以时时同步并查询了


注意:如果是oracle10g,不能在同步的时候同时执行查询
需要在备库执行
alter database recover managed standby database disconnect from session;
接收同步后查询需要
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN READ ONLY;
select * from test;

然后输入
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; 
继续接收主库的同步数据

 

错误可以去/usr/11g/oracle/diag/rdbms/standby/orcl/trace/这个目录下去查看



主库和备库的启动关闭顺序:

启动:先启备库,后启主库

关闭:先关主库,后关备库




修改host


vi /etc/sysconfig/network

HOSTNAME=PRIMARY



配置RMAN自动管理ARCHIVELOG


如果主库和备库安装路径不一致的话,一定要把备库的相关配置文件都改成备库自己的路径。需要注意的是这种情况下从主库生成的控制文件中的数据文件和日志文件路径都是主库的路径,而控制文件又是二进制文件不能通过vi直接修改。可以通过下面的方式修改日志文件和数据文件的位置:

1、启动数据库 并mount

startup mount;

alter database create standby controlfile as '/home/oracle/standby.ctl';

复制控制文件到备库
scp /home/oracle/standby.ctl 192.168.1.245:/home/oracle/standby.ctl

复制控制文件
mv /home/oracle/standby.ctl  /opt/11g/oracle/oradata/orcl/control01.ctl
cp control01.ctl control02.ctl
cp control01.ctl control03.ctl

复制数据文件到备库
alter database open;
alter database begin backup;
SQL> !scp /opt/11g/oracle/oradata/orcl/system01.dbf 192.168.1.50:/opt/11g/oracle/oradata/orcl/

oracle@192.168.1.245's password: 
alter database end backup;


2、alter system set standby_file_management=manual scope=both;

3、

alter database rename file '/opt/11g/oracle/oradata/orcl/users01.dbf' to '/usr/11g/oracle/oradata/orcl/users01.dbf';
alter database rename file '/opt/11g/oracle/oradata/orcl/undotbs01.dbf' to '/usr/11g/oracle/oradata/orcl/undotbs01.dbf';
alter database rename file '/opt/11g/oracle/oradata/orcl/sysaux01.dbf' to '/usr/11g/oracle/oradata/orcl/sysaux01.dbf'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/system01.dbf' to '/usr/11g/oracle/oradata/orcl/system01.dbf';  
alter database rename file '/opt/11g/oracle/oradata/orcl/temp01.dbf' to '/usr/11g/oracle/oradata/orcl/temp01.dbf';  
alter database rename file '/opt/11g/oracle/oradata/orcl/exam2x_temp.dbf' to '/usr/11g/oracle/oradata/orcl/exam2x_temp.dbf';    
alter database rename file '/opt/11g/oracle/oradata/orcl/exam2x_data01.dbf' to '/usr/11g/oracle/oradata/orcl/exam2x_data01.dbf';   
alter database rename file '/opt/11g/oracle/oradata/orcl/exam2x_data02.dbf' to '/usr/11g/oracle/oradata/orcl/exam2x_data02.dbf'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/exam2x_data03.dbf' to '/usr/11g/oracle/oradata/orcl/exam2x_data03.dbf'; 

 alter database rename file '/opt/11g/oracle/oradata/orcl/redo03.log' to '/usr/11g/oracle/oradata/orcl/redo03.log'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/redo02.log' to '/usr/11g/oracle/oradata/orcl/redo02.log';  
alter database rename file '/opt/11g/oracle/oradata/orcl/redo01.log' to '/usr/11g/oracle/oradata/orcl/redo01.log';  
alter database rename file '/opt/11g/oracle/oradata/orcl/standby_redo01.log' to '/usr/11g/oracle/oradata/orcl/standby_redo01.log'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/standby_redo02.log' to '/usr/11g/oracle/oradata/orcl/standby_redo02.log'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/standby_redo03.log' to '/usr/11g/oracle/oradata/orcl/standby_redo03.log'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/standby_redo04.log' to '/usr/11g/oracle/oradata/orcl/standby_redo04.log'; 
alter database rename file '/opt/11g/oracle/oradata/orcl/standby_redo05.log' to '/usr/11g/oracle/oradata/orcl/standby_redo05.log'; 


4、alter system set standby_file_management=auto scope=both;



如果查询慢的话需要注释掉:/etc/resolv.conf中的内容


oracle 11g数据库用户密码180天自动过期调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值