FireBird Embedded学习日记

FireBird Embedded学习日记

 

FireBird简介

Firebird是一个真正的关系数据库,支持存储过程、视图、触发器、事务等大型关系数据库的所有特性;不用考虑授权费用(免费),不用担心将来有一天你或你的客户因为使用盗版而被数据库开发商告上法庭;发布简易,安装文件只有几M,且高度可定制,客户端的分发也很简单,只需一个DLL文件。

FireBird特点

○只读数据库

我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的CDLIVE(即只用光盘就可以运行起来)应用。

○全事务控制

一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。

○在线备份

不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。

○触发器

每一个表可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。

○SQL标准兼容

Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的要求。Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理。

○有效的平台支持

把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后,再到另一个平台上恢复即可。

○物理限制

Firebird支持非常巨大的数据库,当前一个数据库文件最大的理论限制是64T (即64000G),数据库可以分成多个物理文件。每个文件的大小依赖于操作系统的限制。

○服务器引擎版本

当前有三个服务器版本。

标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器)

超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。

嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用,不用安装,直接运行,基于单机开发首选。

但是,所有的服务器都使用一种数据库格式,因此,你可以很方便的在不同的引擎之间共享数据库文件的数据。

FireBird下载

      1、FireBird官网https://www.firebirdsql.org/

      2、FireBird版本

       Firebird有四个子版本(Classic、Superclassic 、 Superserver、Embedded),Classic、Superclassic 、 Superserver 这三个版本目前被合并到同一个发布包中,统称为标准版。Embedded是另外单独的发布包,称为嵌入式版。

       标准版分别提供exe和zip发布包,嵌入式版只提供zip发布包。

       支持平台;Win32、Win64、Lunix x86、Lunix AMD64、Mac OS X。

Firebird 3.0已经发布,新增支持平台Android,但没有Embedded的发布包。

我用Firebird-2.5.8.27089-0_Win32_embed来学习。我的机器是老机器,装WIN7-X64,VS2015,不知道为什么Firebird-2.5.8.27089-0_

x64_embed不能用。

3、访问和操作Firebird数据库的数据访问组件

Firebird ADO.NET Data Provider数据提供者,是用c#写的,提供了一个高性能、Firebird API的本地实现。

可以从NuGet获取(推荐)。

DDEX Provider for Visual Studio在Visual Studio(VS)的集成开发环境中,进行数据库应用开发的时候,为了充分发挥Visual Studio的可视化开发的优势,仅仅通过VS提供的功能是无法满足要求的,为此VS提供了DDEX(Data Designer Extensibility)框架,允许数据库厂商在该框架的基础上进行图形化插件的开发,并可以将其集成到VS的开发环境中来。图形化插件扩展了VS的功能,通过提供向导或拖拽控件等方式帮助实现数据库连接、查询等操作,而替代了繁冗的代码编写工作,还可以对数据库对象在VS环境中直接进行查看和调试。

我的.NET 是4.6.1,因此下载Provider:FirebirdSql.Data.Firebird

Client-5.12.1.0-NET45

 

嵌入式特性

嵌入式(Embeded Server)模式下,客户端和本地的服务器端合而为一个动态库(fbembed.dll),可以作为远程服务器的客户端,也可以作为本地的服务器,切换非常方便。程序打包也非常方便,不用写注册表,纯绿色安装!

在同一时间,你可以有多个嵌入式服务一起运行,并且还可以有多个应用程序连接到同一个服务。但当一个嵌入式服务成功连接数据库后,它会一直独占。也就是说其他的嵌入式服务不能对这个数据库进行访问。

嵌入模式下数据库的安全性降低了,只要拥有文件权限的用户都可以访问数据库。firebird嵌入式没有密码保护,主要是用户名正确就行,网络版才需要密码。

README_embedded解读

-----------------------------------------------------------

Firebird2.5 Embedded Server notes

-----------------------------------------------------------

1.GENERIC INFORMATION一般信息

Theembedded server is a fully functional server linked as a dynamic library(fbembed.dll). It has exactly the same features as the usual server and exportsthe standard Firebird API entrypoints.

嵌入式服务器是一个功能完备的、DDL形式的服务器 (fbembed. dll)。它具有与通常的服务器相同的功能,并给出标准的FirebirdAPI入口。

2. ISSUES AND LIMITATIONS问题和局限性

  2.1. Registry注册表

TheFirebirdregistry entries are ignored. The root directory of the embeddedserver is the directory of its binary file (library).

Firebird注册表项不必理会。嵌入式服务器的根目录是二进制的文件(库)目录。

  2.2. 数据库访问

