1. 程式人生 > >Oracle安裝 配置 使用 方法總結

Oracle安裝 配置 使用 方法總結

關於Struts2 130529143交流。
有償技術支援Q群:
398162181 

Oracle學習筆記

1.安裝資料庫軟體

1.1安裝oracle資料庫服務端

         oracle服務端安裝在遠端伺服器上。

在該伺服器上配置監聽

配置網路服務

Oracle 資料庫監聽配置

一、監聽器(LISTENER)

  監聽器是Oracle基於伺服器端的一種網路服務,主要用於監聽客戶端向資料庫伺服器端提出的連線請求。既然是基於伺服器端的服務,那麼它也只存在於資料庫伺服器端,進行監聽器的設定也是在資料庫伺服器端完成的。

二、本地服務名(Tnsname)

  Oracle客戶端與伺服器端的連線是通過客戶端發出連線請求,由伺服器端監聽器對客戶端連線請求進行合法檢查,如果連線請求有效,則進行連線,否則拒絕該連線。

本地服務名是Oracle客戶端網路配置的一種,另外還有Oracle名字伺服器(Oracle Names Server)等。Oracle常用的客戶端配置就是採用的本地服務名,本文中介紹的也主要是基於本地服務名的配置。

三、Oracle網路連線配置方法

  配置Oracle伺服器端與客戶端都可以在其自帶的圖形化Oracle網路管理器(Oracle Net Manager)裡完成(強烈建議在這個圖形化的工具下完成Oracle服務端或客戶端的配置)。在Windows下,點選“開始/程式/Oracle - OraHome92/Configuration and Migration Tools/Net Manager”啟動Oracle網路管理器工具,在Linux/Unix下,利用netmgr命令來啟動圖形化Oracle網路管理器,如:

$ netmgr

Windows下啟動Net Manager圖形視窗如下圖示:


方法/步驟

 Oracle監聽器配置(LISTENER)

  如圖(一)示,選中樹形目錄中監聽程式項,再點選左上側“+”按鈕新增監聽程式,點選監聽程式目錄,預設新加的監聽器名稱是LISTENER(該名稱也可以由任意合法字元命名)。選中該名稱,選中視窗右側欄下拉選項中的“監聽位置”,點選新增地址按鈕。在出現的網路位址列的協議下拉選項中選中“TCP/IP”,主機文字框中輸入主機名稱或IP地址(如果主機即用作服務端也作為客戶端,輸入兩項之一均有效;如果主機作為服務端並需要通過網路連線,建議輸入IP地址),埠文字框中輸入數字埠,預設是1521,也可以自定義任意有效數字埠。配置好的監聽位置如下圖示:


2

選中視窗右側欄下拉選項中的“資料庫服務”,點選新增資料庫按鈕。在出現的資料庫欄中輸入全域性資料庫名,如myoracle。注意這裡的全域性資料庫名與資料庫SID有所區別,全域性資料庫名實際通過域名來控制在同一網段內資料庫全域性命名的唯一性,就如Windows下的域名控制器,如這裡可以輸入 myoracle.192.168.1.5。Oracle主目錄可以不填寫,輸入SID,如myoracle。完整的資料庫服務配置如下圖示:


儲存以上配置,預設即可在Oracle安裝目錄下找到監聽配置檔案 (Windows下如D:oracleora92networkadminlistener.ora,Linux/Unix下$ORACLE_HOME/network/admin/listerer.ora)。至此,Oracle服務端監聽器配置已經完成。

本地服務名配置(Tnsnames)

  本地服務名是基於Oracle客戶端的網路配置,所以,如果客戶端需要連線資料庫伺服器進行操作,則需要配置該客戶端,其依附物件可以是任意一臺欲連線資料庫伺服器進行操作的pc機,也可以是資料庫伺服器自身。如前面所介紹,可以利用Oracle自帶的圖形化管理工具Net Manager來完成Oracle客戶端的配置。選中如圖(一)中的服務命名,再點選左上側“+”按鈕,彈出如下圖示對話方塊:


輸入Net服務名,如myoracle,點選下一步,進入下圖示對話方塊:


選中TCP/IP(Internet協議),點選下一步,如下圖示:


輸入主機名與埠號。注意這裡的主機名與埠號必須與資料庫伺服器端監聽器配置的主機名和埠號相同。點選下一步,如下圖示:


選中(Oracle8i或更高版本)服務名,輸入服務名。這裡的服務名實際上就是資料庫伺服器端監聽器配置中的全域性資料庫名,前者與後者必須相同。連線型別通常選專用伺服器,這要視資料庫伺服器的配置而定,如果配置的共享資料庫伺服器,這裡的連線型別就要選共享伺服器,否則建議選專用伺服器(關於專用伺服器的介紹請參閱相關文件)。配置好後點擊下一步,如下圖示:


如果資料庫伺服器端相關服務啟動了,可以點選測試按鈕進行連線測試。Oracle預設是通過scott/tiger使用者進行測試連線,由於scott使用者是 Oracle自帶的示例使用者,對於正式的業務資料庫或專業測試資料庫可能沒有配置這個使用者,所以需要更改成有效的使用者登入才可能測試成功。如果這裡測試連線不成功,也不要緊,先點完成按鈕結束配置。

  回到Oracle網路管理器(Oracle Net Manager)主視窗,儲存配置,預設即可在Oracle安裝目錄下找到本地服務名配置檔案 (Windows下如D:oracleora92networkadmintnsnames.ora,Linux/Unix下$ORACLE_HOME/network/admin/ tnsnames.ora)。配置完成的本地服務名如下圖示:


樹形目錄下的服務命名可以通過編輯選單裡的重新命名選單更改成任意合法字元組成的服務名稱,注意服務名稱前不能有空格字元,否則可能無法連線資料庫伺服器。

連線資料庫伺服器

(1)   啟動伺服器端監聽器與資料庫服務

Linux/Unix下,啟動監聽器:

