第0章 Oracle的安裝及相關配置
1、SQL和SQL*Plus的語句是大小寫無關的。
2、卸載Oracle 10g時,運行Universal Installer進行卸載,然後重新啓動,再刪除安裝目錄即可。
3、可以更改控制檯的默認端口號,如果是10g,就在C:\oracle\product\10.1.0\Db_1\install目錄下的portlist.ini文件中更改。
4、在10g以上的版本,出於安全的考慮,所有Oracle的默認用戶包括scott用戶都將被鎖住。可以先用system或sys用戶登錄數據庫,然後用如下命令解鎖:
alter user scott identified by tiger account unlock;
5、如果scott用戶中的某個對象出現問題,不需要重裝Oracle系統,只需要通過運行scott.sql腳本來重建scott用戶和它擁有的一切。10g版本使用如下命令:
@C:\oracle\product\10.1.0\Db_1\RDBMS\ADMIN \scott.sql
6、以sys賬戶,sysdba權限登錄數據庫的方法:
connect sys/oracle as sysdba(可以簡寫爲conn )
7、通過v$controlfile數據字典,可以查看當前數據庫控制文件所在的目錄位置:
select * from v$controlfile;
8、host 命令可以在sqlplus中執行dos命令,如
host copy C:\oracle\product\10.1.0\oradata\Moon\*.* c:\study\backup
9、立即關閉數據庫:shutdown immediate
打開數據庫:startup
第1章 Oracle的體系結構
1、Oracle數據庫管理系統的體系結構:
2、Oracle服務器由Oracle實例和Oracle數據庫兩大部分組成。
3、Oracle實例是一種訪問數據庫的機制,它由內存結構和一些後臺進程組成。
4、內存結構也稱爲系統全局區(system global area,SGA)。SGA包含了以下幾個內存結構:共享池(shared pool)、數據庫高速緩衝區(database buffer cache)、重做日誌緩衝區(redo log buffer)和其他的一些結構(如鎖和統計數據)等。
5、實例的後臺進程有5個是必需的,分別是SMON、PMON、DBWR、LGWR和CKPT。
6、Oracle數據庫也稱爲物理(內存)結構,它爲數據庫信息提供了真正的物理存儲,它由以下3類操作系統文件組成,控制文件(control file)、重做日誌文件(redo log files)和數據文件(data files)。
7、Oracle執行SQL查詢語句的步驟,分爲三個階段:編譯、執行和提取數據。
l 編譯:在進行編譯時,服務器進程會將SQL語句的正文放入共享池(shared pool)的庫高速緩存(library cache)中並將完成以下處理。
Ø 首先在共享池中搜索是否有相同的SQL語句(正文),如果沒有就進行後續的處理。
Ø 檢查該SQL語句的語法是否正確。
Ø 通過查看數據字典來檢查表和列的定義。
Ø 對所操作的對象加編譯鎖,以便在編譯語句期間這些對象的定義不能被改變。
Ø 檢查所引用對象的用戶權限。
Ø 生成執行該SQL語句所需的優化的執行計劃(執行步驟)。
Ø 將SQL語句和執行計劃裝入共享的SQL區。
以上的每一步操作都是在處理正確時才進行後續的處理。如果不正確,就返回錯誤。
l 執行:Oracle服務器進程開始執行SQL語句是因爲它已獲得了執行SQL語句所需的全部資源和信息。
l 提取數據:Oracle服務器進程選擇所需的數據行,並在需要時將其排序,最後將結果返回給用戶(進程)。
8、SGA中的共享池(shared pool)是由庫高速緩存(library cache)和數據字典高速緩存(data dictionary cache)兩部分所組成。
9、庫高速緩存包含了共享SQL區和共享PL/SQL區兩部分,它們分別存放SQL和PL/SQL語句以及相關的信息。引入庫高速緩存(library cache)的目的是共享SQL或PL/SQL代碼。
10、當Oracle在執行SQL語句時,服務器進程將把數據文件、表、索引、列、用戶和其他的數據對象的定義和權限的信息放入數據字典高速緩存。如果在這之後,有進程(用戶)需要同樣的信息,如表和列的定義,那麼所有的這些信息都將從數據字典高速緩存中獲得。因爲以上這些信息都以及存在於數據字典中,這也可能就是將該部分內存稱爲數據字典高速緩存的原因。
11、與執行查詢語句有所不同,Oracle在執行DML語句語句時只有編譯(parse)和執行(execute)兩個階段。以下是Oracle執行UPDATE語句的步驟:
l 如果數據和回滾數據不在數據庫高速緩衝區中,則Oracle服務器進程將把它們從數據文件中讀到數據庫高速緩衝區中。
l Oracle服務器進程在要修改的數據行上加鎖(行一級的鎖)。
l Oracle服務器進程將數據的變換信息和回滾所需的信息都記錄在重做日誌緩衝區中。
l Oracle服務器進程將回滾所需的原始值和對數據所做的修改都寫入數據庫高速緩衝區(database buffer cache)。之後在數據庫高速緩衝區中所有的這些數據塊都將被標爲髒緩衝區,因此此時內外存的數據是不一致的。
Oracle處理INSERT或DELETE語句的步驟與處理UPDATE語句的步驟大致相同。
12、show parameter 該命令用來顯示出參數文件中可以設置的全部參數。
13、show sga 可以獲得SGA的相關信息
14、當在SQL*Plus中發了commit語句之後,Oracle的內部操作步驟如下:
l 服務器進程將把提交的記錄連同所產生的SCN(號碼)一起寫入重做日誌緩衝區中。
l 重做日誌寫進程(LGWR)將把重做日誌緩衝區中一直到所提交的記錄(包括該記錄)的所有記錄連續地寫到重做日誌文件中。在此之後,Oracle服務器就可以保證即使在系統崩潰的情況下所有提交的數據也可以得到恢復。
l Oracle通知用戶(進程)提交已經完成。
l 服務器進程將修改數據庫高速緩衝區中的相關數據的狀態並釋放資源和打開鎖等。
此時可能這些數據並未被寫到數據庫文件中,這些數據緩衝區被標爲髒緩衝區,因爲相同數據在內外存中爲不同的版本。數據庫高速緩衝區中的數據是有DBWR寫到數據文件中的。
15、重做日誌寫進程(LGWR)要在下列情況下將重做日誌緩衝區的記錄(內存)順序地寫到重做日誌文件(外存)中:
l 當某個事物被提交時。
l 當重做日誌緩衝區中變化的記錄超過1MB時。
l 當重做日誌緩衝區中所存的記錄已超過緩衝區容量的1/3。
l 在DBWR將數據庫高速緩衝區中修改過的數據塊寫到數據文件之前。
l 每3秒鐘。
16、數據庫的典型操作就是大規模的輸入/輸出(I/O),因此爲了提高Oracle系統的效率,一要減少I/O量,這可能是Oracle引入LGWR的原因之一;二要減少I/O次數,這可能是Oracle引入數據庫寫進程(DBWR/DBWn)的主要原因。
17、在Oracle英文書中有些將“數據庫寫進程”用DBWR表示,也有些用DBWn表示,這是因爲一個Oracle實例中可以啓動多個數據庫寫進程,Oracle允許在一個實例上最多啓動10個數據庫寫進程,它們分別是DBW0~DBW9。
18、數據庫寫進程負責將數據庫高速緩衝區中的髒緩衝區中的數據寫到數據文件上。數據庫寫進程將在下列事件之一發生時把數據庫高速緩衝區中的數據寫到數據文件上:
l 當髒緩衝區的數量超過了所設定的限額。
l 當所設定的時間間隔已到。
l 當有進程需要數據庫高速緩衝區卻找不到空閒的緩衝區時。
l 當校驗點發生時。
l 當某個表被刪除(drop)或被截斷(truncate)時。
l 當使用類似於alter tablespace users begin backup的命令對某個表空間進行聯機備份時。
l 當某個臨時表空間被設置爲只脫機狀態(offline)或正常狀態(normal)時等。
19、SMON、PMON、DBWR、LGWR和CKPT這5個後臺進程是必需的,它們中的任何一個停止後實例都將自動關閉。在可選後臺進程中,最重要的可能就是歸檔日誌(ARCH/ARCn)進程。
第2章 數據庫管理工具
1、在一臺計算機上創建兩個數據庫將會使系統效率大大降低。
2、默認情況下,Oracle會自動地創建兩個超級用戶sys和system,它們也被稱爲數據庫管理員用戶,其中sys用戶擁有數據庫中數據字典,它的默認口令爲change_on_install。在使用sys用戶連接數據庫時,應該使用SYSDBA或SYSOPER權限來連接,否則系統會報錯。例如:
connect sys/change_on_install as sysdba
其中system用戶擁有由Oracle工具所使用的附加的內部表和視圖,它的默認口令爲manager。在使用system用戶連接數據庫時,可以不使用SYSDBA或SYSOPER權限來連接。
第3章 Oracle實例的管理
1、在Oracle 9i或之後的Oracle版本中共有兩種不同類型的初始化參數文件,它們是:
l 靜態參數文件(PFILE),該文件爲文本文件。
l 動態參數文件(SPFILE),該文件爲二進制文件。
2、當Oracle收到STARTUP命令之後,其執行順序如下:
l 首先使用服務器上的spfileSID文件啓動實例。
l 如果沒有找到spfileSID文件,就使用服務器上默認的SPFILE文件啓動實例。
l 如果沒有找到默認的SPFILE文件,就使用服務器上默認的PFILE文件啓動實例。
l 如果沒有找到initSID文件,就使用服務器上默認的PFILE文件啓動實例。
3、startup nomount
當以非加載(NOMOUNT)方式啓動數據庫,這是一種特殊的狀態,該狀態只有在創建數據庫時或重建控制文件期間使用。
4、startup mount
當以加載(MOUNT)方式啓動數據庫,這也是一種特殊狀態,該狀態在對數據庫進行某些特殊的維護期間使用,如對系統表空間進行恢復,或修改數據庫文件名,或移動數據文件。
5、startup open/startup (startup 這一句命令其實就完成了 nomount->mount->open這三步)
當以開啓(OPEN)方式啓動數據庫,這是數據庫正常操作的狀態。在該狀態下,任何合法的用戶都可以與數據庫連接和執行正常的數據訪問操作。
6、可以使用alter database命令將數據庫從NOMOUNT狀態轉變爲MOUNT狀態,或從MOUNT狀態轉爲OPEN狀態。比如:
alter database mount;
alter database open;
7、爲了防止用戶進程修改數據庫中的數據,可以將數據庫的狀態設置爲只讀:
alter database read only;
可以使用如下命令將數據庫的狀態置回爲正常的狀態:
alter database read write;
8、通過數據字典v$session來獲得當前系統用戶進程的SID(會話標示符)和SERIAL#(序列號)等信息:
select sid ,serial#,username,type from v$session;
然後可以通過例如:alter system kill session ‘7,19’;命令殺死這些用戶進程。
9、關閉數據庫的4種方式:
關閉方式 |
ABORT |
IMMEDIATE |
TRANSACTIONAL |
NORMALSHUTDOWN |
允許新的鏈接 |
No |
No |
No |
No |
等待到當前所有的會話結束 |
No |
No |
No |
Yes |
等待到當前所有的事物(交易)結束 |
No |
No |
Yes |
Yes |
強制型檢查點和關閉文件 |
No |
Yes |
Yes |
Yes |
10、commit 提交命令 rollback回滾命令
11、在Oracle數據庫中共有3種類型的常見診斷文件。它們是:報警文件(在UNIX系統上爲altertSID.log,在NT系統上爲SIDALRT.log)、後臺進程追蹤文件(background trace files)和用戶進程追蹤文件(user trace files)。
第4章 數據字典和控制文件
1、數據字典是由Oracle服務器創建和維護的一組只讀的系統表。數據字典分爲兩大類:一種爲基表,一種爲數據字典視圖。數據字典視圖把數據字典基表的信息轉換成了人們較爲容易理解的形式。
2、數據字典視圖分爲3大類。它們用前綴來區別,其前綴分別爲USER、ALL和DBA。
l USER_*:用戶自己創建的對象的信息。
l ALL_*:用戶自己創建的對象的信息再加上其他用戶創建的對象但該用戶有權訪問的信息。
l DBA_*:有關整個數據庫中對象的信息。
這裏的*可以爲TABLES、INDEXES、OBJECTS等。
3、通過查看數據字典user_tables,可以查看在你的賬號下有哪些表:
select table_name from user_tables; 或者:
select * from user _catalog;
同時數據字典user_catalog有一個別名叫做cat。用戶可以用此別名得到同樣的結果:
select * from cat;
4、通過查看數據字典all_tables,可以查看當前數據庫下有哪些表可以使用:
select table_name,owner from all_tables where owner not like ‘%SYS’;
5、數據字典視圖分爲靜態數據字典視圖和動態性能視圖。動態性能視圖是一種虛表,sys用戶擁有所有的動態性能視圖,它們的名字都是以v$開頭。
6、可以通過查詢數據字典v$fixed_table或dictionary來得到Oracle數據庫中所有的數據字典(視圖)。
7、通過v$database可以查看Oracle數據庫的名字,創建日期,該數據庫運行的歸檔模式,數據庫的狀態。
select name,created,log_mode,open_mode from v$database;
8、select host_name,instance_name,version from v$instance;
通過以上命令可以得到服務器的主機名、實例名和當前Oracle數據庫的版本號。
9、通過使用select * from v$version;可以得到Oracle數據庫管理系統版本方面的詳細信息。
10、通過select * from v$controlfile;可以得到控制文件的名字和路徑。
11、通過以下命令可以查看重做日誌的配置信息:
select group#,members,bytes,status,archived from v$log;
12、select * from v$logfile;通過該命令可以查看重做日誌文件所在的目錄。
13、通過使用 archive log file 命令可以查看Oracle數據庫的備份和恢復策略並確定歸檔文件的具體位置。
14、可以通過以下命令查看數據庫中到底有多少表空間以及表空間的狀態:
select tablespace_name,block_size,status,contents,logging from dba_tablespaces;
然後通過以下命令查看每個表空間存在哪個磁盤上以及文件名等信息:
select file_id,file_name,tablespace_name,status,bytes from dba_data_files;
15、查看數據庫的用戶情況:select username,created from dba_users;
16、控制文件是Oracle數據庫中極其重要的文件,該文件是一個比較小的二進制文件,它記載了物理數據庫的當前狀態。每一個控制文件只屬於一個數據庫,任何用戶都不能修改控制文件。
17、使用靜態參數化文件(PFILE)下的移動控制文件:
l 利用數據字典v$controlfile來獲取現有控制文件名字:
select * from v$controlfile;
l 正常關閉Oracle數據庫:
shutdown immediate
l 拷貝控制文件到其他磁盤
host copy 原路徑 目的路徑
l 將新的控制文件名添加到參數文件的control_files參數中:
show parameter pfile 通過這個命令可以找到參數文件
l 重新啓動數據庫
startup
l 利用數據字典v$controlfile來驗證新的控制文件名是否正確
select * from v$controlfile;
l 刪除舊的和無用的控制文件
18、使用動態參數化文件(SPFILE)下的移動控制文件:
l 利用數據字典v$controlfile來獲取現有控制文件名字:
select * from v$controlfile;
l 修改SPFILE,使用alter system set control_files命令來改變控制文件的位置,例如:
alter system set control_files=
’d:\control01.ctl’, ’d:\control02.ctl’,’d:\control02.ctl’ scope=SPFILE;
l 正常關閉Oracle數據庫:
shutdown immediate
l 拷貝控制文件到其他磁盤
host copy 原路徑 目的路徑
l 重新啓動數據庫
startup
l 利用數據字典v$controlfile來驗證新的控制文件名是否正確
select * from v$controlfile;
l 刪除舊的和無用的控制文件
第5章 重做日誌文件
1、強制性產生重做日誌切換的命令爲:alter system switch logfile;
2、強制性產生檢查點的命令爲:alter system checkpoint;
3、Oracle 提供了兩個可獲取重做日誌信息的數據字典,它們是v$log和v$logfile。
4、通過以下命令查看數據庫中有多少個重做日誌組,每個組中有多少個成員及它們的大小和狀態等信息:
select group#,sequence#,members,bytes,status,archived from v$log;
5、通過以下命令查看數據庫中每個重做日誌組的每個成員所在的目錄和文件名及它們的狀態等信息:
select * from v$logfile;
6、添加新的重做日誌組命令:
alter database add logfile
(‘j:\disk3\redo04a.log’,’ j:\disk6\redo04b.log’)
size 15M;
7、刪除一組不需要的重做日誌文件組命令:alter database drop logfile group 4;通過該命令刪除後,需要再使用操作系統操作刪除該日誌組文件。
8、當前狀態的重做日誌組不能刪除。如果要刪除,可以先使用重做日誌切換命令alter system switch logfile命令進行切換。每個實例至少有兩組重做日誌才能正常工作。
9、在重做日誌組中添加成員命令:
alter database add logfile member
‘j:\disk3\redo01b.log’ to group 1,
’ j:\disk3\redo02b.log’ to group 2,
’ j:\disk3\redo03b.log’ to group 3;
10、刪除不需要的重做日誌成員命令:
alter database drop logfile member ‘j:\disk3\redo03b.log’;
當然不能刪除當前組的成員,和第7點一樣。
11、在同一個數據庫中每個聯機重做日誌組中的成員個數能否不同?
在同一個數據庫中不同的聯機重做日誌文件組中其成員的大小能否不同?
答:可以不同,但是不應該這樣。
【ps:先列這麼多,以後有機會繼續更新.......】