Proxool 连接SQL SERVER 2005镜像,如何设置?

今生你我相依到老 2008-11-27 04:20:59
我的数据库采用的是SQL SERVER2005 MIRROR,3台机器:
主体服务器(192.168.1.11)、备机服务器(192.168.1.12)、见证服务器(192.168.1.13)。
经测试镜像完全OK。现在采用PROXOOL作为连接池。不知道如何配置,我看到网上有类似的配置,但是不正确。

我的proxool.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>

<something-else-entirely>

<proxool>

<alias>Mirror_DB </alias>

<driver-url>jdbc:sqlserver://192.168.0.11:1433;DatabaseName=TestMirror;failoverParnter= 192.168.0.12 </driver-url>

<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver </driver-class>

<driver-properties>

<property name="user" value="sa"/>

<property name="password" value="zzzz"/>

</driver-properties>

<minimum-connection-count>50 </minimum-connection-count>

<maximum-connection-count>3000 </maximum-connection-count>

<maximum-active-time>300000 </maximum-active-time>

<house-keeping-sleep-time>30000 </house-keeping-sleep-time>

<house-keeping-test-sql>select CURRENT_DATE </house-keeping-test-sql>

</proxool>

</something-else-entirely>

我用的是TOMCAT 5.5.9,初始:主体服务器启动,备机启动,数据库连接正常。但当主体服务器发生故障(这里我停止SQL SERVER服务),见证服务器会自动将数据库转移到备机服务器。但是这里的TOMCAT就不能正常连接了。除非重新启动Tomcat。

这里感觉好像连接池不能自动刷新连接到新的备机服务器上。是不是PROXOOL不支持镜像?

我的数据库连接的方法如下:
public final class DBUtil {
public DBUtil() {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (ClassNotFoundException e) {
System.out.println("Can't find proxool.xml!");
}
}

//从数据库连接池中取得一个数据库连接
public static synchronized Connection getConnection() {
Connection conn=null;
try {
conn = DriverManager.getConnection("proxool.Mirror_DB");
System.out.println("Connnect");
} catch (SQLException se) {
System.out.println("Can't connect principal database,Please Check Database is working!");
se.printStackTrace();
try {
conn = DriverManager.getConnection("proxool.Mirror_DB");
} catch (Exception ex) {
System.out.println("Can't connect mirror database,Please Check Database is working!");
//e.printStackTrace();
}
} catch (Exception e){
e.printStackTrace();
}
return conn;
}
}

谁有遇到过类似问题的,有解决的吗。大家帮帮忙。这个问题急!!!!

我发过两个帖,还是没有回复啊。哪位大神帮帮忙吧。
...全文
257 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
NickCheng 2009-03-17
  • 打赏
  • 举报
回复
阅!!!
cangzhubai 2009-03-17
  • 打赏
  • 举报
回复
学习学习
wenwen321 2009-02-19
  • 打赏
  • 举报
回复
数据库镜像可以使用两种类型的传输安全性:Windows 身份验证或基于证书的身份验证,就证书验证的镜像实现做个学习笔记。

?? 配置环境:
HOST_A : Windows Server 2003??Standard Edition(SP2)+SQL Server 2005 Enterprise Edition(SP2 9.00.3042.00)
HOST_B : Windows Server 2003??Standard Edition(SP2)+SQL Server 2005 Enterprise Edition(SP2 9.00.3042.00)

主体
HOST_A
镜像
HOST_B

一. 在主体数据库HOST_A 上:
USE master;

--a.创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'madefuckgan!';
GO
--可用以下语句查看生成的数据库主密钥
--SELECT * from??sys.symmetric_keys ;

--b.创建一个证书
CREATE CERTIFICATE DB_HOST_A_cert
?? WITH SUBJECT = 'DB_HOST_A certificate for database mirroring' ,
?? START_DATE = '12/31/2007' ,
?? EXPIRY_DATE = '12/31/2010'
GO
--SELECT * FROM sys.certificates;

--c.创建镜像端点
CREATE ENDPOINT DB_MIRR
?? STATE = STARTED
?? AS TCP (
??????LISTENER_PORT=5021
??????, LISTENER_IP = ALL
?? )
?? FOR DATABASE_MIRRORING (
??????AUTHENTICATION = CERTIFICATE DB_HOST_A_cert
??????, ENCRYPTION = REQUIRED ALGORITHM RC4
??????, ROLE = ALL
?? );
GO
--SELECT * FROM sys.tcp_endpoints
--SELECT * FROM sys.database_mirroring_endpoints;

