|
藍森林 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 |
| |