Oracle高階培訓 第5課 學習筆記

magus_yang發表於2020-04-04
 
Oracle高階培訓 第5課 學習筆記
本課筆記中的頁碼與《Oracle9i 資料庫管理基礎II Ed 1.1 Vol.2.pdf》對應
指南下載地址:
 
作者:JackYang (JackYang.sh@gmail.com)
日期:2006-10-17
 
本課包含多個實驗,目前還未通過上機驗證。
 
回顧上節課
不完全介質恢復,一定要在歸檔模式下進行,不能在非歸檔模式下進行。
不完全介質恢復,即使只損壞一個檔案,都要把資料檔案還原。
不完全介質恢復時,控制檔案沒有損壞,就不要用原來備份的控制檔案。
 
redo log file,是ORACLE資料庫的一個副本。
 
P93
基於取消的恢復
聯機重做日誌,在歸檔模式下不允許備份。
 
P94
一旦發現有聯機檔案丟失了,可以檢視v$log_history;
歸檔日誌序列號到47
48開始在聯機重做日誌檔案中。
 
所有不完全介質恢復,開啟資料庫時都要用RESETLOGS
 
P96
假如控制檔案沒有丟失,還原的時候,就不用還原。
 
RECOVER database時,後面已經要加 useing backup controlfile
 
P97
誤刪除了一個表空間,用上節課的方法還原不行了。僅僅還原資料檔案,不還原控制檔案不行。必須用早期的控制檔案來恢復,才能恢復表空間。
 
實驗一:
實驗目的:恢復被誤刪除的表空間
1.         E:/ora01g> sqlplus /nolog
 
2.         SQL> connect sys/ora123 as sysdba
 
3.         SQL> startup
 
4.         SQL> archive log list
 
5.         SQL> select name from v$tablespace;
 
6.         SQL> create tablespace data1 datafile ‘e:/ora01g/oradata/db1/data1.dbf’ size 2m;
 
7.         SQL> create table dept1 tablespace data1 as select * from scott.dept;
 
8.         SQL> insert into dept1(deptno.dname) values(28,’before drop’);
 
9.         SQL> create tablespace data2 datafile ‘e:/ora01g/oradata/db1/data2.dbf’ size 2m;
 
10.     SQL> create table dept2 tablespace data2 as select * from scott.dept;
 
11.     SQL> insert into dept2(deptno.dname) values(28,’before drop’);
 
12.     SQL> select * from dept1;
 
13.     SQL> select * from dept2;
 
14.     SQL> alter database begin backup;
       做一個備份
       資料庫開啟的狀態下進行熱備份,必須先執行命令alter database begin backup; 把資料檔案凍結。把所有的修改不寫到資料檔案,而是寫到redo log file。
 