Clientaccess can be only via the local protocol, i.e. NOT a TCP/IP connection stringthat includes the server name "localhost" or IP address 127.0.0.1.

客户端访问只能通过当地的协议,即不是一个TCP / IP连接字符串,包含服务器名或IP地址127.0.0.1“localhost”。

Theembedded server supports only the local connection to a database file pathwithout a server name.

嵌入式服务器只支持不带服务器名称的数据库文件路径的本地连接。

Thedatabase file can be accessed by multiple client programs. The databaseconsistency in this case is guaranteed internally (by the shared lock table).

可以通过多个客户机程序访问数据库文件。本例中的数据库一致性在内部得到保证(通过共享锁表)。

Theembedded server acts as a true local server for a single    client accessing databaseson a local machine. It can also act as a remote gateway that redirects allnetwork calls to other hosts, just as the regular client library does.

嵌入式服务器充当一个真正的本地服务器,用于单个客户机访问本地机器上的数据库。它还可以作为一个远程网关,将所有网络调用重定向到其他主机,就像常规客户端库那样。 

  2.3. 身份验证和安全

Thesecurity database (namely security2.fdb) is not used in the embedded server andhence is not required. Any user is able to attach to any database. Since boththe server and the client run in the same address space, the security becomesjust an agreement between both sides which can be easily compromised.

安全数据库(即security2.fdb) 在嵌入式服务器中不使用,因此不需要.任何用户都可以加入到任何数据库.由于服务器和客户端都在同一个地址空间运行,因此安全性就成为双方之间的协议,很容易被破坏。

Butnote that SQL privileges are still checked.

    但是请注意,仍然要检查SQL权限。

  2.4. 兼容性

Youmay run any number of applications with the embedded    server without any conflicts. Having IB/FBserver running is not a problem either.

您可以运行任意数量的嵌入式服务器应用程序,而不会发生任何冲突.正在运行IB / FB服务器也不是问题。

3.使用

Justcopy fbembed.dll, icudt30.dll, icuin30.dll and icuuc30.dll into the directorywith your application. Then rename fbembed.dll to either fbclient.dll orgds32.dll depending on your database connectivity software.

只要复制 fbembed.dll, icudt30.dll,icuin30.dll 和icuuc30.dll到含有你的应用程序的目录.然后根据你的数据库连接软件,重命名 fbembed.dll为fbclient.dll或gds32.dll.

Thenstart your application and it will use the embedded  server as a client library and will be ableto access local datasases. You should also copy firebird.msg and firebird.conf(if necessary) to the same directory.

然后启动应用程序,它将使用嵌入式服务器作为客户端,并能够访问本地数据集.你也可以复制firebird.msg和firebird.conf (必要时)到相同的目录.

Ifexternal libraries are required for your application, then you should have themseparately. Most probably, it will be INTL support (fbintl.dll and fbintl.conf)or UDF libraries. To be able to use them, you should place them into thedirectory tree which emulates the Firebird server one, i.e. has subdirectorieslike /intl or /udf:

如果您的应用程序需要外部库,那么你就应该把它们分开.很可能,它将是INTL支持(fbintl.dll 和 fbintl.conf)或UDF库.为了能够使用它们,您应该将它们放置到模拟Firebird服务器一的目录树中,即含有子目录如/intl或/ udf:

  c:\my_app\app.exe

  c:\my_app\gds32.dll

  c:\my_app\ib_util.dll

  c:\my_app\icudt30.dll

  c:\my_app\icuin30.dll

  c:\my_app\icuuc30.dll

  c:\my_app\firebird.conf

  c:\my_app\firebird.msg

  c:\my_app\intl\fbintl.dll

  c:\my_app\intl\fbintl.conf

  c:\my_app\udf\fbudf.dll

 

  If you want to place the Firebird files(excluding the renamed fbembed.dll) in another directory, you need to modifyyour firebird.conf and set RootDirectory to the Firebird directory tree.Example:

如果您想在另一个目录中放置Firebird文件(不包括重命名的fbembed.dll),你需要修改你的firebird.conf并设置根目录为Firebird目录树。例:

 

  c:\my_app\app.exe

  c:\my_app\gds32.dll

  c:\my_app\ib_util.dll

  c:\my_app\icudt30.dll

  c:\my_app\icuin30.dll

  c:\my_app\icuuc30.dll

  c:\my_app\firebird.conf

  d:\fb\firebird.msg

  d:\fb\intl\fbintl.dll

  c:\fb\intl\fbintl.conf

  d:\fb\udf\fbudf.dll

 

  firebird.conf:

  RootDirectory = d:\fb

