第四章、 建立資料庫

    4.1 組態檔 -dmconfig.ini

      -Dmconfig.ini 的格式
      -Dmconfig.ini 的放置位置
      -重要的關鍵字
      -預設值
      -典型的 dmconfig.ini 組態檔

    4.2 DBMaker 的基本設定

      -檔案名稱和檔案大小
      -檔案位置
      -Raw Devices
      -資料庫通訊與控制區域
      -DBMaker的安全性設定
      -DBMaker的預設使用者和和密碼

    4.3 建立資料庫

    4.4 啟動資料庫

      -啟動單人使用資料庫
      -啟動主從式資料庫
      -啟動模式
      -強迫啟動

    4.5 連結和離開資料庫

      -連結和離開主從式資料庫
      -連結逾時
      -鎖定逾時

    4.6 關閉資料庫

 

 

 

       

     


第四章、建立資料庫

    在本章中我們將介紹基本的資料庫管理,包括如何建立資料庫、啟動資料庫、連結到資料庫以及關閉資料庫。

    4.1 組態檔 -dmconfig.ini

      當DBMaker執行時,它需要讀取許多參數設定。這些參數就儲存於 dmconfig.ini組態檔中。使用者或資料庫管理員可藉由設定  dmconfig.ini 組態檔中的參數來訂定資料庫的規格。如欲查閱 dmconfig.ini 中所有的參數,請參閱附錄A。

      -Dmconfig.ini 的格式

        dmconfig.ini 組態檔的格式如下所述:

      [節名]

      <關鍵字> = <設定值>

      <關鍵字> = <設定值> <設定值> ; 分號之後的文字是註解

      ; 註解

      ...

      ...

      ...

      [節名]

      <關鍵字> = <設定值> <設定值>

      <關鍵字> = <設定值>

      ...

      ...

        節的名稱被中括號〔〕括起來,它同為資料庫的名稱。在節(section)中的關鍵字定義了此資料庫的設定值。所有在分號後的字串均視為註解。

        - Dmconfig.ini 的放置位置

        在UNIX 平台上,DBMaker 依序去下列三個地方找組態檔:

        1.目前的目錄。

        2.環境變數 DBMAKER 所指定的目錄。

        3.使用者dbmaker 主目錄(home directory)下的 data 子目錄,~dbmaker/data目錄。

      然而在Windows統下,包括了Windows 95和Windows NT, dmconfig.ini的放置位置與UNIX版有所不同。DBMaker 僅去搜尋 Windows系統的安裝目錄。一般而言,Windows 系統是安裝在 Windows、Win95 或 Winnt 目錄之下。當DBMaker需要查詢某一個資料庫中的參數時, DBMaker 會掃描上述的目錄(若是 Windows 系統則為 Windows目錄)來尋找 dmconfig.ini中的對應值。使用者可以利用純文字編輯器來修改或增加 dmconfig.ini 組態檔中的參數值。當資料庫管理員建立新的資料庫,且 dmconfig.ini 的各節中沒有相同資料庫名的設定時,DBMaker會於最先發現的組態檔中新增一段以資料庫名為節名的新節,若沒有發現組態檔,DBMaker 會在目前的目錄 (若是 Windows 系統則為 Windows 目錄) 建立新的組態檔,並新增一段以資料庫名為節的節(section)。所以當資料庫管理員啟動資料庫時,其相對應的節必須存在組態檔中,否則 DBMaker 會傳回錯誤訊息。雖然您可以在上述三個目錄中分別建立組態檔,並在不同的組態檔中寫入各種的節,但實際上我們並不建議您如此作。使用一個大家共用的dmconfig.ini 組態檔能讓您更容易地管理資料庫系統。

      - 重要的關鍵字

        下面是一些 dmconfig.ini 組態檔中的關鍵字

        -- DB_DBFIL = <檔案名稱> - 指定系統資料檔的檔名為<檔案名稱>。

        -- DB_BBFIL = <檔案名稱> - 指定系統BLOB檔的檔名為<檔案名稱>。

        -- DB_JNFIL = <檔案名稱> - 指定系統日誌檔的檔名為<檔案名稱>。

        -- DB_JNLSZ = <頁數> - 指定系統日誌檔的大小以頁為單位,預設值為1000 個頁。

        -- DB_USRDB = <檔案名稱><頁數> - 指定使用者資料檔的檔名為 <檔案名稱>,且其大小以頁為單位。

        -- DB_USRBB= <檔案名稱> <欄框數目> - 指定使用者BLOB檔的檔名為所訂定的<檔案名稱>,且其大小以欄框為單位。

        -- <邏輯檔名> = <實體檔名><頁數> - 指定將使用者指定檔的<邏輯檔名>名字對應到<實體檔名>,而其大小以頁為單位。換言之,<實體檔名>是<邏輯檔名>的實際檔名,而<邏輯檔名>是資料庫系統內部所使用名稱。

        -- DB_NBUFS = <頁數> - 緩衝區大小以頁為單位。

        --DB_SVADR = <IP位址> 或 <主機名稱> - 指定資料庫伺服器的網路位址或主機名稱。在主從架構模式下,這個關鍵字必須設定於客戶端。

        --DB_PTNUM = <通訊埠編號> - 指定資料庫伺服器和客戶端的TCP/IP通訊埠編號。

        注意:每個頁的大小為 4K bytes。

        注意:除了<邏輯檔名>有分大小寫外,其餘所有的符號比對為大小寫不分。

        注意:有關欄框的資料,請參考“資料庫管理手冊”第八章 j 型物件的管理。

      -預設值

        許多的關鍵字都有預設值。所以在 dmconfig.ini 中找不到對應的關鍵字時,DBMaker 會使用預設值。詳細的關鍵字描述和其預設值請參閱附錄A。

      -典型的 dmconfig.ini 組態檔

        下列是 dmconfig.ini 組態檔的範例:

        [Personnel]

        DB_DBFIL = /disk1/bin/PERSONNEL.SDB

        DB_JNFIL = /disk1/bin/PERSONNEL.JNL

        DB_USRDB = /disk1/bin/PERSONNEL.DB 500

        DB_USRBB = /disk1/bin/PERSONNEL.BB 50

        f1.os = /disk1/bin/PERSONNEL.OS 100

        f1.blob = /disk1/bin/PERSONNEL.BLOB 1000

        DB_UMODE = 1 ; 多使用者模式

        DB_NBUFS = 50

        DB_NJNLB = 100

        DB_NTRAN = 100

        DB_JNLSZ = 2000

        DB_RTIME = 0

        DB_SVADR = 192.72.116.130 ; 伺服器的 IP位址

        DB_PTNUM = 21000 ; 和其通訊埠編號

        [LIBRARY]

        DB_DBFIL=/disk3/usr/lib/library.sdb

        DB_JNFIL=/disk3/usr/lib/library.jnl

        DB_SVADR = 192.72.116.137

        DB_PTNUM = 26999

        DB_JNLSZ = 2000

        在這個例子中,定義了兩個節於dmconfig.ini 中,一個是名為Personnel的資料庫,另一個則是名為 LIBRARY 的資料庫。