$ lsnrctlstart                    

關閉監聽器:

$ lsnrctl stop

檢視監聽狀態:

$ lsnrctl status

啟動資料庫:

$ sqlplus /nolog

SQL>conn [email protected] assysdba   --這裡的myoracle是前面配置的客戶端本地服務名

SQL>conn / as sysdba

SQL>startup

Windows下,啟動監聽器:

C:lsnrctl start

啟動Oracle例項服務:

C:oradim ?ahref="http://game.pchome.net/pcgame" class="none"title="cs" rel="external">cstartup –sidmyoracle  

關閉Oracle例項服務:

C:oradim –shutdown –sid myoracle

  以上服務必須同時啟動,客戶端才能連線資料庫。由於預設配置的監聽器名稱是Listener,上述命令可以正常啟動監聽器,如果監聽器名稱是其它名稱,如aListener,則需要用下列方式才能啟動:

Linux/Unix下:

$ lsnrctl start aListener

Windows下:

C:lsnrctl start aListener

(2)   測試連線資料庫伺服器

  測試的方法多種多樣,可以在上面配置本地服務名時進行測試,也可以是第三方客戶端工具,如PL/SQL Developer,最方便的是用Oracle自帶的sqlplus工具,以下利用sqlplus進行測試:

C:sqlplus /nolog

SQL>conn [email protected]

已連線。

客戶端連線伺服器端常見問題排除方法

  要排除客戶端與伺服器端的連線問題,首先檢查客戶端配置是否正確(客戶端配置必須與資料庫伺服器端監聽配置一致),再根據錯誤提示解決。下面列出幾種常見的連線問題:

1、 ORA-12541:TNS: 沒有監聽器

顯而易見,伺服器端的監聽器沒有啟動,另外檢查客戶端IP地址或埠填寫是否正確。啟動監聽器:

$ lsnrctl start

C:lsnrctl start

2、 ORA-12500:TNS: 監聽程式無法啟動專用伺服器程序

對於Windows而言,沒有啟動Oracle例項服務。啟動例項服務:

C:oradim –startup -sidmyoracle

3、 ORA-12535:TNS: 操作超時

  出現這個問題的原因很多,但主要跟網路有關。解決這個問題,首先檢查客戶端與服務端的網路是否暢通,如果網路連通,則檢查兩端的防火牆是否阻擋了連線。

4、 ORA-12154:TNS: 無法處理服務名

  檢查輸入的服務名與配置的服務名是否一致。另外注意生成的本地服務名檔案(Windows下如D:oracleora92networkadmin tnsnames.ora,Linux/Unix下/network/admin/tnsnames.ora)裡每項服務的首 行服務名稱前不能有空格。

5、 ORA-12514:TNS: 監聽程序不能解析在連線描述符中給出的 SERVICE_NAME

  開啟Net Manager,選中服務名稱,檢查服務標識欄裡的服務名輸入是否正確。該服務名必須與伺服器端監聽器配置的全域性資料庫名一致。

6、 Windows下啟動監聽服務提示找不到路徑

  用命令或在服務視窗中啟動監聽提示找不到路徑,或監聽服務啟動異常。開啟登錄檔,進入HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/OracleOraHome92TNSListener項,檢視ImagePath字串項是否存在,如果沒 有,設定值為D:oracleora92BINTNSLSNR,不同的安裝路徑設定值做相應的更改。這種方法同樣適用於Oracle例項服務,同上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleServiceMYORACLE項,檢視ImagePath字串項是否存在,如果沒有,則新建,設定值為d:oracleora92 binORACLE.EXE MYORACLE。

以上是Oracle客戶端連線伺服器端常見的一些問題,當然不能囊括所有的連線異常。解決問題的關鍵在於方法與思路,而不是每種問題都有固定的答案。

在該伺服器上配置本地網路服務。

1.2安裝資料庫客戶端。

         客戶端安裝在本地。

         客戶端配置網路服務名。

3. 使用方法

3.1建立表空間

需求:建立表空間:equms_v1, 使用者名稱:equmsdba, 密碼:equmsdba123 。

/*以dba的身份登入*/

sys/Oracle123 as sysdba;

/*刪除已存在的表空間(若存在的話)*/

drop tablespace equms_v1_temp;

drop tablespace equms_v1;

/*建立表空間分為四步 */

/*第1步:建立臨時表空間  */

/* tempfile 'C:\equms_v1_temp.dbf'  指定表臨時空間檔案的儲存位置,確保該目錄存在*/

create temporary tablespaceequms_v1_temp 

tempfile 'C:\equms_v1_temp.dbf'    

size 50m 

autoextend on 

next 50m maxsize 5120m 

extent management local; 

/*第2步:建立資料表空間  */

/* datafile 'C:\equms_v1.dbf'  指定表空間檔案的儲存位置,確保該目錄存在*/

create tablespace equms_v1 

logging 

datafile 'C:\equms_v1.dbf'      

size 50m 

autoextend on 

next 50m maxsize 5120m 

extent management local;

/*第3步:建立使用者並指定表空間  */

create user equmsdba identified byequmsdba123 

default tablespace equms_v1 

temporary tablespace equms_v1_temp;

/*第4步:給使用者授予許可權  */

grant connect,resource,dba to equmsdba; 

3.2資料庫管理一

(1) oracle登入

  sqlplus下:

//以dba身份登入,要有assysdba。

       sys/[email protected]:1521/equms as sysdba

//以普通身份登入

       scott/[email protected]:1521/equms

//注意:

//服務端監聽配置的埠若是1521,則可省略埠號,預設是1521.

 scott/[email protected]/equms  

//預設連線127.0.0.1:1521埠下的環境變數中的oracle例項

  system/equms123

  //注意:@127.0.0.1/equms:指明連線哪個資料庫例項,equms就是全域性資料庫名

         ip地址應是資料庫服務端所在伺服器的ip

這些是在登入後的操作。

1、執行SQLPLUS工具