部署

解压

Firebird Embedded嵌入式版,是一个ZIP包,解压后就是一个完整的数据库环境,可以直接用,不需要配置。

可以直接解压到程序运行目录,也可以解压到系统System32目录下。最后删除用不到的文件,包中的路径结构不需要改变。如果解压到其它目录,则应进行相应的配置改动。

引擎

fbembed.dll是一个非托管但不需要注册的动态链接库,是嵌入服务器的引擎。不能使用安装版的fbembed.dll文件。

连接字符串“ServerType=1”或者“FbServerType.Embedded”。

疑问:说明上说要重命名 fbembed.dll为fbclient.dll或gds32.dll,可是改名后没法用?

必备组件

icudt30.dll,icuin30.dll 和icuuc30.dll是必需的

重要组件

缺少时可运行,但可能会出异常

ib_util.dll缺少,会在创建连接时,自动建立运行记录firebird.txt,里面有“ib_util init failed, UDFs can't be used - looks likefirebird misconfigured”,说的是“ib_util初始化失败,不可以使用udf——看起来像火鸟配置错误”。

firebird.msg缺少,这个是firebird的数据库的一个消息文件,是必须的文件不能删除。是一些写好的消息的语句在里面,被直接调用的。用文本编辑器直接打开后里面的英文就是。

INTL国际的,区域设置,和字符配置有关,只要不是纯英文,估计要用到。

小结

1、如果没有特殊要求(7个),复制fbembed.dll,复制ib_util.dll、icudt30.dll、 icuin30.dll 、icuuc30.dll,复制firebird.msg 、INTL到bin\debug目录。

2、添加引用FirebirdSql.Data.FirebirdClient.dll(从FirebirdSql.Data

.FirebirdClient-5.12.1.0-NET45解压的),VS2015会把这个文件自己移动到bin\debug目录下。

可选组件

Aliases.txt,别名,存储已知的数据库别名列表。里面有例子。

firebird.conf是服务器的配置文件,当改变fbembed.dll的名称或不与应用程序在同一路径时,需要进行重新配置。

UDF(User-Defined Function)(用户定义函数),即用户自定义特征。也就是说可以将数个特征组合起来形成一个新的自己定义的特征,并且会保存在UDF数据库中,随时调入。

环境组件

一般操作系统会提供,开发过程中不需要。运行时可能由于各路原因丢失,如果害怕没有,就全提取过来。

系统文件msvcr80.dll,是存放在Windows系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。在正常情况下不建议用户对该类文件进行随意的修改,它的存在对维护计算机系统的稳定具有重要作用。

系统文件msvcp80.dll是存放在Windows系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。除非用户电脑被木马病毒、或是流氓软件篡改导致msvcp80.dll丢失、缺失损坏等弹窗现象,否则不建议用户对该类文件进行随意的修改。

Microsoft.VC80.CRT.manifest,Manifest清单文件,保存了有关应用程序配置的元数据,XP及其以后的操作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表(此时获得的,并不直接是DLL文件的本身的位置,而是DLL的manifest)操作系统再根据DLL的Manifest提供的信息去寻找对应的DLL ,这样就可能区别不同版本的同一个DLL文件。

mfc80.dll,msvcr80.dll,msvcp80.dll和Microsoft.VC80.CRT.manifest构成了软件的应用环境,如果这些文件因为各种原因丢失,则会出现“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”运行提示,就是缺乏软件应用环境,但大部分情况下重装是解决不了问题的,这是因为大部分软件不提供这些文件。

运行记录

firebird.txt

程序运行时自动建立,正常情况下会记录连接结束时间。

许可证

IPLicense.txt,IPLicense= INTERBASE PUBLIC LICENSE数据库公共许可证

IPLicense.txt,IDPLicense =Initial Developer's PUBLIC LICENSE最初的开发人员的公共许可证

用户名和密码

默认的数据库用户名为SYSDBA,默认密码为masterkey。

SYSDBA是超级用户,能访问、修改所有的数据库。

如果建立数据库时为其指定了宿主,则只有超级用户和数据库宿主才有权利修改数据库中的结构(添加字段,添加表,等等).

密码在网络连接的时候可能会暴露,但还是应该设定数据库宿主及密码,而不是用超级用户及密码去上网。

ServerType为0指服务器版,为1表示嵌入版

 

猜你喜欢

转载自blog.csdn.net/u013727899/article/details/79995164
今日推荐