- 論壇徽章:
- 0
|
原作者 : 不祥
后期整理/update : redlizard
原文地址:http://loveapple.atso-net.jp/b2/index.php/b/2005/04/25/p217
(由于原文已經(jīng)不適應(yīng)最新版本,故做改動(dòng),歡迎轉(zhuǎn)載)
2000年7月,Borland(即現(xiàn)在的Inprise)公司公布了其數(shù)據(jù)庫(kù)產(chǎn)品Interbase的源代碼。Firebird數(shù)據(jù)庫(kù)就是從該數(shù)據(jù)庫(kù)中派生出來(lái)的。當(dāng)時(shí),Interbase是與客戶/服務(wù)器版本的 Delphi產(chǎn)品捆綁在一些銷(xiāo)售的,F(xiàn)在,Interbase已經(jīng)變成了一只開(kāi)放源碼中的“火鳥(niǎo)”。
為什么要使用Firebird?
也許有人會(huì)問(wèn),開(kāi)放源碼的數(shù)據(jù)庫(kù)已經(jīng)夠多了,還需要其它的數(shù)據(jù)庫(kù)嗎?筆者認(rèn)為,對(duì)于小型企業(yè)用戶而言,現(xiàn)在的開(kāi)放源碼數(shù)據(jù)庫(kù)有兩點(diǎn)不足:要么太大(如 MySQL、PostgreSQL);要么太小,并且缺乏功能和文檔(如HypersonicSQL和McKoi)。在很多應(yīng)用環(huán)境中,用戶需要有一個(gè)大小適中且功能齊備的數(shù)據(jù)庫(kù)。
Firebird相對(duì)來(lái)說(shuō)比較小,其RPM版本只有3.2MB。這使其可以稱(chēng)得上是理想的“嵌入式數(shù)據(jù)庫(kù)”,可用于與其它應(yīng)用程序服務(wù)器和應(yīng)用程序捆綁。Firebird具有大部分成熟數(shù)據(jù)庫(kù)所具有的功能,比如支持存儲(chǔ)過(guò)程、SQL兼容等。如果用戶有使用 DB2或PostgreSQL的經(jīng)驗(yàn),就會(huì)發(fā)現(xiàn)Firebird與它們的語(yǔ)法非常相似,數(shù)據(jù)類(lèi)型和數(shù)據(jù)處理方式也很類(lèi)似。
Firebird的設(shè)計(jì)思想是小型、快速和最小化的管理。這對(duì)于需要一個(gè)數(shù)據(jù)庫(kù)用于存儲(chǔ)數(shù)據(jù),但又不想花太多時(shí)間來(lái)調(diào)整數(shù)據(jù)性能的開(kāi)發(fā)人員很適用。實(shí)際上在很多情況下,我們并不需要存儲(chǔ)程序或復(fù)雜的表之間的關(guān)聯(lián)。這時(shí)會(huì)發(fā)現(xiàn)Firebird在大小和功能之間找到了一個(gè)理想的平衡點(diǎn)。
安裝Firebird
我們可以從http://firebird.sourceforge.net/index.php下載Firebird,如圖所示
![]()
現(xiàn)在有兩個(gè)版本的Firebird服務(wù)器軟件可供下載,分別是Firebird Super Server和Firebird Classic Server。簡(jiǎn)單來(lái)說(shuō),二者的區(qū)別在于設(shè)計(jì)的方法不同。Super Server使用線程同時(shí)為多個(gè)客戶連接提供服務(wù),而Classic Server使用的則是Interbase的方法,采用為每個(gè)連接提供一個(gè)獨(dú)立服務(wù)器進(jìn)程的方式。如果想對(duì)二者的區(qū)別有更多的了解,可查看http://www.ibphoenix.com/main.nf ... e=ibp_ss_vs_classic。對(duì)于“嵌入式數(shù)據(jù)庫(kù)”的用戶,這兩個(gè)版本之間沒(méi)有太大的區(qū)別。從理論上講,如果應(yīng)用程序的用戶很多,那么Super Server將是一個(gè)較好的選擇。下面,筆者將以Super Server為例進(jìn)行介紹(本例中下載安裝的文件是FirebirdSS-1.5.2.4731-0.i686.rpm)。該數(shù)據(jù)庫(kù)只有3.2MB,并且對(duì)系統(tǒng)的要求也很低。事實(shí)上,只要硬件系統(tǒng)可以運(yùn)行Linux,就完全可以運(yùn)行這個(gè)數(shù)據(jù)庫(kù)。
本文中安裝使用該數(shù)據(jù)庫(kù)的環(huán)境是Fedora Core 3。下面介紹安裝過(guò)程。
首先執(zhí)行以下命令:
- # echo localhost.localdomain >;>;/etc/hosts.equiv
復(fù)制代碼
該命令將把localhost添加至可識(shí)別的服務(wù)器列表之中(注意:如果hosts.equiv中已經(jīng)包含localhost.localdomain此命令不需要執(zhí)行)。切換至下載文件所在目錄,運(yùn)行下命令:
- # rpm -ivh FirebirdSS-1.5.2.4731-0.i686.rpm
復(fù)制代碼
安裝完成后將在/etc/init.d目錄下創(chuàng)建一個(gè)啟動(dòng)腳本,該腳本在服務(wù)器啟動(dòng)時(shí)會(huì)自動(dòng)啟動(dòng)Firebird。如果安裝過(guò)程中遇到錯(cuò)誤,請(qǐng)檢查是否安裝了ncurses4(5.0以上版本)和glibc(2.2以上版本),檢查方法如下:
- # 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
復(fù)制代碼
一般來(lái)說(shuō),缺省安裝的Linux系統(tǒng)已經(jīng)安裝了ncurses和glibc,因此要注意查看兩個(gè)軟件包的版本是否符合要求。
Firebird還會(huì)在/opt目錄下創(chuàng)建一個(gè)firebird目錄,并且把可執(zhí)行文件放在此處。我們需要讓該數(shù)據(jù)庫(kù)在全系統(tǒng)內(nèi)可用,為此要編輯/etc/profile,并插入以下行:
- export INTERBASE_HOME=/opt/interbase
- export PATH=$PATH:$INTERBASE_HOME/bin
復(fù)制代碼
保存文件并重新啟動(dòng)系統(tǒng),檢查Firebird是否正確啟動(dòng)。
使用系統(tǒng)
缺省的系統(tǒng)管理員賬號(hào)的用戶名sysdba和密碼在/opt/firebird/SYSDBA.password中保存。用戶可使用該賬號(hào)來(lái)創(chuàng)建其它的用戶。可用的系統(tǒng)管理工具有:
◆ gsec
這是一個(gè)安全的系統(tǒng)程序,可以使用命令行的方式來(lái)創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)用戶、改變密碼等。必須以SYSDBA來(lái)運(yùn)行g(shù)sec,以root身份調(diào)用并執(zhí)行以下命令:
- $ gsec -user sysdba -password masterkey
復(fù)制代碼
將會(huì)出現(xiàn)一個(gè)GSEC>;提示符,可以使用display命令顯示目前的用戶,如下所示:
- GSEC>; display
- user name uid gid full name
- -----------------------------------
- SYSDBA 0 0
復(fù)制代碼
缺省的密碼不安全,建議更改SYSDBA的密碼?墒褂靡韵旅顏(lái)更改密碼
- GSEC>; modify SYSDBA -pw newpassword
復(fù)制代碼
命令中的newpassword即新的密碼。密碼最好使用數(shù)字和字母的組合,并且經(jīng)常更改。
◆ isql
這是一個(gè)交互式SQL工具,類(lèi)似于Oracle的SQL*Plus和Postgresql的psql命令?梢允褂盟鼇(lái)測(cè)試和運(yùn)行SQL查詢。Firebird自帶一個(gè)名為EMPLOYEE的數(shù)據(jù)庫(kù)實(shí)例,可以使用其測(cè)試SQL命令,代碼如下:
- # cd /opt/firebird/bin
- # ./isql /opt/firebird/examples/employee.gdb
- Database: /opt/firebird/examples/employee.gdb
- SQL>;
復(fù)制代碼
這將會(huì)連接到EMPLOYEE數(shù)據(jù)庫(kù)并顯示SQL>;提示符?梢源颂庉斎隨QL命令進(jìn)行查詢(注意每行命令后的“;”號(hào))。此外,由于一些與數(shù)據(jù)庫(kù)相關(guān)的系統(tǒng)也會(huì)安裝一個(gè)名為isql的工具,所以一定要切換到“/opt/firebird/bin”目錄下運(yùn)行isql工具,F(xiàn)在在 SQL>;提示符下輸入以下命令:
將會(huì)顯示以下內(nèi)容:
- COUNTRY CUSTOMER
- DEPARTMENT EMPLOYEE
- EMPLOYEE_PROJECT JOB
- PHONE_LIST PROJECT
- PROJ_DEPT_BUDGET SALARY_HISTORY
- SALES
復(fù)制代碼
創(chuàng)建自己的數(shù)據(jù)庫(kù)
到目前為止,我們已經(jīng)以SYSDBA的身份執(zhí)行了一些命令,并且查看了一些數(shù)據(jù)庫(kù)范例。接下來(lái)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),并創(chuàng)建一個(gè)有權(quán)查看和更改數(shù)據(jù)庫(kù)的用戶,然后在操作系統(tǒng)中進(jìn)行數(shù)據(jù)庫(kù)測(cè)試。
創(chuàng)建數(shù)據(jù)庫(kù)需要使用isql工具。Firebird使用離散的形式存儲(chǔ)文件。作為一種慣例,文件擴(kuò)展名一般是.gdb,用戶也可以用任何擴(kuò)展名來(lái)存儲(chǔ)文件。先以SYSDBA的身份來(lái)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后以test為名將其存儲(chǔ)在$INTERBASE_HOME目錄之下。
首先在“/opt/interbase”目錄下創(chuàng)建一個(gè)名為“testdb”的目錄(注意要為其分配適當(dāng)?shù)臋?quán)限)。切換至該目錄,并以不帶參數(shù)的情況下啟動(dòng)isql。然后使用CREATE DATABASE命令創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),代碼如下:
- SQL>; CREATE DATABASE 'firstdb.gdb' USER 'sysdba' PASSWORD 'masterkey';
復(fù)制代碼
該命令將在當(dāng)前目錄下創(chuàng)建一個(gè)名為firstdb.gdb的文件。該數(shù)據(jù)庫(kù)歸SYSDBA所有。下面來(lái)創(chuàng)建一個(gè)基本的銷(xiāo)售表并且輸入數(shù)據(jù),代碼如下:
- 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
復(fù)制代碼
添加用戶
不要使用系統(tǒng)管理員賬號(hào)SYSDBA創(chuàng)建所有的數(shù)據(jù)庫(kù)。有些時(shí)候,比如在運(yùn)行多個(gè)屬于不同用戶和組的數(shù)據(jù)庫(kù)時(shí),可能希望每個(gè)用戶和組都有各自的數(shù)據(jù)庫(kù),并有權(quán)查看。另外一種情形需要?jiǎng)?chuàng)建一個(gè)代理用戶,可以執(zhí)行所有數(shù)據(jù)庫(kù)操作,但其權(quán)限都低于SYSDBA。進(jìn)行這一操作時(shí),需要使用gsec工具。例如,創(chuàng)建一個(gè)用戶名為T(mén)estAdmin、密碼為testadmin的賬戶(注意,密碼的位數(shù)只能是8位),并且賦予其查看、修改和刪除數(shù)據(jù)庫(kù) firstdb.gdb的權(quán)限。使用以下命令來(lái)完成這些功能:
- $ gsec -user SYSDBA -password masterkey
- GSEC>; add TestAdmin -pw testadmin -fname FirstDB -lname Administrator
- Warning - maximum 8 significant bytes of password used
復(fù)制代碼
打開(kāi)數(shù)據(jù)庫(kù),為數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)系統(tǒng)管理角色,并為其分配適當(dāng)?shù)臋?quán)限,然后運(yùn)行以下代碼:
- $ 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;
復(fù)制代碼
將TestAdmin加至其中。接下來(lái)測(cè)試數(shù)據(jù)庫(kù)。
測(cè)試數(shù)據(jù)庫(kù)
首先退出gsec和isql,以TestAdmin的身份登錄至數(shù)據(jù)庫(kù)firstdb.gdb,并運(yùn)行以下SQL語(yǔ)句:
- 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
復(fù)制代碼
如果沒(méi)有出現(xiàn)問(wèn)題,就說(shuō)明配置已經(jīng)完全成功,F(xiàn)在,這只Linux上的火鳥(niǎo)可以展翅飛翔了。
http://loveapple.atso-net.jp/b2 |
|