仓酷云

标题: MSSQL教程之catalog破坏情形下的数据库恢复实例 [打印本页]

作者: 冷月葬花魂    时间: 2015-1-16 22:36
标题: MSSQL教程之catalog破坏情形下的数据库恢复实例
mysql的原来开发者又开发了MariaDB,MariaDB适合用来替代mysql吗恢复|数据|数据库catalog破坏情形下的数据库恢复实例
一.情况形貌

1.运转情况:HP小型机,HPUX操纵体系,Oracle9.2.0.1,OpenViewDataProtector备份办理软件,ESL9000带库。

数据库全备剧本:

run{

allocatechanneldev_0typesbt_tape

parmsENV=(OB2BARTYPE=Oracle8,OB2APPNAME=oratest,OB2BARLIST=test2oratest);

backupincrementallevel<incr_level>filesperset1

formattest2oratest<oratest_%s:%t:%p>.dbf

database

includecurrentcontrolfile;

sqlaltersystemarchivelogcurrent;

}

回档日记备份剧本:

run{

allocatechanneldev_0typesbt_tape

parmsENV=(OB2BARTYPE=Oracle8,OB2APPNAME=oratest,

OB2BARLIST=test2oratestarchivelog);

backupincrementallevel<incr_level>filesperset1

formattest2oratestarchivelog<oratest_%s:%t:%p>.dbf

archivelogalldeleteinput;

}



2.妨碍形貌:Oracle数据库(测试库)运转在回档形式下。一般情形下,备份办理软件挪用OracleRMAN举行全库和回档日记备份。备份文件存储在ESL9000磁带库上。因为磁盘阵列妨碍,形成方针数据库把持文件和数据文件全体破坏;同时,寄存catalog的数据库也被破坏。

因为catalog破坏,RMAN没法经由过程catalog找到备份集,restore没法乐成。因为没有把持文件,数据库仅能启动到nomount形态下。



二.背景常识

在Oracle816今后的版本中,Oracle供应了一个包:DBMS_BACKUP_RESTORE。DBMS_BACKUP_RESTORE包是由dbmsbkrs.sql和prvtbkrs.plb这两个剧本创立的。catproc.sql剧本运转后会挪用这两个包。以是每一个数据库都有的这个包作为Oracle服务器和操纵体系之间IO操纵的接口,由RMAN间接挪用。我们能够在数据库nomount情形下挪用这些包,来到达数据库恢复的目标。



三.恢复步骤

1.查找备份集

备份集能够在DataProtector的internaldatabase中或日记纪录中找到。详细内容(依据必要做了剪裁)以下:

SBT-25032(?)10/08/0410:42:54[Normal]From:OB2BAR@test2"oratest"Time:10/08/0410:42:54

StartingOB2BARBackup:05test2:test2oratest<oratest_1:539001683:1>.dbf//Oracle8

SBT-25032(?)10/08/0410:46:14[Normal]From:OB2BAR@test2"oratest"Time:10/08/0410:46:14

CompletedOB2BARBackup:05test2:test2oratest<oratest_1:539001683:1>.dbf//Oracle8

SBT-25032(?)10/08/0410:46:22[Normal]From:OB2BAR@test2"oratest"Time:10/08/0410:46:22

StartingOB2BARBackup:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8