上一節

      4.2 DBMaker 的基本設定

      在這節中我們將檢視一些DBMaker執行時所需的基本設定。假如資料庫管理員並不考慮資料庫的效能因素,他可以忽略大部份的設定參數,對這些未設定的參數,DBMaker會使用預設值。

      -檔案名稱和檔案大小

        在 dmconfig.ini 中,使用者可以藉由增加以下數行來指定系統檔案的名稱:

        DB_DBFIL = <檔案名稱>

        <檔案名稱>參數可以僅為一檔案名稱,如 firstdb.db,或是一個相對的路徑名稱如mydb/firstdb.db,或是絕對路徑如 /disk1/mydb/firstdb.db( 在Windows系統下“/”應改為“\”且含磁碟機代碼,如 c:\mydb\first.db )。

        在前兩個例子中會從目前的工作目錄開始搜尋檔案。系統資料庫檔的初始大小為150頁(600 KB) 。日誌檔的設定和系統檔相似。日誌檔檔名和大小可以利用以下關鍵字來設定:

        DB_JNFIL = <檔案名稱>

        DB_JNLSZ = <頁數>

        DBMaker 的日誌檔大小預設為 1000 頁 (4 MB) 。

        系統 BLOB (Binary Large OBject) 檔的設定。請利用下列關鍵字:

        DB_BBFIL = <檔案名稱>

        系統 BLOB 檔的初始大小為一頁加上一個欄框。

        使用者資料檔的設定。請利用下列關鍵字:

        DB_USRDBdb = <檔案名稱> <頁數>

        DBMaker 的使用者資料檔大小預設為 150頁。

        使用者 BLOB 檔的設定。請利用下列關鍵字:

        DB_USRBB = <檔案名稱> <頁數>

        DBMaker 的使用者 BLOB 檔大小預設為2個欄框。

        假如 DB_DBFIL、DB_JNFIL、DB_BBFIL均沒有設定,DBMaker 將會使用預設值。它們的預設值分別為:

        DB_DBFIL -- database name + '.SDB'

        DB_JNFIL -- database name + '.JNL'

        DB_BBFIL -- database name + '.SBB'

        DB_USRDB -- database name + '.DB'

        DB_USRBB -- database name + '.BB'

        當建立資料庫時,DBMaker會根據 dmconfig.ini 中的相關設定來建立系統資料庫檔、日誌檔、系統二進位大型物件檔,使用者資料庫和使用者二進位大型物件檔。DBMaker 允許使用者藉由在 dmconfig.ini 下增加以下設定來增加檔案至資料庫中:

        <邏輯檔案> = <實體檔案> <頁數>

         

        <邏輯檔案>關鍵字是DBMaker所使用的邏輯檔名,而<實體檔案>參數則為作業系統所使用的實際檔名,<頁數>參數是實際檔案的頁數或欄數,且一定要有的,不能省略。DBMaker將建立一個<頁數>個頁的檔案,並將之連結到資料庫中的特定表空間。

      -檔案位置

        假如不同的使用者要從不同的工作目錄來存取資料庫,那麼在 dmconfig.ini中的檔名就必須要為全路徑名,唯有如此 DBMaker才能正確地找到檔案。另外一種方式為設定關鍵字 DB_DBDIR。您可以把這個關鍵字視為資料庫所在的目錄。假如您在 dmconfig.ini 中定義了這個關鍵字,那麼 DBMaker 會假定所有未指名的檔案都在這個目錄中。

        範例:

        [DB1]

        DB_DBDIR = /disk1/db

        DB_DBFIL = mydb1

        DB_JNFIL = /disk2/usr/DB1.JNL

        實際的檔名為:

        DB_DBFIL -- /disk1/db/mydb1

        DB_JNFIL -- /disk2/usr/DB1.JNL

        DB_BBFIL -- /disk1/db/DB1.SBB (使用預設的檔名)

        範例:

        [DB2]

        DB_DBFIL = mydb2

        DB_JNFIL = /disk2/usr/DB2.JNL

        實際的檔名為:

        DB_DBFIL -- mydb2 (目前工作目錄)

        DB_JNFIL -- /disk2/usr/DB2.JNL

        DB_BBFIL -- DB2.SBB ( 目前的工作目錄)

        注意: 這個規則亦適用於使用者定義檔,即 <邏輯檔名>。

      -Raw Devices

        DBMaker儲存系統的實體非常複雜。DBMaker允許使用者於 UNIX上利用一般檔案、raw device 檔案或兩者合用來建立資料庫。在 dmconfig.ini 中,假如檔名以 /dev/ 開頭均視為 raw device。因在 raw device 的輸出入動作較UNIX 的檔案系統為快,所以我們鼓勵資料庫管理員使用raw device來建立資料庫檔案。欲使用 raw device 來作資料庫檔案,系統管理員必須先建立 raw device。請參考 UNIX 系統手冊來建立 raw device。舉例來說,一個raw device 有100個磁柱於硬碟上,而每個磁柱有1000個區段,每個區段大小為0.5KB。那麼在 dmconfig.ini 中的<頁數>參數應為

         

        注意:微軟的 Windows 和 Windows NT並不支援 raw device。

        範例:

        [RAW1]

        DB_DBFIL = /dev/rdsk/c2t0d0s2

        [RAW2]

        DB_DBDIR = /dev

        FILE1 = rsd2c 1000

      -資料庫通訊與控制區域

        資料庫通訊與控制區域是一塊儲存資料庫控制資訊和資料的記憶體。在多人使用資料庫中,資料庫通訊與控制區域是從共享記憶體中配置,並且用來做行程間的通訊。當資料庫啟動時,資料庫系統會配置資料庫通訊與控制區域來儲存資料庫相關之資訊。資料庫通訊與控制區域可以分為三部份:頁緩衝區、日誌緩衝區和系統控制區。和資料庫通訊與控制區域相關的組態設定有:

        DB_NBUFS = <頁數 > 指定 DBMaker 頁緩衝區的頁數。預設值為 250。

        DB_NJNLB = <頁數 > 指定 DBMaker 日誌緩衝區的頁數。預設值為 64。

        DB_SCASZ = <頁數 > 指定 DBMaker 系統控制區的頁數。預設值為 100。

        DB_NTRAN = <number> 指定 DBMaker 最大的交易數。預設值為 20。

        一般來說指定較大的交易數需增加系統控制區的大小。

        資料庫通訊與控制區域的大小粗略等於頁緩衝區,日誌緩衝區和系統控制區的大小總和。但此估計值可能會比真正的需求為小。這種情形通常發生在系統控制區的大小太小。當資料庫通訊與控制區域的配置不夠大時,DBMaker會自動地配置足夠大的記憶體而非上述的估計值。在 UNIX 系統中,資料庫通訊與控制區域的大小不能超過多使用者環境中可配置共享記憶體的大小。因在這情形下,資料庫通訊與控制區域是從共享記憶體中配給而來。使用者可以參考 UNIX 手冊來加大系統的共享記憶體,通常來說加大系統的共享記憶體需要重建系統的核心。擁有較大的緩衝區和控制區域會使 DBMaker 執行的更加順暢。資料庫通訊與控制區域和頁緩衝區、日誌緩衝區和控制區域的關係請詳閱資料庫管理員參考手冊。

      -DBMaker的安全性設定

        對單人使用的資料庫,沒有安全性的關鍵字需要設定。對主從架構模式的資料庫,使用者可以在建立資料庫時,藉由以下的設定來打開或關閉安全設定:

        DB_SECUR = <0 或 1>

        將這個參數設為 0 代表關閉安全設定,設為1則表示打開安全設定,對多人使用的資料庫來說其預設值為 1。當資料庫被建立後,就再也沒有方法來改變其安全設定了。

      -DBMaker的預設使用者和和密碼

        DBMaker 允許您指定一個預設的使用者和密碼來連接資料庫。其設定如下:

        DB_USRID = <使用者名稱>

        DB_PASWD = <密碼>

        預設的使用者和密碼必須已存在資料庫中。當資料庫啟動時並不會檢查這兩關鍵字,而是在連接時才會。

