|
|
7#

楼主 |
发表于 2010-9-14 14:25:47
|
只看该作者

遇到这种情况我们可以利用SA权限查询到Master数据库对应数据库被占用的进程 并杀掉Kill Process.查询:
以下是代码片段:
-- [sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息。
-- 这些进程可以是客户端进程或系统进程。sysprocesses 只存储在 master 数据库中]
use Master
go
SELECT * FROM sysprocesses ,sysdatabases
WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='CustomerDB'
select * from sysprocesses
select * from sysdatabases
-- 杀死占用进程
kill 5
当我们对进程占用清除时有可能访问数据库被系统进程占用。 则这时用Sa无法杀死。这时提示:
![]()
“Only use Process can be Kill ”在SQL Server2005 只有只有用户进程才能Kill掉。
《3.3》更多的查询操作
往往我们在实际操作中需要对数据读写有更多要求。 例如从远程连接多个服务器进行数据读取或是把本地数据提交到服务器上。 为了提高效率和性能采用分布式事务来进行批量操作等等。 如下简单介绍在分布式查询中多中数据操作:
把远程数据导入本地:
以下是代码片段:
-- 把本地表导入远程表 [openWset方式]
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表
-- 把本地表导入远程表 [open Query方式]
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
导入时使用Into方式 自动在本地创建CopyDB表完全复制远程服务器上Users表的数据结构。但是要注意在进行后 的CopyDB将不包含原表的主键和索引约束。 虽然能快构建 但是主键和索引设置都会丢失。
本地数据导入远程:
-- 把本地表导入远程表 [openWset方式] insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) select *from 本地表 -- 把本地表导入远程表 [open Query方式] insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
更新本地表数据:
以下是代码片段:
-- 把本地表导入远程表 [opendataSource方式]
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名 assword=密码 ').数据库.dbo.表名
-- 更新本地表 [openowset方式]
update b set b.列A=a.列A from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
as a inner join 本地表 b on a.column1=b.column1
当然还有更多方式来操作分布式查询操作。各位都可以尝试。
《4》尾 语
如上是我最近在项目中处理关于分布式查询涉及到方方面面。 从系统架构到分部是查询具体操作细节。基本都是一些非常基础运用。当然也参考不少资料。以及动手来验证整个过程出现问题原因所在。 篇幅有限 写的有些仓促。 难免有纰漏地方 还望各位指正。 |
|