藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 系統管理


    

藍森林 http://www.lslnet.com 2006年8月18日 15:18


在Linux下的FireBird 數據庫

原作者 : 不祥
後期整理/update : redlizard
原文地址:http://loveapple.atso-net.jp/b2/index.php/b/2005/04/25/p217
(由於原文已經不適應最新版本,故做改動,歡迎轉載)

  2000年7月,Borland(即現在的Inprise)公司公佈了其數據庫產品Interbase的源代碼。Firebird數據庫就是從該數據庫中派生出來的。當時,Interbase是與客戶/服務器版本的 Delphi產品捆綁在一些銷售的。現在,Interbase已經變成了一隻開放源碼中的「火鳥」。

  為什麼要使用Firebird?

  也許有人會問,開放源碼的數據庫已經夠多了,還需要其它的數據庫嗎?筆者認為,對於小型企業用戶而言,現在的開放源碼數據庫有兩點不足:要麼太大(如 MySQL、PostgreSQL);要麼太小,並且缺乏功能和文檔(如HypersonicSQL和McKoi)。在很多應用環境中,用戶需要有一個大小適中且功能齊備的數據庫。

  Firebird相對來說比較小,其RPM版本只有3.2MB。這使其可以稱得上是理想的「嵌入式數據庫」,可用於與其它應用程序服務器和應用程序捆綁。Firebird具有大部分成熟數據庫所具有的功能,比如支持存儲過程、SQL兼容等。如果用戶有使用 DB2或PostgreSQL的經驗,就會發現Firebird與它們的語法非常相似,數據類型和數據處理方式也很類似。

   Firebird的設計思想是小型、快速和最小化的管理。這對於需要一個數據庫用於存儲數據,但又不想花太多時間來調整數據性能的開發人員很適用。實際上在很多情況下,我們並不需要存儲程序或複雜的表之間的關聯。這時會發現Firebird在大小和功能之間找到了一個理想的平衡點。

  安裝Firebird
 我們可以從http://firebird.sourceforge.net/index.php下載Firebird,如圖所示


[img]http://loveapple.atso-net.jp/b2/media/Screenshot_01.png[/img]

  現在有兩個版本的Firebird服務器軟件可供下載,分別是Firebird Super Server和Firebird Classic Server。簡單來說,二者的區別在於設計的方法不同。Super Server使用線程同時為多個客戶連接提供服務,而Classic Server使用的則是Interbase的方法,採用為每個連接提供一個獨立服務器進程的方式。如果想對二者的區別有更多的瞭解,可查看http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_ss_vs_classic。對於「嵌入式數據庫」的用戶,這兩個版本之間沒有太大的區別。從理論上講,如果應用程序的用戶很多,那麼Super Server將是一個較好的選擇。下面,筆者將以Super Server為例進行介紹(本例中下載安裝的文件是FirebirdSS-1.5.2.4731-0.i686.rpm)。該數據庫只有3.2MB,並且對系統的要求也很低。事實上,只要硬件系統可以運行Linux,就完全可以運行這個數據庫。

  本文中安裝使用該數據庫的環境是Fedora Core 3。下面介紹安裝過程。
  首先執行以下命令:

    [code]# echo localhost.localdomain >;>;/etc/hosts.equiv[/code]

