分享
 
 
 

在Linux下的FireBird数据库

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

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,如图1所示:

图1 极富个性的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 VPUSA

4 Young, BruceEngUSA

5 Lambert, Kim EngUSA

8 Johnson, LeslieMktgUSA

9 Forest, PhilMngrUSA

11 Weston, K. J. SRepUSA

12 Lee, TerriAdminUSA

14 Hall, StewartFinanUSA

15 Young, KatherineMngrUSA

20 Papadopoulos, ChrisMngrUSA

24 Fisher, Pete EngUSA

28 Bennet, AnnAdminEngland

29 De Souza, RogerEngUSA

34 Baldwin, JanetSalesUSA

36 Reeves, Roger SalesEngland

37 Stansbury, Willie EngEngland

44 Phong, Leslie EngUSA

45 Ramanathan, AshokEngUSA

46 Steadman, WalterCFOUSA

52 Nordstrom, CarolPRelUSA

如果想查看数据库中的所有表,输入以下命令:

SQL> SHOW TABLES;

将显示以下信息:

COUNTRYCUSTOMER

DEPARTMENTEMPLOYEE

EMPLOYEE_PROJECTJOB

PHONE_LISTPROJECT

PROJ_DEPT_BUDGETSALARY_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_IDITEM_NAMEITEM_DESC

=============================================

001Aluminium WokChinese wok used for stir fry dishes

002Chopsticks extra-long60-cm chopsticks

003ClaypotPot for stews

004Charcoal StoveFor 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

===========================================

001Aluminum WokChinese wok

002Microwave Oven300W Microwave oven

003Chopsticks extra-long60cm chopsticks

如果没有出现问题,就说明配置已经完全成功。现在,这只Linux上的火鸟可以展翅飞翔了。

[返回列表]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有