1、 FireBird数据库使用指南 一、FireBird数据库简介 Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。Firebird提供良好的并发性,高效的执行,强大的语言支持存储过程和触发器。从1981年起,它已经被许多商业公司运用于许多的产品系统中。 Firebird脱胎于Borland公司的开源版数据库Interbase6.0,是一个完全非商业化的产品,用C和C++开发。由于与interbase的血缘关系,大部分i
2、nterbase的开发工具可以直接应用到Firebird开发中。Firebird和原Borland的InterBase有着相同的血脉,其作为一个开源项目在2000年7月25日前遵循InterBase Public License V.1.0协议。Firebird使用Mozilla Public License v.1.1许可证发行。 Firebird特性介绍: firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。它很容易让您从单用户,单数据库升级到企业级的应用。一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。总之:它是一个
3、开源的,强大在,可以自由使用的数据库(即使是商业上的使用) 关键特性: 支持原子性,并发性,隔离性等概念。 MGA: 支持事务的多个版本功能, 存储过程: 使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表中使用它。 事件: 存储过程和触发器可以引发事件,这个事件可以被客户端程序监听到 生成子: 生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此,它可
4、以用在一个事务中,也可以用在其它很多方面。 只读数据库: 我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的 CDLIVE(即只用光盘就可以运行起来)应用。 全事务控制: 一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天)的操作。 触发器: 每一
5、个表可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。 扩展函数: 可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能 字符集: Firebird实现了很多国际标准的字符集,包括Unicode。 SQL标准兼容: Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEF
6、T/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。 Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。 硬件需求: Firebird可以工作最常见的硬件环境中,甚至非常差的硬件中,也能很好的工作,当然,硬件的要求依赖于你想做什么,例如你有多个并发用户等等。 有效的平台支持 Firebrid在常见的平
7、台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MAC OS(苹果机),Solaris及HP-UX)把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后,再到另一个平台上恢复即可 可连接性 Firebird 支持一系列的连接方法,目前,可以通过原生的DELPHI,C++组件连接,也可以通过ODBC,JDBC,PHP,OLEDB,DbExpress进行连接。原生 的联连提供了直接调用Firebird的API函数库(fbclient.dll/.so)进行调用的能力。 物理限制 Firebird支持非常巨大的数据库,数据库可以分成多
8、个物理文件。每个文件的大小依赖于操作系统的限制。当前一个数据库文件最大的理论限制是64T(即64000G),因此,常见的限制通常是操作系统的限制以及磁盘空间的限制。 服务器引擎版本 当前有三个服务器版本。 标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器) 超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。 嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用。 但是,所有的服务器都使用一种数据库格式,因此,你可以很方便的在不同的引擎之间共享数据库文件的数据。 协议 Firebird协议使用IPL(interbase
9、public license)和IDPL(Initial Developer's Public License),这种协议类似于Mozilla协议。你可以完全的自由使用并且可以自由的布署在你的客户应用上。你不需要公开你的源代码。当然,如果你修改和数据库引擎,你应该公布源代码。 工具 有很多的工具支持Firebird.包括自由的,免费的和商业的。包括开发工具,管理工具,诊断工具等等。 支持和资源 在Firebird的官方网站上(www.firebirdsql.org),有很多关于这个项目的有用的信息。IPPhonex公司也提供专业的商业支持。在他们网站上,也有很多有用的专业信息及常见
10、问题的解答等。 团队 Firebird有一系列的用户支持的团队和新闻组,您可以寻求在线支持。您可以查看项目主页上的全部新闻组列表。 历史 Firebird基于开源Interbase6.0,它是Borland公司2000年发布的一个开源版本。关于Interbase的最早历史可以追溯到1984年,因此,这个数据库已经有20岁了。 特点 1、Firebird是一个真正的关系数据库,支持存储过程、视图、触发器、事务等大型关系数据库的所有特性; 2、Firebird支持SQL92的绝大部分命令,并且支持大部分SQL99命令,新版Firebird 2.0对SQL99的支持更完整;
11、 3、Firebird源码基于成熟的商业数据库Interbase,有良好的稳定性,与Interbase有良好的兼容性; 4、不用考虑授权费用(免费),不用当心将来有一天你或你的客户因为使用盗版而被数据库开发商告上法庭; 5、发布简易,安装文件只有几M,且高度可定制,客户端的分发也很简单,只需一个DLL文件; 6、Firebird的一嵌入式服务器版本,不用安装,直接运行,基于单机开发首选; 7、Firebird的运行效率非常高; 8、具备高度可移植性,可在Linux,Unix,MacOS,Windows,Solaris系统下运行,而且数据库格式完全一样,不用修改; 9、开发
12、环境支持良好,Delphi,C++Builder不用通过ODBC连接,直接用原生开发接口开发基于Firebird的程序。 二、FireBird数据库的安装 架構 firebird 資料庫軟體有三種套件,並而支援不同作業平台(windows系列,linux,freebsd等...) 1. Super Server-無法直接存取資料庫檔案,必須透過socket來和伺服器溝通 2. Classic-直接存取資料庫的檔案,多個程式可以同時存取一個檔案,有點像vfp,dbase 3. embedded-專為一些小型系統的嵌入式資料庫 (pda) 下載及安裝 主網站:
13、 Download->Firebird relational database 直接點兩下就可以安裝,請照步驟,根據自己的需求來安裝 預設安裝路徑 windows:c:\program files\firebird\firebird_1_5 linux:/opt/firebird 兩個作業系統下的目錄結構非常像 根目錄下: firebird.conf-設定檔 aliases.conf -別名檔 friebird.log -記錄檔 SYSDBA.password -linux才有,管理者的名稱及密碼在裏面,windows則預設:名稱:sysdba,密碼:masterk
14、ey windows直接使用security.fdb來存sysdba的密碼 注意:使用者名稱不分大小寫,但密碼有分 目錄/bin: 則是一些必要的主要及工具程式 設定 firebird 主要的設定檔 firebird.conf 預設tcp/ip會啟動port:3050 你可以使用telnet ip 3050來測試 aliases.conf 設定資料庫的別名 資料庫連線時一般要指定路徑,有時路徑太長時你可以指定,在aliases.conf中使用別名來存取 它是位於你安裝firebird的根目錄,以下為內建範例 # 別名 = 原始路徑 employee.fd
15、b = /opt/firebird/examples/employee.fdb 其中#為註解,而windows及linux的路徑是有所不同: # fbdb1 在Windows伺服器: fbdb1 = c:\Firebird\sample\Employee.fdb # fbdb2 在Linux伺服器: fbdb2 = /opt/databases/killergames.fdb 資料庫執行時可以編輯這個檔案,不需要重新啟動伺服器 連線別名的方式: Server_name:aliasname 使用者管理(consloe介面) 1.預設管理者名稱sysdba,密碼mas
16、terkey
2.密碼檔security.fdb,位於firebird安裝目錄下
3.管理程式gsec
安裝目錄下\bin
4.密碼長度限制在8碼
用法:
本地主機(資料庫server在本台電腦)
gsec -user sysdba -password
17、示某使用者
a[dd] 18、iddle name>
-lname 19、改遠端伺服器linux的sysdba密碼
gsec -user sysdba -password masterkey -database harry:/opt/firebird/security.fbd -modify sysdba -pw hamburg
修改遠端伺服器windows的sysdba密碼
gsec -user sysdba -password masterkey -database sally:"c:\Program files\Firebird\security.fdb" -modify sysdba -pw hannover
修改遠端伺服器使用tcp port 3 20、050
gsec -user sysdba -password masterkey -database jack/3050:/opt/firebird/security.fdb" -modify sysdba -pw londo
修改遠端windows伺服器ip( a.b.c.d)使用tcp port 3050
gsec -user sysdba -password masterkey -database a.b.c.d/3050:"c:\program files\firebird\firebird_1_5\security.fdb -modiyf sysdba -pw lond 21、o
刪除本地使用者
gsec -user sysdba -password masterkey -delete joe
資料庫管理(console)
程式isql位於安裝目錄下的bin
以下是一個操作範例:
c:\Program files\firebird\firebird_1_5\bin\>isql -user sysdba -password masterkey
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect test;
Database: test, User: sysdb 22、a
SQL> show table;
COUNTRY CUSTOMER
DEPARTMENT EMPLOYEE
EMPLOYEE_PROJECT JOB
PHONE_LIST PROJECT
PROJ_DEPT_BUDGET SALARY_HISTORY
23、
SALES
SQL> select * from country ;
COUNTRY CURRENCY
=============== ==========
USA Dollar
England Pound
Canada CdnDlr
SQL>quit;
建立資料庫
1.建立資料庫create database
2.建立資料表格create table (sql指令)
3.刪除資枓表格drop table (sql指令)
4.查詢資料庫中所含表格 show table
24、5.查詢表格中的結構 show table 表格名稱
6.新增,刪除,更新(insert,delete,update)均為sql指令
7.SQL命令交付,在新增或刪除時,資料庫並未直接變更,要使用sql指命commit 或commit work來更新
isql -user sysdba -password masterkey
Use CONNECT or CREATE DATABASE to specify a database
SQL> create database 'c:\temp\test.fdb';
SQL> create table abc (name char(1 25、2),age numeric(3));
SQL> show table friend ;
FIRSTNAME CHAR(15) Nullable
LASTNAME CHAR(20) Nullable
CITY CHAR(15) Nullable
STATE CHAR(2) Nullable
AGE INTEGER Nullable
26、
SQL> insert into abc (name ,age) values( 'cschen',34);
SQL> select * from abc;
NAME AGE
============ =======
cschen 34
以上的操作主要是sql指令
命令的結尾必需使用";", 如果沒有使用";"提示會由SQL>變為CON>,告訴你延續之前的命令
SQL>create table friend
CON>(FIRSTNAME CHAR(13),
CON> LASTNAME CHAR(40),
CON> S 27、TATE CHAR(2),
CON> AGE INTEGER );
同下
SQL>create table friend (FIRSTNAME CHAR(13),LASTNAME CHAR(40),STATE CHAR(2),AGE INTEGER);
每一個資料庫有一個特殊資料庫-系統資料庫,包含了使用者權限等...
SQL> show system;
RDB$CHARACTER_SETS RDB$CHECK_CONSTRAINTS
RDB$COLLATIONS 28、 RDB$DATABASE
RDB$DEPENDENCIES RDB$EXCEPTIONS
RDB$FIELDS RDB$FIELD_DIMENSIONS
.................. ..................
使用者權限
1.GRANT 授予使用者權限
GRANT 權限 ON 物件 TO 對象 [with grant option]
2.REVOKE 撤消使用者權限
REVOKE 29、 權限 ON 物件 FROM 對象
權限:SELECT ,INSERT ,UPDATE,DELETE, ALL
物件:TABLE,VIEW
對象:使用者,PUBLIC(代表全部)
with grant option 讓該名使用者有設定別的使用者的權限
*因為isql無法輸入中文,因此無法使用在中文輸入資料
*在linux下由於可能會有同名的isql(unixODBC套件),而linux安裝在/opt/firebird,因此必須使用絕對路徑來執行,另資料庫的管理者名稱可以不固定,至於密碼在安裝時會自動產生在檔案SYSDBA.password中
連線方式(檔案/tcpip) 30、
程式支援兩種連線方式
1.使用完整路徑連線
c:\abcd.....
2.使用tcpip連線,在路徑前加主機的名稱或IP
主機:c:\abcd....
我們可以根據切換這兩種
windows 下的路徑如有空白,有時必須使用" "將路徑框起來才可以用
資料庫/使用者管理(gui)
我有試過幾個免費的windows端的軟體
選擇ibeasy+: 非常容易管理,必須有資料庫的觀念
另外可配合marathon使用
ibeasy+使用者管理介面:
server->users management
(輸入管理者的名稱及密碼,進入下一個視窗)
31、
(你就可以管理你的使用者)
設定odbc
在firebird->download ->odbc
下載後安裝
odbc
Database
1.完整路徑-c:\database\abc.fdb
2.tcp/ip-ip:完整路徑(127.0.0.1:c:\database\abc.fdb)
資料庫的安全(備份/回存)(console)
GBAK:命令列工具,命令有兩個狀態,備份/回存(-b / -c)
語法
gbak 32、n>
1.備份
gbak -b 33、
-bu[ffers]
Set cache size for restored database
回存
-c[reate_database]
回存 (必要參數)
回存
-co[nvert]
轉換外部表格到內部表格s
備份
-e[xpand]
建立一個非壓縮的備份
備份
-fa[ctor] n
磁帶機的區塊系數
備份
-g[arbage collect]
備份時不清空已刪除的資料
備份
-i[nactive]
所有的索引將回存為INACTIVE
回存
-ig[nore]
備份時不做checksum錯誤檢查
34、
備份
-k[ill]
在不建立定義備份中的shadows
回存
-l[imbo]
備份時忽略limbo transactions
備份
-m[etadata]
只備份資料表格的metadata (schema).不備份資料
備份
-mo[de] read_write
回存一個 可讀/寫的資料庫(預設)
回存
-mo[de] read_only
回存一個唯讀寫資料庫
回存
-n[o_validity]
不回存validity constraints.也就是回存資料不回存 constraints
回存
-nt
非相容性的格式 35、只使用在相同作業平台,及firebird版本)
備份
-o[ne_at_a_time]
一次回存一個表格.你可以分別分次回存表格
回存
-ol[d_descriptions]
舊的格式
備份
-p[age_size] 36、以操作
這是覆寫,不要執行在使用中的資料庫!
回存
-role 37、v[erbose]
顯示所有gbak執行的詳細動作
-y 38、SDBA -password masterkey -y c:\backups\warehouse.log dbserver:/db/warehouse.fdb c:\backups\warehouse.fbk
正常的回存:
gbak -c -v -user SYSDBA -password masterkey c:\backups\warehouse.fbk dbserver:/db/warehouse2.fdb
回存到一個已存在的資料庫:
gbak -c -r -v -user SYSDBA -password masterkey c:\backups\warehouse.fbk d 39、bserver:/db/warehouse.fdb
回存一個唯讀的資料庫:
gbak -c -v -mode read_only -use_all_space -user SYSDBA -password masterkey c:\backups\warehouse.fbk c:\files\warehousedb.fdb
多重檔案備份
當資料庫很大時,要備份有點困難,因此我們將資料庫備份成許多小的檔案,如此儲存時比較方便
備份語法:
gbak [options] 40、2> ... 41、小的資料庫
gbak -c [options] 42、 43、庫全名
· 備份檔案的名稱,可包含大小等特性.
· The options which must be applied at the time of back up
- Checksums 檢查資料的完整.
- End transactions
- Metadata only 只存結構不存資料.
- Eliminate garbage 予許釋放舊版本記錄的空間.
- Old data format
- Transportable database 可以回存資料庫到不同的作業系統.
- Convert to tables 轉換外部檔案到內部表格.
選項: (D 44、atabase | Restore Database)
執行這個操作,必須是這個資料庫的擁有者或是有執行管理系統的權限: SYSDBA.
一個資料備份的資料庫可以回存
執行時必要參數:
· 備份檔案的名稱
· 資料庫全名
· 可用的參數
- Page size 變更資料庫每頁的大小,可以改善效能.說實在,所有資料庫在一頁中會比較快.
- Rebuild Indices. 重建索引
- Create database image Allow the recovery of a database in case of disk crash.
- Validity 45、 conditions Allow when data are not valid any more, following for example a modification of the integrity constraints, to be unaware of the integrity constraints.
- Commit after each table
- Replace database In this case, the database must be closed beforehand, and no user must be connected.
- 46、 Create a new database This option is exclusive compared to the preceding option
- Use all space to recreate the database. By default, at the time of the restoration of a database, the pages are filled out to 80%. This option makes it possible to fill them to 100%.
資料型態
名稱
大小
範圍 /精度
描述
47、
Blob
不固定
blob段大小限於64K
動態變長度二進位類型,用於存放大量資料的情況,如圖片、音樂、視頻、多媒體等。其基本結構單位為段,它的子類型描述了存儲資料的詳細資訊
Boolean
16位
True
False
Unkown
代表了邏輯上的(真、假、不確定)與Dialect無關。
Char(N)
n個字元
1到32767個位元組。雙字元集除2
固定長度的字元或字串
Date
64位
從西元後100年一月一日到32768年二月29日
日期類型。只有年月日,不帶時間
Decimal(P,S)
變數(16、32或64位 48、
精度p從1到18:指定數字的總長度;標度s從0到18:指定小數點後的位數。
定點小數。例如decimal(5,3)可以存儲的數位形式為:pp.sss
Double Precision
64位
從2.225×10的-308 次方
到1.797×10的308次方
IEEE雙精度浮點數,15位長度
Float
32位
從1.175×10的-38 次方
到3.402×0的38次方
IEEE單精確度浮點數,7位長度
Integer
32位
從-2147483648
到2147483647
整數
Numeric(P,S)
變長(16 49、32或64位)
精度p從1到18:指定數字的總長度;標度s從0到18:指定小數點後的位數。
定點小數。例如decimal(10,3)可以存儲的數位形式為:ppppppp.sss
Smallint
16位
從-32768到32767
短整數
Time
64位
從0:00 AM到23:59.9999 PM
時間類型
Timestamp
64位
從西元後100年一月一日到32768年二月29日
帶有時間的日期類型
Varchar(N)
n個字元
1到32767個位元組。字元集決定了其能容納的最大字元數
#Blob
blob sub_type segment
這是一個特有的資料型態,是用於儲存比較大量的資料,類似其它資料庫的text或是memo資料型態,在定義時有兩個附加參數是sub_type, segment
sub_type是blob的資料類型,以下是它的types.h中的定義
定義
說明
TYPE ("TEXT", 1,nam_f_sub_type)
TYPE ("BLR", 2,nam_f_sub_type)
TYPE ("ACL", 3,nam_f_sub_type)
TYPE ("RANGES", 4,nam_f_






