Data Guard搭建困境突围(一)

    在Oracle 10g的中搭建Data Guard环境真是一个纠结,目前大体都是采用两种方式,一种是rman备份,一种是duplicate的方式,但是这两个地方不够让我满意,一来是rman备份数据量不小,需要先在本地生成备份,然后拷贝到备库去,这个搭建周期略长,另外一个就是推荐的方式duplicate,在10g中有些鸡肋的味道,本地备份,然后拷贝到备库,然后动用duplicate的方式,这样的方式还不如手工rman的方式同步来得顺心顺意,所以在10g中我是不怎么喜欢duplicate方式。当然11g终于改进了一把,这种方式成了我搭建Data Guard的不可之选。
     最近碰到一个比较纠结的问题就是在主备库空间资源不足的情况下,如何在10g版本中顺利搭建Data Guard环境。大体的情况如下:

    主备库的文件分布略有一些差别,数据库数据量大概在800G左右,数据库版本为10gR2.
这让我很纠结,到底该怎么处理,一来是文件的路径映射,至少Oracle的convert参数还处理不了这么智能,如何这么平均的分配空间和数据。所以哪怕备库的空间总量够,我还是悬着心,这个需求至少通过rman的异机恢复还是有难度。那么试试duplicate,当然我们知道文件路径可以重新修改,所以主要的问题还是在于空间,10g的duplicate需要在主库端生成备份集,然后在备库开启duplicate选项而已。所以实现起来还是有难度。
    Oracle如何通过rman的方式实现远程备份,这是个难题,如果是在11g可能这个问题就能够大大化和,在10g上如何突围呢。
假设数据库主库为primary,备库为standby
则我在备库尝试使用下面的方式,我们在/home/oracle/下创建一个临时目录tmp,看看到底能够在备库环境生成。
rman target sys/oracle@primary
COPY DATAFILE 1 to '/home/oracle/tmp/system01.dbf';
运行时提示文件无法创建,因为在服务器主库环境没有这个目录。所以初战失败。
然后尝试使用duplicate的方式。
rman target sys/oracle@primaryauxiliary sys/oracle@standby nocatalog
这种方式是我们一直使用的方式,当然这种方式没有给我带来任何惊喜,依旧是在当前环境不大适合。
在备库端我们可以这么试试。
rman target sys/oracle@standby auxiliary sys/oracle@primary  nocatalog
COPY DATAFILE 1 to '/home/oracle/tmp/system01.dbf';
这种方式就可以顺利在备库端生成系统表空间的数据文件了。
所以我们的改进方式就是参考这个主要的 解决思路。
当然我们可以在主库生成相应的命令,直接批量执行即可。假设我们存在下面的数据文件。
 select 'copy datafile '||file_id ||' to '||chr(39)||file_name ||chr(39)||';'from dba_data_files;
copy datafile 4 to '/U01/app/oracle/oradata/newtest2/users01.dbf';
copy datafile 3 to '/U01/app/oracle/oradata/newtest2/undotbs01.dbf';
copy datafile 2 to '/U01/app/oracle/oradata/newtest2/sysaux01.dbf';
copy datafile 1 to '/U01/app/oracle/oradata/newtest2/system01.dbf';
copy datafile 5 to '/U01/app/oracle/oradata/newtest2/users2.dbf';
copy datafile 6 to '/U01/app/oracle/oradata/newtest2/fbarch01.dbf';
以其中的两个数据文件为例,日志如下:
RMAN> copy datafile 5 to '/home/oracle/tmp/users2.dbf';
Starting backup at 2016-09-09 22:46:30
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/U01/app/oracle/oradata/newtest2/users2.dbf
output file name=/home/oracle/tmp/users2.dbf tag=TAG20160909T224630 RECID=28 STAMP=922142791
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-09-09 22:46:32

RMAN> copy datafile 6 to '/home/oracle/tmp/fbarch01.dbf';
Starting backup at 2016-09-09 22:46:39
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/U01/app/oracle/oradata/newtest2/fbarch01.dbf
output file name=/home/oracle/tmp/fbarch01.dbf tag=TAG20160909T224639 RECID=29 STAMP=922142800
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-09-09 22:46:40
在主备库数据文件路径的情况下,就批量生成一个文件就可以立刻在备库使用。如果确认生成没有问题,直接拷贝覆盖原来备库文件,或者直接替换已有的备库数据文件即可。
DGMGRL> show configuration;
Configuration - dg_newtest2
  Protection Mode: MaxPerformance
  Databases:
    primaryxx- Primary database
    standbyxx- Physical standby database
