基本配置
文件位置
Unix和Linux下其配置文件位于
- Built from source - /usr/local/firstworks/etc/sqlrelay.conf
- RPM package - /etc/sqlrelay.conf
- FreeBSD package - /usr/local/etc/sqlrelay.conf
- NetBSD package - /usr/pkg/etc/sqlrelay.conf
- OpenBSD package - /usr/local/etc/sqlrelay.conf
Windows下
安装目录\etc
例如:C:\Program Files\Firstworks\etc\sqlrelay.conf
文件结构
<?xml version="1.0"?>
<instances>
<instance id="example">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="user=scott;password=tiger;oracle_sid=orcl"/>
</connections>
</instance>
</instances>
实例的名称为example
实例的用户名为sqlruser,口令为sqlrpassword
数据库的用户名为scott,口令为tiger,sid为orc1
默认5个持久连接, 要修改的话在 instance标签加入connections属性
开启命令:
sqlr-start -id example
默认使用9000端口开启远程主机的sqlrelay:
sqlrsh -host hostname -user sqlruser -password sqlrpassword开启本地服务
sqlrsh -host localhost -user sqlruser -password sqlrpassword
Database Cursor(数据库光标)
用于执行请求并处理结果集。大部分应用只用得到一个光标,有的请求需要多个。。
sqlrelay会想保持链接一样保持光标,默认情况下,每个连接打开一个光标,但每个连接可以开启的光标数,可以由instance的cursor属性指定
动态缩放
connections和cursors都可以动态缩放,设置初始值和上限即可,都是动态开辟,用后释放的模式。
<?xml version="1.0"?>
<instances>
<instance id="example" connections="10" maxconnections="20" cursors="2" maxcursors="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="user=scott;password=tiger;oracle_sid=orcl"/>
</connections>
</instance>
</instances>
除此之外,还有一些属性
- maxqueuelength
- growby
- ttl
- cursors_growby
监听器配置
默认端口是9000,可以通过port属性修改
开启命令修改为:
sqlrsh -host sqlrserver -port 9001 -user sqlruser -password sqlrpassword可以绑定unix的socket
sqlrsh -socket /tmp/example.socket -user sqlruser -password sqlrpassword
如果服务器有多个网口,可以用addresses属性绑定多个IP
<instance id="example" addresses="192.168.1.50,192.168.123.51" connections="10">
...
</instance>
但这种情况下不会监听本机
数据库配置
通过修改dbase属性修改数据库,默认是oracle
如下配置可以连接IBM DB2数据库
<?xml version="1.0"?>
<instances>
<instance id="example" dbase="db2" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="db=testdb;user=db2inst1;password=db2inst1pass;lang=C;timeout=0"/>
</connections>
</instance>
</instances>
会话-请求
在会话开始和结束时运行一系列请求
<?xml version="1.0"?>
<instances>
<instance id="example" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<session>
<start>
<runquery>alter session set nls_date_format='MM/DD/YYYY'</runquery>
</start>
<end>
<runquery>alter session set nls_date_format='DD-MON-YYYY'</runquery>
</end>
</session>
<connections>
<connection string="user=scott;password=tiger;oracle_sid=orcl"/>
</connections>
</instance>
</instances>
多个实例
配置文件中可以定义多个实例(instance)
<?xml version="1.0"?>
<instances>
<instance id="oracleexample" port="9000" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="user=scott;password=tiger;oracle_sid=orcl"/>
</connections>
</instance>
<instance id="sapexample" dbase="sap" port="9001" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="sybase=/opt/sap;lang=en_US;server=TESTDB;user=testuser;password=testpassword;db=testdb"/>
</connections>
</instance>
<instance id="db2example" dbase="db2" port="9002" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="db=testdb;user=db2inst1;password=db2inst1pass;lang=C;timeout=0"/>
</connections>
</instance>
</instances>
启动命令
sqlr-start -id oracleexample
sqlr-start -id sapexample
sqlr-start -id db2example
链接命令
sqlrsh -host sqlrserver -port 9000
sqlrsh -host sqlrserver -port 9001
sqlrsh -host sqlrserver -port 9002
配置路径
多个实例在一个文件中有时候也会存在问题,所以拆分成多个配置文件也是需要的。
将配置文件放入sqlrelay.conf.d
.../sqlrelay.conf.d/oracle.conf
<?xml version="1.0"?>
<instances>
<instance id="oracleexample" port="9000" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="user=scott;password=tiger;oracle_sid=orcl"/>
</connections>
</instance>
</instances>
.../sqlrelay.conf.d/sap.conf
<?xml version="1.0"?>
<instances>
<instance id="sapexample" dbase="sap" port="9001" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="sybase=/opt/sap;lang=en_US;server=TESTDB;user=testuser;password=testpassword;db=testdb"/>
</connections>
</instance>
</instances>
.../sqlrelay.conf.d/db2.conf
<?xml version="1.0"?>
<instances>
<instance id="db2example" dbase="db2" port="9002" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="db=testdb;user=db2inst1;password=db2inst1pass;lang=C;timeout=0"/>
</connections>
</instance>
</instances>
指定配置文件
开启命令除了id参数还有config参数
当指定一个文件时,file://前缀可省略,但指定一个文件夹时,dir://不可省略
sqlr-start -id oracleexample -config /home/myuser/mysqlrelay.conf
sqlr-start -id oracleexample -config file:///home/myuser/mysqlrelay.conf
sqlr-start -id oracleexample -config dir:///home/myuser/mysqlrelay.conf.d
config后可以接多个参数,用逗号隔开即可。
使用远程配置文件
可以通过libcurl内的协议,使用远程的配置文件,如http,ftp,scp,sftp,smb等
sqlr-start -id oracleexample -config http://configserver.mydomain.com/sqlrconfig/sqlrelay.conf
sqlr-start -id oracleexample -config http://myuser:mypassword@configserver.mydomain.com/sqlrconfig/sqlrelay.conf
sqlr-start -id oracleexample -config http://[/usr/local/firstworks/etc/sqlruserpwd.txt]@configserver.mydomain.com/sqlrconfig/sqlrelay.conf
第一种方法,无验证,直接远程获取
第二种方法,URL中给定用户名和口令并用@隔开
第三种方法,文件中写入用户名口令(文件的内容遵循格式“username:password”)
最好使用第三种方法。
链接文件
配置文件可以包含其他配置文件的链接
# oracle configuration
http://myuser:mypassword@configserver.mydomain.com/sqlrconfig/oracle.conf
# sap/sybase configuration
http://myuser:mypassword@configserver.mydomain.com/sqlrconfig/sap.conf
# db2 configuration
http://myuser:mypassword@configserver.mydomain.com/sqlrconfig/db2.conf
自动运行配置文件
之前的例子,都是通过sqlr-start命令和-id参数启动配置文件,如果不带id参数调用sqlr-start,则会将所有enabled属性为yes的实例启动
<?xml version="1.0"?>
<instances>
<instance id="oracleexample" enabled="yes" port="9000" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="user=scott;password=tiger;oracle_sid=orcl"/>
</connections>
</instance>
<instance id="sapexample" dbase="sap" port="9001" connections="10">
<users>
<user user="sqlruser" password="sqlrpassword"/>
</users>
<connections>
<connection string="sybase=/opt/sap;lang=en_US;server=TESTDB;user=testuser;password=testpassword;db=testdb"/>
</connections>
</instance>
</instances>
上面的配置,sqlr-start命令会启动oracleexample,而不会启动sapexample。