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

magus_yang發表於2020-04-04
 
Oracle高階培訓 第6課 學習筆記
 
作者:JackYang (JackYang.sh@gmail.com)
日期:2006-10-18
 
本課包含多個實驗,目前還未通過上機驗證。
 
TSPITR(表空間基於時間點的恢復)
為了減少損失,推出TSPITR。比DBPITR高階。
 
設計思想:
假如一個生產資料庫的某個TABLE被誤刪除了。
 
先對原來的生產資料庫CLONE,然後再造一個輔助資料庫和原來的一模一樣。
CLONE出來的資料庫叫做輔助資料庫,原來的資料庫叫生產資料庫。對輔助資料庫做TSPITR。把輔助資料庫恢復到備份點。
然後把輔助資料庫包含被刪除表的表空間EXPORT(匯出)。把匯出的表空間,匯入生產資料庫。這樣生產資料庫中,其它的表空間不受影響,僅僅是受損表空間恢復。
在輔助資料庫上所作的恢復操作和恢復一個表的操作是一樣的。
 
TSPITR的具體步驟參考老師提供的檔案TSPITR.txt
(一)Prepare Product Database:
1.         Checking self contained for recovery set
sql>execute dbms_tts.transport_set_check('DATA2',true);
sql>select * from transport_set_violation;
          no rows selected
 
檢查表空間是否自包含。
對資料庫克隆只要包含系統表空間,臨時表空間和受損的表空間。其它表空間不用CLONE到輔助表空間中。
自包含的意思:受損表空間中的一個表有index。這個index被其它表空間使用,那麼那個表空間也要被CLONE。
 
2.         simulate before fault:
 
sql> create table dept1 tablespace data1 as select * from scott.dept;
    sql> create table dept2 tablespace data2 as select * from scott.dept;
    sql> insert into dept1(deptno,dname) values(28,'before drop');
    sql> insert into dept2(deptno,dname) values(28,'before drop');
    sql> commit;
    sql> alter system archive log current;
 
3.         Backup recovery set and auxiliary set before TSPITR time
 
