HOWTO:Oracle Database

作者:Paul Haigh, [MAILTO] [email protected]

譯者:曾達康, [MAILTO] [email protected]

1.2 版, 一九九八年八月四日(翻譯日期︰一九九八年八月三十一日)

轉為 Wiki: Ping (ping 'at' pingyeh 'dot' net), 2003 年 11 月 27 日


在 Linux 系統中安裝及設定 Oracle 資料庫伺服器之指南。



  1. 導言
    1. 版本歷史
    2. Copyright
    3. Disclaimer
    4. 本 HOWTO 的目的
    5. 系統要求
    6. Oracle Corporation 的新消息
  2. 安裝 Oracle 軟件
    1. 伺服器的準備工夫
      1. 建立 Oracle 用戶
    2. 從光碟安裝
    3. 安裝後的工作
      1. Root 的工作
      2. Oracle 的工件
      3. 可移除的東西
  3. 建立一個資料庫
    1. 建立初始檔 (Initialisation File)
    2. 建立資料庫安裝命令稿
    3. 執行資料庫的安裝安令稿
    4. 啟動資料庫
    5. 停止資料庫
    6. 建立內定用戶 (Default User)
  4. 在伺服器上設定 SQL*Net
    1. tnsnames.ora
    2. listener.ora
    3. sqlnet.ora
    4. 開始及結朿監聽程式
  5. 用戶的設定
    1. 視窗用戶
    2. Unix 用戶
  6. 自動啟動及停止
    1. dbstart 及 dbstop
    2. init.d 及 rc.d
  7. 其他事宜
    1. Intelligent Agent
  8. 疑難排解
    1. 我不能在 Oracle 7.2.x 中建立資料庫。
    2. 7.3.4.x 的 svrmgrl 產生 segmentation fault。
  9. 榮譽

1. 導言

1.1. 版本歷史

1.2. Copyright

The Oracle Database HOWTO copyright (c) 1998, Paul Haigh.

Like all Linux HOWTO documents, this may be reproduced and distributed in whole or in part, in any medium, physical or electronic, so long as this copyright notice is retained on all copies.

Commercial redistribution is allowed and encouraged; however the author would like to be notified of such distributions. You may translate this HOWTO into any language whatsoever provided that you leave this copyright statement and disclaimer intact, and that you append a notice stating who translated the document.

1.3. Disclaimer

While I have tried to include the most correct and up to date information available to me, I cannot guarantee that usage of information in this document does not result in loss of data or equipment. I provide NO WARRANTY about the information in the HOWTO and I cannot be made liable for any consequences resulting from using the information in this HOWTO.

1.4. 本 HOWTO 的目的

在這 HOWTO 中我會嘗試說明如何安裝及管理一個在 Linux 上執行的 Oracle 資料庫,我會特別說明 Oracle 伺服器的安裝,SQL*Net 的設定及用戶 (client) 的設定。

這文件並不是一份有關使用及管理一個 Oracle 資料庫的入指引。如果你想要這類資料,O'Reilly 及其他出版商都有推出這方面的佳作。

我也不會說明在 Unix 上 Oracle 程式的開發過程。如果你對這有絕對需要,我建議你從 SCO 處購買 SCO development system (包括 OpenServer 5.x)。據我所知,這可以十分合理的十九塊美元從 www.sco.com 得到。

1.5. 系統要求

要跟從這篇 HOWTO 的內容,你需要以下東西。

1.6. Oracle Corporation 的新消息

Oracle 屈服於來自 Linux 社群的壓力。Oracle Corporation 已經決定向在 Linux 平台的 Oracle 8 提供官方支援。據 Oracle 網址說,這將會在一九九八年十二月推出。

更好的消息是 Oracle 會把 Oracle 應用軟件移植到 Linux 平台。根據 Oracle 的網頁,這應該會在一九九九年上半年推出。

參考資料:

2. 安裝 Oracle 軟件

2.1. 伺服器的準備工夫

2.1.1. 建立 Oracle 用戶

如大家所料,我們需要一個用戶來保存 Oracle 的資料庫。因為我們不想重新鏈結 Oracle 核心(容後再談),我們要接受 Oracle 內定的使用者及群組名稱,即使用者為 ORACLE,而群組為 DBA。

  1. 以 root 的身分簽入

  2. 建立使用者 oracle 及群組 dba。

    •  $ groupadd dba 
       $ useradd  oracle
       
        

  3. 確保使用者 oracle 有初始目錄 (home directory)

    •  $ mkdir /home/oracle
       $ mkdir /home/oracle/7.3.3.0.0 (Oracle 的版本)
       $ chown -R oracle.dba /home/oracle
       
        

2.2. 從光碟安裝

不幸地,SCO 光碟的 Oracle 安裝程式不能運作。使用者會遇到一連串不同的問題,從 core dump 到當機。所以我們要自己從光碟把檔案抄到硬碟及解壓:

(確保光碟已掛 (mount) 到系統上)。

  1. 以 Oracle 的身份簽入

  2. 到 /home/oracle/7.3.3.0.0 目錄。

  3. 從光碟抄出把所有安裝檔案

    •  $ cp -a /mnt/cdrom/* .
       
        

  4. 解壓光碟上的所有 Oracle 檔案。

    •  $ find . -name *_ -exec ~/7.3.3.0.0/orainst/oiuncomp {} \;
       
        

2.3. 安裝後的工作

2.3.1. Root 的工作

把以下數行加到 /etc/profile 或加到每一個會使用 Oracle 的用家的 .profile 中。

我們也需要修改 Oracle ulimit 提升工具的擁有人及許可 (permissions)。

2.3.2. Oracle 的工件

修改 Oracle 檔案的許可來確保操作正確。

Oracle 的工具要求把訊息放在 $ORACLE_HOME/tool_name/mesg 目錄。所以我們要把及 msg_ship 目錄下的msg 檔案移到 mesg 目錄下。

如果沒有以下目錄,要建立它們:

2.3.3. 可移除的東西

以下目錄可以安全地移除:

3. 建立一個資料庫

Oracle 伺服器現已安裝了,我們需要建立一個資料庫來測試它。

如果你使用 Oracle 7.2.x 或之前版本,請閱讀下面的疑難排解部分。

3.1. 建立初始檔 (Initialisation File)

把 $ORACLE_HOME/dbs/init.ora 抄到 $ORACLE_HOME/dbs/initorcl.ora:

加上以下數行:

3.2. 建立資料庫安裝命令稿

在 $ORACLE_HOME/dbs 目錄下建立一個名為 makedb.sql 的命令稿檔:

3.3. 執行資料庫的安裝安令稿

開始 svrmgrl 及執行命令稿︰

3.4. 啟動資料庫

開始時,我們要親手啟動資料庫(我們稍後會把這工件自動化)。要啟動 Oracle 的資料庫,我們要來內部連接 (connected internally) 了的情況下執行 startup 指令:

3.5. 停止資料庫

先旨聲明,在未關閉一個 Oracle 資料庫的情況下重新啟動 Linux 很有可能會使資料庫損毀。

因此,在我們執行 Linux 的 shutdown 指令前最好先關閉資料庫:

3.6. 建立內定用戶 (Default User)

在建立資料庫時,會自動產生兩個特別的用戶:

這些用戶通常是用來保存標準的資料字典 (data dictionary) 資料在資料庫中。盡快把密碼修改是一個好主意。

可以這樣做:

用戶 system/manager 就如 UNIX 中的 root,因此我們要建立另一個權力較少的用戶以防損失。(記著要先開啟資料庫才建立用戶。)

連接到 SQL*Plus 及建立用戶:

系統中已有一個新用戶,你可以用他來試用新系統。要簽入 Oracle 資料庫:

如果這在沒有錯誤訊息的情況下完成,你已有一個運作中的 Oracle 資料庫。如果你只會從這部電腦連接到這資料庫,而不會從其他地方,你可休息了!

不過,如果你像大部分人般想設定網絡軟件使你可以從其他電腦連接,請繼續讀下去。

4. 在伺服器上設定 SQL*Net

所有這些檔案都會用於設定 Oracle 的網絡軟件(SQL*Net,和 Oracle8 的 Net8 差不多)。這些檔案應該都建立在伺服器中的 $ORACLE_HOME/network/admin 目錄。

4.1. tnsnames.ora

TNSNAMES.ORA 檔設定所有這電腦提供的服務。現在我們描述所有掛上了伺服器的資料庫。對伺服器上所有資料庫你要加上類似以下的一段:

4.2. listener.ora

listener.ora 檔描述所有其他電腦可得到的服務及伺服器的監聽程式 (listener) 所需的所有設定。

它有一段包括監聽程式名稱、監聽程式地址、監聽程式提供服務的資料庫及參數設定 (listener name, listener address, databases served by the listener and configuration parameters)。

這裡有一個例子:

4.3. sqlnet.ora

sqlnet.ora 檔包括對網絡上一個特定節點 (node) 的設定。這些資料和資料庫的數目及監聽程式的數目無關。這個檔案中最重要的東西是 Dead Connection Timeout 變數的設定。

Dead connection timeout 檢查每一個接到該資料庫的行程及確保用戶端仍有反應。如果那用戶(類型不拘)並無反應,對應的 Oracle 伺服器影子行程 (shadow process) 便會被殺。

如果你有很多用戶存取那資料庫,這點非常有用。尤其是當你仍在程式開發階段,用戶多數不能正確地結朿的時候。

以下是我的 sqlnet.ora 檔,供各讀者參考:

4.4. 開始及結朿監聽程式

現在有關監聽程式及 SQL*Net 的設定已經完成,我們可以試用網絡軟件來駁到資料庫。(之前我們只是直接連接到資料庫,現在則是在模擬使用遠程 (remote) 用戶。)

使用以上的設定來啟動監聽程式:

要停止監聽程式:

如果你的 DNS 並不傳回指定的主機的 IP 地址,啟動及結朿監聽程式會花一點時間(依據 DNS 2-3 的逾時變數 (timeout variable),大致在 2-3 分鐘之間)。如果真的發生這情況,請耐心等待,不必擔心。

5. 用戶的設定

5.1. 視窗用戶

在 PC 上使用較新版本的 Oracle Client Software 設定 SQL*Net 十分簡單。最佳(也最方便)得到一個運作完全正常的用戶是使用 Oracle 提供的 SQL*Net Easy Configuration 工具。

這工具有一個精靈 (wizard) 的介面,可帶領你設定 tnsnames.ora 及 sqlnet.ora 兩個檔案。

選擇 "Add Database Alias" 及在被問及時打入代號名稱。這代號是你用以指定資料庫的名稱,這應該和資料庫名稱相同(這裡是 orcl)。

在通訊協定 (protocol) 中選擇 TCP/IP,在被問及時回答主機名稱 (machine hosting the database) 及資料庫名稱 (instance name)。

就是這樣了。

不過,即使你沒有 SQL*Net Easy Configuration 工具也不用擔心。你只需在 $ORACLE_HOME/network/admin 目錄中建立和在伺服器中一模一樣的 tnsnames.ora 和 sqlnet.ora 檔。這樣會使你得到相同的別名(這是一個好主意)。

5.2. Unix 用戶

UNIX 用戶和視窗用戶分別不大。如果你有 Oracle 的 Network Manager,做法和以上差不多。沒有的話,再說一次,只需使用和伺服器 $ORACLE_HOME/network/admin 目錄中相同的設定檔。

6. 自動啟動及停止

6.1. dbstart 及 dbstop

Oracle 資料庫的自動啟動及停止可籍 Oracle 提供的 dbstart 及 dbshut 檔達成 (在 7.3.3.0.0 中)。這些檔案又耍依靠 /etc/oratab 存在才能使用(雖然更改 dbshut 和 dbstart 檔可使解除這限制。)

/etc/oratab 檔格式如下:

例如

6.2. init.d 及 rc.d

要在開機關機時自動啟動和結朿資料庫的話,你需要修改 Linux 的啟動命令稿。這並不困難,不過,我需要指出這些改動因應不同的 Linux 發行版本(slackware, debian, redhat 等)而有所不同。我這些例子適用於 Redhat 5.0。要為你所用的 Linux 作出修改,請先參考你手頭上的 Linux 文件。(雖然這實際上應該適用於所有 Sys V UNIX。)

首先,我們要建立會執行 /etc/rc.d/init.d 目錄中 dbshut 及 dbstart 的命令稿。把以下檔案命名為 /etc/rc.d/init.d/oracle:

不要吝嗇於檢查這個檔案到底有沒有真的正確地啟動和停止系統中的資料庫。請檢查記錄檔(log file),看看有沒有錯誤訊息。

弄妥這命令稿後,我們要在正確的執行等級目錄 (runlevel directories) /etc/rc.d/rcX.d 中建立及刪除符號連結 (symbolic links)。

以下指令確保在執行等級 2, 3 及 4 下會叫出資料庫︰

要在重新啟動時停止資料庫,我們需要以下連結︰

7. 其他事宜

7.1. Intelligent Agent

如果你需要 Oracle Intelligent Agent,我發現你不需修改任何設定便能執行它。要啟動 IA 的話︰

要停止 IA︰

不會出現任何訊息說明啟動或停止 intelligent agent 是否成功。不過,在用戶端它有對 Enterprise Manager 作出回應,所以我假設它運作正常。

8. 疑難排解

這裡有一些關疑難排解的提示。

8.1. 我不能在 Oracle 7.2.x 中建立資料庫。

Oracle 7.2.x 產品錯誤地假設你想設定平行伺服器 (parallel server)。內置的 init.ora 檔中有以下一句︰

要解決這問題只需把它變為註解︰

8.2. 7.3.4.x 的 svrmgrl 產生 segmentation fault。

有不少人報告過這問題給我。Gerald Weber [MAILTO] [email protected] 解決了它︰

9. 榮譽

這文件根據 Bob Withers, [MAILTO] [email protected] 的一篇文件寫成。其他資料是來自 Georg Rehreld, [MAILTO] [email protected] 和 David Mansfield, [MAILTO] [email protected] 所寫的文件。

其他的校對工作由 Bob Withers, Mark Watling, [MAILTO] [email protected], Peter Sodhi, [MAILTO] [email protected] and Greg Hankins, [MAILTO] [email protected] 完成。

我要多謝所有參與這篇文件的人的支持及所作出的研究。特別要多謝 Bob Withers 和 Mark Watling 的附加意見及作出的幫忙。

last edited 2004-12-25 08:45:57 by PingYeh