情况说明:做oracle10g的物理dataguard,已经实现了dataguard框架,sequence#序列也已一致。但是数据同步必须在主库上执行alter system switch logfile,我在主库上做的修改(写入很多条数据),才能在备库上查询得到。请问这是什么原因啊? 

解决方案 »

  1.   

    主库只有在日志切换之后才会将日志传到备库,当你的日志没有写满自然不会切换了,楼主只要alter system switch logfile后,同步了,standby就没有问题了。还有一点,日志虽然穿过去了,但不一定应用了,所以楼主最好查看下:select name,sequence#,applied from v$archived_log;如果applied为YES,就OK了.. 
    这个applied是要一定时间的.如果楼主刚alter system switch logfile,可能从备库查出来的为no,过一会查就为yes了..
      

  2.   


    测了几万条,日志没写满的的话也不会切换的,不知楼主是如何测试的?standby本身就是保护数据丢失的一种策略,这个数据丢失不是很大。
    在主库宕掉的情况把,把归档日志考到备库recovery一下,在切换,这种切换方法在理论上是没有数据丢失的.. 这个和版本没有区别吧..
      

  3.   

    楼主用的是最大性能模式吧,如果想什么都不丢可以切换到最大保护模式
    但是要慎重,因为这个对主库有很大的影响SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database
    你可以用这个查看你的模式最后建议楼主用最大性能模式,然后修改checkpoint的时间间隔可以保证你只丢掉客户容忍的时间范围的数据
      

  4.   

    再补充一点:
    曾经测试过最大保护模式,可以肯定的说,这个基本没法用在生产库上,因为standby库坏了,主库就挂起了,客户会骂死你......
    折中的最大可用模式,你可以试试
    最完美的就是最大性能模式+脚本实现日志切换,这样你可以问客户容忍的丢失数据时间段,比如说20分钟之内的可以丢失,那么就20分切换一次.
      

  5.   

    首先,谢谢tianlesoftware和jinxino_o的回复。
    是采用的最大性能模式,我又测过了要日志写了40多M时,才生成一个归档日志(写满)
    这个应该可以通过设置日志大小来调整,默认的logfile太大了。
    to jinxino_o:通过设置checkpoint的时间间隔(就是脚本吧),就是定时去alter system switch logfile;主动生成归档日志么
      

  6.   

    是我没表达清楚,抱歉
    checkpoint调整时间间隔,主要是为了适应你切换日志的脚本
    你可以写一个简单的脚本,只运行alter system switch logfile;
    然后放到定时任务里,通过定时任务来控制时间,比如说20分切换一次,在unix下你可以使用crontab来达到这个目的.
    logfile文件的大小和数量直接影响的库的性能,建议你根据性能来调整logfile文件的大小和数量,不要只考虑standby
      

  7.   

    了解了
    感谢jinxino_o分享经验