SBT-25032(?)10/08/0411:02:45[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:02:45

CompletedOB2BARBackup:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8

SBT-28813(?)10/08/0411:34:57[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:34:57

StartingOB2BARBackup:05test2:test2oratestarchivelog<oratest_3:539004793:1>.dbf//Oracle8

SBT-28813(?)10/08/0411:35:17[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:35:17

CompletedOB2BARBackup:05test2:test2oratestarchivelog<oratest_3:539004793:1>.dbf//Oracle8

。。。

SBT-28813(?)10/08/0411:41:57[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:41:57

StartingOB2BARBackup:05test2:test2oratestarchivelog<oratest_26:539005316:1>.dbf//Oracle8

SBT-28813(?)10/08/0411:42:08[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:42:08

CompletedOB2BARBackup:05test2:test2oratestarchivelog<oratest_26:539005316:1>.dbf//Oracle8

SBT-28813(?)10/08/0411:42:13[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:42:13

StartingOB2BARBackup:05test2:test2oratestarchivelog<oratest_27:539005332:1>.dbf//Oracle8

SBT-28813(?)10/08/0411:42:16[Normal]From:OB2BAR@test2"oratest"Time:10/08/0411:42:16

CompletedOB2BARBackup:05test2:test2oratestarchivelog<oratest_27:539005332:1>.dbf//Oracle8



从上述内容能够看到存储在带库上的全备的备份集文件为:

test2:test2oratest<oratest_1:539001683:1>.dbf

test2:test2oratest<oratest_2:539001979:1>.dbf

Archivelog的备份集文件为:

test2:test2oratestarchivelog<oratest_3:539004793:1>.dbf

。。。

test2:test2oratestarchivelog<oratest_26:539005316:1>.dbf

test2:test2oratestarchivelog<oratest_27:539005332:1>.dbf



2.恢复把持文件

test2:/backup/test$sqlplus/nolog

SQL*Plus:Release9.2.0.1.0-ProductiononSatOct914:30:542004

Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.

SQL>connect/assysdba

Connected.
SQL>startupnomount
SQL>DECLARE

2devtypevarchar2(256);

3doneboolean;

4BEGIN

5devtype:=sys.dbms_backup_restore.deviceAllocate(type=>sbt_tape,

ident=>T1,params=>ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=oratest,OB2BARLIST=test2oratest));

6sys.dbms_backup_restore.restoreSetDatafile;

7sys.dbms_backup_restore.restoreControlfileTo(

cfname=>/backup/test/Control01.ctl);

8sys.dbms_backup_restore.restoreBackupPiece(done=>done,

handle=>test2oratest<oratest_2:539001979:1>.dbf,params=>null);

9sys.dbms_backup_restore.deviceDeallocate;

10END;

11/

[Normal]From:OB2BAR@test2"oratest"Time:10/09/0414:23:28

StartingOB2BARRestore:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8

[Normal]From:OB2BAR@test2"oratest"Time:10/09/0414:23:32

CompletedOB2BARRestore:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8

SQL>



因为RMAN做全库备份的时分,最初备份把持文件,应此能够从最初一个全备的备份集文件中恢复把持文件。恢复把持文件时,需将数据库启动到nomount形态。恢复的把持文件应与init文件中界说的把持文件的路径、文件名和数目相分歧,不然没法把数据库启动到mount形态。

上面先容程序包的内容:

第五行分派一个devicechannel,"sbt_tape"申明是从磁带上恢复。Params参数与DataProtector中RMAN备份剧本中的参数分歧。

第六行初始化恢复历程,筹办举行把持文件或数据文件恢复。

第七行指出待恢复文件和恢复文件的存储地位。本处申明是恢复把持文件及寄存寄存把持文件的路径、文件名。

第八行申明从哪一个备份片中恢复

第九行开释设备通道



3.恢单数据文件

起首必要晓得每一个备份会合包括哪些数据文件:

SQL>alterdatabasemount;

SQL>selectfile#fromv$backup_datafilewhereset_stamp=539001683;

FILE#

----------

2

0

2rowsselected.

SQL>

个中,set_stamp是备份集文件名中的工夫戳;

0暗示把持文件;

2是数据文件号。

文件号对应的文件名能够在v$datafile中查到。



晓得备份会合包括的数据文件号和文件名,就能够恢单数据文件了:

SQL>DECLARE

2devtypevarchar2(256);

3doneboolean;

4BEGIN

5devtype:=sys.dbms_backup_restore.deviceAllocate(type=>sbt_tape,

ident=>T1,params=>ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=oratest,OB2BARLIST=test2oratest));

6sys.dbms_backup_restore.restoreSetDatafile;

7sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>2,

toname=>/backup/test/undotbsldb01.dbf);

8sys.dbms_backup_restore.restoreBackupPiece(done=>done,

handle=>test2:test2oratest<oratest_1:539001683:1>.dbf,params=>null);

9sys.dbms_backup_restore.deviceDeallocate;

10END;

11/

[Normal]From:OB2BAR@test2"oratest"Time:10/09/0414:20:10

StartingOB2BARRestore:05test2:test2oratest<oratest_1:539001683:1>.dbf//Oracle8

[Normal]From:OB2BAR@test2"oratest"Time:10/09/0414:20:24

CompletedOB2BARRestore:05test2:test2oratest<oratest_2:539001683:1>.dbf//Oracle8



PL/SQLproceduresuccessfullycompleted.

SQL>

反复上述操纵,能够恢复一切数据文件。恢复的数据文件的存储目次能够不是原存储目次,因而,乃至能够在数据库open形态下从备份会合restore数据文件。



4.恢复archivelog文件

SQL>DECLARE

2devtypevarchar2(256);

3doneboolean;

4BEGIN

5devtype:=sys.dbms_backup_restore.deviceAllocate(type=>sbt_tape,ident=>T1,

params=>ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=oratest,

OB2BARLIST=test2oratestarchivelog));

6sys.dbms_backup_restore.restoreSetArchivedLog;

7sys.dbms_backup_restore.restoreArchivedLogRange;

8sys.dbms_backup_restore.restoreBackupPiece(done=>done,

handle=>test2:test2oratestarchivelog<oratest_26:539005316:1>.dbf,params=>null);

9sys.dbms_backup_restore.deviceDeallocate;

10END;

11/

[Normal]From:OB2BAR@test2"oratest"Time:10/09/0414:40:13

StartingOB2BARRestore:05test2:test2oratestarchivelog<oratest_27:539005316:1>.dbf//Oracle8

[Normal]From:OB2BAR@test2"oratest"Time:10/09/0414:40:13

CompletedOB2BARRestore:05test2:test2oratestarchivelog<oratest_27:539005316:1>.dbf//Oracle8



SQL>

依据第一步中取得的archivelog备份集的文件名,恢复一切archivelog.



5.Recover数据库

SQL>recoverdatabaseuntilcancelusingbackupcontrolfile;

ORA-00279:change54285generatedat10/08/200410:41:24neededforthread1

ORA-00289:suggestion:/backup/test/archive/1_24.dbf

ORA-00280:change54285forthread1isinsequence#24



Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}



ORA-00279:change55331generatedat10/08/200411:02:48neededforthread1

ORA-00289:suggestion:/backup/test/archive/1_25.dbf

ORA-00280:change55331forthread1isinsequence#25

ORA-00278:logfile/backup/test/archive/1_24.dbfnolongerneededforthisrecovery



Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}