sql> alter database begin backup;
sql> host copy d:/ora101g/oradata/db1/*.dbf d:/backup/db1
sql> alter database end backup;
sql> alter system archive log current;
sql> alter database backup controlfile to
       2 'D:/backup/db1/conl.ctl' reuse;
sql> alter system archive log current;
 
對資料庫進行備份
 
4.         simulate after fault:
sql>select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
          recoding the sysdate!
sql> truncate table dept2;
sql> insert into dept1(deptno,dname) values(38,'after drop');
sql> commit;
sql> alter system archive log current;
 
取出時間。
刪除表,模擬損壞的操作。
插入一行資料,以便驗證恢復結果是否成功。
 
(二)Prepare AUXiliary DataBase:
1.         Prepare OS environment:
 
dos>mkdir F:/auxdb1
dos>mkdir F:/auxdb1/bdump
dos>mkdir F:/auxdb1/udump
dos>mkdir F:/auxdb1/arc
 
建立輔助資料庫
 
2.         create oracle service for AUXiliary Database:
dos>oradim -new -sid AUXDB1 -intpwd ora123
 
建立服務
 
3.         Prepare parameter file for AUXiliary database:
(dos>copy D:/ora101g/database/initDB1.ora
                       D:/ora101g/database/iniAUXDB1.ora
EDIT D:/ora101g/database/initAUXDB1.ora:)
 
       老師提供檔案initAUXDB1.ora的內容如下:
db_unique_name='AUXDB1'
db_file_name_convert='D:/ora101g/oradata/db1','F:/auxdb1'
log_file_name_convert='D:/ora101g/oradata/db1','F:/auxdb1','D:/ora101g/oradata/db1','F:/auxdb1'
background_dump_dest='F:/auxdb1/bdump'
compatible='10.1.0.2.0'
control_files=('F:/auxdb1/con1.ctl','F:/auxdb1/con2.ctl')
core_dump_dest='F:/auxdb1/cdump'
db_name='DB1'
remote_login_passwordfile='EXCLUSIVE'
sessions=20
undo_management='AUTO'
undo_tablespace='undotbs'
user_dump_dest='F:/auxdb1/udump'
log_archive_dest_1='location=D:/backup/db1/arc'
log_archive_format='%s_%t_%r.arc'
service_names='AUXDB1'
instance_name='AUXDB1'
 
 
複製初始化引數檔案,並進行小修改
       其中:
       db_name不變
       加db_uniqure_name
 
       db_file_name和log_file_name_convert 把原來DB1的路徑轉化為輔助資料庫的路徑。
 
       log_archive_dest_1不變,把克隆的資料庫恢復時,要用到歸檔日誌。輔助資料庫沒有歸檔日誌,生產資料庫有歸檔日誌,所以這個路徑不改變。
改service_name和instance_name
 
4.         RESTORE Recovery SET and auxiliary SET
sql>host copy D:/backup/db1/*.dbf F:/auxdb1
sql>host copy D:/backup/db1/con1.ctl F:/auxdb1/con1.ctl
sql>host copy D:/backup/db1/con1.ctl F:/auxdb1/con2.ctl
 
把原來生產資料庫的備份檔案,copy到輔助資料庫裡面去。
 
5.         Start AUX DB:
 
     sql>connect sys/ora123@AUXDB1 as sysdba
     sql>startup nomount
     sql> alter database mount clone database;
     sql> alter database datafile 'F:/auxdb1/SYS01.DBF' online;
     sql> alter database datafile 'F:/auxdb1/UNDOTBS.DBF' online;
     sql> alter database datafile 'F:/auxdb1/data2.dbf' online;
 
     sql> recover database until time '2007-04-01 17:28:43' using backup controlfile;
     sql> alter database open resetlogs;
     check the table dept2 exist:
     sql> select * from dept2;
     sql> alter tablespace temp add tempfile 'F:/auxdb1/temp.dbf' size 5M reuse;
 
啟動輔助資料庫
進行CLONE操作
 
using backup controlfile是指使用備份的控制檔案。
克隆的時候不能修改控制檔案,執行recover的時候能夠修改控制檔案,因為recover能夠利用redo log
 
(三) EXPort and IMPort Recovery Set
1.         EXPort Recovery Set
dos>exp 'sys/ora123 as sysdba' point_in_time_recover=y tablespaces=data2
          file=F:/auxdb1/data2.dmp
         Export terminated successfully without warnings.
 
用sysdba登入,用exp命令匯出指定的表空間。
 
2.         IMPort Recovery Set
sql>connect sys/ora123@DB1 as sysdba
sql> alter tablespace data2 offline;
 
dos>copy F:/auxdb1/data2.dbf D:/ora101g/oradata/db1
dos>imp 'sys/ora123@DB1 as sysdba' point_in_time_recover=y datafiles=
           D:/ora101g/oradata/db1/data2.dbf file=F:/auxdb1/data2.dmp
          Import terminated successfully without warnings.
 
連線到生產資料庫上
       使生產資料庫中損壞的表空間offline。
 
3.         Check the TSPITR result:
sql> alter tablespace data2 online;
 
sql>select * from dept2;
sql>select * from dept1;
 
檢查恢復的結果
       被刪除的表要恢復。
       違背刪除的表,記錄都要在
 
4.         delete AUXiliary DB
刪除輔助資料庫
 
實驗一:
實驗目的:實踐TSPITR
1.         SQL> select * from dept1;
 
2.         SQL> select * from dept2;
       現在資料庫中有兩個表dept1和dept2。
故障是表空間data1中的dept1被誤刪除,恢復表空間dept1,且不影響到表空間data2中的dept2
 
3.         SQL> alter database begin backup;
 
4.         SQL> host copy e:/ora01g/oradata/db1/*.dbf e:/backup/db1/hot
 
5.         SQL> alter database end backup;
 
6.         SQL> alter database backup controlfile to ‘E:/backup/db1/hot/con1.ctl’ reuse;
 
7.         SQL> alter system archive log current;
       備份好之後,立刻對資料庫做一次手工歸檔。
 
8.         SQL> select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS’) from dual;
       取一個用於恢復的時間
 
9.         SQL> drop table dept1;
       刪除表,模擬故障
 
10.     SQL> select * from dept1;
       查詢失敗
 
11.     SQL> insert into dept2(deptno,dname) values (99,’after 1908’);
 
12.     SQL> insert into dept2(deptno,dname) values(66,’after 1908’);
       插入兩條資料,用於驗證恢復的結果是否成功。
 
13.     另外開啟一個終端視窗來CLONE資料庫
oradim –new –sid AUXDB1 –intpwd ora123
建立輔助資料庫的服務
 
14.     COPY過來初始化引數檔案,並進行修改。
修改了:
db_file_name_convert
log_file_name_convert
background_dump_dest
user_dump_dest
 
control_files
core_dump_dest
service_name
instance_name
 
然後利用初始化引數檔案啟動資料庫
 
15.     copy e:/backup/db1/hot/*.dbf e:/auxdb1
e:/auxdb1中的data2.dbf是不需要COPY的
 
16.     copy e:/backup/db1/hot/con1.ctl e:/auxdb1
 
17.     copy e:/backup/db1/hot/con1.ctl e:/auxdb1/con2.ctl
copy控制檔案
 
18.     sqlplus /nolog
 
19.     SQL> connect sys/ora123@AUXDB1 as sysdba
 
20.     SQL> startup nomount
 
21.     SQL> alter database mount clone database;
 
22.     SQL> alter database datafile ‘e:/auxdb1/system01.dbf’ online;
 
23.     SQL> alter database datafile ‘e:/auxdb1/undotbs.dbf’ online;
 
24.     SQL> alter database datafile ‘e:/auxdb1/sysaux01.dbf’ online;
 
25.     SQL> alter database datafile ‘e:/auxdb1/data1.dbf’ online;
 
26.     SQL> recover database until time ‘2006-10-17 19:08:05’ using backup controlfile;
       恢復操作
       沒成功,把生產資料庫再歸檔一次。
       回到生產資料庫的終端視窗進行下面這個操作
       SQL> alter system archive log current;
 
27.     SQL> alter database open resetlogs;
 
28.     SQL> select * from dept1;
       dept1表被恢復出來了,但目前實在輔助資料庫中,接著要用exp命令匯出。
 
29.     SQL> host exp ‘sys/ora123@AUXDB1 as sysdba’ point_in_time_recover=Y tablespaces=data1 file=data1.dmp
       最後看到螢幕上顯示’Export terminated successfully without warnings’這句話,才表示匯出操作成功。
       省略了檢查自包含的步驟。
 
30.     回到生產資料庫的終端視窗
 
31.     SQL> alter tablespace data1 offline;
 
32.     SQL> host copy e:/auxdb1/data1.dbf e:/ora01g/oradata/db1
 
33.     SQL> host imp ‘sys/ora123@db1 as sysdba’ point_in_time_recover=Y datafiles=’e:/ora01g/oradata/db1/data1.dbf’ file=data1.dmp
       最後看到螢幕上顯示’Import terminated successfully without warnings.’這句話,才表示匯入操作成功。
 
34.     SQL> alter tablespace data1 online;
 
35.     SQL> select * from dept1;
 
36.     SQL> select * from dept2;
       前面插入的兩條記錄都在,99 after 1908和66 after 1908
 
 
以下出現的頁碼與《Oracle9i 資料庫管理基礎II Ed 1.1 Vol.2.pdf》對應
指南下載地址:
 
P121
配置ORACLE伺服器的共享模式
 
之前用的都是ORACLE伺服器的專用模式
在專用伺服器模式下,每個使用者程式對應一個伺服器程式。浪費資源。
 
在共享伺服器模式下,一個伺服器程式可以同時為多個使用者服務。
 
P125
除了有共享服務程式(Snnn),一定還要有排程程式。
 
P127
ORACLE共享伺服器的優點
 
排程程式進行排程,來實現負載均衡
 
P128
TNSNAME.ORA檔案的內容
有SERVER=DEDICATED,採用專用伺服器模式。如果沒有這個引數,ORACLE會盡量採用共享伺服器模式
 
使用共享伺服器模式,不能發shutdown和startup命令。發這兩個命令必須用專用伺服器模式建立連線。
 
P129
共享伺服器模式下,不能使用SET ORACLE_SID的方式來連線資料庫,而必須使用網路連線方式,因為要先連線到ORACLE的偵聽器上。
 
P130
這圖非常重要。
連線步驟
使用者發出請求,請求送到監聽程式。監聽程式把請求發到三個排程程式中,最空的一個排程程式。所有的排程程式共享一個請求佇列(一個例項只有一個請求佇列)。
共享伺服器程式一有空,就去請求佇列看是否有請求,有就拿來提供服務。
每個排程程式有它自己的響應佇列。響應佇列和排程程式一一對應。
ORACLE的排程程式會程式到自己的響應佇列中去看,有沒有從共享伺服器程式返回的應答,有就取出來,返回使用者程式 。
整個過程中有個看不見的幽靈,叫虛擬電路circuit。
共享伺服器模式下,每個使用者程式和虛擬電路(本質是記憶體中的一小塊空間)一一對應。虛擬電路的資料和會話的數目相等。
一但使用者程式起來和排程程式建立連線,那麼之後的請求都是這個排程程式進行處理,而不會換成別的排程程式。不過,共享服務程式處理請求佇列中的請求,是隨機的。
每個排程程式最多可以為1024個使用者服務,一般一個排程程式為200個使用者服務。
 
P132
共享伺服器模式下,共享池的大小要擴大些
 
P133
配置共享伺服器要用到的引數。
DISPATCHERS,表示在例程啟動時,要啟動多少個排程程式。
 
SHARED_SERVERS。表示在例程啟動時,啟動多少個共享服務程式。預設為0,表示只能執行專用伺服器模式。
 
MAX_DISPATCHERS,系統最大啟動的排程程式數。和OS有關的引數
 
MAX_SHARED_SERVERS,系統最大啟動的共享服務程式數
 
CIRCUITS,虛擬電路。
 
SHARED_SERVER_SESSIONS,單指共享的會話數,這個值等於SESSIONS減5,這5個留給專用伺服器。用於執行startup和shutdown等命令。
 
P134
通過不同的協議連線,每個協議必須都建立DISPATCHER
 
P136
設定這個引數,可以動態的增加排程程式
 
P138
系統啟動的時候,建立的服務程式數目。
 
P141
CIRCUITS的大小,影響到SGA的大小
 
P142
把SESSIONS減5,留給專用伺服器
 
P143
LARGE_POOL_SIZE
SGA空間要擴大
預設情況下,等於0,相關資訊都放到SHARED_POOL裡面。設定了LARGE_POOL_SIZE,相關資訊就放在LARGE_POOL中。
 
P145
listener要偵聽排程程式,也要到listener中去註冊。這個是自動註冊(DB startup後的60秒內進行註冊)。可用lsnrctl services檢視是否註冊成功。
 
P147
共享伺服器模式下,有一個請求佇列和多個響應佇列。
檢視佇列情況的動態檢視
 
在OLAP裡面,使用者數多,操作時間比較短的情況下,用共享伺服器模式比較多。
在DSS資料倉儲裡面,用專用伺服器模式比較多
 
實驗二:
實驗目的:配置共享伺服器模式
ORAcle V9.2來進行的實驗。
 
初始化引數檔案initDB91.ora中
沒有下面這些引數,資料庫起來後,只能使用專用伺服器模式
shared_serviers
max_shared_servers
dispatchers
dispatchers
dispatchers
max_dispathers
 
設定三個dispather,是因為它們各對應不同的協議。
 
1.         sqlplus /nolog
 
2.         SQL> connect sys/ora123@DB91D as sysdba
 
3.         SQL> startup
 
4.         SQL> host
 
5.         lsnrctl
 
6.         LSNRCTL> service
       資料庫啟動了,這個時候就能看到DISPATCHERS都啟動了。說明DISPATCHERS是自動註冊的。
       檢查資料庫中的DISPATCHER是否啟動。
       並且能看到每個DISPATCHER當前各建立了多少連線。
 
7.         LSNRCTL> exit
 
8.         exit
 
9.         SQL> show parameter dispatcher
       檢視在引數中設定的dispatcher
 
10.     SQL> select * from v$queue;
00是請求佇列,後面三個是響應佇列。
TATALQ表示曾經處理過的請求數。
 
11.     SQL> select * from v$circuit;
資訊比較多
 
12.     SQL> show parameter circuit
circuits的值是38
 
13.     SQL> show parameter sessions
sessions的值是38
shared_server_sessions的值是33
 
14.     SQL> get perf601
      
       看服務程式的忙碌程度,使用/進行執行
       具體所執行的SQL語句,在老師提供的perf601.sql檔案中。
 
15.     SQL> alter system set shared_servers=4;
強行設定共享服務程式數為4
 
16.     SQL> desc v$shared_server
 
17.     SQL> select name,status from v$shared_server;
列出4個共享服務程式
 
18.     SQL> alter system set shared_servers=1;
 
19.     SQL> desc v$dispatcher
 
20.     SQL> column network format a15
 
21.     SQL> column status format a5
 
22.     SQL> select name,network,status from v$dispatcher;
 
network/admin/TNSNAMES檔案中
server=shared 共享伺服器模式
server=dedicated 專用伺服器模式
 
sysdba進去用DB91D
SQL> connect sys/ora123@DB91D as sysdba
保證是以專用伺服器模式進去,這樣就能shutdown了
 
 
老師提供的db10doc目錄下重要檔案有:
initAUXDB1.ora
TSPITR.txt
standby.txt             華騰給軌道交通系統做的容災備份資料庫。
 
儲存SQL語句的方法
SQL>save perfcache.sql
儲存在當前目錄下
 
調出已儲存的SQL語句
SQL> get perf602
SQL> /
/是執行
 
 

相關文章