上一節

    4.3 建立資料庫

        因DBMaker不同模組的資料庫檔案格式均相同,資料庫管理員可利用DMSQL 工具或伺服器管理員 (Server Manager) 來建立具安全性或不具安全性 (請設定 dmconfig.ini 中 DB_SECUR)的資料庫。當建立一個不具安全性的資料庫後,除了重新建立資料庫外,就再也不能改為具安全性的資料庫。請利用 DMSQL 執行以下的指令來建立資料庫:

        dmSQL> create db <database name>;

        dmSQL> terminate db;

        dmSQL> quit;

        小等。在建立資料庫前,資料庫管理員必須先指定必要的參數於 dmconfig.ini中如檔名或檔案大; 當建立具安全性的資料庫時,DBMaker 會建立一個預設的使用者,名為 SYSADM,且暫無密碼。SYSADM 具有資料庫所有的權限和存取權力,所資料庫建立完成後,管理員必須使用 ALTER PASSWORD 指令,為 SYSADM 提供一個密碼。

上一節

    4.4 啟動資料庫

        DBMaker有許多方法來啟動一個已存在的資料庫。啟動資料庫的目的在於:從作業系統配置所須要的資源、將之起始、並等待使用者的連接。

        -啟動單人使用資料庫

        使用者在使用單人使用模式的資料庫時必須在連接前先啟動資料庫,在使用後將之關閉。您可以利用 DMSQL 工具執行以下的指令來來啟動單人使用資料庫:

        dmSQL> start db <database name> <user name> <password> ;

        .< 執行 SQL 指令 >

        .dmSQL> terminate db;

        請注意唯有具資料庫管理員權限的使用者才能啟動資料庫。資料庫管理員權限相關的資訊請參考資料庫管理員參考手冊。在啟動單人使用資料庫後,僅有一位使用者能存取這個資料庫。

      -啟動主從式資料庫

        在主從式資料庫下,資料庫管理員必須於伺服器端先啟動資料庫,而後於不同機器上的客戶端才能藉由網路連接至資料庫。和單人使用資料庫比較起來,啟動主從式資料庫較為複雜,首先我們必須知道伺服器的網路位址。因並非所有客戶端都和伺服器位於相同的機器,所以網路位址成為網路上能區別機器的識別資料。伺服器的網路位址定義於 dmconfig.ini 中的 DB_SVADR 關鍵字。其次要決定的是網路通訊埠。伺服端程式將會繫結在一個固定的網路通訊埠(指定於dmconfig.ini中的DB_PTNUM)上,並等待客戶的連接。所有的客戶端程式必須連接該通訊埠以便和伺服端程式溝通。舉例來說,您可以將下列兩個關鍵字加到 dmconfig.ini 中:

        DB_SVADR = <伺服器 IP 位址> (客戶端)

        DB_PTNUM = <通訊埠編號> (伺服端和客戶端)

        請於伺服器端使用dmserver程式來啟動主從式資料庫:

        UNIX> dmserver <database name>

        在您輸入了使用者帳號和密碼後,dmserver 會啟動資料庫並等待客

        戶的連接。

        Dmserver程式的參數如下:

        UNIX> dmserver [-f] [-t port_number] [-u username [-p password]]

        database_name

        -f - 執行伺服程式於前景模式

        -t - 指定連接的通訊埠。DBMaker將優先使用這個通訊埠,

        而非 dmconfig.ini 中指定的通訊埠。

        -u - 指定使用者帳號。

        -p - 指定該帳號的使用者密碼。

        假如您在命令列中未指定使用者和使用者密碼,dmserver將在dmconfig.ini中尋找關鍵字DB_USERID 和 DB_PASWD。假如找不到該設定,dmserver將提示使用者輸入使用者名稱及使用者密碼。在WINDOWS作業系統中,你可以在 DBMaker 程式組中啟動資料庫伺服器,然後選擇你所要啟動的資料庫,接著輸入使用者帳號及密碼即可。

      -啟動模式

        啟動資料庫前,資料庫管理員可以利用dmconfig.ini中的DB_SMODE 來指定啟動模式。將此參數設為 1 意指正常起動。設為 2 則為新日誌模式,舊的日誌紀錄將被清除,且新日誌紀錄將由日誌檔之開頭開始寫起。除非您確定您要這麼做,否則不要以新日誌模式啟動資料庫。

      -強迫啟動

        假如資料庫因某些原因而損壞,您可能無法啟動資料庫,並會看到一些錯誤訊息。欲解決無法啟動的問題,DBMaker 提供了強迫起動模式。請將 DB_FORCS 參數設為 1,DBMaker 將會強迫資料庫啟動。

