除了执行select等语句外,还有什么其它方法测试链接服务器是否可用
解决方案 »
- mssql数据库有300多M, 但是Godaddy限制200M以内
- SQL语句求救!在线等!
- 2005 -> 2000 的问题
- 关于作业执行速度问题!!!是(简单点但作业多)快呢,还是(复杂点作业少)快呢??大家谁有这方面得经验,谢谢告我一下!!!!
- SQL SERVER2000客户端联服务器时提示出错SECDoClientHandshake()这是什么意思?
- sqlserver2005数据库,修改数据表行的某一列报错,高手求救。。
- 求关联两张表的一查询sql
- 高手帮忙看看错在哪?
- 请教如何捕捉错误消息号,详见内容
- 如何有效率的对A表包含B表ID的数据进行更新
- 如何把调用存储过程,并处理得到的结果集?
- SQL MAX函数 不允许使用聚合函数和子查询
EXEC sp_addlinkedserver
@server='Test',--这里是给链接服务器取的别名,想取什么名就取什么
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='10.3.20.95\sqlexpress'
--这里的datasrc是要链接的数据库的实例的地址(就是数据库连接字符串里的server,比如本机就是.或者local,或者目标数据库实例的IP(可以加端口))
--如果不是同一台机器的话,还要执行以下语句来设置sa登录映射
EXEC sp_addlinkedsrvlogin 'Test','false',NULL,'sa','123456'
--链接服务器建立上了之后,就可以按以下的方式来操作了,就跟操作本地数据库一样了
select * from test.testdb.dbo.userinfo
--为链接服务器里的表创建同义词
--以下这条命令在tempdb中为链接服务器Test中的TestDB中的dbo.UserInfo表创建了一个同义词dbo.UserInfo
USE [tempdb] GO
/****** Object: Synonym [dbo].[TestDB] Script Date: 07/15/2011 10:20:15 ******/
CREATE SYNONYM [dbo].UserInfo FOR [Test].[TestDB]. [dbo].UserInfo GO
select * from dbo.userinfo --就像操作当前实例的表一样操作链接=服务器上的表
--建立链接服务器并创建同义词,有一个最大的好处,就是可以跨数据库实例进行操作数据库,可以在一个数据库连接内完成数据操作,方便做事务查询。
--以下两条命令是来删除链接服务器的
Exec sp_droplinkedsrvlogin Test,Null
Exec sp_dropserver Test
--************************************************************************************
1、--创建链接服务器
exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV', 'false ',null, '用户名', '密码'
2、启动两台服务器的MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。3、打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
4、--如要创建触发器
create trigger t_test on test
for insert,update,delete
as
--加上下面两句,否则会提示新事务不能登记到指定事务处理器
set xact_abort on
begin distributed tran
delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test)
where id in(select id from deleted)
insert into openrowset('sqloledb','xz';'sa';'',test.dbo.test)
select * from inserted
commit tran--查询示例
select * from ITSV.数据库名.dbo.表名 --导入示例
select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '
declare @srvr nvarchar(128), @retval int; set @retval = 0
set @srvr = 'dbname';
begin try
exec @retval = sys.sp_testlinkedserver @srvr; --测试远程连接是否通畅
end try
begin catch
set @retval = sign(@@error);
end catch; if @retval<>0
begin
... --@retval=0说明远程连接通畅,不等于0则杯具
end
--测试远程连接
declare @conResult int;
declare @cmd varchar(100);
set @cmd= 'isql -S'+@backupdbip+' -Usa -P ';
exec @conResult=master..xp_cmdshell @cmd,no_output
if(@conResult<>0)
return -3 --连接失败isql命令我这里一直有个疑难杂症,设置了login timeout却不管用,连接失败时等待的时间较长,索性就没加,你可以加上试试有用没,-l 5。 (5秒超时)