該命令將把localhost添加至可識別的服務器列表之中(注意:如果hosts.equiv中已經包含localhost.localdomain此命令不需要執行)。切換至下載文件所在目錄,運行下命令:

    [code]# rpm -ivh FirebirdSS-1.5.2.4731-0.i686.rpm[/code]

  安裝完成後將在/etc/init.d目錄下創建一個啟動腳本,該腳本在服務器啟動時會自動啟動Firebird。如果安裝過程中遇到錯誤,請檢查是否安裝了ncurses4(5.0以上版本)和glibc(2.2以上版本),檢查方法如下:

    [code]# rpm -qa |grep ncurses
    ncurses-devel-5.4-13
    ncurses-5.4-13
    # rpm -qa |grep glibc
    glibc-devel-2.3.5-0.fc3.1
    glibc-kernheaders-2.4-9.1.87
    glibc-common-2.3.5-0.fc3.1
    glibc-2.3.5-0.fc3.1
    glibc-headers-2.3.5-0.fc3.1[/code]

  一般來說,缺省安裝的Linux系統已經安裝了ncurses和glibc,因此要注意查看兩個軟件包的版本是否符合要求。

  Firebird還會在/opt目錄下創建一個firebird目錄,並且把可執行文件放在此處。我們需要讓該數據庫在全系統內可用,為此要編輯/etc/profile,並插入以下行:
  

    [code]export INTERBASE_HOME=/opt/interbase
    export PATH=$PATH:$INTERBASE_HOME/bin[/code]

保存文件並重新啟動系統,檢查Firebird是否正確啟動。
  使用系統

  缺省的系統管理員賬號的用戶名sysdba和密碼在/opt/firebird/SYSDBA.password中保存。用戶可使用該賬號來創建其它的用戶。可用的系統管理工具有:
  ◆ gsec
  這是一個安全的系統程序,可以使用命令行的方式來創建、修改和刪除數據庫用戶、改變密碼等。必須以SYSDBA來運行gsec,以root身份調用並執行以下命令:

    [code]$ gsec -user sysdba -password masterkey[/code]

  將會出現一個GSEC>;提示符,可以使用display命令顯示目前的用戶,如下所示:

    [code]GSEC>; display
    user name uid gid full name
    -----------------------------------
    SYSDBA 0 0[/code]