--d.备份证书
BACKUP CERTIFICATE DB_HOST_A_cert TO FILE = 'D:\db_A_run.cer';
GO

--e.创建登入

CREATE LOGIN TO_HOST_A_login WITH PASSWORD = 'openthedoorHostA!';
GO

CREATE USER TO_HOST_A_user FOR LOGIN TO_HOST_A_login;
GO

二. 在镜像数据库HOST_B 上:??????????????
USE master;

--1.创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'madefuckgan#2!';
GO
--可用以下语句查看生成的数据库主密钥
--SELECT * from??sys.symmetric_keys ;

--2.创建一个证书
CREATE CERTIFICATE DB_HOST_B_cert
?? WITH SUBJECT = 'DB_HOST_B certificate for database mirroring' ,
?? START_DATE = '12/31/2007' ,
?? EXPIRY_DATE = '12/31/2010'
GO
--SELECT * FROM sys.certificates;

--3.创建镜像端点
CREATE ENDPOINT DB_MIRR
?? STATE = STARTED
?? AS TCP (
??????LISTENER_PORT=5022
??????, LISTENER_IP = ALL
?? )
?? FOR DATABASE_MIRRORING (
??????AUTHENTICATION = CERTIFICATE DB_HOST_B_cert
??????, ENCRYPTION = REQUIRED ALGORITHM RC4
??????, ROLE = ALL
?? );
GO
--SELECT * FROM sys.tcp_endpoints
--SELECT * FROM sys.database_mirroring_endpoints;

--4.备份证书
BACKUP CERTIFICATE DB_HOST_B_cert TO FILE = 'D:\db_B_run.cer';
GO

--5.创建登入

CREATE LOGIN TO_HOST_B_login WITH PASSWORD = 'openthedoorHostB!';
GO

CREATE USER TO_HOST_B_user FOR LOGIN TO_HOST_B_login;
GO

三.回到主体数据库HOST_A 上:
f.从HOST_B上D:\下拷贝备份出来的证书db_B_run.cer到HOST_A的D:\下
g.--还原B证书到HOST_A上;
use master
CREATE CERTIFICATE DB_HOST_B_cert
?? AUTHORIZATION TO_HOST_A_user
?? FROM FILE = 'D:\db_B_run.cer'
GO
--赋权
--Grant CONNECT permission on the login for the remote mirroring endpoint.
GRANT CONNECT ON ENDPOINT::DB_MIRR TO [TO_HOST_A_login];
GO
h.
CREATE DATABASE MIRR_TEST
--数据库镜像必须更改为使用完整恢复模式
ALTER DATABASE MIRR_TEST
?? SET RECOVERY FULL;
GO
--备份数据库
BACKUP DATABASE MIRR_TEST
????TO DISK = N'D:\MT.BAK'
????WITH FORMAT
GO
--备份日志
--!笔者试过只备份数据库不成功,一定要备份日志.
BACKUP LOG MIRR_TEST
????TO DISK = N'D:\MT.BAK'
GO??????????
四.在镜像数据库HOST_B 上:
6.从HOST_A上D:\下拷贝备份出来的证书db_A_run.cer到HOST_B的D:\下
7.
--还原A证书到HOST_B上;
use master
CREATE CERTIFICATE DB_HOST_A_cert
?? AUTHORIZATION TO_HOST_B_user
?? FROM FILE = 'D:\db_A_run.cer'
GO
--赋权
--Grant CONNECT permission on the login for the remote mirroring endpoint.
GRANT CONNECT ON ENDPOINT::DB_MIRR TO [TO_HOST_B_login];
GO
8.
--拷贝从HOST_A备份的数据库备份文件到D:\.
--还原数据库及日志
RESTORE DATABASE MIRR_TEST
????FROM DISK = N'D:\MT.BAK'
????WITH NORECOVERY ;
GO
RESTORE LOG MIRR_TEST
????FROM DISK = N'D:\NGT.BAK'
????WITH FILE=2, NORECOVERY;
GO
五.设置伙伴(自动启动镜像)
9.在HOST_B
ALTER DATABASE MIRR_TEST
????SET PARTNER = 'TCP://HOST_A:5021';
GO

i.在HOST_A
ALTER DATABASE MIRR_TEST
????SET PARTNER = 'TCP://HOST_B:5022';
GO

六. OVER!
PS: 如果HOST_A、HOST_B是在公网上则需分别在%WINDOWS%\system32\drivers\etc\hosts添加解析。
文章出处:DIY部落(http://www.diybl.com/course/7_databases/database_other/20090201/154716.html)
njzdl 2008-11-27
  • 打赏
  • 举报
回复
不懂,帮顶~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