2000年7月,Borland(即现在的Inprise)公司公布了其数据库产品Interbase的源代码。Firebird数据库就是从该数据库中派生出来的。当时,Interbase是与客户/服务器版本的Delphi产品捆绑在一些销售的。现在,Interbase已经变成了一只开放源码中的“火鸟”。
为什么要使用Firebird?
也许有人会问,开放源码的数据库已经够多了,还需要其它的数据库吗?笔者认为,对于小型企业用户而言,现在的开放源码数据库有两点不足:要么太大(如MySQL、PostgreSQL);要么太小,并且缺乏功能和文档(如HypersonicSQL和McKoi)。在很多应用环境中,用户需要有一个大小适中且功能齐备的数据库。
Firebird相对来说比较小,其RPM版本只有2.6MB。这使其可以称得上是理想的“嵌入式数据库”,可用于与其它应用程序服务器和应用程序捆绑。Firebird具有大部分成熟数据库所具有的功能,比如支持存储过程、SQL兼容等。如果用户有使用DB2或PostgreSQL的经验,就会发现Firebird与它们的语法非常相似,数据类型和数据处理方式也很类似。
Firebird的设计思想是小型、快速和最小化的管理。这对于需要一个数据库用于存储数据,但又不想花太多时间来调整数据性能的开发人员很适用。实际上在很多情况下,我们并不需要存储程序或复杂的表之间的关联。这时会发现Firebird在大小和功能之间找到了一个理想的平衡点。
安装Firebird
我们可以从http://firebird.sourceforge.net/index.php下载Firebird.
现在有两个版本的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.0.2.908-1.i386.rpm)。该数据库只有2.5MB,并且对系统的要求也很低。事实上,只要硬件系统可以运行Linux,就完全可以运行这个数据库。
本文中安装使用该数据库的环境是Red Hat 8.0。下面介绍安装过程。
首先执行以下命令:
# echo localhost.localdomain >>/etc/hosts.equiv
该命令将把localhost添加至可识别的服务器列表之中。切换至下载文件所在目录,运行下命令:
# rpm -ivh FirebirdSS-1.0.2.908-1.i386.rpm
安装完成后将在/etc/init.d目录下创建一个启动脚本,该脚本在服务器启动时会自动启动Firebird。如果安装过程中遇到错误,请检查是否安装了ncurses4(5.0以上版本)和glibc(2.2以上版本),检查方法如下:
# rpm -qa |grep ncurses
ncurses-devel-5.2-28
ncurses-5.2-28
# rpm -qa |grep glibc
glibc-2.2.93-5
glibc-devel-2.2.93-5
glibc-kernheaders-2.4-7.20
glibc-common-2.2.93-5
一般来说,缺省安装的Linux系统已经安装了ncurses4和glibc,因此要注意查看两个软件包的版本是否符合要求。
Firebird还会在/opt目录下创建一个interbase目录,并且把可执行文件放在此处。我们需要让该数据库在全系统内可用,为此要编辑/etc/profile,并插入以下行:
export INTERBASE_HOME=/opt/interbase
export PATH=$PATH:$INTERBASE_HOME/bin
保存文件并重新启动系统,检查Firebird是否正确启动。
使用系统
缺省的系统管理员账号的用户名是SYSDBA,缺省密码是masterkey。在使用过程中,笔者发现系统对用户名不区分大小写。用户可使用该账号来创建其它的用户。可用的系统管理工具有:
◆ gsec
这是一个安全的系统程序,可以使用命令行的方式来创建、修改和删除数据库用户、改变密码等。必须以SYSDBA来运行gsec,以root身份调用并执行以下命令:
$ gsec -user sysdba -password masterkey
将会出现一个GSEC>提示符,可以使用display命令显示目前的用户,如下所示:
GSEC> display
user name uid gid full name
-----------------------------------
SYSDBA 0 0
缺省的密码不安全,建议更改SYSDBA的密码。可使用以下命令来更改密码:
GSEC> modify SYSDBA -pw newpassword
命令中的newpassword即新的密码。密码最好使用数字和字母的组合,并且经常更改。
◆ isql
这是一个交互式SQL工具,类似于Oracle的SQL*Plus和Postgresql的psql命令。可以使用它来测试和运行SQL查询。Firebird自带一个名为EMPLOYEE的数据库实例,可以使用其测试SQL命令,代码如下:
# cd /opt/interbase/bin
# ./isql /opt/interbase/examples/employee.gdb
Database: /opt/interbase/examples/employee.gdb
SQL>
这将会连接到EMPLOYEE数据库并显示SQL>提示符。可以此处输入SQL命令进行查询(注意每行命令后的“;”号)。此外,由于一些与数据库相关的系统也会安装一个名为isql的工具,所以一定要切换到“/opt/interbase/bin”目录下运行isql工具。现在在SQL> 提示符下输入以下命令:
SQL> SELECT emp_no, full_name, job_code, job_country FROM employee;
将会显示以下内容:
EMP_NO FULL_NAME JOB_CODE JOB_COUNTRY
======= =================== ========
2 Nelson, Robert VP USA
4 Young, Bruce Eng USA
5 Lambert, Kim Eng USA
8 Johnson, Leslie Mktg USA
9 Forest, Phil Mngr USA
11 Weston, K. J. SRep USA
12 Lee, Terri Admin USA
14 Hall, Stewart Finan USA
15 Young, Katherine Mngr USA
20 Papadopoulos, Chris Mngr USA
24 Fisher, Pete Eng USA
28 Bennet, Ann Admin England
29 De Souza, Roger Eng USA
34 Baldwin, Janet Sales USA
36 Reeves, Roger Sales England
37 Stansbury, Willie Eng England
44 Phong, Leslie Eng USA
45 Ramanathan, Ashok Eng USA
46 Steadman, Walter CFO USA
52 Nordstrom, Carol PRel USA
如果想查看数据库中的所有表,输入以下命令:
SQL> SHOW TABLES;
将显示以下信息:
COUNTRY CUSTOMER
DEPARTMENT EMPLOYEE
EMPLOYEE_PROJECT JOB
PHONE_LIST PROJECT
PROJ_DEPT_BUDGET SALARY_HISTORY
SALES
要从isql中退出,只需输入“quit;”即可。
创建自己的数据库
到目前为止,我们已经以SYSDBA的身份执行了一些命令,并且查看了一些数据库范例。接下来创建一个数据库,并创建一个有权查看和更改数据库的用户,然后在操作系统中进行数据库测试。
创建数据库需要使用isql工具。Firebird使用离散的形式存储文件。作为一种惯例,文件扩展名一般是.gdb,用户也可以用任何扩展名来存储文件。先以SYSDBA的身份来创建一个数据库,然后以test为名将其存储在$INTERBASE_HOME目录之下。
首先在“/opt/interbase”目录下创建一个名为“testdb”的目录(注意要为其分配适当的权限)。切换至该目录,并以不带参数的情况下启动isql。然后使用CREATE DATABASE命令创建一个数据库,代码如下:
SQL> CREATE DATABASE 'firstdb.gdb' USER 'sysdba' PASSWORD 'masterkey';
该命令将在当前目录下创建一个名为firstdb.gdb的文件。该数据库归SYSDBA所有。下面来创建一个基本的销售表并且输入数据,代码如下:
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
添加用户
不要使用系统管理员账号SYSDBA创建所有的数据库。有些时候,比如在运行多个属于不同用户和组的数据库时,可能希望每个用户和组都有各自的数据库,并有权查看。另外一种情形需要创建一个代理用户,可以执行所有数据库操作,但其权限都低于SYSDBA。进行这一操作时,需要使用gsec工具。例如,创建一个用户名为TestAdmin、密码为testadmin的账户(注意,密码的位数只能是8位),并且赋予其查看、修改和删除数据库 firstdb.gdb的权限。使用以下命令来完成这些功能:
$ gsec -user SYSDBA -password masterkey
GSEC> add TestAdmin -pw testadmin -fname FirstDB -lname Administrator
Warning - maximum 8 significant bytes of password used
打开数据库,为数据库创建一个系统管理角色,并为其分配适当的权限,然后运行以下代码:
$ 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;
将TestAdmin加至其中。接下来测试数据库。
测试数据库
首先退出gsec和isql,以TestAdmin的身份登录至数据库firstdb.gdb,并运行以下SQL语句:
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
如果没有出现问题,就说明配置已经完全成功。现在,这只Linux上的火鸟可以展翅飞翔了。