缺省的密碼不安全,建議更改SYSDBA的密碼。可使用以下命令來更改密碼

    [code]GSEC>; modify SYSDBA -pw newpassword[/code]

  命令中的newpassword即新的密碼。密碼最好使用數字和字母的組合,並且經常更改。

  ◆ isql
  這是一個交互式SQL工具,類似於Oracle的SQL*Plus和Postgresql的psql命令。可以使用它來測試和運行SQL查詢。Firebird自帶一個名為EMPLOYEE的數據庫實例,可以使用其測試SQL命令,代碼如下:

    [code]# cd /opt/firebird/bin
    # ./isql /opt/firebird/examples/employee.gdb
    Database: /opt/firebird/examples/employee.gdb
    SQL>;[/code]

  這將會連接到EMPLOYEE數據庫並顯示SQL>;提示符。可以此處輸入SQL命令進行查詢(注意每行命令後的「;」號)。此外,由於一些與數據庫相關的系統也會安裝一個名為isql的工具,所以一定要切換到「/opt/firebird/bin」目錄下運行isql工具。現在在 SQL>;提示符下輸入以下命令:

    [code]SQL>; show tables;[/code]

  將會顯示以下內容:

    [code]COUNTRY CUSTOMER
    DEPARTMENT EMPLOYEE
    EMPLOYEE_PROJECT JOB
    PHONE_LIST PROJECT
    PROJ_DEPT_BUDGET SALARY_HISTORY
    SALES[/code]

  創建自己的數據庫

  到目前為止,我們已經以SYSDBA的身份執行了一些命令,並且查看了一些數據庫範例。接下來創建一個數據庫,並創建一個有權查看和更改數據庫的用戶,然後在操作系統中進行數據庫測試。

  創建數據庫需要使用isql工具。Firebird使用離散的形式存儲文件。作為一種慣例,文件擴展名一般是.gdb,用戶也可以用任何擴展名來存儲文件。先以SYSDBA的身份來創建一個數據庫,然後以test為名將其存儲在$INTERBASE_HOME目錄之下。

  首先在「/opt/interbase」目錄下創建一個名為「testdb」的目錄(注意要為其分配適當的權限)。切換至該目錄,並以不帶參數的情況下啟動isql。然後使用CREATE DATABASE命令創建一個數據庫,代碼如下:

    [code]SQL>; CREATE DATABASE 'firstdb.gdb' USER 'sysdba' PASSWORD 'masterkey';[/code]

  該命令將在當前目錄下創建一個名為firstdb.gdb的文件。該數據庫歸SYSDBA所有。下面來創建一個基本的銷售表並且輸入數據,代碼如下:

    [code]SQL>; CREATE TABLE sales_catalog (
    CON>; item_id varchar(10) not null primary key,
    CON>; item_name varchar(40) not null,
    CON>; item_desc varchar(50)
    CON>; );
    SQL>; INSERT INTO sales_catalog VALUES('001','Aluminium Wok',
    'Chinese wok used for stir fry dishes');
    SQL >; INSERT INTO sales_catalog VALUES('002',
    'Chopsticks extra-long', '60-cm chopsticks');
    SQL>; INSERT INTO sales_catalog VALUES('003',
    'Claypot', 'Pot for stews');
    SQL>; INSERT INTO sales_catalog VALUES('004',
    'Charcoal Stove', 'For claypot dishes');
    SQL>; SELECT * FROM sales_catalog;
    ITEM_ID ITEM_NAME ITEM_DESC
    =============================================
    001 Aluminium Wok Chinese wok used for stir fry dishes
    002 Chopsticks extra-long 60-cm chopsticks
    003 Claypot Pot for stews
    004 Charcoal Stove For claypot dishes[/code]

  添加用戶

  不要使用系統管理員賬號SYSDBA創建所有的數據庫。有些時候,比如在運行多個屬於不同用戶和組的數據庫時,可能希望每個用戶和組都有各自的數據庫,並有權查看。另外一種情形需要創建一個代理用戶,可以執行所有數據庫操作,但其權限都低於SYSDBA。進行這一操作時,需要使用gsec工具。例如,創建一個用戶名為TestAdmin、密碼為testadmin的賬戶(注意,密碼的位數只能是8位),並且賦予其查看、修改和刪除數據庫 firstdb.gdb的權限。使用以下命令來完成這些功能:

    [code]$ gsec -user SYSDBA -password masterkey
    GSEC>; add TestAdmin -pw testadmin -fname FirstDB -lname Administrator
    Warning - maximum 8 significant bytes of password used[/code]

  打開數據庫,為數據庫創建一個系統管理角色,並為其分配適當的權限,然後運行以下代碼:

    [code]$ isql firstdb.gdb -user SYSDBA -password masterkey
    Database: firstdb.gdb, User: SYSDBA
    SQL>; GRANT SELECT, UPDATE, INSERT, DELETE ON sales_catalog TO administrator;
    SQL>; GRANT administrator TO TestAdmin;
    SQL>; quit;[/code]

  將TestAdmin加至其中。接下來測試數據庫。
  測試數據庫

  首先退出gsec和isql,以TestAdmin的身份登錄至數據庫firstdb.gdb,並運行以下SQL語句:

    [code]SQL>; DELETE FROM sales_catalog;
    SQL>; INSERT INTO sales_catalog VALUES('001', 'Aluminum Wok', 'Chinese wok');
    SQL>; INSERT INTO sales_catalog VALUES('002', 'Microwave Oven', '300W Microwave oven');
    SQL>; INSERT INTO sales_catalog VALUES('003', 'Chopsticks extra-long', '60cm chopsticks');
    SQL>; SELECT * FROM sales_catalog;
    ITEM_ID ITEM_NAME ITEM_DESC
    ===========================================
    001 Aluminum Wok Chinese wok
    002 Microwave Oven 300W Microwave oven
    003 Chopsticks extra-long 60cm chopsticks[/code]

  如果沒有出現問題,就說明配置已經完全成功。現在,這只Linux上的火鳥可以展翅飛翔了。

http://loveapple.atso-net.jp/b2



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com