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:54From:OB2BAR@test2"oratest"Time:10/08/0410:42:54
StartingOB2BARBackup:05test2:test2oratest<oratest_1:539001683:1>.dbf//Oracle8
SBT-25032(?)10/08/0410:46:14From:OB2BAR@test2"oratest"Time:10/08/0410:46:14
CompletedOB2BARBackup:05test2:test2oratest<oratest_1:539001683:1>.dbf//Oracle8
SBT-25032(?)10/08/0410:46:22From:OB2BAR@test2"oratest"Time:10/08/0410:46:22
StartingOB2BARBackup:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8
SBT-25032(?)10/08/0411:02:45From:OB2BAR@test2"oratest"Time:10/08/0411:02:45
CompletedOB2BARBackup:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8
SBT-28813(?)10/08/0411:34:57From:OB2BAR@test2"oratest"Time:10/08/0411:34:57
StartingOB2BARBackup:05test2:test2oratestarchivelog<oratest_3:539004793:1>.dbf//Oracle8
SBT-28813(?)10/08/0411:35:17From:OB2BAR@test2"oratest"Time:10/08/0411:35:17
CompletedOB2BARBackup:05test2:test2oratestarchivelog<oratest_3:539004793:1>.dbf//Oracle8
。。。
SBT-28813(?)10/08/0411:41:57From:OB2BAR@test2"oratest"Time:10/08/0411:41:57
StartingOB2BARBackup:05test2:test2oratestarchivelog<oratest_26:539005316:1>.dbf//Oracle8
SBT-28813(?)10/08/0411:42:08From:OB2BAR@test2"oratest"Time:10/08/0411:42:08
CompletedOB2BARBackup:05test2:test2oratestarchivelog<oratest_26:539005316:1>.dbf//Oracle8
SBT-28813(?)10/08/0411:42:13From:OB2BAR@test2"oratest"Time:10/08/0411:42:13
StartingOB2BARBackup:05test2:test2oratestarchivelog<oratest_27:539005332:1>.dbf//Oracle8
SBT-28813(?)10/08/0411:42:16From: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/
From:OB2BAR@test2"oratest"Time:10/09/0414:23:28
StartingOB2BARRestore:05test2:test2oratest<oratest_2:539001979:1>.dbf//Oracle8
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/
From:OB2BAR@test2"oratest"Time:10/09/0414:20:10
StartingOB2BARRestore:05test2:test2oratest<oratest_1:539001683:1>.dbf//Oracle8
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/
From:OB2BAR@test2"oratest"Time:10/09/0414:40:13
StartingOB2BARRestore:05test2:test2oratestarchivelog<oratest_27:539005316:1>.dbf//Oracle8
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";从而注入成功 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 代替了原来VB式的错误判断。比Oracle高级不少。 sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西 sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。 Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
页:
[1]