设为首页 收藏本站
查看: 995|回复: 0

[经验分享] Linux Oracle 11g dataguard物理standby 配置过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-19 09:03:14 | 显示全部楼层 |阅读模式
这两天研究了下oracle 11g dataguard 物理standby 功能,总体来说这个功能满足公司需求,好了,不多说了,以下是详细的配置过程。
QQ截图20150619090324.png
数据库的安装可以参考之前写的六步搞定Linux Oracle 11gR2 配置安装
注意:分别在主库和备库都安装上oracle软件,不装数据库。
主库:
1
2
3
4
5
IP:192.168.77.5
主机名:nod1
ORACLE_SID=test
ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1



备库

1
2
3
4
5
IP:192.168.77.10
主机名:nod2
ORACLE_SID=test
ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1



安装配置步骤:
1、主库运行dbca创建数据库(安装过程中需要注意:先关掉flash recovery),数据库名为test
2、登陆到数据库上
1
2
3
4
5
6
7
8
9
[oracle@nod1 ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 11 20:31:09 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba;
Connected.
SQL>



3、将主库设置为 FORCE LOGGING 模式

1
2
3
SQL> ALTER DATABASE FORCE LOGGING;

Database altered.



4、创建一个密码文件,如果数据库是用dbca创建的则会在$ORACLE_HOME/dbs/下自动创建一个叫orapwdSID的一个密码文件。(否则可以用orapwd命令创建一个)。
5、配置Standby Redo Log。创建组数至少要比主库的online redo log组数多一个。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
SQL> select group#,bytes from v$log;

GROUP#      BYTES
---------- ----------
1   52428800
2   52428800
3   52428800

这里创建4组
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/oracle/app/oracle/oradata/test/stdbyredo01.log') SIZE 52428800;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/oracle/app/oracle/oradata/test/stdbyredo02.log') SIZE 52428800;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/oracle/app/oracle/oradata/test/stdbyredo03.log') SIZE 52428800;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/oracle/app/oracle/oradata/test/stdbyredo04.log') SIZE 52428800;

验证一下创建是否成功
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
4          0          0 YES UNASSIGNED
5          0          0 YES UNASSIGNED
6          0          0 YES UNASSIGNED
7          0          0 YES UNASSIGNED

Database altered.

如果想删除某个组可以用下面的命令
SQL> alter database drop standby logfile group 4;
如果给某个组添加成员可以用下面命令
SQL> ALTER DATABASE ADD STANDBY LOGFILE MEMBER '/oracle/app/oracle/oradata/test/stdbyredo04_1.log' TO GROUP 7;
删除组中的成员用以下命令
SQL> ALTER DATABASE DROP STANDBY LOGFILE MEMBER '/oracle/app/oracle/oradata/test/stdbyredo04_1.log';

Database altered.

SQL> host rm -f /oracle/app/oracle/oradata/test/stdbyredo04_1.log



6、检查数据库是否处于归档状态
1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /oracle/app/oraclearch_log
Oldest online log sequence     1
Next log sequence to archive   2
Current log sequence           2

如果不是处于归档状态则运行下面命令
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;



7、创建备库的控制文件(创建后数据库不能做结构性的改变)
1
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/oracle/app/oracle/oradata/test/stdby.ctl';



8、创建pfile以便于修改配置参数
1
SQL> CREATE PFILE='/oracle/app/oracle/oradata/test/pfile' FROM SPFILE;



9、关掉数据库开始编辑参数
1
SQL> shutdown immediate;



10、编辑porfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ vi /oracle/app/oracle/oradata/test/pfile
添加下面内容
DB_UNIQUE_NAME=nod1
LOG_ARCHIVE_CONFIG='DG_CONFIG=(nod1,nod2)'
LOG_ARCHIVE_DEST_2=
'SERVICE=nod2 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=nod2'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=nod2
FAL_CLIENT=nod1
DB_FILE_NAME_CONVERT='nod2','nod1'
STANDBY_FILE_MANAGEMENT=AUTO



11、进入sqlplus创建pfile(NOMOUNT状态)
1
SQL> CREATE SPFILE from PFILE='/oracle/app/oracle/oradata/test/pfile';



12、创建tnsnames.ora和listener.ora,可以手动创建也可以用netca创建,无论哪种方法都必须保证能互相畅通。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ vi tnsnames.ora
输入下面内容
nod2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.77.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test)
)
)

nod1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.77.5)(PORT = 1521))
(CONNECT _DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)


$ vi listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = test)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
(PROGRAM = extproc)
)
(SID_DESC =
                           (GLOBAL_DBNAME = test)
(SID_NAME = test)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = nod2)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)



