Oracle進階培訓 第5課 學習筆記本課筆記中的頁碼與《Oracle9i 資料庫管理基礎II Ed 1.1 Vol.2.pdf》對應指南:http://blog.csdn.net/magus_yang/archive/2006/10/10/1328283.aspx 作者:JackYang (JackYang.sh@gmail.com)日期:2006-10-17 本課包含多個實驗,目前還未通過上機驗證。 回顧上節課不完全介質恢複,一定要在歸檔模式下進行,不能在非歸檔模式下進行。不完全介質恢複,即使只損壞一個檔案,都要把資料檔案還原。不完全介質恢複時,控制檔案沒有損壞,就不要用原來備份的控制檔案。 redo log file,是ORACLE資料庫的一個副本。 P93基於取消的恢複聯機重做日誌,在歸檔模式下不允許備份。 P94一旦發現有聯機檔案丟失了,可以查看v$log_history;歸檔記錄序號到4748開始在聯機重做記錄檔中。 所有不完全介質恢複,開啟資料庫時都要用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. 正常操作,應該把壞的Database Backup以下,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執行個體1. SQL> @?/rdms/admin/utlsampl 建立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.oranetwork/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. lsnrctl2. lsnrctl>start凡是靜態註冊,狀態都是UNKNOWN。因為靜態註冊,資料庫沒啟動,都可以註冊。關閉用命令LSNRCTL> stop3. LSNRCTL> service4. LSNRCTL> status5. 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地址或機器名,機器名不能帶減號或空格。