楼主: it_horse

[精华] 我想问一下:Recovery through resetlogs 的内部机理是什莫?

[复制链接]
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB技术丛书作者
日期:2010-09-26 15:24:56
51#
发表于 2003-4-11 12:36 | 只看该作者
最初由 coolyl 发布
[B]

可是我用rman的时候是备份了控制文件的,不用catalog也无所谓啊。 [/B]


关键是resetlogs点之后要备份控制文件,因为从B恢复到C就指望它了,呵呵

使用道具 举报

回复
论坛徽章:
16
2010数据库技术大会纪念徽章
日期:2010-05-13 10:04:27ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:01管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:18马自达
日期:2014-01-27 11:47:11
52#
发表于 2003-4-11 13:05 | 只看该作者

Re: Re: Re: SVRMGR> recover database until cancel

最初由 biti_rainy 发布
[B]

这个原理早就理解了:

模拟 "在resetlogs打开数据库之前刚刚作的备份",也就是模拟B点的数据库状态来继续恢复到C点

只不过,对备份与恢复不是很理解或者不曾去做过的时候
这种抽象的描述始终不容易理解

我再重复我的两个观点,不知道大家有没有什么意见

不过就我的理解
1: resetlogs以前的不完全恢复,只能恢复到 归档日志的范围之内(防止resetlogs 丢失 online log)
2:其实控制文件是否完好并不是很重要,完全手工创建控制文件也应该可以,因为新的控制文件一样可以做不完全恢复或者完全恢复,如果控制文件都不存在的话,不过是要 创建2次控制文件罢了(参考丢失控制文件的完全恢复) [/B]



对于第二点如果你要用rman做的话控制文件就不能用重建的方法,因为rman的备份信息都保存在当前的控制文件中了,重建是不行的

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
53#
发表于 2003-4-11 13:23 | 只看该作者

RMAN

如果使用 恢复目录的话还是可能的

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
54#
发表于 2003-4-11 13:55 | 只看该作者

我就等你的重建控制文件的测试结果了

使用道具 举报

回复
论坛徽章:
16
2010数据库技术大会纪念徽章
日期:2010-05-13 10:04:27ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:01管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:18马自达
日期:2014-01-27 11:47:11
55#
发表于 2003-4-11 15:53 | 只看该作者
偶已经做过试验了,呵呵,还是比较成功的,证明重建控制文件也是可以恢复数据的,具体的过程如下:

先做一个数据库的冷备,我没有备份控制文件。

SQL> conn / as sysdba
已连接到空闲例程。
SQL>
14:34:59 SQL> startup
ORACLE 例程已经启动。

Total System Global Area   89201304 bytes
Fixed Size                   453272 bytes
Variable Size              62914560 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
14:38:45 SQL> create table test as select * from dba_users;

表已创建。

已用时间:  00: 00: 01.04
14:38:58 SQL> select count(*) from test;

  COUNT(*)
----------
         5

已用时间:  00: 00: 00.00
14:39:05 SQL> alter system switch logfile;

系统已更改。

已用时间:  00: 00: 00.09
14:39:16 SQL> /

系统已更改。

已用时间:  00: 00: 01.00
14:39:18 SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            D:\oracle\oradata\orcl9\archive
最早的概要日志序列     1
下一个存档日志序列   3
当前日志序列           3
14:39:29 SQL> shutdown abort  
模拟数据库崩溃。

14:39:34 SQL> @g:\control.sql
ORACLE 例程已经启动。

Total System Global Area   89201304 bytes
Fixed Size                   453272 bytes
Variable Size              62914560 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes

控制文件已创建

已用时间:  00: 00: 03.04
14:48:37 SQL> recover database until time '2003-04-11 14:38:45';
完成介质恢复。
14:49:05 SQL> alter database open resetlogs;

数据库已更改。

已用时间:  00: 00: 11.02
14:49:47 SQL> select count(*) from test;
select count(*) from test
                     *
ERROR 位于第 1 行:
ORA-00942: ???????


已用时间:  00: 00: 00.01
14:50:33 SQL> create table test as select * from dba_users;

表已创建。

已用时间:  00: 00: 01.00
14:54:14 SQL> shutdown abort
ORACLE 例程已经关闭。
再次模拟数据库崩溃
14:56:19 SQL> @g:\control.sql
ORACLE 例程已经启动。

