作為運維人員,尤其是數據庫運維人員,最重要的事情要做備份,最重要的事情要做備份,最重要的事情要做備份,在這裡重要的事情說三遍。有了數據庫備份,再加上數據庫恢複秘籍,足以應對任何情況了,如果沒有備份,一旦磁盤損壞,文件損壞,表drop,記錄被異常更新等等情況,就問問你,慌不慌。
廢話不多說了,下面就進入正題,來說說幾種oracle數據庫數據恢複方法
1.口令文件丢失
進入到口令文件所在目錄
cd $ORACLE_HOME/dbs
文件删除,模拟丢失
rm orapwora10g;
删除之後,用以下命令重新建立一個文件,entries的意思(DBA的用戶最多有5個)
orapwd file=orapwora10g password=oracle entries=5;
SQL> conn sys/oracle as sysdba;ERROR:ORA-01031: insufficient privileges
在這裡有人,有疑問,如果這個口令文件丢失,會發生什麼,用戶不能登錄嗎?這個問題提的好,如果是這個文件丢失,隻是用sysdba方式沒辦法登錄,登錄會報錯,普通用于遠程登錄不受影響
SQL> conn sys/oracle as sysdba;
ERROR:ORA-01031:
insufficient privileges
spfile,pfile文件是存儲數據庫配置參數的文件,運行是删除,其實是不影響數據庫運行,可是重啟oracle數據庫實例時,會有問題,加載不到參數文件,數據庫就無法正常啟動,這個時候,可以從備份中轉儲出spfile文件,方法如下所示
rman target /
set dbid 4146528970;
startup nomount;
restore spfile to '/dbdata/rman_backup/spfilecrmdb.ora' from '/dbdata/rman_backup/tmp/c-4146528970-20200427-0b';
在oracle數據中,控制文件非常的,非常的重要。控制文件是一個二進制文件,它記錄了數據庫的物理結構,其中主要包含數據庫名,數據文件與日志文件的名字和位置,數據庫建立日期,數據庫檢查點等信息。如果控制文件損壞,數據庫就無法正常運行,通常情況,控制文件會有配置3個,很少會發生因為控制文件損壞,導緻數據庫崩潰的,除非你點背。不過也得掌握怎麼恢複控制方法,從備份中轉儲的控制文件,數據庫是一定要做全庫的recover,日志還得reset
rman target /;
startup nomount;
restore controlfile from '/dbdata/rman_backup/c-4146528970-20200427-10';
alter database mount;
recover database;
alter database open resetlogs;
有時候,某個裸設備,或者文件損壞,這個時候,有部分表的訪問會受影響,但是數據庫還不至于不能運行,所以隻需要恢複損壞的文件就可以,恢複方法如下所示
rman target /
數據文件丢失(在rman中執行sql語句,在sql後面用雙引号括起來):
sql "alter database datafile 4,5 offline immediate";
restore datafile 4,5;
recover datafile 4,5;
sql "alter database datafile 4,5 online";
有時候有特殊要求,恢複的文件要更換目錄,或者使用新的裸設備,這樣可以采用下面方式恢複
run{
sql 'alter database datafile 6 offline immediate';
set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
restore datafile 6;
switch datafile all;
recover datafile 6;
sql 'alter databaes datafile 6 online';
}
如果想恢複某個oracle數據庫表空間
rman target /
sql "alter tablespace users offline immediate";
restore tablespace users;
recover tablespace users;
sql "alter tablespace users online";
更換數據文件路徑
run{
sql 'alter tablespace tbs1 offline immediate';
set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/tbs01.dbf';
restore tablespace tbs1;
switch datafile all;
recover tablespace tbs1;
sql 'alter tablespace tbs1 online';
}
run{
set until time "to_date('2009-07-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";
restore database;
recover database;
alter database open resetlogs;
}
run {
set until scn=475351;
restore database;
recover database;
alter database open resetlogs;
}
run{
sql "startup mount";
restore database;
recover database;
sql "alter database open"
}
run{
set until time "to_date('2009-07-19 13:19:00','YYYY-MM-DD HH24:MI:SS')";
set newname for datafile 1 to '/dbdata/oracle/oradata/orcl/system01.dbf';
set newname for datafile 2 to '/dbdata/oracle/oradata/orcl/sysaux01.dbf';
set newname for datafile 3 to '/dbdata/oracle/oradata/orcl/undotbs01.dbf';
set newname for datafile 4 to '/dbdata/oracle/oradata/orcl/users01.dbf';
set newname for datafile 5 to '/dbdata/oracle/oradata/orcl/IRCP.dbf';
set newname for datafile 6 to '/dbdata/oracle/oradata/orcl/hbopen.dbf';
set newname for datafile 7 to '/dbdata/oracle/oradata/orcl/presell.dbf';
restore database;
switch datafile all;
recover database;
}
隻要掌握了上述恢複方法,基本上能應對生産99%的需要數據恢複的場景,包括備份異地恢複。這個技能大家get了吧
喜歡的,可以添加關注,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!