C:\Users\wd-pc>sqlplus

2、直接進入SQLPLUS命令提示符

C:\Users\wd-pc>sqlplus /nolog

3、以OS身份連線

C:\Users\wd-pc>sqlplus / as sysdba   

SQL>connect / as sysdba

4、普通使用者登入

C:\Users\wd-pc>sqlplus scott/123456  或

SQL>connect scott/123456  

SQL>connect scott/[email protected]

5、以管理員登入

C:\Users\wd-pc>sqlplus sys/123456 as sysdba 或

SQL>connect sys/123456 as sysdba

6、切換使用者

SQL>conn hr/123456 

注:connconnect

 7、退出

exit

(2)查詢當前登入使用者所在的全域性資料庫名:

select * fromglobal_name;  

(3)查詢當前資料庫名:

select database_name from v$database;

(4)查詢當前資料庫例項名:

方法一:
select name from v$database;
結果:

select database_name from v$database;

方法二:
select instance_name from v$instance;
結果:方法三:plsql的命令視窗下執行:
show parameter instance
結果:

注:通常資料庫例項名與資料庫名相同。

比如我們作開發,要連線資料庫,就得連線資料庫例項名:   

jdbc:oracle:thin:@localhost:1521:orcl(orcl就為資料庫例項名) 

(5)查詢已存在的表空間:

selecttablespace_name from dba_tablespaces;  

//查詢當前登入使用者所在的例項中,所有的表空間名稱。

(6)刪除已存在的表空間:

drop tablespaceequms_v1 ;  

//刪除表空間equms_v1,刪除後還要刪除相應的表空間檔案,

如equms_v1.dbf,equms_v1_temp.dbf這是建立表空間是生成的檔案。

(7)查詢當前使用者登入的表空間所擁有的序列

select * fromuser_sequences;

(8)建立序列

CREATE SEQUENCEjob_sequence 

    INCREMENT BY 1  

    START WITH 1     

    NOMAXVALUE      

    NOCYCLE         

    CACHE 10;

(9)修改使用者名稱密碼

alter user scott identified by Scott123;  //將scott使用者的密碼修改為Scott123,修改前先以dba身份登入,登陸方式見(1)

(10)檢視sga

select * from v$sga;      //檢視系統全域性共享區SystemGlobal Area(SGA)

(11)檢視資料庫版本

select * from v$version;  //檢視當前資料庫版本

3.3資料庫管理二

3.3.1資料庫備份:

expCIBINPUT/[email protected] file=C:\\DMP\20130620.DMP full=y

"CIBINPUT/[email protected]"其中“CIBINPUT”分別指表空間的賬號和密碼,“dba”指表空間名

3.3.2資料庫恢復:

imp CIBINPUT/[email protected]=C:\DMP\20130620.DMP full=y

"CIBINPUT/[email protected]"其中“CIBINPUT”分別指表空間的賬號和密碼,“dba”指表空間名

附錄

1監聽詳解:

在資料庫啟動過程,oracle會向監聽程式註冊相應的服務,任意的一個數據庫都會有兩條資訊註冊到監聽器中:oracle對應的instance_name和service_name。

客戶端是通過監聽程式連線到資料庫伺服器的,監聽中記錄著相應的oracleservice,而客戶端只需要在tnsnames中提供正確的服務名就可以建立和資料庫伺服器的連線。

以下為伺服器上的listener.ora檔案

# listener.oraNetwork Configuration File:C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora

# Generated byOracle configuration tools.

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (ORACLE_HOME =C:\app\Administrator\product\11.2.0\dbhome_1)

      (PROGRAM = extproc)

      (ENVS ="EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST =CaoPeng)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

    )

  )

ADR_BASE_LISTENER =C:\app\Administrator

其中,LISTENER是伺服器中監聽程序的名稱;

PROTOCOL  表明所使用的網路協議,若是TCP/IP協議,則該值必須為“TCP”;

HOST  表示伺服器的網路地址,為伺服器的IP或者網內的機器名;

PORT  指TCP/IP協議在主機中所佔用埠號,ORACLE預設使用1521,是在安裝ORACLE資料庫時定義的,在安裝時可以改變,安裝完成後不能改變此值;

SID_NAME  指伺服器上執行的ORACLE資料庫名稱,該值應與.bash_profile檔案中的環境變數ORACLE_SID相同(一般情況下此檔案為預設值“PLSExtProc”);

ORACLE_HOME  是指ORACLE資料庫的主目錄,該值也應與. bash_profile檔案中的環境變數ORACLE_HOME相同。

客戶機為了和伺服器連線,必須先和伺服器上的監聽程序聯絡。ORACLE通過tnsnames.ora檔案中的連線描述符來說明連線資訊。一般tnsnames.ora 是建立在客戶機上的。如果是客戶機/伺服器結構,整個網路上只有一臺機器安裝了ORACLE資料庫伺服器,那麼只需在每個要訪問ORACLE伺服器的客戶機上定義該檔案,在伺服器上無需定義。但是,如果網路上有多臺機器均安裝了ORACLE資料庫伺服器,並且伺服器之間有資料共享的要求,那麼在每臺伺服器上都必須定義該檔案。

以下是客戶端tnsnames.ora內容:

# tnsnames.oraNetwork Configuration File:C:\app\Administrator\product\11.2.0\client_1\network\admin\tnsnames.ora

# Generated byOracle configuration tools.

ORCL.127.0.0.1 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

EXTPROC_CONNECTION_DATA=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

其中,ADDRESS_LIST  表示該客戶機要經由多種協議與一臺或多臺伺服器連線。在該樣式檔案中就表示該客戶機要用TCP/IP協議來和伺服器相連。

PROTOCOL 指明要連線使用的協議。

SERVICE_NAME  “SERVICE_NAME”就是“Global Database Name”,通常的格式為“name.domain”,

HOST  是TCP/IP協議使用的伺服器IP地址或者機器名稱。