Total System Global Area   89201304 bytes
Fixed Size                   453272 bytes
Variable Size              62914560 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
CREATE CONTROLFILE REUSE DATABASE "ORCL9" NORESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01189: ????????????? RESETLOGS
ORA-01517: ????: 'D:\ORACLE\ORADATA\ORCL9\REDO01.LOG'
已用时间:  00: 00: 03.01

这里发现重建控制文件需要用resetlogs,不知道为什么???[/COLOR]
15:04:48 SQL> shutdown abort
ORACLE 例程已经关闭。
修改重建控制文件脚本,把noresetlogs改为resetlogs重建成功。
15:06:43 SQL>  @g:\control.sql
ORACLE 例程已经启动。

Total System Global Area   89201304 bytes
Fixed Size                   453272 bytes
Variable Size              62914560 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes

控制文件已创建

已用时间:  00: 00: 04.03
15:06:56 SQL> shutdown immediate
ORA-01109: ??????


已经卸载数据库。
ORACLE 例程已经关闭。
15:07:16 SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area   89201304 bytes
Fixed Size                   453272 bytes
Variable Size              62914560 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
15:09:07 SQL>  recover database until time '2003-04-11 14:38:45';
ORA-00283: 恢复会话因错误而取消
ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

15:10:55 SQL> recover database using backup controlfile until time '2003-04-11 14:38:45';
ORA-00279: 更改 104623 (在 04/11/2003 14:27:23 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_1.DBF
ORA-00280: 更改 104623 对于线程 1 是按序列 # 1 进行的


15:11:11 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

已应用的日志。
完成介质恢复

15:11:20 SQL> shutdown immediate
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
15:11:48 SQL> @g:\control.sql
ORACLE 例程已经启动。

Total System Global Area   89201304 bytes
Fixed Size                   453272 bytes
Variable Size              62914560 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes

控制文件已创建

已用时间:  00: 00: 03.05
15:13:05 SQL> recover database;
ORA-00283: ??????????
ORA-01610: ?? BACKUP CONTROLFILE ??????????


15:13:14 SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 104743 (? 04/11/2003 14:38:45 ??) ???? 1 ????
ORA-00289: ??: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_1.DBF
ORA-00280: ?? 104743 ???? 1 ???? # 1 ???


15:15:06 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 104779 (? 04/11/2003 14:39:15 ??) ???? 1 ????
ORA-00289: ??: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_2.DBF
ORA-00280: ?? 104779 ???? 1 ???? # 2 ???
ORA-00278: ??????????? 'D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_1.DBF'


15:15:09 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 104781 (? 04/11/2003 14:39:18 ??) ???? 1 ????
ORA-00289: ??: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_3.DBF
ORA-00280: ?? 104781 ???? 1 ???? # 3 ???
ORA-00278: ??????????? 'D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_2.DBF'


15:15:11 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00328: ??????? 63789 ?????????? 104781
ORA-00334: ????: 'D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_3.DBF'


15:15:12 SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 104781 (? 04/11/2003 14:39:18 ??) ???? 1 ????
ORA-00289: ??: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_3.DBF
ORA-00280: ?? 104781 ???? 1 ???? # 3 ???


15:16:23 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\oradata\orcl9\REDO01.LOG
ORA-00339: ???????????
ORA-00334: ????: 'D:\ORACLE\ORADATA\ORCL9\REDO01.LOG'


15:17:10 SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 104781 (? 04/11/2003 14:39:18 ??) ???? 1 ????
ORA-00289: ??: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_3.DBF
ORA-00280: ?? 104781 ???? 1 ???? # 3 ???


15:17:40 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\oradata\orcl9\REDO02.LOG
ORA-00310: ???????? 1????? 3
ORA-00334: ????: 'D:\ORACLE\ORADATA\ORCL9\REDO02.LOG'


15:17:53 SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 104781 (? 04/11/2003 14:39:18 ??) ???? 1 ????
ORA-00289: ??: D:\ORACLE\ORADATA\ORCL9\ARCHIVE\1_3.DBF
ORA-00280: ?? 104781 ???? 1 ???? # 3 ???


15:18:10 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\oradata\orcl9\REDO03.LOG
ORA-00339: ???????????
ORA-00334: ????: 'D:\ORACLE\ORADATA\ORCL9\REDO03.LOG'


15:18:18 SQL> alter database open resetlogs;

数据库已更改。

15:19:30 SQL> select count(*) from test;

  COUNT(*)
----------
         5

已用时间:  00: 00: 00.00


以上试验证明重建控制文件的方法也是可以的,但是要注意的一点是最后重建控制文件后一定不能先打开数据库而要先恢复后再resetlogs打开数据库。
还有一个不明白的问题就是为什么第二次重建控制文件的时候让我resetlogs??

附:控制文件脚本
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL9" NORESETLOGS  ARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 453
LOGFILE
  GROUP 1 'D:\ORACLE\ORADATA\ORCL9\REDO01.LOG'  SIZE 1M,
  GROUP 2 'D:\ORACLE\ORADATA\ORCL9\REDO02.LOG'  SIZE 1M,
  GROUP 3 'D:\ORACLE\ORADATA\ORCL9\REDO03.LOG'  SIZE 1M
-- STANDBY LOGFILE
DATAFILE
  'D:\ORACLE\ORADATA\ORCL9\SYSTEM01.DBF',
  'D:\ORACLE\ORADATA\ORCL9\UNDOTBS01.DBF'
CHARACTER SET ZHS16GBK
;

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB技术丛书作者
日期:2010-09-26 15:24:56
56#
发表于 2003-4-11 16:03 | 只看该作者
这里发现重建控制文件需要用resetlogs,不知道为什么???

因为从A到B的redo不在了,呵呵

还有一个不明白的问题就是为什么第二次重建控制文件的时候让我resetlogs??

同理,因为从B到C的redo不在了,呵呵

使用道具 举报

回复
论坛徽章:
0
57#
发表于 2003-4-18 22:56 | 只看该作者
我做的一个备份恢复的例子:
RMAN> replace script backup_level_0 {
2> allocate channel dev1 type disk;
3> backup
4> incremental level 0
5> filesperset 4
6> format '/disk1/ora_data/rman_backup/sunday_level0_%t'
7> (database);
sql 'alter system archive log current';
backup archivelog all delete input format '/disk1/ora_data/rman_backup
/al_backup_%p_%s_%u.%d';
8> release channel dev1;
9> }
RMAN> run {execute script backup_level_0;}
备份成功。
Rman>exit

然后,我把数据库shutdown,j将所有的文件删除。重建了密码文件,然后把实例起来。
开始做恢复:
1.        rman target xxxx catalog xxxxx
2.
RMAN> run {
2> allocate channel d1 type disk;
3> restore controlfile;
4> release channel d1;}

3.
RMAN> run {
allocate channel dev1 type disk;
sql "alter database mount";
Restore datafile 1;
restore datafile 2;
restore datafile 3;
Restore datafile 4;
release channel dev1;
}

4. from other session connect to your target database as sysdba

sql>archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /export/home/oracle/admin/test/arch
Oldest online log sequence 19
Next log sequence to archive 20
Current log sequence 20


5.
RMAN>run {
set archivelog destination to '/oracle/temp_restore';
allocate channel dev1 type disk;
restore archivelog all;
release channel dev1;
}

6、
SVRMGR> recover database using backup controlfile until cancel;
ORA-00279: change 29938 generated at 04/13/2000 23:31:56 needed for thread 1
ORA-00289: suggestion : /export/home/oracle/temp_restore/arch_1_20.arc
ORA-00280: change 29938 for thread 1 is in sequence #20
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
Log applied.
ORA-00279: change 29943 generated at 04/16/2000 15:25:13 needed for thread 1
ORA-00289: suggestion : /export/home/oracle/temp_restore/arch_1_21.arc
ORA-00280: change 29943 for thread 1 is in sequence #21
ORA-00278: log file '/export/home/oracle/temp_restore/arch_1_20.arc' no longer
n
eeded for this recovery
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log
'/export/home/oracle/temp_restore/arch_1_21.
arc'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3

数据库恢复报错。请各位指教。

使用道具 举报

回复
论坛徽章:
5
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34生肖徽章2007版:牛
日期:2008-10-11 19:14:02生肖徽章2007版:猪
日期:2008-11-08 07:34:42生肖徽章2007版:鸡
日期:2008-11-29 18:11:51
58#
发表于 2003-4-21 17:38 | 只看该作者
我补充一点。
在用resetlogs后,最好将归档日志文件也进行备份。
否则,B-C操作时,有可能重写原来的归档日志文件。导致A到B的归档日志文件不可用

使用道具 举报

回复
论坛徽章:
0
59#
发表于 2003-5-8 17:04 | 只看该作者
為何我恢復不了﹐過程如下﹐請老大指教﹕謝謝﹗

1.做一個冷備份﹕
SVRMGR> shutdown immediate;
資料庫關閉.
資料庫卸下.
進行冷備份。
2.啟動數據庫﹕
ORACLE 執行項次關閉.
SVRMGR>
SVRMGR>
SVRMGR>
SVRMGR>
SVRMGR> startup
ORACLE 執行項次開始.
總系統全域                         64931084 位元組
Fixed Size                                          70924 位元組
Variable Size                                    48005120 位元組
Database Buffers                                 16777216 位元組
Redo Buffers                                        77824 位元組
資料庫掛載完成.
資料庫開啟

SVRMGR> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2003-05-08 16:08:24
選取了 1 列
SVRMGR> create table zhsh.backup1 as select * from zhsh.money;
指令處理完畢.
SVRMGR> alter system switch logfile;
指令處理完畢.
SVRMGR> alter system switch logfile;
指令處理完畢.
SVRMGR> alter system switch logfile;
指令處理完畢.
SVRMGR> alter system switch logfile;
指令處理完畢.
3.數據庫意外中斷﹕
SVRMGR> shutdown abort
ORACLE 執行項次關閉.
4.拷貝冷備份之文件回來(包括控制文件)﹐并做不完全恢復﹕
SVRMGR> startup mount
ORACLE 執行項次開始.
總系統全域                         64931084 位元組
Fixed Size                                          70924 位元組
Variable Size                                    48005120 位元組
Database Buffers                                 16777216 位元組
Redo Buffers                                        77824 位元組
資料庫掛載完成.
SVRMGR> recover database until time '20030508 16:08:24';
媒體復原執行完成.
SVRMGR> alter database open resetlogs;
指令處理完畢.
5.查看table backup1 已經不存在﹕
SVRMGR> connect zhsh/zhsh
連線.
SVRMGR> select * from tab;
TNAME                          TABTYPE CLUSTERID
------------------------------ ------- ----------
DEMO                           TABLE
MLOG$_MONEY                    TABLE
MONEY                          TABLE
MONEY2                         TABLE
MYTEST                         TABLE
PBCATCOL                       TABLE
PBCATEDT                       TABLE
PBCATFMT                       TABLE
PBCATTBL                       TABLE
PBCATVLD                       TABLE
P_DEPT                         TABLE
RUPD$_MONEY                    TABLE
SN_DEPT                        TABLE
SQLTABLE2                      TABLE
SQL_ORA                        TABLE
TEST                           TABLE
TEST2                          TABLE
TT                             TABLE
TTBB                           TABLE
VV                             TABLE
V_MONEY                        VIEW
ZZZ2                           TABLE
pserd                          TABLE
新資料表                       TABLE
選取了 24 筆資料列.
SVRMGR>
SVRMGR>
SVRMGR>
SVRMGR>
SVRMGR>
SVRMGR> connect internal
連線.
6.重新創建table  backup2 :
SVRMGR> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2003-05-08 16:28:14

SVRMGR> create table zhsh.backup2 as select * from zhsh.money;
指令處理完畢.
7.讓數據意外中斷﹕
SVRMGR> shutdown abort
ORACLE 執行項次關閉.
備份當前的控制文件﹐并拷貝冷備份的文件回來(包括控制文件)
SVRMGR> startup mount
ORACLE 執行項次開始.
總系統全域                         64931084 位元組
Fixed Size                                          70924 位元組
Variable Size                                    48005120 位元組
Database Buffers                                 16777216 位元組
Redo Buffers                                        77824 位元組
資料庫掛載完成.
SVRMGR> recover database until time '20030508 16:08:24';
媒體復原執行完成.
9.關閉數據庫﹐并拷貝8 中所備份的控制文件﹕
SVRMGR> shutdown immediate;
資料庫卸下.
ORACLE 執行項次關閉.
SVRMGR> startup mount
ORACLE 執行項次開始.
總系統全域                         64931084 位元組
Fixed Size                                          70924 位元組
Variable Size                                    48005120 位元組
Database Buffers                                 16777216 位元組
Redo Buffers                                        77824 位元組
資料庫掛載完成.
SVRMGR> alter database open;
alter database open
*
ORA-01190: ??????? 1 ?????? RESETLOGS ??
ORA-01110: ??? 1: 'H:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
SVRMGR> recover database
ORA-00283: ???????????????
ORA-00314: ?? 2 (?? 1 ?): ??????? 1 ? 21 ???
ORA-00312: ???? 2 ?? 1: 'H:\ORACLE\ORADATA\ORCL\REDO02.LOG'
SVRMGR>

使用道具 举报

回复
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
60#
发表于 2003-5-8 18:00 | 只看该作者
faint
建议你们各位老大作测试的修改一下自己的nls_lang
不要显示那么多的????

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表