一步一步学DataGuard(13)逻辑standby之创建示例

假设当前架构为一个primary+二个物理standby,我们转换其中一个物理standby成为逻辑standby,专用于查询服务,另一个物理standby用于执行备份操作及提供灾备。这里我们直接借用之前创建的物理standby,只演示创建过程,我们假设当前primary数据库状态良好,没有任何不被逻辑standby支持的对象或类型。

为了方便区分当前操作的数据库,我们设置一下操作符:

SQL> set sqlprompt JSSWEB>    --表示primary数据库

SQL> set sqlprompt JSSPDG>    --表示物理standby

SQL> set sqlprompt JSSLDG>    --表示逻辑standby

一、创建物理standby

此步跳过,如有不明,具体可参考第二部分。

提示:表忘记暂停该standby的redo应用

JSSLDG>alter database recover managed standby database cancel;

数据库已更改。

二、设置primary数据库

由于有前期创建物理standby时的基础,此处primary数据库的初始化参数可以不做修改,最重要的是不要忘记生成LogMiner字典信息。

JSSWEB>execute dbms_logstdby.build;

PL/SQL 过程已成功完成。

三、转换物理standby为逻辑standby

执行下列语句,转换物理standby为逻辑standby:

JSSLDG>show parameter db_name;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_name                              string      jssweb

JSSLDG>alter database recover to logical standby jssldg;

数据库已更改。

JSSLDG>shutdown immediate

ORA-01507: 未装载数据库

ORACLE 例程已经关闭。

JSSLDG>startup mount;

ORACLE 例程已经启动。

Total System Global Area  167772160 bytes

Fixed Size                  1289484 bytes

Variable Size              79692532 bytes

Database Buffers           79691776 bytes

Redo Buffers                7098368 bytes

数据库装载完毕。

JSSLDG>show parameter db_name;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_name                              string      JSSLDG

JSSLDG>select database_role from v$database;

DATABASE_ROLE

----------------

LOGICAL STANDBY

四、重建逻辑standby的密码文件

E:/ora10g>orapwd file=e:/ora10g/product/10.2.0/db_1/database/PWDjssldg.ora password=verysafe entries=30

注意保持sys密码与primary数据库一致。

五、调整逻辑standby初始化参数

注意归档文件路径不要冲突:

JSSLDG>alter system set log_archive_dest_1='location=E:/ora10g/oradata/JSSLDG/arc/ valid_for=(online_logfiles,all_roles) db_unique_name=JSSLDG';

系统已更改。

JSSLDG>alter system set log_archive_dest_2='location=E:/ora10g/oradata/JSSLDG/std/ valid_for=(standby_logfiles,standby_role) db_unique_name=JSSLDG';

系统已更改。

另外,由于之前我们创建JSSLDG时并未创建standby redologs,但对于逻辑standby的sql应用,standby redologs是必须的,因此我们在此处也要为该standby创建几组standby redologs:

JSSLDG>alter database add standby logfile group 4 ('E:/ora10g/oradata/JSSLDG/standbyrd01.log') size 20m;

数据库已更改。

JSSLDG>alter database add standby logfile group 5 ('E:/ora10g/oradata/JSSLDG/standbyrd02.log') size 20m;

数据库已更改。

JSSLDG>alter database add standby logfile group 6 ('E:/ora10g/oradata/JSSLDG/standbyrd03.log') size 20m;

数据库已更改。

JSSLDG>select member from v$logfile;

MEMBER

----------------------------------------------------------

E:/ORA10G/ORADATA/JSSLDG/REDO01.LOG

E:/ORA10G/ORADATA/JSSLDG/REDO02.LOG

E:/ORA10G/ORADATA/JSSLDG/REDO03.LOG

E:/ORA10G/ORADATA/JSSLDG/STANDBYRD01.LOG

E:/ORA10G/ORADATA/JSSLDG/STANDBYRD02.LOG

E:/ORA10G/ORADATA/JSSLDG/STANDBYRD03.LOG

已选择6行。

六、打开逻辑standby

由于逻辑standby与primary数据库事务并不一致,因此第一次打开时必须指定resetlogs选择,如下:

SQL> alter database open resetlogs;

数据库已更改。

然后执行下列sql命令应用redo数据:

SQL> alter database start logical standby apply immediate;

数据库已更改。

七、检查一下

首先在primary数据库执行:

JSSWEB> select *from jss.b;

        ID

----------

         1

         2

         3

已选择3行。

JSSWEB> insert into jss.b values (4);

已创建 1 行。

JSSWEB> insert into b values (5);

已创建 1 行。

JSSWEB> insert into b values (6);

已创建 1 行。

JSSWEB> commit;

提交完成。

JSSWEB> alter system switch logfile;

系统已更改。

查询物理standby的同步情况,由于物理standby处于mount状态,无法直接查询,因此我们需要先暂停redo应用,然后以read only模式打开数据库再执行查询:

JSSPDG>alter database recover managed standby database cancel;

数据库已更改。

JSSPDG>alter database open read only;

数据库已更改。

JSSPDG>select * from jss.b;

        ID

----------

         1

         2

         3

         4

         5

         6

已选择6行。

查询逻辑standby的同步情况:

JSSLDG>select * from jss.b;

        ID

----------

         1

         2

         3

         4

         5

         6

已选择6行。

提示:细心观察,发现逻辑standby有一点很好,从primary接收到的redo文件,应用过之后会自动删除,节省磁盘空间。

Ok,逻辑standby也创建完成了,我们再回过头来回忆回忆我们最开始的假设:

对于相机拍照而言,有种傻瓜相机功能强大而操作简便,而对于素描,即使是最简单的画法,也需要相当多的练习才能掌握。这个细节是不是也说明逻辑standby相比物理standby需要操作者拥有更多的操作技能呢?

现在看起来,操作呢相比物理standby是稍稍复杂了一点点,但机理呢与物理standby大同小异,功能呢也不见的就比物理standby强到哪里,主要是前期准备工作略嫌繁琐(尤其你的数据库系统比较宏大时,毕竟有那么多支持和不支持的数据类型/操作/语句需要dba手工处理),这么看来,画画的仿佛是要比搞摄影的更讲究基本功啊,不过事物要辩证着看,爱好摄影的朋友千万莫因此而感/到沮丧,从实用角度看,搞摄影不知要比画画强多少倍啊,效率在那摆着呢,要出片子按下快门就成啦!对于standby也是如此,你究竟是想要物理的,还是想要逻辑的呢,这是个问题~~~~~ 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值