ORA-00279:change56789generatedat10/08/200411:33:12neededforthread1

ORA-00289:suggestion:/backup/test/archive/1_26.dbf

ORA-00280:change56789forthread1isinsequence#26

ORA-00278:logfile/backup/test/archive/1_25.dbfnolongerneededforthisrecovery



Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}



ORA-00308:cannotopenarchivedlog/backup/test/archive/1_26.dbf

ORA-27037:unabletoobtainfilestatus

HP-UXError:2:Nosuchfileordirectory

Additionalinformation:3



SQL>alterdatabaseopenresetlogs;

Databasealtered.

SQL>

如今数据库恢复已完成了。因为onlineredolog也破坏了,数据库仅恢复到最初一个回档的日记文件。

一个小技能:在上一步恢复archivelog时,archivelog文件大概十分多。假如不晓得最早应当恢复到哪个archivelog文件,能够先实行一次本步操纵,体系会提醒开始必要的archivelog文件,然后从最初的一个archivelog备份集往前恢复直到该archivelog文件被恢复。示比方下:

SQL>recoverdatabaseuntilcancelusingbackupcontrolfile;

ORA-00279:change54285generatedat10/08/200410:41:24neededforthread1

ORA-00289:suggestion:/backup/test/archive/1_24.dbf

ORA-00280:change54285forthread1isinsequence#24



Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}



ORA-00308:cannotopenarchivedlog/backup/test/archive/1_24.dbf

ORA-27037:unabletoobtainfilestatus

HP-UXError:2:Nosuchfileordirectory

Additionalinformation:3



ORA-01547:warning:RECOVERsucceededbutOPENRESETLOGSwouldgeterrorbelow

ORA-01152:file1wasnotrestoredfromasufficientlyoldbackup

ORA-01110:datafile1:/backup/test/oradata/system01.dbf



SQL>

明显,第一个必要的archivelog文件是/backup/test/archive/1_24.dbf





五.小结

1.只需保留了完全的全库备份和完全的回档日记备份,即便把持文件和恢复目次全体破坏,数据库仍是能够恢复的。

2.依据下面一条能够看出,不管备份时是不是接纳了恢复目次,恢复目次在数据库恢复时,并非必需的。

3.RMAN做的备份能够不必RMAN恢复。

4.HPDataProtector的备份剧本在做全库备份时,是一个一个备份数据文件和日记文件并构成独自的备份集。数据库全备时代的日记文件必需保留完全。



参考材料:
DBA事情备忘录之三:rman备份,没用catalog,但把持文件丧失,怎样办理?Fenng


mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功
作者: 若相依    时间: 2015-1-17 16:44
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
作者: 分手快乐    时间: 2015-1-20 21:20
代替了原来VB式的错误判断。比Oracle高级不少。
作者: 小女巫    时间: 2015-1-30 05:29
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
作者: 再见西城    时间: 2015-2-6 07:35
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
作者: 山那边是海    时间: 2015-3-4 11:58
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
作者: 透明    时间: 2015-3-11 19:29
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
作者: 金色的骷髅    时间: 2015-3-19 09:54
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
作者: 小魔女    时间: 2015-3-27 19:08
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2