Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

48

主题
1#
发表于 2012-12-19 09:55:45 | 查看: 6132| 回复: 10
本帖最后由 lory 于 2012-12-19 10:11 编辑

OS:linux 32bit redhat as4
db:10.2.0.5

做数据库不完全恢复,在mount状态想查找当前数据库已经恢复到那个SCN
我使用recover database using backup controlfile until cancel
当我应用了第一个log后,如下:

NAME              FIRST_CHANGE# NEXT_CHANGE#
----------------- ------------- ------------


/u01/app/oracle/p        628670       628985
dbs/arch1_1_80243
0454.dbf


SQL> select controlfile_change# from v$database;

CONTROLFILE_CHANGE#
-------------------
             628985

controlfile的change就变为该日志的next_change#
所以我在想,是否从这里查到CONTROLFILE_CHANGE#之后再减去一就是现在db恢复到的scn
当然如果controlfile是在数据文件的backup之后再备份的,那么这个CONTROLFILE_CHANGE#就没有什么参考意义了
2#
发表于 2012-12-19 12:44:55
v$datafile_header看看是否可以

回复 只看该作者 道具 举报

3#
发表于 2012-12-19 13:27:08
本帖最后由 lory 于 2012-12-19 16:31 编辑

如果数据库已经恢复至一致性,那么v$datafile_header和controlfile_change#是一样的。
如果没有一致,那么datafile_header的change#是不一样的

只是觉得奇怪,我只应用了一个log,但是controlfile_change#就变成下一个日志的first_change#

回复 只看该作者 道具 举报

4#
发表于 2012-12-19 16:32:59
本帖最后由 lory 于 2012-12-19 16:35 编辑

主要是为了在goldengate 初始化replicat同步的时候,到底用这个scn是用atcsn还是aftercsn

请大家帮忙看一下这个帖子的问题

回复 只看该作者 道具 举报

5#
发表于 2012-12-20 21:45:46
在我们数据初始化过程中,在启动目标replicat进程时,会加上aftercsn这个参数,而为什么不用atcsn呢?
经过测试,结果如下:
1、        如果取的scn正好是对应commit操作
(1)        如果使用atcsn ,经过测试,replicat会把这个commit之前同一个事物相关的操作进行一次追加,这样就会有问题,此时rman恢复的时候,会恢复这个事物,replicat又重新做了一遍这个事物,这样会多出一遍操作,导致数据不一致;
(2)        如果使用aftercsn ,经过测试,replicat只会追这个commit消息以后的事物,此时rman恢复的时候,会恢复这个事物,replicat做的是后面的事物,所以数据是能接上的,数据保持一致;

2、        如果取的scn对应的是非commit操作
此时比较简单,经过测试,不管是用atcsn或aftercsn,replicat都会把跨越这个scn号未完成的事物追加上去,此时rman恢复的时候会回滚这个事物,但是replicat可以追加这个事物,所以数据是能接上的,保持一致;

所以综上所述,使用aftercsn是安全的,不管哪种情况都可以保持数据的一致。
lory 发表于 2012-12-25 16:40
刘大,能告诉我你说的有commit操作的测试是怎么做的吗
6#
发表于 2012-12-21 14:58:07
很感谢你详细的解释。
刚才读了你的这个帖子:
recover database until scn 100 ,
http://t.askmaclean.com/forum.ph ... 419&fromuid=820
如果用RMAN做了point in time recover,使用until change 恢复至某一个scn 比如123。
是否是应该应该使用after scn 123如开启replicat

因为until change 并不会包含123的数据变化,所以如果用after scn 123是不是就少了数据呀

回复 只看该作者 道具 举报

7#
发表于 2012-12-21 16:27:12
上面已经说明了 afterscn是安全的!

回复 只看该作者 道具 举报

8#
发表于 2012-12-26 17:16:51
刘大,我做了一个测试,不知道有没有漏什么东西。我觉得在以下场景是用atcsn。
还麻烦赐教一下,非常感谢

场景是这样的:我想从一个(source db)windows 2003 32 bit,oracle 9.2.0.4的库上用goldengate复制一个表至(target DB)
windows 2008 64 bit oracle 10.2.0.5的库上面

source db 测试表在如下建立
create table test as select * from user_objects;

SQL> col object_name format A10
SQL> r
  1* select object_name,object_type from test

OBJECT_NAM OBJECT_TYPE
---------- ------------------
TEST          TABLE
TEST       TABLE

然后做修改
update test set object_name='Q' where rownum=1;
commit;
alter system switch logfile;
update test set object_type='O' where object_name='Q';
commit;

用logmnr在第一次update的og里面查看commit scn是多少

SQL> select scn,cscn,rollback,operation_code from v$logmnr_contents where SEG_NA
ME='TEST';

       SCN       CSCN   ROLLBACK OPERATION_CODE
---------- ---------- ---------- --------------
    248651     248654          0              3

然后在第三个环境里面做source db做不完全恢复至scn 248654
即使用recover database until scn 248654;

完成后查看test表,其资料并没有修改


select object_name,object_type from test

OBJECT_NAM OBJECT_TYPE
---------- ------------------
TEST          TABLE
TEST       TABLE
将test表导出,然后导入tarhet db

在targetdb 开启replicat 使用aftercsn 248654
但是会出现错误SQL error 1403 mapping TEST.TEST to TEST.TEST

关闭replicat,修改读检查点,重新开启replicat 用atcsn 248654。复制正常

回复 只看该作者 道具 举报

9#
发表于 2012-12-27 13:38:45
desc test     any unique index?
info trandata test

回复 只看该作者 道具 举报

10#
发表于 2012-12-27 14:56:46
没有唯一索引哟
GGSCI (SFCTEST1) 69> dblogin userid gguser
Password:
Successfully logged into database.

GGSCI (SFCTEST1) 70> info trandata test.test

Logging of supplemental redo log data is enabled for table TEST.TEST

GGSCI (SFCTEST1) 71>

回复 只看该作者 道具 举报

11#
发表于 2012-12-27 14:58:03
SQL> select count(*) from dba_log_groups;

  COUNT(*)
----------
         1

SQL> desc test.test
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------

OBJECT_NAME                                        VARCHAR2(128)
SUBOBJECT_NAME                                     VARCHAR2(30)
OBJECT_ID                                          NUMBER
DATA_OBJECT_ID                                     NUMBER
OBJECT_TYPE                                        VARCHAR2(18)
CREATED                                            DATE
LAST_DDL_TIME                                      DATE
TIMESTAMP                                          VARCHAR2(19)
STATUS                                             VARCHAR2(7)
TEMPORARY                                          VARCHAR2(1)
GENERATED                                          VARCHAR2(1)
SECONDARY                                          VARCHAR2(1)

SQL>

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 04:14 , Processed in 0.048615 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569