|
第3章 UNIX下快速起步 本章由李博@xjtu(role0523 at 163 dot com)翻译,最新的请看hsqldb.blogchina.com www.sawpad.com 3.1 本章目的
本章主要介绍如何在UNIX操作系统上快速安装、运行和使用HSQLDB。
HSQLDB具有许多可选的特性,在这里,我只讲述它们中的一少部分。我打算讲述最基本的UNIX环境下HSQLDB安装:运行一个可以将数据持久保存的多用户数据库(我指的是数据是保存在磁盘上的,所以当数据库关闭和启动时,数据将持久保存着),我也会讲述如何将HSQLDB作为系统后台程序运行。 3.2 安装
访问 http://sourceforge.net/projects/hsqldb,在该页面的中间位置,找到“Latest File Releases”,然后点击hsqldb对应的download,来下载最新的HSQLDB发布包(hsqldb黑体字对应的栏目里面版本号最大的那个发布版)。
如果你想要一个rpm发布包的话,你应该按照上一段所描述的方法来查找HSQLDB的当前版本。点击http://www.jpackage.org/站点上“freesection”中的hsqldb栏,看看是否有HSQLDB的当前版本。希望JPckage folk能够提供它们的rpm支持的JVM版本的文档(目前他们既没有在网站上,也没有在发布包里面提供相关的文档)。
注意:可能会出现在我下面的讨论中一些文件格式实际上并没有提供,如果这样的话,那就是我们还没有考虑创建这些文件。
二进制文件的安装取决于你下载的发布包的格式。
从a .pkg.Z 文件安装
这个版本仅供Solaris操作系统的超级用户使用。这是一个系统的V压缩包,下载以后用uncompress或者gunzip解压该压缩包。
uncompress filename.pkg.Z
你可以运行下面的指令来查看压缩包的信息
pkginfo -l -d filename.pkg
以root身份运行pkgadd来安装
pkgadd -d filename.pkg
从a .rpm文件安装
这是Linux的rpm安装包,下载完rpm包之后,你可以运行下面的指令来查看它的信息:
rpm -qip /path/to/file.rpm
可以以root的身份来运行下面的指令来安装和更新rpm包
rpm -Uvh /path/to/file.rpm
Suse的用户可能需要运行下面的指令来让Yast知道已经安装的rpm安装包:
yast2 -i /path/to/file.rpm.
从a.zip文件安装
将zip文件解压到新的HSQLDB主目录的上一级目录。你不需要创建HSQLDB_HOME文件夹,因为在解压过程中会以正确的名称创建它。
cd parent/of/new/hsqldb/home
unzip /path/to/file.zip
zip中压缩的所有文件将会被解压缩到一个新的hsqldb文件夹下面。
现在看看自己所安装的文件. (对于zip文件安装,在hsqldb文件夹下面. 其他情况,请使用你的包管理系统提供的工具查看).其中hsqldb系统中最重要的文件就是hsqldb.jar,它位于lib目录中。
重要提示:为了本章的目的,我把HSQLDB_HOME规定为:包含hsqldb.jar的lib目录的上一级目录。例如:假如你的hsqldb.jar的路径是/a/b/hsqldb/lib/hsqldb.jar,那么你的HSQLDB_HOME目录为/a/b/hsqldb。
如果你分发包的描述中提到了hsqldb.jar文件可以在你安装Java版本下工作,那么你已经完成了安装;否则,你还需要生成一个新的hsqldb.jar文件。
如果你按照上面的说明来作,却仍然不知道你的hsqldb.jar支持什么样的Java版本,你可以阅读一下HSQLDB_HOME/readme.txt和HSQLDB_HOME/index.html。如果对你还是没有帮助的话,那么你可以试试你的hsqldb.jar,看看它能否正常工作,要么就创建你自己的hsqldb.jar。
如果你使用使用提供的hsqldb.jar的话,就可以跳到文档的下一个小节(section),否则的话,就要创建一个新的hsqldb.jar.
Procedure 3.1. 创建 hsqldb.jar
1. 如果你还没有Ant,那么先从http://ant.apache.org网站上下载一个最新的稳定的二进制版本。进入你要安装Ant的目录,然后采用下面的命令解压Ant的压缩包:
unzip /path/to/file.zip
或者
tar -xzf /path/to/file.tar.gz
或者
bunzip2 -c /path/to/file.tar.bz2 | tar -xzf -
ANT将会被安装在名为apache-ant- 加上版本号的新的子目录中。解压完之后,你可以为该文件夹重命名。
2. 将系统变量JAVA_HOME设置为你的Java JRE或者JDK根目录,如下所示:
export JAVA_HOME; JAVA_HOME=/usr/java/j2sdk1.4.0
JAVA_HOME的位置完全取决于你的UNIX的种类。Sun的Java rpm分发包通常会安装到/usr/java/something.Sun的系统V包的Java分发包(包括来自Soloris的分发包)通常安装到/usr/something,同时会生成一个从/usr/java到默认版本的连接(所以对于Solaris,通常应该将JAVA_HOME 设置为/usr/java)
3. 移除文件HSQLDB_HOME/lib/hsqldb.jar,如果存在的话。
4. 进入到HSQLDB_HOME/build目录,确保Ant主目录下面的bin目录在你的搜索路径中,运行下面的命令:
ant hsqldb
这将会生成一个新的 HSQLDB_HOME/lib/hsqldb.jar.
如果你要使用默认的设置,生成hsqldb.jar之外的其他东西,可以查阅附录中的“生成HSQLDB”中的内容。
3.3 建立一个HSQLDB持久性数据库实例和一个HSQLDB Server
如果你是从一个特定系统安装包(OS-specific package)安装的HSQLDB,那么你可能已经具有了数据库实例和经过预配置的Server。查看一下你的安装包是否包含一个名为server.properties的文件(使用有的安装包管理工具)。假如你已经具有数据库实例和Server,为了理解你的建立过程,我建议在你随便看看 (poke around) 的时候还是阅读一下本节内容。
1. 选择一个Unix用户来运行数据库应用服务器。如果这个数据库是用于多用户,或者是一个产品系统(production system)(或者模拟一个产品系统),你应该专门指定一个Unix用户用于这个目的,在我的例子中,我使用了名为hsqldb的用户。在这一章中,我把这个用户称为HSQLDB_OWNER,因为这个用户将拥有数据库实例文件和进程。
如果帐号不存在的话,就创建一个。在所有的系统上??5个Unix和大多数的hybirds(包括Linux),你可以运行下列的指令(以root的身份):
useradd -m -c 'HSQLDB Database Owner' -s /bin/ksh -m hsqldb
(BSD-不同的用户可以使用一个类似的pw useradd hsqldb...命令).
2. 成为 HSQLDB_OWNER. 把样例文件HSQLDB_HOME/src/org/hsqldb/sample/sample-server.properties拷贝到 HSQLDB_OWNER的主目录下,重命名为server.properties.
# Hsqldb Server cfg file.
# See the Advanced Topics chapter of the Hsqldb User Guide.
server.database.0 file:db0/db0
因为第一个数据库的值是以file:开始的,那么数据库实例将会被持久化到位于指定的目录下,并以指定名字开头命名的一组文件。你可以阅读“高级话题”一章的如何指定不同类型的其他数据库实例,以及如何设置监听端口和许多其他的事情。
3. 将环境变量CLASSPATH的值设置并输出为HSQLDB_HOME(同上面所描述的) 加上"/lib/hsqldb.jar",例如:
export CLASSPATH; CLASSPATH=/path/to/hsqldb/lib/hsqldb.jar
在HSQLDB_OWNER的主目录里,运行
java org.hsqldb.Server &
这将会在后台启动Server进程,以及将会产生你的新的数据库实例“db0”。当你看到包含"HSQLDB server... is online"的信息时,请继续下一小节的内容。
3.4 访问你的数据库
将文件HSQLDB_HOME/src/org/hsqldb/sample/sqltool.rc 拷贝到 HSQLDB_OWNER的主目录下. 用 chmod命令使这个文件仅对HSQLDB_OWNER可读写。
# $Id: sqltool.rc,v 1.14 2005/05/22 04:46:16 unsaved Exp $
# This is a sample RC configuration file used by SqlTool, DatabaseManager,
# and any other program that uses the org.hsqldb.util.RCData class.
# You can run SqlTool right now by copying this file to your home directory
# and running
# java -jar /path/to/hsqldb.jar mem
# This will access the first urlid definition below in order to use a
# personal Memory-Only database.
# If you have the least concerns about security, then secure access to
# your RC file.
# See the documentation for SqlTool for various ways to use this file.
# A personal Memory-Only database.
urlid mem
url jdbc:hsqldb:mem:memdbid
username sa
password
# This is for a hsqldb Server running with default settings on your local
# computer (and for which you have not changed the password for "sa").
urlid localhost-sa
url jdbc:hsqldb:hsql://localhost
username sa
password
# Template for a urlid for an Oracle database.
# You will need to put the oracle.jdbc.OracleDriver class into your
# classpath.
# In the great majority of cases, you want to use the file classes12.zip
# (which you can get from the directory $ORACLE_HOME/jdbc/lib of any
# Oracle installation compatible with your server).
# Since you need to add to the classpath, you can't invoke SqlTool with
# the jar switch, like "java -jar .../hsqldb.jar..." or
# "java -jar .../hsqlsqltool.jar...".
# Put both the HSQLDB jar and classes12.zip in your classpath (and export!)
# and run something like "java org.hsqldb.util.SqlTool...".
#urlid cardiff2
#url jdbc:oracle:thin:@aegir.admc.com:1522:TRAFFIC_SID
#username blaine
#password secretpassword
#driver oracle.jdbc.OracleDriver
# Template for a TLS-encrypted HSQLDB Server.
# Remember that the hostname in hsqls (and https) JDBC URLs must match the
# CN of the server certificate (the port and instance alias that follows
# are not part of the certificate at all).
# You only need to set "truststore" if the server cert is not approved by
# your system default truststore (which a commercial certificate probably
# would be).
#urlid tls
#url jdbc:hsqldb:hsqls://db.admc.com:9001/lm2
#username blaine
#password asecret
#truststore /home/blaine/ca/db/db-trust.store
# Template for a Postgresql database
#urlid blainedb
#url jdbc:postgresql://idun.africawork.org/blainedb
#username blaine
#password losung1
#driver org.postgresql.Driver
# Template for a MySQL database
#urlid mysql-testdb
#url jdbc:mysql:///test
#username root
#username blaine
#password hiddenpwd
#driver com.mysql.jdbc.Driver
我们将使用配置文件中的“localhost-sa”样例urlid定义。对于这个urlid,其JDBC的URL是jdbc:hsqldb:hsql://localhost,也就是运行在本机默认端口的HSQLDB Server的默认数据库实例的URL。你可以在“高级主题”一章中,阅读有关连接其他数据库实例以及其他Server的URL的内容。
运行 SqlTool.
java -jar path/to/hsqldb.jar localhost-sa
此时,如果你得到一个提示的话,那意味着大功告成。如果安全是你关心的根本问题的话,你应该改变数据库中的权限没骂,使用命令SET PASSWORD来改变系统管理员(SA)的密码:
set password "newpassword";
当我们完成操作时,使用命令“\q”退出。
如果你更改了SA 的密码,你应该相应地修改sqltool.rc文件中的密码。
你也当然可以使用任何JDBC客户端程序访问数据库。请参考附录中的“第一个JDBC客户端范例”。你需要修改你的classpath以包含hsqldb.jar和客户端程序的class(es)。你也可以数用其它的HSQLDB客户端程序,比如:org.hsqldb.util.DatabasManagerSwing,它是一个与SqlTool有相同用途的图形化的客户端。
你可以使用人和普通的UNIX帐户来运行JDBC客户端(包括SqlTool)只要该帐户具有读取文件hsqldb.jar和sqltool.rc的权限。关于将sqltool.rc放置在何处,如何执行sql文件和其他的SqlTool特征,请查阅“SqlToll”一章。
3.5 创建其他的帐户
以SA或者其他具有管理权限的用户连接到数据库,运行“CREATE USER”为你的数据库实例创建一个新的帐号。HSQLDB帐号是数据库实例专有的,而不是Server的。
对于当前的HSQLDB版本来说,只有具有DBA身份的用户才能都创建或者拥有数据库对象。DBA成员具有任何操作的权限,而非DBA成员可能被授予了一些权限,但却不能创建或者拥有数据库对象。(不久以后,非DBA成员也具有也讲可以创建数据库,前提是在目标schema(方案)中拥有了这样做的许可)。当你首次次创建一个hsqldb数据库时,它仅仅只有一个数据库用户??SA(一个DBA的帐号)??和一个空字符串的密码。你应该设置一个密码(如前面文章中描述的方法)。你可随意创建多个其它的用户。为了将一个用户的身份设置为DBA,你可以在“CREATE USER”中使用“ADMIN”选项,或者在创建后授予这个帐号DBA的角色。
如果你创建了一个用户却没有使用ADMIN标签(或者没有授予该用户DBA的角色),那么这个用户虽然可以读取data dictionary tables(数据词典表格)的内容,但是不能创建或拥有它的数据库对象。他将只有虚假用户(pseudo-user)PUBLIC所拥有的权利。为了给他更多的权限,即使是读取数据库对象的权利,你可以对特定的数据库对象授予(GRANT)许可,授予角色(它包含了一组的权限),或者授予DBA角色。
因为仅拥有数据库帐号的人才可以对数据库进行相应的操作,所以允许其他的数据库用户可以查看数据库表中的数据通常是有意义的。为了优化性能,减少诊断,最小化管理,通常将多数据库用户需要访问的任一数据库对象向PUBLIC(公众)授予SELECT的权限是最佳的选择(除非你要对你的数据库中的数据采取保密措施)。 3.6 关闭数据库
当你完成数据库实例的操作时,应当进行一次彻底的数据库关闭。你需要以SA或者其他具有管理员身份的用户连接上数据库。你可以使用SqlTool,使用下面的命令:
java -jar path/to/hsqldb.jar --noinput --sql shutdown localhost-sa
你不用担心停止数据库Server的事情,因为它已经在所有运行的数据库实例关闭时自动关闭了。
3.7 在系统后台运行HSQLDB
当然你可以通过 System V UniXes(应该是在UNIX的V系统上的意思)的inittab(初始表)来运行HSQLDB,但是通常的做法是通过初始化脚本来启动,这样会更快捷和易于管理。这一小节将会讲述如何建立和使用UNIX的初始化(init)脚本。不过这个初始化脚本只供root用户使用。(但这并不意味着Hsqldb Server是以root用户来启动的??通常并不是这样的)。
Init script(初始化脚本)的主要用途是用来启动一个具有数据库实例的HSQLDB Server(这个数据库实例是在你的server.properties文件中设置的)和关闭所有的数据库实例和附加的urlid,这些urlid你可以在你的init script文件中列出来(也可以不)。这些urlid都必须在sqltool.rc文件中有记录。由于防火墙问题的缘故,如果你运行一个WebServer来代替独立Server的话,应该修改sqltool.rc中的URL,在配置文件中设置TARGET_CLASS(目标类)。
你建立完init script之后,root用户可以随时启动和停止HSQLDB(也就是说,不仅仅实在系统启动或关闭的时候才启动或关闭HSQLDB) 3.7.1 轻便的HSQLDB初始化脚本
初始化脚本设计的根本准则就是轻便性。它并不采用新型的的Linux和HPUX打印彩色的启动/关闭信息的方式,它也不保留子系统状态文件以及使用有许多UNIX系统提供的启动/关闭函数,因为这些特征都不是轻便的。
为了弥补这种局限性,这一个脚本在我测试过的UNIX都很很好的工作,当然你也可以通过简单的修改使它在其它的UNIX系统上运行。当你的脚本不能与系统规定的后台进程管理器紧密结合时,你得有个经过测试良好和运行良好的脚本,它能给你带来好的有价值的反馈。(you do have a well tested and well behaved script that gives good, utilitarian feedback). 3.7.2 初始化脚本配置步骤
这里我们需要先获取init script来运行独立的Server或者WebServer(至于运行何种Server由TARGET_CLASS指定)。做完这些以后,你可以自定义JVM,来在JVM里运行其它的Server,运行你自己的应用程序(嵌入的)或者甚至用你自己的overriding classes(重载类)来重载HSQLDB的行为。
1. 首先将初始化脚本hsqldb从HSQLDB_HOME/bin拷贝到你所用的UNIX操作系统放置初始化脚本的地方,通常的位置是/etc/init.d or /etc/rc.d/init.d(在System V风格的UNIX上),/usr/local/etc/rc.d(在BSD风格的UNIX上)以及/Library/StartupItems/hsqldb(在OS X上,不过你需要自己创建文件夹)。
2. 查看一下初始化脚本和你的UNIX平台CFGFILE的值是多少。你需要拷贝样例配置文件HSQLDB_HOME/src/org/hsqldb/sample/sample-hsqldb.cfg到那个位置(就是脚本在的位置),按照里面的说明进行配置。
# $Id: sample-hsqldb.cfg,v 1.14 2005/06/01 22:24:50 unsaved Exp $
# Sample configuration file for HSQLDB database server.
# See the "UNIX Quick Start" chapter of the Hsqldb User Guide.
# N.b.!!!! You must place this in the right location for your type of UNIX.
# See the init script "hsqldb" to see where this must be placed and
# what it should be renamed to.
# This file is "sourced" by a Bourne shell, so use Bourne shell syntax.
# This file WILL NOT WORK until you set (at least) the non-commented
# variables to the appropriate values for your system.
# Life will be easier if you avoid all filepaths with spaces or any other
# funny characters. Don't ask for support if you ignore this advice.
# Thanks to Meikel Bisping for his contributions. -- Blaine
JAVA_EXECUTABLE=/usr/java/j2sdk1.4.2_02/bin/java
# Unless you copied a hsqldb.jar file from another system, this typically
# resides at $HSQLDB_HOME/lib/hsqldb.jar, where $HSQLDB_HOME is your HSQLDB
# software base directory.
HSQLDB_JAR_PATH=/opt/hsqldb/lib/hsqldb.jar
# Where the file "server.properties" resides.
SERVER_HOME=/home/blaine/db
# What UNIX user the server will run as.
# (The shutdown client is always run as root or the invoker of the init script).
# Runs as root by default, but you should take the time to set database file
# ownerships to another user and set that user name here.
HSQLDB_OWNER=blaine
# The HSQLDB jar file specified in HSQLDB_JAR_PATH above will automatically
# be in the class path. This arg specifies additional classpath elements.
# To embed your own application, add your jar file(s) or class base
# directories here, and add your main class to the INVOC_ADDL_ARGS setting
# below.
SERVER_ADDL_CLASSPATH=/usr/local/dist/currencybank.jar
# We require all Server/WebServer instances to be accessible within
# $MAX_START_SECS from when the Server/WebServer is started.
# Defaults to 60.
# Raise this is you are running lots of DB instances or have a slow server.
#MAX_START_SECS=200
# Time to allow for JVM to die after all HSQLDB instances stopped.
# Defaults to 1.
#MAX_TERMINATE_SECS=0
# These are "urlid" values from a SqlTool authentication file
# ** IN ADDITION TO THOSE IN YOUR server.properties OR webserver.properties
# file. All server.urlid.X values from your properties file will automatically
# be started/stopped/tested. $SHUTDOWN_URLIDS is for additional urlids which
# will stopped. (Therefore, most users will not set this at all).
# Separate multiple values with white space. NO OTHER SPECIAL CHARACTERS!
# Make sure to quote the entire value if it contains white space separator(s).
# Defaults to none (i.e., only urlids set in properties file will be stopped).
#SHUTDOWN_URLIDS='sa mygms'
# SqlTool authentication file used only for shutdown.
# The default value will be sqltool.rc in root's home directory, since it is
# root who runs the init script.
# (See the SqlTool chapter of the HSQLDB User Guide if you don't understand
# this).
#AUTH_FILE=/home/blaine/sqltool.rc
# Set this to either 'WebServer' or 'Server'. Defaults to Server.
# The JVM that is started can invoke many classes (see the following item
# about that), but this is the Server that is used (1) to check status,
# (2) to shut down the JVM, (3) to get urlids for #1 from the
# server's server/webserver.properties file.
#TARGET_CLASS=WebServer
# Note that you don't specify the org.hsqldb package, since you have no
# choice in the matter (you can only run org.hsqldb.Server or
# org.hsqldb.WebServer). If you specify additional classes with
# INVOC_ADDL_ARGS (described next), you do need to specify the
# full class name with package name.
# This is where you specify exactly what your HSQLDB JVM will run.
# The class org.hsqldb.util.MainInvoker will run the TARGET_CLASS
# specified above with any arguments supplied here + any other classes
# and arguments. Every additional class (in addition to the TARGET_CLASS)
# must be preceded with an empty string, so that MainInvoker will know
# you are giving a class name. MainInvoker will invoke the normal
# static main(String[]) method of each such class.
# By default, MainInvoker will just run TARGET_CLASS with no args.
# Example that runs just the TARGET_CLASS with the specified arguments:
#INVOC_ADDL_ARGS='-silent false'
# Example that runs the TARGET_CLASS plus a WebServer:
#INVOC_ADDL_ARGS='"" org.hsqldb.WebServer'
# Note the empty string preceding the class name.
# Example that starts TARGET_CLASS with an argument + a WebServer +
# your own application with its args (i.e., the HSQLDB Servers are
# "embedded" in your application). (Set SERVER_ADDL_CLASSPATH too).:
#INVOC_ADDL_ARGS='-silent false "" org.hsqldb.WebServer "" com.acme.Stone
#--env prod localhost'
# Example to run a non-TLS server in same JVM with a TLS server. In this
# case, TARGET_CLASS is Server which will run in TLS mode by virtue of
# setting TLS_KEYSTORE and TLS_PASSWORD above. The "additional" Server
# here overrides the 'tls' and 'port' settings:
#INVOC_ADDL_ARGS="'' org.hsqldb.Server -port 9002 -tls false"
# Note that you use nested quotes to group arguments and to specify the
# empty-string delimiter.
# For TLS encryption for your Server, set these two variables.
# N.b.: If you set these, then make this file unreadable to non-root users!!!!
# See the TLS chapter of the HSQLDB User Guide, paying attention to the
# security warning(s).
# If you are running with a private server cert, then you will also need to
# set "truststore" in the your SqlTool config file (location is set by the
# AUTH_FILE variable in this file, or it must be at the default location for
# HSQLDB_OWNER).
#TLS_KEYSTORE=/path/to/jks/server.store
#TLS_PASSWORD=password
# Any JVM args for the invocation of the JDBC client used to verify DB
# instances and to shut them down (SqlToolSprayer).
# This example specifies the location of a private trust store for TLS
# encryption.
# For multiple args, put quotes around entire value.
#CLIENT_JVMARGS=-Djavax.net.debug=ssl
# Any JVM args for the server.
# For multiple args, put quotes around entire value.
#SERVER_JVMARGS=-Xmx512m
3. 要么把HSQLDB_OWNER的sqltool.r文件c拷贝到root的根目录下面,要么将AUTH_FILE的值设置为HSQLDB_OWNER的sqltool.rc文件的绝对路径。这个文件由root用户直接阅读,即使你是以一个非root用户来运行hsqldb的(通过在配置文件中设置HSQLDB_OWNER)。如果你复制了那个文件,还要确保使用chmod来限制新的sqltool.rc文件的访问权限。
4. 编辑server.properties f文件。对于你定义的每一个server.database.X,为这个数据库实例的管理用户的urlid设置一个名为server.urlid.X的属性。
Example 3.1. server.properties fragment
server.database.0=file://home/hsqldb/data/db1
server.urlid.0=localhostdb1
警告:
确保为每一个数据库实例添加了urlid。如果你没有的话,随后的初始化脚本将会不能得到数据库的信息而无法访问,以至于给出错误的诊断信息。
在这个例子中,你需要在sqltool.rc文件中将urlid定义为localhostdb1
Example 3.2. example sqltool.rc stanza
urlid localhostdb1
url jdbc:hsqldb:hsql://localhost
username sa
password secret
5. 验证初始化脚本的工作
只需要以root运行下列命令来查看你可以使用的参数
/path/to/hsqldb
注意你可以在任何时候运行下列的命令来查看HSQLDBServer是否正在运行:
/path/to/hsqldb status
重新使用每一个可能的参数来运行脚本,你可以测试脚本是否真的良好。如果出现什么问题的话,你可以查看“解决脚本配置过程中的问题”这一小节。
6. 让你的系统在启动和关闭的时候运行初始化脚本。如果你正在使用的UNIX系统(像BSD系列或Gentoo)有/etc/rc.conf 或者 /etc/rc.conf.local这些文件的话,你必须在每个文件中将"hsqldb_enable"设置成“yes”。 (运行下列命令看看你的系统是否有这些文件: cd /etc; ls rc.conf rc.conf.local)。对于使用System V风格初始化的UNIX系统,你必须建立硬链接或者软链接,不管是采用手动方式或者使用类似于chkconfig 或 insserv的管理工具,还是GUI方式的工具,比如运行级的编辑器(like run level editors).
下面这段只对使用Mac OS X的用户适用。如果你是按照上面的说明做的话,你的初始化脚本应该在这个地方: /Library/StartupItems/hsqldb/hsqldb.现在将这个文件 StartupParameters.plist从你的HSQLDB分发版的 src/org.hsqldb/sample文件夹 复制到与初始化脚本相同的目录下. 只要这两个文件都在/Library/StartupItems/hsqldb目录下, 你的初始化脚本现在就被激活了 (为了轻便性考虑,初始化脚本不会当作/etc/hostconfig里的一项设置检查). 你可以运行下列命令将初始化脚本作为启动项来运行:
SystemStarter {start|stop|restart} Hsqldb
Hsqldb是一项服务的名称.看SystemStarter的man 页面,为了禁止初始化脚本,你可以清空/Library/StartupItems/hsqldb文件夹下面的文件.很难相信,Mac的用户告诉我说在系统关闭的期间,启动项根本就不运行。因此,如果你不想你的数据损坏的话,必须在关闭Mac系统之间,运行命令"SystemStarter stop Hsqldb"。
按照配置文件中的范例,添加其他的类到server的JVM classpath中,并在JVM中运行这些类。(可以参看 SERVER_ADDL_CLASSPATH和INVOC_ADDL_ARGS项). 3.7.3 解决脚本配置过程中的问题
用ps命令看一下系统进程中是否有hsqldb字样,尝试从任意客户端连接一下数据库。如果初始化脚本成功启动了数据库,但是却错误的报告没有成功启动的话,你的问题可能与urlid或者sqltool设置有关。如果你的数据库确实没有启动,可以跳到下一段。首先,检查一下server.properties或webserver.properties中列出的urlid是否正确无误,然后,检查一下你是否是以root身份来连接数据库实例的(如果你在配置如见中设置了AUTH_FILE的话,你可以使用?rcfile开关来试试)。
如果你的数据库确实没有启动,你检查你是否可以用切换(su)到数据库owner(相当于unix下的root)的帐号来启动数据库,如果还没有成功的话,按照下面描述的方法调试一下脚本或者寻求帮助。
为了调试脚本,要以verbose模式来运行脚本,这样可以看到运行过程中的详细信息(也可以手动运行可疑的步骤)。为了使用verbose模式运行初始化脚本的话(实际上,可以是任何sh shell脚本),使用-x或-v开关的sh命令,如下:
sh -x path/to/hsqldb start
如果你不明白-v和-x之间的区别的话,可以参看sh的man page。
如果你还有什么问题寻求帮助的话, 可以使用HSQLDB lists/forums 或这给作者blaine.simpson@admc.com发送email. 如果你给作者发email的话,确保包含了hsqldb初始化脚本的修订版本号(位于以"# $Id:"开始的那行文字的头部), 和运行下列命令的输出:
sh -x path/to/hsqldb start > /tmp/hstart.log 2>&1
|