15.     SQL> host copy E:/ora01g/oradata/db1/*.dbf d:/oradata/db1/hot
 
16.     SQL> alter database end backup;
      
17.     SQL> alter system archive log current;
備份結束馬上做一次強行歸檔
 
18.     SQL> alter database backup controlfile to ‘d:/oradata/db1/hot/con1.ctl’ reuse;
       備份控制檔案
       因為表空間被誤刪除,必須使用控制檔案來恢復
       加reuse是為了覆蓋備份目錄下的原來檔案
 
19.     SQL> drop tablespace data1 including contents;
       刪除表空間的時候,表空間中只要有一個表,就必須加上including contents,否則刪不掉表空間
 
20.     SQL> select * from dept1;
       查詢失敗,因為表空間data1已經被刪除
 
21.     SQL> select * from dept2;
       查詢成功,因為表空間data2未被刪除
 
22.     SQL> insert into dept2(deptno,dname) values (30,’after drop’);
       刪除表空間後,插入一條模擬資料
 
23.     SQL> select * from dept2;
 
24.     SQL> commit;
 
25.     SQL> alter system archive log current;
 
26.     SQL> show parameter background_dump_dest;
 
27.     SQL> show parameter user_dump_dest;
E:/ora01g/oradata/db1/udump路徑下有alter_db1檔案
檔案中有一行drop tablespace data1 including contents表明了刪除表空間data1的起始時間和結束時間。
 
28.     SQL> shutdown immediate
不完全介質恢復必須在資料庫關閉情況下,把所有資料檔案還原,所以先關閉資料庫。
 
29.     正常操作,應該把壞的資料庫備份以下,redo log file也要備份,這裡省了。
 
30.     SQL> host copy d:/oradata/db1/hot/*.dbf e:/ora01g/oradata/db1
       還原所有資料檔案
 
31.     SQL> host copy d:/oradata/db1/hot/con1.ctl e:/ora01g/oradata/db1/con1.ctl
 
32.     SQL> host copy d:/oradata/db1/hot/con1.ctl e:/ora01g/oradata/db1/con2.ctl
       兩個控制檔案是一樣的,所以只需要備份一個。但現在必須還原出兩個
 
33.     SQL> startup mount
 
34.     SQL> recover database until time ‘2006-10-12 18:55:20’ using backup controlfile;
 
       去備份目錄下檢視ARC歸檔檔案存在就回車。歸檔檔案不存在,就要CANCEL
       控制檔案的路徑是初始化引數檔案指明的。
       using backup controlfile是告訴recover命令要恢復控制檔案。
 
35.     SQL> alter database open resetlogs;
 
36.     SQL> select * from dept1;
       dept1恢復了
 
37.     SQL> select * from dept2;
       before drop紀錄有,after drop紀錄沒有了
 
38.     SQL> select * from v$log;
       sequence number恢復到了1
 
39.     SQL> alter system
 
恢復之後,要對資料庫做一次完全備份。不做完全備份,下一次資料庫再出故障,就無法恢復。因為現在的backup已經不能用了。
 
 
P99
當前重做日誌檔案丟失
已經備份的重做日誌檔案丟失沒有問題。
redo logo file的內容沒有歸檔的時候丟失了。recover到某個備份的redo logo file丟失,就用CANCEL。
當前是指資料庫現在正在使用的檔案。
對先前備份的所有資料檔案都要還原,否則沒法做RECOVER操作。
 
實驗二:
實驗目的:當前重做日誌檔案丟失後的恢復操作
1.         啟動ORACLE服務
 
2.         sqlplus /nolog
 
3.         SQL> connect sys/ora123@DB4 as sysdba
       網路連線
 
4.         SQL> startup
 
5.         SQL> archive log list
       確定資料庫在歸檔模式下
 
6.         SQL> alter database begin backup;
       必須先做一個備份
 
7.         SQL> host copy e:/ora01g/oradata/db4/*.dbf d:/oradata/db4/hot
 
8.         SQL> alter database end backup;
 
9.         SQL> alter system archive log current;
       current當前正在用的redo log file
       active表示redo log file中紀錄的資訊,與資料庫緩衝區中對應的髒資料未寫入資料檔案。
       inactive表示redo log file中紀錄的資訊,與資料庫緩衝區中對應的髒資料已經寫入資料檔案。
 
10.     SQL> alter database backup controlfile to ‘d:/oradata/db4/hot/con1.ctl’ reuse;
       備份控制檔案
 
11.     SQL> select * from v$log;
 
12.     SQL> shutdown immediate;
關閉資料庫之後,刪除ora01g/oradata/db4/路徑下的REDO01A和REDO01B
 
13.     SQL> startup mount;
 
14.     SQL> alter database clear logfile group 1;
       REDO01A和REDO02B兩個redo log file被重建,但是空的。
       重建status處於inactive狀態的redologfile。
 
15.     SQL> alter database open;
 
16.     SQL> select * from v$log;
 
17.     SQL> shutdown immediate;
       關閉資料庫之後,模擬故障,把當前使用的REDO03A和REDO03B刪掉。
 
18.     SQL> startup mount;
 
19.     SQL> alter database clear logfile group 3;
       無法開啟
 
20.     SQL> host copy d:/oradata/db4/hot/*.dbf e:/ora01g/oradata/db4
還原所有資料檔案
 
21.     SQL> recover database until cancel;
不用控制檔案的情況下,recover一下
       48號檔案是剛才沒有歸檔的
       所以要恢復48號檔案的時候,要打CANCEL
       因為當前的日誌檔案沒有歸檔,所以CANCEL
 
22.     SQL> alter database open resetlogs;
 
23.     SQL> select * from scott.dept;
 
24.     SQL> select name from v$controlfile;
 
25.     SQL> select name from v$datafile;
 
 
實驗三:
實驗目的:通過網路連線訪問ORACLE例項
       建立scott資料庫
 
2.         sqlplus /nolog
 
3.         SQL> connect scott/tiger@DB4
       顯示ERROR 訪問 PROFILE
 
4.         SQL> select * from dept;
       查詢失敗
 
5.         SQL> select * from emp;
       查詢失敗
 
6.         SQL> connect system/ora123
 
7.         SQL> @?/sqlplus/admin/pupbld
建立profile
 
8.         SQL> connect scott/tiger@DB4
       連線成功
 
9.         SQL> exit
退出
 
實驗四:
實驗目的:通過環境變數預設連線
1.         set ORACLE_SID_DB4
 
2.         sqlplus /nolog
 
3.         connect sys/ora123 as dba
 
 
實驗五:
實驗目的:配置ORACLE網路連線,配置分2部分,一部分是客戶端配置,一部分是服務端配置
oracle安裝目錄下,由network/admin下有listener.ora
network/admin/sample 路徑下有一個listener.ora的sample檔案,但這個檔案不用。
 
可以用老師提供的listener.ora的sample檔案,配置在服務端。
檔案中
LISTENER是listener的名稱。
ORACLE服務端,可以1個或多個listener.版本不同都可以。10g可以偵聽9i請求,反之亦然。
 
從oracle9i開始SID_LIST_LISTENER是可有可無的。有這段實現了靜態註冊。
上面是LISTNER1,那麼下面就是SID_LIST_LISTENER1
 
動態註冊,只要資料庫啟動之後,在1分鐘以後,資料庫會自動到LISTENER上去註冊。
 
TNSNAMES配置在ORACLE客戶端
oracle安裝目錄下network/admin路徑下的TNSNAMES檔案
可以參考老師提供的sample檔案
 
初始化引數檔案initdb1中和網路連線有關的兩行
service_names=’DB1’
instance_name=’DB1’
oracle9i之後版本一定要有這兩行,才能實現動態註冊。
 
另外,服務中一定要有TNSlistener服務啟動。
關掉這個服務以後,SQL> connect sys/ora123@DB4 as sysdba 會顯示no listener的錯誤
 
1.         lsnrctl
2.         lsnrctl>start
凡是靜態註冊,狀態都是UNKNOWN。因為靜態註冊,資料庫沒啟動,都可以註冊。關閉用命令LSNRCTL> stop
3.         LSNRCTL> service
4.         LSNRCTL> status
5.         LSNRCTL> quit
 
oracle安裝目錄的network/admin目錄下還有一個sqlnet.ora檔案
檔案中
NAMES.DIRECTORY_PATH=(TNSNAMES)
為了告訴oracle 名字解析的方法
 
> tnsping DB1
此命令用來驗證是否能進行遠端連線。
 
實驗六:
實驗目的:遠端連線資料庫
1.         sqlplus /no log
 
2.         SQL> connect sys/ora123@DB1 as sysdba
       顯示 an idle instance表示資料庫未開啟,要用startup命令開啟資料庫
 
3.         SQL> startup
 
4.         SQL> select * from v$log;
 
遠端資料庫檔案相關的就是三個檔案,一條命令。
 
 
listener.ora和TNSNAMES.ora檔案中的HOST不能填LOCALHOST或127.0.0.1,必須填IP地址或機器名,機器名不能帶減號或空格。
 

相關文章