上一節

    4.5 連結和離開資料庫

      這節將介紹如何連結到一個已啟動的主從式資料庫。在使用者對資料庫下達資料處理語言之前,他必須先連結到該資料庫。單人使用資料庫僅允許一位使用者連結,所以每次使用者要使用該資料庫時,他必須先啟動資料庫,但並不需要明確地連結到資料庫。對主從式資料庫而言,使用者離開資料庫之後,資料庫仍然執行於伺服器中,使用者在資料庫關閉前,仍能重新連結到該資料庫。

      -連結和離開主從式資料庫

        使用者可使用 DMSQL 工具來連結和離開主從式資料庫:

        dmSQL> connect to <database name> <username> <password>;

        < 執行 SQL 指令 >

        dmSQL> disconnect;

        dmSQL> quit;

        關鍵字DB_SVADR和DB_PTNUM必需先設定於用戶端的 dmconfig.ini組態檔中。假如於 dmconfig.ini 中已定義了關鍵字 DB_USRID和DB_PASWD,則於 CONNECT指令中的<username>和<password>可以忽略不用。

      -連結逾時

        於主從式資料庫中,有時會因伺服器未開機或伺服器網路位址錯誤等因素導致客戶端無法連結至伺服器。在這種情形下使用者會等待一段很長的時間。使用者可以設定關鍵字 DB_CTIMO (以秒計) 來設定最大的等待時間,其預設值為 5 秒。

      -鎖定逾時

        當連結至資料庫時,我們可以於 dmconfig.ini 中設定關鍵字 DB_LTIMO來指定鎖定逾時值(以秒計)。舉例來說明,當使用者設定 DB_LTIMO=10時,當使用者等待鎖定超過 10 秒時,DBMaker 會傳回“lock time-out”的錯誤訊息。將 DB_LTIMO設定為 0 意指使用者不願意等待鎖定被釋放。將 DB_LTIMO 設為–1 意為關閉此功能,而使用者將等待鎖定直到其被釋放為止。每個使用者可以有他們自己的 DB_LTIMO 值。