PORT  是TCP/IP使用的埠地址。

SID  指定要連線的伺服器上ORACLE資料庫的ORACLE_SID。

SERVER=DEDICATED 表示用專用伺服器連線ORACLE資料庫,該選項在伺服器上的tnsnames.ora檔案中會出現。

Lsnrctl命令綜述

  Lsnrctl命令用來管理Oracle監聽器,是一個命令列介面。想呼叫這個命令列工具,在命令列鍵入lsnrctl即可。可以在LSNRCTL>提示符下鍵入help來顯示這些命令的一份清單。

  Services 列舉出服務的一個彙總表及為每個協議服務處理程式所建立和拒絕的連線資訊個數

  Start listener 啟動指定的監聽器

  Status listener顯示指定監聽器的狀態

  Stop listener 關閉指定的監聽器

  Trace 開啟監聽器的跟蹤特性

  Version 顯示Oracle Net軟體與協議介面卡的版本

  Change_password 允許使用者修改關閉監聽器所需要的密碼

  Reload 重新讀取listener.ora檔案,但不關閉監聽器。如果該檔案發生了變化,重新重新整理監聽器。

  Save_config 當從lsnrctl工具中對listener.ora檔案進行了修改時,複製一個叫做listener.bak的listener.ora檔案

  Exit 退出lsnrctl實用工具

  Quit 執行和exit相同的功能

  C:\>lsnrctl services


Oracle資料庫,例項,表空間,使用者,表之間的關係簡析
一、資料庫
  我們在安裝Oracle資料庫時,會讓我們選擇安裝啟動資料庫(即預設的全域性資料庫)如下圖: 


全域性資料庫名:就是一個數據庫的標識,在安裝時就要想好,以後一般不修改,修改起來也麻煩,因為資料庫一旦安裝,資料庫名就寫進了控制檔案,資料庫表,很多地方都會用到這個資料庫名。

全域性資料庫,是資料庫系統的入口,它會內建一些高階許可權的使用者如SYS,SYSTEM等。我們用這些高階許可權賬號登陸就可以在資料庫例項中建立表空間,使用者,表了。

  查詢當前資料庫名:

Sql程式碼  

1.  select name from v$database;  

二、資料庫例項

用Oracle官方描述:例項是訪問Oracle資料庫所需的一部分計算機記憶體和輔助處理後臺程序,是由程序和這些程序所使用的記憶體(SGA)所構成一個集合。

  其實就是用來訪問和使用資料庫的一塊程序,它只存在於記憶體中。就像Java中new出來的例項物件一樣。

  我們訪問Oracle都是訪問一個例項,但這個例項如果關聯了資料庫檔案,就是可以訪問的,如果沒有,就會得到例項不可用的錯誤。

  例項名指的是用於響應某個資料庫操作的資料庫管理系統的名稱。她同時也叫SID。例項名是由引數instance_name決定的。

查詢當前資料庫例項名:

Sql程式碼  

1.  select instance_name from v$instance;  

  資料庫例項名(instance_name)用於對外部連線。在作業系統中要取得與資料庫的聯絡,必須使用資料庫例項名。

Xml程式碼  

1. jdbc:oracle:thin:@localhost:1521:orcl(orcl就為資料庫例項名)  

  一個數據庫可以有多個例項,在作資料庫服務叢集的時候可以用到。

三、表空間

Oracle資料庫是通過表空間來儲存物理表的,一個數據庫例項可以有N個表空間,一個表空間下可以有N張表。

  有了資料庫,就可以建立表空間。

  建立表空間語法:

Sql程式碼  

1.  Create TableSpace 表空間名稱  

2.  DataFile          表空間資料檔案路徑  

3.  Size              表空間初始大小  

4.  Autoextend on  

  如:

Sql程式碼  

1.  create tablespace db_test  

2.  datafile 'D:\oracle\product\10.2.0\userdata\db_test.dbf'  

3.  size 50m  

4.  autoextend on;   

  檢視已經建立好的表空間:

Sql程式碼  

1.  select default_tablespace, temporary_tablespace, d.username  

2.  from dba_users d  

四、使用者

Oracle資料庫建好後,要想在資料庫裡建表,必須先為資料庫建立使用者,併為使用者指定表空間。

  上面我們建好了資料庫和表空間,接下來建使用者:

  建立新使用者

Sql程式碼  

1.  CREATE USER          使用者名稱  

2.  IDENTIFIED BY        密碼  

3.  DEFAULT TABLESPACE   表空間(預設USERS)  

4.  TEMPORARY TABLESPACE 臨時表空間(預設TEMP)  

  如:

Sql程式碼  

1.  CREATE USER utest  

2.  IDENTIFIED BY utestpwd  

3.  DEFAULT TABLESPACE db_test  

4.  TEMPORARY TABLESPACE temp;(這裡臨時表空間不能使用我們建立的db_test,不知為何?)  

  有了使用者,要想使用使用者賬號管理自己的表空間,還得給它分許可權:

Sql程式碼  

1.  GRANT CONNECT TO utest;  

2.  GRANT RESOURCE TO utest;  

3.  GRANT dba TO utest;--dba為最高階許可權,可以建立資料庫,表等。  

  檢視資料庫使用者:

Sql程式碼  

1.  select  * from dba_users;  

五、表

有了資料庫,表空間和使用者,就可以用自定義的使用者在自己的表空間建立表了。有了表,我們可以開發了 。