Fast-Start Failover: DISABLED
Configuration Status
SUCCESS
在10g中其实已经可以这样使用duplicate的方式来,但是Oracle却没有建议这么用,我觉得主要的考虑还是安全吧。
10g中这样用: Duplicate target database for standby nofilenamecheck ;
11g中这样用:Duplicate target database for standby from active database nofilenamecheck
可以看出主要的差别还是一个active的字样,我看到有很多人搭建Data Guard在主库端duplicate,这样在10g就很不规范而且有一定的风险。
尽管在11g做了这样的改进,但是还是很容易混淆关系,这也是我猜测的原因,当然手头的工作就是尝试在这种情况下尽快使用新方案搭建Data Guard环境。
当然对于很多老司机来说,这已经不是什么新方法了。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
【故障处理】队列等待之 TX - allocate ITL entry 引起的死锁处理 1    BLOG 文档结构图       2    前言部分 2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ① enq: TX - allocate ITL entry 等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 ④  ITL 死锁解决 ⑤  ITL 死锁模拟 ⑥  Merge 语句的非关联形式的查
【技巧】如何使用客户端发布 BLOG+ 如何快速发布微信公众号文章   1    BLOG 文档结构图     2    前言部分   2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ①  如何使用客户端发布 BLOG (重点) ②  如何快速发布微信公众号文章 ③  如何批量上传图片到blog ④  如何批量上传图片到微信公众号上     Tips: ① 本文在 itpub ( http://blog.itpu

降低高水位线的方法 - 2016-09-13 14:09:09

准备工作,创建一张表: CREATE TABLE TEST2 (     ID    NUMBER(10),     NAME  VARCHAR2(32) ); 1、移动表: SQL begin   2  for i in 1..10000 loop   3  insert into test2 values(i,'bbb');   4  end loop;   5  commit;   6  end;   7  / PL/SQL procedure successfully completed. SQL
预备知识: 1)row cache lock事件   --内存share pool分为library cache,dictionary cache;而row cache lock对象分布在dictionary cache中,是由于对于字典缓冲的访问造成的;   --这类属于latch类的资源竞争,相当耗CPU,如果并发量大的话,容易down机 如果发现这个等待十分高,一般来说可能由于2种原因,一是共享池太小了,需要增加共享池,另外一种情况是SQL分析过于频繁,对于共享池的并发访问量过大。对于任何一种情况,绝
【故障处理】队列等待之 TX - allocate ITL entry 案例 1    BLOG 文档结构图       2    前言部分 2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ① enq: TX - allocate ITL entry 等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 Tips: ① 本文在 ITpub ( http://blog.itpub.net/267361
Oracle 一次缩小表空间的处理过程 1    BLOG 文档结构图       2    前言部分 2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ①  收缩表空间的几种办法 ② 表空间大小查询 ③  AIX 下查询磁盘空间大小的 shell 脚本 ④ 删除数据文件的正确方法 ⑤  ORA-03262 处理 ⑥ 缩小数据文件 ⑦  su - grid asmcmd lsdg 的使用 ⑧ 其他常用命令   Ti
等待事件系列(1)--User I/O类型(上) 全文可参考: http://www.cnblogs.com/lhrbest/articles/5835420.html   1    BLOG 文档结构图     2    前言部分   2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ①  等待事件系列(1)--User I/O类型     Tips: ① 本文在 ITpub ( http://blog.itpu
等待事件系列(1) --User I/O 类型(下) 全文可参考: http://www.cnblogs.com/lhrbest/articles/5835420.html   1    BLOG 文档结构图   6.3      d b file parallel read SELECT   * FROM    v$event_name WHERE    NAME   IN   ( 'db file parallel read' );   在 V$SESSION_WAIT这个视图里面,这个等待事件有三个

mysql存储过程小试牛刀 - 2016-09-03 14:09:13

(1). 格式 MySQL 存储过程创建的格式: CREATE PROCEDURE 过程名 ([ 过程参数 [,...]]) [ 特性 ...] 过程体 这里先举个例子: mysql DELIMITER //   mysql CREATE PROCEDURE proc1(OUT s int)     - BEGIN      - SELECT COUNT(*) INTO s FROM user;       - END      - //   mysql DELIMITER ;    注: ( 1 )这里
【故障处理】队列等待之 enq: TX - row lock contention 1    BLOG 文档结构图   2    前言部分 2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ① enq: TX - row lock contention 等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 ④  ADDM 的使用 ⑤ 如何获取历史执行计划 ⑥ 查询绑定变量的具体值 ⑦ 很多有用的查询性