上一節

    4.6 關閉資料庫

        當資料庫作業都完成後我們必需關閉資料庫。當關閉資料庫時,DBMaker會嘗試將向作業系統配置的資源,如 資料庫通訊與控制區域(DCCA)解除。假如此時仍有作用中的交易存於資料庫引擎中,BMaker 會嘗試將之放棄。假如在關閉資料庫時仍有作用中的連結於資料庫引擎中,DBMaker仍會關閉資料庫但並不會刪除這些連結的行程。在這種情形下資料庫管理員必須手動地刪除這些行程,否則下次啟動資料庫時會產生“Can not lock file transaction rollback”的錯誤訊息。因此資料庫管理員在關閉資料庫時必須確定所有的使用者均已登出資料庫系統。要關閉資料庫,資料庫管理員首先必須連結至資料庫再下達關閉資料庫指令。唯有資料庫管理員才具備關閉資料庫的權限。請利用DMSQL 工具來關閉單人使用者資料庫,或利用伺服器管理員來關閉主從式資料庫。要關閉資料庫,請下達以下指令:

        dmSQL> connect to <database name> <dba username> <password>;

        dmSQL> terminate db;

        dmSQL> quit;

        關閉資料庫之後,除非資料庫再次啟動,否則沒有任何使用者可以連結到資料庫。

Copyright 2002 SYSCOM Computer Engineering Co. All rights reserved.