RAC,DATAGUARD,STREAM被认为是Oracle的高可用的三架马车.三架马车各有所侧重:
(1)RAC主要解决了单节点故障,实现负载均衡,也实现了高性能。常用于24x7 的商业应用。
(2)DATAGUARD用冗余的方式实现高可用的,解决容灾。
(3)STREAM更加丰富,主要是应用层面的数据共享。
------->>本篇小编主要模拟在VirtualBox下搭建基于oracle11gR2_64的dataguard
==========================================================================================================================================================================
ORACLE 11G 搭建DATAGUARD步骤
==========================================================================================================================================================================
|
|
主机1 |
主机2 |
|
操作系统 |
Redhat5 64位 |
Redhat5 64位 |
|
主机名 |
dawn.com |
dg.com |
|
IP |
192.168.11.110 |
192.168.11.112 |
|
数据库软件版本 |
oracle 11.2.0.1.0 |
oracle 11.2.0.1.0 |
|
ORACLE_BASE |
/oracle/app/oracle/ |
/oracle/app/oracle/ |
|
ORACLE_HOME |
$ORACLE_BASE/product/11.2.0/db_1 |
$ORACLE_BASE/product/11.2.0/db_1 |
|
ORACLE_SID |
primary |
standby |
|
闪回区 |
2G |
2G |
|
归档 |
开启 |
开启 |
sqlplus / as sysdba
SQL> ALTER DATABASE FORCE LOGGING;
SQL> select force_logging from v$database;
FOR
---
YES
SQL>alter database add standby logfile group 4 ('/u01/app/oracle/oradata/priamry/stdbyredo01.log') SIZE 50m;
SQL>alter database add standby logfile group 5 ('/u01/app/oracle/oradata/priamry/stdbyredo02.log') SIZE 50m;
SQL>alter database add standby logfile group 6 ('/u01/app/oracle/oradata/priamry/stdbyredo03.log') SIZE 50m;
SQL> select * from v$logfile order by 1;
SQL>create pfile from spfile;
SQL>shutdown immediate;
vi $ORACLE_HOME/dbs/initprimary.ora
在最后添加如下内容:
*.audit_file_dest='/u01/app/oracle/admin/primary/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/primary/control01.ctl','/u01/app/oracle/flash_recovery_area/primary/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='primary'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=primaryXDB)'
*.log_archive_dest_1='location=/u01/app/oracle/oradata/arch'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=842006528
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.db_unique_name=primary
*.fal_server='standby'
*.fal_client='primary'
*.standby_file_management=auto
*.db_file_name_convert='/u01/app/oracle/oradata/standby/','/u01/app/oracle/oradata/primary/'
*.log_file_name_convert='/u01/app/oracle/oradata/standby/','/u01/app/oracle/oradata/primary/'
*.log_archive_config='dg_config=(primary,standby)'
*.log_archive_dest_2='service=standby LGWR SYNC AFFIRM valid_for=(online_logfiles,primary_role)'
SQL> create spfile from pfile;
File created.
lsnrctl stop
lsnrctl start
SQL> startup
ORACLE instance started
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> exit
我在这里模拟试验,数据文件较小较少,没用rman简化处理,用的全是手工处理,主要想对相关细节有较深入的了解,后续有机会会尝试用rman简化搭建,生产环境搭建肯定用rman.
---------->>下面是相关脚本(方法好像有点土):
--datafile
scp *.dbf oracle@192.168.11.112:/u01/app/oracle/oradata
--controlfile
scp *.dbf oracle@192.168.11.112:/u01/app/oracle/oradata/arch
--pfile
scp initprimary.ora oracle@192.168.11.112:/u01/app/oracle/product/11.2.0/db_1/dbs/initstandby.ora
--tnsnames.ora
scp tnsnames.ora oracle@192.168.11.112://u01/app/oracle/product/11.2.0/db_1/network/admin/
--orapwdprimary
scp orapwdprimary oracle@192.168.11.112:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwdstandby
包括dump文件目录,闪回区,数据文件目录,可以通过 show parameter dest命令查看(这里都是通过oracle用户创建)
mkdir -p /u01/app/oracle/admin/standby/adump;
mkdir -p /u01/app/oracle/diag/rdbms/standby/standby/trace
mkdir -p /u01/app/oracle/flash_recovery_area
mkdir -p /u01/app/oracle/oradata/standby
修改ip地址
修改后的tnsnames.ora文件内容:
lsnrctl stop
lsnrctl start
[oracle@dg2 admin]$ sqlplus / as sysdba
SQL> shutdown immediate;
vi $ORACLE_HOME/dbs/initstandby.ora
其中标红的部分都是需要调整和备库一致的:
SQL> create spfile from pfile;
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> alter database add standby logfile;
SQL> alter database add standby logfile;
SQL> alter database add standby logfile;
SQL> alter database add standby logfile;
SQL> alter database recover managed standby database using current logfile disconnect from session;
主库备库均执行如下命令:
SQL> archive log list;
主库
备库
如果最后一行数字相同,说明配置成功
SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initstandby.ora';
ORACLE instance started.
Total System Global Area 839282688 bytes
Fixed Size 2217992 bytes
Variable Size 532678648 bytes
Database Buffers 301989888 bytes
Redo Buffers 2396160 bytes
SQL> alter database mount standby database;
Database altered.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> alter system switch logfile;
System altered.
SQL> create table lyl_dept as select * from scott.dept;
Table created.
SQL> alter system switch logfile;
System altered.
---------------------------------->>
SQL> select * from lyl_dept;
select * from lyl_dept
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
SQL> alter database recover managred standby database cancel;
alter database recover managred standby database cancel
*
ERROR at line 1:
ORA-00905: missing keyword
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open read only;
Database altered.
SQL> select * from lyl_dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> alter database recover managed standby database disconnect from session;
Database altered.
----主节点
SQL> alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby
*
ERROR at line 1:
ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
SQL> alter database commit to switchover to physical standby with session shutdown;
SQL> alter database commit to switchover to physical standby with session shutdown;
Database altered.
SQL> startup nomount;
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 839282688 bytes
Fixed Size 2217992 bytes
Variable Size 532678648 bytes
Database Buffers 301989888 bytes
Redo Buffers 2396160 bytes
SQL> alter database mount standby database;
Database altered.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
--备库
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
standby OPEN
SQL> alter database commit to switchover to primary;
Database altered.
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 839282688 bytes
Fixed Size 2217992 bytes
Variable Size 557844472 bytes
Database Buffers 276824064 bytes
Redo Buffers 2396160 bytes
Database mounted.
Database opened.
SQL> show user;
USER is "SYS"
SQL> select * from lyl_dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> delete from lyl_dept where deptno=10;
1 row deleted.
SQL> commit;
Commit complete.
-----顺利完成切换,并可在备库进行正常更新操作.
其实搭建dg不是很难,搭建过程中主要是由于没注意细节,导致在一些环节浪费了不少时间,主要有:
A.创建备库相关目录时名称与主库混淆(比如审计用的adump创建成主库形式的);
B.没相应授权(比如cp到备库中的密码文件由于没有授权导致主备库间不能redo和archivelog传递),查看备库alert日志发现如下内容:
------------------------->>
--------->>也就直接导致了备库的日志序列一直是0,如下示:
C.这问题其实不该有,备库当时为了减少创建目录的方便,创建了一个orcl数据库,后来又删除了,结果忘记了调整.bash_profile文件中的相关信息,导致备库只要启动起来,oracle_sid都是orcl,就连alert日志也写到orcl_alert.log,哈哈哈,看来做较为复杂的事情还是要注意流程、把握细节.
3.14 参考博文
http://blog.itpub.net/29119536/viewspace-1137574/
http://blog.itpub.net/29119536/viewspace-1164928/
http://blog.itpub.net/29119536/viewspace-1148078/
http://blog.itpub.net/29119536/viewspace-1151291/
3.15 感谢
这次搭建过程中得到了不少学友的支持帮助,在此特别感谢,主要有eygle,星落老师,cuug的王楠,还是一个网名为(诗眼倦天涯)的学友.最后good luck everyone!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29734436/viewspace-1226228/ ,如需转载,请注明出处,否则将追究法律责任。