在本文裡你可以瞭解以下內容

  1、 ORACLE 例項——包括記憶體結構與後臺程序

  2、 ORACLE 資料庫——物理作業系統檔案的集合

  3、 瞭解記憶體結構的組成

  4、 瞭解後臺程序的作用

  5、 瞭解資料庫的物理檔案

  6、 解釋各種邏輯結構

  一、ORACLE例項

  1、ORACLE 例項

  SystemGlobal Area(SGA) 和Background Process 稱為資料庫的例項。

  2、ORACLE 資料庫

  一系列物理檔案的集合(資料檔案,控制檔案,聯機日誌,引數檔案等)

  3、系統全域性共享區System Global Area(SGA)

  SystemGlobal Area 是一塊巨大的共享記憶體區域,他被看做是Oracle資料庫的一個大緩衝池,這裡的資料可以被ORACLE的各個程序共用。其大小可以通過如下語句檢視:

  SQL>select * from v$sga;

  NAMEVALUE

  -----------------------------

  FixedSize 39816

  VariableSize 259812784

  DatabaseBuffers 1.049E+09

  RedoBuffers 327680

  更詳細的資訊可以參考V$sgastat、V$buffer_pool

  主要包括以下幾個部分:

  a、 共享池(Shared pool)

  共享池是SGA中最關鍵的記憶體片段,特別是在效能和可伸縮性上。一個太小的共享池會扼殺效能,使系統停止,太大的共享池也會有同樣的效果,將會消耗大量的CPU來管理這個共享池。不正確的使用共享池只會帶來災難。共享池主要又可以分為以下兩個部分:

  SQL語句緩衝(LibraryCache)

   當一個使用者提交一個SQL語句,Oracle會將這句SQL進行分析(parse),這個過程類似於編譯,會耗費相對較多的時間。在分析完這個SQL, Oracle會把他的分析結果給儲存在Sharedpool的LibraryCache中,當資料庫第二次執行該SQL時,Oracle自動跳過這個分析過程,從而減少了系統執行的時間。這也是為什麼第一次執行的SQL比第二次執行的SQL要慢一點的原因。

  下面舉例說明parse的時間

  SQL>select count(*) fromscpass ;

  COUNT(*)

  ----------

  243

  Elapsed:00:00:00.08

  這是在Share_pool和Databuffer 都沒有資料緩衝區的情況下所用的時間

  SQL>alter system flush SHARED_POOL;

  Systemaltered.

  清空Share_pool,保留Databuffer

  SQL>select count(*) from scpass ;

  COUNT(*)

  ----------

  243

  Elapsed:00:00:00.02

  SQL>select count(*) from scpass ;

  COUNT(*)

  ----------

  243

  Elapsed:00:00:00.00

  從兩句SQL的時間差上可以看出該SQL的Parse 時間約為00:00:00.02

   對於儲存在共享池中的SQL語句,可以從V$Sqltext、v$Sqlarea中查詢到,對於程式設計者來說,要儘量提高語句的重用率,減少語句的分析時間。一個設計的差的應用程式可以毀掉整個資料庫的Sharepool,提高SQL語句的重用率必須先養成良好的變成習慣,儘量使用Bind變數。

  資料字典緩衝區(DataDictionary Cache)

  顯而易見,資料字典緩衝區是ORACLE特地為資料字典準備的一塊緩衝池,供ORACLE內部使用,沒有什麼可以說的。

  b、塊緩衝區快取記憶體(DatabaseBuffer Cache)

   這些緩衝是對應所有資料檔案中的一些被使用到的資料塊。讓他們能夠在記憶體中進行操作。在這個級別裡沒有系統檔案,,戶資料檔案,臨時資料檔案,回滾段文 件之分。也就是任何檔案的資料塊都有可能被緩衝。資料庫的任何修改都在該緩衝裡完成,並由DBWR程序將修改後的資料寫入磁碟。

  這個緩衝區的塊基本上在兩個不同的列表中管理。一個是塊的“髒”表(DirtyList),需要用資料庫塊的

   書寫器(DBWR)來寫入,另外一個是不髒的塊的列表(FreeList),一般的情況下,是使用最近最少使用(Least Recently Used,LRU)演算法來管理。塊緩衝區快取記憶體又可以細分為以下三個部分(Defaultpool,Keep pool,Recycle pool)。如果不是人為設定初始化引數(Init.ora),ORACLE將預設為Defaultpool。由於作業系統定址能力的限制,不通過特殊設定,在32位的系統上,塊緩衝區快取記憶體最大可以達到1.7G,在64位系統上,塊緩衝區快取記憶體最 大可以達到10G。

  c、重做日誌緩衝區(Redo logbuffer)

  重做日誌檔案的緩衝區,對數 據庫的任何修改都按順序被記錄在該緩衝,然後由LGWR程序將它寫入磁碟。這些修改資訊可能是DML語句,如(Insert,Update,Delete),或DDL語句,如(Create,Alter,Drop等)。 重做日誌緩衝區的存在是因為記憶體到記憶體的操作比較記憶體到硬碟的速度快很多,所以重作日誌緩衝區可以加快資料庫的操作速度,但是考慮的資料庫的一致性與可恢 復性,資料在重做日誌緩衝區中的滯留時間不會很長。所以重作日誌緩衝區一般都很小,大於3M之後的重作日誌緩衝區已經沒有太大的實際意義。

  d、Java程式緩衝區(JavaPool)

  Java的程式區,Oracle 8I以後,Oracle 在核心中加入了對Java的支援。該程式緩衝區就是為Java 程式保留的。如果不用Java程式沒有必要改變該緩衝區的預設大小。

  e、大池(LargePool)

  大池的得名不是因為大,而是因為它用來分配大塊的記憶體,處理比共享池更大的記憶體,在8.0開始引入。

  下面物件使用大池:

  MTS——在SGA的LargePool中分配UGA

  語句的並行查詢(ParallelExecuteion of Statements)——允許程序間訊息緩衝區的分配,用來協調 並行查詢伺服器

  備份(Backup)——用於RMAN磁碟I/O快取

  4、後臺程序(Backgroundprocess)

   後臺程序是Oracle的程式,用來管理資料庫的讀寫,恢復和監視等工作。ServerProcess主要是通過他和userprocess進行聯絡和溝通,並由他和userprocess進行資料的交換。在Unix機器上,Oracle後臺程序相對於作業系統程序,也就是說,一個Oracle後臺程序將啟動一個作業系統進 程;在Windows機器上, Oracle後臺程序相對於作業系統執行緒,開啟工作管理員,我們只能看到一個ORACLE.EXE的程序,但是通過另外的工具,就可以看到包含在這裡程序 中的執行緒。

  在Unix上可以通過如下方法檢視後臺程序:

  ps–ef | grep ora_

  #ps -ef | grep ora_ | grep XCLUAT

  oracle29431 1 0 Sep 02 2:02ora_dbwr_SID

  oracle29444 1 0 Sep 02 0:03ora_ckpt_SID

  oracle29448 1 0 Sep 02 2:42ora_smon_SID

  oracle29442 1 0 Sep 02 3:25ora_lgwr_SID

  oracle29427 1 0 Sep 02 0:01ora_pmon_SID

  a、Oracle系統有5 個基本程序他們是

  DBWR(資料檔案寫入程序)

  LGWR(日誌檔案寫入程序)

  SMON(系統監護程序)

  PMON(使用者程序監護程序)

  CKPT(檢查點程序,同步資料檔案, 日誌檔案,控制檔案)

  b、DBWR

  將修改過的資料緩衝區的資料寫入對應資料檔案

  維護系統內的空緩衝區

  這裡指出幾個容易錯誤的概念:

  當一個更新提交後,DBWR把資料寫到磁碟並返回給使用者提交完成.

  DBWR會觸發CKPT 後臺程序

  DBWR不會觸發LGWR 程序

  上面的概念都是錯誤的.

  DBWR是一個很底層的工作程序,他批量的把緩衝區的資料寫入磁碟。和任何前臺使用者的程序幾乎沒有什麼關係,也不受他們的控制。至於DBWR會不會觸發LGWR和CKPT程序,我們將在下面幾節裡討論。

  DBWR工作的主要條件如下

  DBWR超時

  系統中沒有多的空緩衝區用來存放資料

  CKPT程序觸發DBWR 等

  c、LGWR

  將重做日誌緩衝區的資料寫入重做日誌檔案,LGWR是一個必須和前臺使用者程序通訊的程序。當資料被修改的時候,系統會產生一個重做日誌並記錄在重做日誌緩衝區內。這個重做日誌可以類似的認為是以下的一個結構:

  SCN=000000001000

  資料塊ID

  物件ID=0801

  資料行=02

  修改後的資料=0011

  提交的時候,LGWR必須將被修改的資料的重做日誌緩衝區內資料寫入日誌資料檔案,然後再通知前臺程序提交成功,並由前臺程序通知使用者。從這點可以看出LGWR承擔了維護系統資料完整性的任務。

  LGWR工作的主要條件如下

  使用者提交

  有1/3重做日誌緩衝區未被寫入磁碟

  有大於1M重做日誌緩衝區未被寫入磁碟

  超時

  DBWR需要寫入的資料的SCN號大於LGWR 記錄的SCN號,DBWR 觸發LGWR寫入

  d、SMON

  工作主要包含

  清除臨時空間

  在系統啟動時,完成系統例項恢復

  聚結空閒空間

  從不可用的檔案中恢復事務的活動

  OPS中失敗節點的例項恢復

  清除OBJ$表

  縮減回滾段

  使回滾段離線

  e、PMON

  主要用於清除失效的使用者程序,釋放使用者程序所用的資源。如PMON將回滾未提交的工作,釋放鎖,釋放分配給失敗程序的SGA資源。

  f、CKPT

  同步資料檔案,日誌檔案和控制檔案,由於DBWR/LGWR的工作原理,造成了資料檔案,日誌檔案,控制檔案的不一至,這就需要CKPT程序來同步。CKPT會更新資料檔案/控制檔案的頭資訊。

  CKPT工作的主要條件如下

  在日誌切換的時候

  資料庫用immediate,transaction , normal 選項shutdown資料庫的時候

  根據初始話檔案LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET的設定的數值來確定

  使用者觸發

  以下程序的啟動需要手工配置

  g、ARCH

  當資料庫以歸檔方式執行的時候,Oracle會啟動ARCH程序,當重做日誌檔案被寫滿時,日誌檔案進行切換,舊的重做日誌檔案就被ARCH程序複製到一個/多個特定的目錄/遠端機器。這些被複制的重做日誌檔案被叫做歸檔日誌檔案。

  h、RECO

  負責解決分佈事物中的故障。Oracle可以連線遠端的多個數據庫,當由於網路問題,有些事物處於懸而未決的狀態。RECO程序試圖建立與遠端伺服器的通訊,當故障消除後,RECO程序自動解決所有懸而未決的會話。

  i、服務程序ServerProcess

  服務程序的分類

  專用服務程序(DedicatedServer Process)

  一個服務程序對應一個使用者程序

  共享服務程序(MultiTreadedServer Process)

  一個服務程序對應多個使用者程序,輪流為使用者程序服務。

  PGA& UGA

  PGA= Process Global Area

  UGA= User Global Area

  他儲存了使用者的變數、許可權、堆疊、排序空間等使用者資訊,對於專用伺服器程序,UGA在PGA中分配。對於多執行緒程序,UGA在Largepool中分配。

  j、使用者程序UserProcess

  在客戶端,將使用者的SQL語句傳遞給服務程序

  5、一個貫穿資料庫全域性的概念----系統改變號SCN(SystemChange Number)

  系統改變號,一個由系統內部維護的序列號。當系統需要更新的時候自動增加,他是系統中維持資料的一致性和順序恢復的重要標誌。

  a.查詢語句不會使SCN增加,就算是同時發生的更新,資料庫內部對應的SCN也是不同的。這樣一來就保證了資料恢復時候的順序。

  b.維持資料的一致性

  二、ORACLE資料庫

  ORACLE資料庫的組成——物理作業系統檔案的集合。主要包括以下幾種。

  1、控制檔案(引數檔案init.ora記錄了控制檔案的位置)

  控制檔案包括如下主要資訊

  資料庫的名字,檢查點資訊,資料庫建立的時間戳

  所有的資料檔案,聯機日誌檔案,歸檔日誌檔案資訊

  備份資訊等

  有了這些資訊,Oracle就知道那些檔案是資料檔案,現在的重做日誌檔案是哪些,這些都是系統啟動和執行的基本條件,所以他是Oracle執行的根本。如果沒有控制檔案系統是不可能啟動的。控制檔案是非常重要的,一般採用多個鏡相