13、复制备份文件到备库
1
2
3
4
5
6
$ cd /oracle/app/oracle
$ scp -r arch_log/ admin/ oradata/ 192.168.77.10:/oracle/app/oracle
$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ scp listener.ora  tnsnames.ora 192.168.77.10:/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/dbs/
$ scp orapwtest 192.168.77.10:/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/



14、打开备库做以下操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ cd /oracle/app/oracle/oradata/test/
$ rm -rf control0*
$ cp stdby.ctl control01.ctl
$ cp stdby.ctl control02.ctl
$ cp stdby.ctl control03.ctl


$ vi pfile 对相应文件做修改
DB_UNIQUE_NAME=nod2
LOG_ARCHIVE_CONFIG='DG_CONFIG=(nod1,nod2)'
LOG_ARCHIVE_DEST_2=
'SERVICE=nod1 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=nod1'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=nod1
FAL_CLIENT=nod2
DB_FILE_NAME_CONVERT='nod2','nod1'
STANDBY_FILE_MANAGEMENT=AUTO


$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
$ vi listener.ora
将nod1修改为nod2



15、在备库中进入sqlplus
1
2
3
4
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> CREATE SPFILE from PFILE='/oracle/app/oracle/oradata/test/pfile';
SQL>shutdown immediate; 



16、测试oracle net是否畅通
1
2
3
4
5
6
首先启动监听服务(分别在主机和备机上进行)
$ lsnrctl stop
$ lsnrctl start
分别在主机和备机上运行下面命令来测试
$ tnsping nod1
$ tnsping nod2



17、启动主库(正常启动)
1
2
3
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup



18、启动备库到mount状态,并打开redo Apply
1
2
3
4
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup mount
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;



19、在主库上做一次日志切换
1
SQL> ALTER SYSTEM SWITCH LOGFILE;



20、分别在主库和备库上做下列查询,检查归档日志是否由主库传送到备库
1
2
3
4
5
6
7
8
9
10
以下语句可以查看日志应用情况
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG  ORDER BY SEQUENCE#;

SEQUENCE# APP
---------- ---
2 YES
3 YES


如果出现上面情况则说明配置成功。



进行数据测试
1、在主 库建表然后在备库查询进行验证
1
2
3
4
5
6
7
8
SQL> create table nod2(id integer,name char(10))
SQL> insert into nod2 values(1,'nod1');
SQL> commit;
SQL> select * from nod2;

ID NAME
---------- ----------
1 nod1



2、在主库上做个日志归档
1
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;



3、在备库上取消掉redo apply
1
2
3
4
5
6
7
8
9
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN;
SQL> select * from nod2;

ID NAME
---------- ----------
1 nod1

测试成功




4、再次切换为备库的redo apply状态
1
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;



注意:
此步骤在切换成功后,要进行主机HOST的相应配置,要不然在日志切换时会报错,

5、在主库上做如下sql语句
1
2
3
4
5
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> shutdown immediate;
SQL> startup nomount;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT;



6、在备库上做switchover
1
2
3
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SQL> shutdown immediate;
SQL> startup



7、分别在新的主库和备库上查看状态,验证主库备库是否切换正常。
1
SQL> select name,database_role from v$database;



再次创建表在切换后的主库备库上验证
8、在新的主库上创建表
SQL> create table nod1(id integer,name char(10));
SQL> insert into nod1 values(111,'haha');
SQL> commit;
SQL> select * from nod1;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
9、在新的备库上做下面操作以取消redo apply
1
2
3
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN;
SQL> select * from nod1;



10、恢复新备库为redo apply状态
以上是dataguard的配置过程,如何让数据实时同步,我们将在下篇进行讨论

1
2
3
4
5
6
7
8
9
10
11
12
维护

1、开机顺序,先备库的listener再启动备库。再启动主库的listener,再启动主库。
2、关机顺序,先关闭主库,再关闭备库

附上实时查看日志同步日志,可以查看问题所在

tail -f /oracle/app/oracle/diag/rdbms/nod1/test/trace/alert_test.log

stanby上检查应用率和活动率(Ps)
SQL>select to_char(start_time,'dd-mon-rr hh24:mi:ss') start_time,item,sofar from V$recovery_progress where item in ('Active Apply Rate', 'Average Apply Rate','Redo Applied');
Redo Applied值以MB衡量,而Active Apply Rate和Average Apply Rate以KB/s计算。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-78682-1-1.html 上篇帖子: Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置 下篇帖子: 六步搞定Linux Oracle 11gR2 配置安装 standby Oracle Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表