控制檔案的丟失,將使資料庫的恢復變的很複雜。

  控制檔案資訊可以從V$Controlfile中查詢獲得

  2、資料檔案(資料檔案的詳細資訊記載在控制檔案中)

  可以通過如下方式檢視資料檔案

  SQL>select name from v$datafile;

  NAME

  ---------------------------------------------

  /u05/dbf/PROD/system_01.dbf

  /u06/dbf/PROD/temp_01.dbf

  /u04/dbf/PROD/users_01.dbf

  /u09/dbf/PROD/rbs_01.dbf

  /u06/dbf/PROD/applsys_indx_01.dbf

  /u05/dbf/PROD/applsys_data_01.dbf

  從以上可以看出,資料檔案大致可以分為以下幾類:

  i.系統資料檔案(system_01.dbf)

  存放系統表和資料字典,一般不放使用者的資料,但是使用者指令碼,如過程,函式,包等卻是儲存在資料字典中的。

  名詞解釋:資料字典 資料字典是一些系統表或檢視,他存放系統的資訊,他包括資料庫版本,資料檔案資訊,表與索引等段資訊,系統的執行狀態等各種和系統有關的資訊和使用者指令碼資訊。資料庫管理員可以通過對資料字典的查詢,就可以瞭解到Oracle的執行狀態。

  ii.回滾段檔案(rbs_01.dbf)

  如果資料庫進行對資料的修改,那麼就必須使用回滾段,回滾段是用來臨時存放修改前的資料(BeforeImage)。回滾段通常都放在一個單獨的表空間上(回滾表空間),避免表空間碎片化,這個表空間包含的資料檔案就是回滾資料檔案。

  iii.臨時資料檔案(temp_01.dbf)

  主要存放使用者的排序等臨時資料,與回滾段相似,臨時段也容易引起表空間碎片化,而且沒有辦法在一個永久表空間上開闢臨時段,所以就必須有一個臨時表空間,它所包含的資料檔案就是臨時資料檔案,主要用於不能在記憶體上進行的排序操作。我們必須為使用者指定一個臨時表空間。

  iv.使用者資料檔案(/applsys_data_01.dbf,applsys_indx_01.dbf)

  存放使用者資料,這裡列舉了兩類常見的使用者型資料,一般資料和索引資料,一般來說,如果條件許可的話,可以考慮放在不同的磁碟上。

  3、重做日誌檔案(聯機重做日誌)

   使用者對資料庫進行的任何操作都會記錄在重做日誌檔案。在瞭解重做日誌之前必須瞭解重做日誌的兩個概念,重做日誌組和重做日誌組成員(Member),一 個數據庫中至少要有兩個日誌組檔案,一組寫完後再寫另一組,即輪流寫。每個日誌組中至少有一個日誌成員,一個日誌組中的多個日誌成員是鏡相關係,有利於日 志文件的保護,因為日誌檔案的損壞,特別是當前聯機日誌的損壞,對資料庫的影響是巨大的。

  聯機日誌組的交換過程叫做切換,需要特別注意的是,日誌切換在一個優化效果不好的資料庫中會引起臨時的“掛起”。掛起大致有兩種情況:

  在歸檔情況下,需要歸檔的日誌來不及歸檔,而聯機日誌又需要被重新利用

  檢查點事件還沒有完成(日誌切換引起檢查點),而聯機日誌需要被重新利用

  解決這種問題的常用手段是:

  i.增加日誌組

  ii.增大日誌檔案成員大小

  通過v$log可以檢視日誌組,v$logfile可以檢視具體的成員檔案。

  4、歸檔日誌檔案

   Oracle可以執行在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模式,當然,你就不會有歸檔日誌,但是,你的系統將不會是一個實用系統,特別 是不能用於生產系統,因為你可能會丟失資料。但是在歸檔模式中,為了儲存使用者的所有修改,在重做日誌檔案切換後和被覆蓋之間系統將他們另外儲存成一組連續 的檔案系列,該檔案系列就是歸檔日誌檔案。

  有人或許會說,歸檔日誌檔案佔領我大量的硬碟空間,其實,具體想一想,你是願意浪費一點磁碟空間來 保護你的資料,還是願意丟失你的資料呢?顯而義見,我們需要保證我們的資料的安全性。其實,歸檔並不是一直佔領你的磁碟空間,你可以把她備份到磁帶上,或 則刪除上一次完整備份前的所有日誌檔案。

  5、初始化引數檔案

  initSID.ora或init.ora檔案,因為版 本的不一樣,其位置也可能會不一樣。在8i中,通常位於$ORACLE_HOME/admin//Pfile下,初始化檔案記載了許多資料庫的啟動引數, 如記憶體,控制檔案,程序數等,在資料庫啟動的時候載入(Nomount時載入),初始化檔案記錄了很多重要引數,對資料庫的效能影響很大,如果不是很了 解,不要輕易亂改寫,否則會引起資料庫效能下降。

  6、其他檔案

  i. 密碼檔案

  用於Oracle的具有sysdba許可權使用者的認證.

  ii.日誌檔案

  報警日誌檔案(alert.log或alrt.ora)

   記錄資料庫啟動,關閉和一些重要的出錯資訊。資料庫管理員應該經常檢查這個檔案,並對出現的問題作出即使的反應。你可以通過以下SQL找到他的路徑selectvalue from v$PARAMETER where name ="background_dump_dest";

  後臺或使用者跟蹤檔案

   系統程序或使用者程序出錯前寫入的資訊,一般不可能讀懂,可以通過ORACLE的TKPROF工具轉化為可以讀懂的格式。對於系統程序產生的跟蹤檔案與報 警日誌檔案的路徑一樣,使用者跟蹤檔案的路徑,你可以通過以下SQL找到他的路徑selectvalue from v$PARAMETER where name ="user_dump_dest";

  三、ORACLE邏輯結構

  1、 表空間(tablespace)

  表空間是資料庫中的基本邏輯結構,一系列資料檔案的集合。一個表空間可以包含多個數據檔案,但是一個數據檔案只能屬於一個表空間。

  2、 段(Segment)

  段是物件在資料庫中佔用的空間,雖然段和資料庫物件是一一對應的,但段是從資料庫儲存的角度來看的。一個段只能屬於一個表空間,當然一個表空間可以有多個段。

  表空間和資料檔案是物理儲存上的一對多的關係,表空間和段是邏輯儲存上的一對多的關係,段不直接和資料檔案發生關係。一個段可以屬於多個數據檔案,關於段可以指定擴充套件到哪個資料檔案上面。

  段基本可以分為以下四種

  資料段(DataSegment)

  索引段(IndexSegment)

  回滾段(RollbackSegment)

  臨時段(TemporarySegment)

  3、區間(Extent)

   關於Extent的翻譯有多種解釋,有的譯作擴充套件,有的譯作盤區,我這裡通常譯為區間。在一個段中可以存在多個區間,區間是為資料一次性預留的一個較大 的儲存空間,直到那個區間被用滿,資料庫會繼續申請一個新的預留儲存空間,即新的區間,一直到段的最大區間數(MaxExtent)或沒有可用的磁碟空間可以申請。 在ORACLE8i以上版本,理論上一個段可以無窮個區間,但是多個區間對ORACLE卻是有效能影響的,ORACLE建議把資料分佈在儘量少的區間上, 以減少ORACLE的管理與磁頭的移動。

  4、Oracle資料塊(Block)

  ORACLE最基本的儲存單位,他是OS資料塊的整數倍。ORACLE的操作都是以塊為基本單位,一個區間可以包含多個塊(如果區間大小不是塊大小的整數倍,ORACLE實際也擴充套件到塊的整數倍)。

  5、基本表空間介紹

  a.系統表空間

  主要存放資料字典和內部系統表基表

  檢視資料資料字典的SQL

  select* from dict

  檢視內部系統表的SQL

  select* from v$fixed_view_definition

  DBA對系統的系統表中的資料字典必須有一個很深刻的瞭解,他們必須準備一些基礎的SQL語句,通過這些SQL可以立即瞭解系統的狀況和資料庫的狀態,這些基本的SQL包括

  系統的剩餘空間

  系統的SGA

  狀態系統的等待

  使用者的許可權

  當前的使用者鎖

  緩衝區的使用狀況等

  在成為DBA的道路上我們不建議你過分的依賴於OEM/Quest等優秀的資料庫管理工具,因為他們不利於你對資料資料字典的理解,SQL語句可以完成幾乎全部的資料庫管理工作。

  大量的讀少量的寫是該表空間的一個顯著的特點。

  b.臨時表空間.

  臨時表空間顧名思義是用來存放臨時資料的,例如排序操作的臨時空間,他的空間會在下次系統啟動的時候全部被釋放。

  c.回滾段表空間

  i.回滾段在系統中的作用

   當資料庫進行更新插入刪除等操作的時候,新的資料被更新到原來的資料檔案,而舊的資料(BeforeImage)就被放到回滾段中,如果資料需要回滾,那麼可以從回滾段將資料再複製到資料檔案中。來完成資料的回滾。在系統恢復的時候, 回滾段可以用來回滾沒有被commit 的資料,解決系統的一至性。

  回滾段在什麼情況下都是大量的寫,一般是少量讀,因此建議把回滾段單獨出來放在一個單獨的裝置(如單獨的磁碟或RAID),以減少磁碟的IO爭用。

  ii.回滾段的工作方式

  一個回滾表空間可以被劃分成多個回滾段.

  一個回滾段可以儲存多個會話的資料.

  回滾段是一個圓形的資料模型

  假設回滾段由4個區間組成,他們的使用順序就是區間1à區間2à區間3à區間4à區間1。也就是說,區間是可以迴圈使用的,當區間4到區間1的時候,區間1裡面的會話還沒有結束, 區間4用完後就不能再用區間1,這時系統必須分配區間5,來繼續為其他會話服務服務。

  我們分析一個Update語句的完成

  ①. 使用者提交一個Update 語句

  ②. Server Process 檢查記憶體緩衝.

  如果沒有該資料塊的緩衝,則從磁碟讀入

  i.如果沒有記憶體的有效空間,DBWR被啟動將未寫入磁碟的髒緩衝寫入磁碟

  ii.如果有有效空間,則讀入

  ③. 在緩衝內更新資料

  i.申請一個回滾段入口,將舊資料寫如回滾段

  ii.加鎖並更新資料

  iii.並在同時將修改記錄在Redolog buffer中

我本機裝了oracle的資料庫。現在我想要用PLSQL developer 一定要裝oracle的服務端的嗎?

需要32位的oci.dll檔案。

如果你本機的oracle是32位的,不需要裝其他東西。

如果本機oracle是64位的,則需要裝一個32位的oracle 客戶端。

oracle中服務名,例項名,資料庫名的理解

===========================================================

資料庫名:一個數據庫的標識,用DB_NAME來表示,用於區分資料的內部標識,是以二進位制方式儲存於資料庫控制檔案中的引數,在資料安裝或建立之後將不得修改。資料庫安裝完成後,該引數被寫入資料庫引數檔案pfile中.

資料庫例項名:用於和作業系統進行聯絡的標識,用INSTANCE_NAME來表示,對外部連線時使用.資料庫和作業系統之間的互動