使用MS SQL7的LINKED SERVER第二篇

 更新时间:2016年11月25日 16:43  点击:1746
曾因工作的原因,在别人的督促之下,试了SQL 7同ORACLE联接,在SQL7中直接访问ORACLE的数据库方法,下面将该方法简单说一下。
当时用的是LINKED SERVER直接联接对方数据库。
一、先在SQL服务器装上ORACLE的客户端,并设置好
二、然后打开ENTERPRISE MANGER,与昨天相同的方法进到添加LINKED SERVER窗口
三、在LINKED SERVER框输入要使用的服务器名,服务器名允许按命名规则任意命名,但不能与已有的REMOTE SERVER或LINKED SERVER重名。
四、在SERVER区选中“OTHER DATA SOURCE”
五、Provider name选择“Microsoft OLE DB Provider for Oracle”
六、在Product name处输入“Oracle”
七、在Data source处输入在Oracle客户端程序中设置的服务器名
八、在Provider处输入“MSDAORA” 注:用ORACLE就是这个,不能改
九、在Server opentions区选择“RPC”和“RPC OUT”
十、再切换到安全(Security),根据实际设置。
 
(我都是选择“THEY WILL BE MAPPED TO”,然后输入帐号和口令)
十一、单击确定完成设置
我按这个步骤设置成功,但因时间和条件的问题,一直没再继续试其它的设置,如果各位那位有这样的条件的话,请再试一下其它的选项,看有什么不同,试完希望能将步骤和结果给我发一份。
另需说明的是,这种的联接的稳定性还是可以的,在设好以后的一年中,只因为对方服务器出问题重设了一次,还有一次是ORACLE的客户端被管理员不小心删了个文件,又重设了一次,然后一直没出问题,并且速度也还可以,一个过程,在ORACLE客户端执行需要0.1秒钟,通过LINKED SERVER执行需要0.2秒钟左右。
明天给大家写一下上面同样的设置用SQL7的系统过程设置的方法。
以上在UNIX ORACLE7和NT4 SP5 SQL7上测试成功。

昨天说了使用REMOTE SERVER,虽说使用起来很方便,但是只能在MSSQL之间
使用,如果要将SQL7同SQL 6.5联接应该怎么?或者用SQL7同ORACLE或SYSBASE联
接应该怎么办呢?这就需要用到LINKED SERVER。
今天先说一下SQL7之间使用LINKED SERVER的方法
一、在源服务器的Client Network Utility中添加目标服务器的联接
二、打开ENTERPRISE MANGER,展开源服务器的Security,在LINKED SERVERS
上单击右键,单击弹出菜单中的NEW LINKED SERVER
三、在LINKED SERVER PROPERTIES窗口中,在LINKED SERVER框输入目标服务器名(在CLIENT NETWORK UTILITY中的服务器名),在SERVER部分选中SQL Server,在SERVER OPTIONS中根据选中RPC和RPC OUT
四、切换到安全(Security),根据实际设置。
(我一般选择“THEY WILL BE MAPPED TO”,然后输入帐号和口令)
五、单击确定完成设置
需要说明的是,在使用时同REMOTE SERVER有点不同,用REMOTE SERVER可以
省略CATALOG(DBO),但使用LINKED SERVER时却不能省略,当时我在试时就因为这个问题耽误了不少时间。
以上在WIN98 SQL7 DESKTOP同NT4 SP5 SQL7之间测试成功

使用 SET NOCOUNT ON
默认情况下,存储过程将返回过程中每个语句影响的行数。如果不需要在应用程序中使用该信息(大多数应用程序并不需要),请在存储过程中使用 SET NOCOUNT ON 语句以终止该行为。根据存储过程中包含的影响行的语句的数量,这将删除客户端和服务器之间的一个或多个往返过程。尽管这不是大问题,但它可以为高流量应用程序的性能产生负面影响。
create procedure test_MyStoredProc @param1 int
as
set nocount on


有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。
原访问数据库的代码为:
1SqlConnection conn = new SqlConnection(strConn);
2conn.Open();
3SqlTransaction trans = conn.BeginTransaction();
4try
5{
6 CEngine.ExecuteNonQuery(trans,CommandType.Text,sql);
7 trans.Commit();
8}
9catch(SqlException ex)
10{
11 trans.Rollback();
12 ErrorCode = ex.Number;
13 Info = "数据操作失败:" ex.Message;
14}
15finally
16{
17 trans.Dispose();
18 conn.Close();
19}
20
21
22
运行时,一旦出现数据量过大或者处理时间较长,则系统会提示出错。错误提示为“SqlTransaction已经用完;它再也不能使用。”
开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:
1SqlConnection conn = new SqlConnection(strConn);
2conn.Open();
3SqlTransaction trans = conn.BeginTransaction();
4try
5{
6 SqlCommand cmd = new SqlCommand();
7 cmd.CommandType = CommandType.Text;
8 //连接时限改为300秒
9 cmd.CommandTimeout = 300;
10 cmd.CommandText = sql;
11 cmd.Connection = conn;
12 cmd.Transaction = trans;
13 cmd.ExecuteNonQuery();
14 trans.Commit();
15}
16catch(SqlException ex)
17{
18 trans.Rollback();
19 ErrorCode = ex.Number;
20 Info = "数据操作失败:" ex.Message;
21}
22finally
23{
24 trans.Dispose();
25 conn.Close();
26}
修改后在测试,问题解决:)


最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用,再者也好长没写过BLOG了,一起探讨一下
如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作,不产生rollback,不写日志速度快一些,然后如果有自增的话,恢复到1开始,而delete会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments,同时还要记录下G级别的日志 ;当然如果有条件删除比如where time<'2006-3-10' 怎么办,能不能不记录日志用delete,回答是不行的,SQL Server 引擎在设计上就会对 Delete 操作进行日志记录。至今没有办法强制制定某一些语句不记录到日志中,如果在执行 Delete Table1 where Time < '2006-3-10' 由于涉及的记录比较多,所以日志记录也相应很大(3-4G),如果可行,我建议用以下方式:
选出您所需要保留的记录到新的表。如果您使用 Full Recovery Mode
根据SELECT INTO的记录数,日志可能会比较大
Select * into Table2 From Table1 Where Time > = '2006-03-10'
然后直接Truncate Table1。无论何种恢复模式都不会进行日志记录
Truncate table Table1
最后对Table2进行改名为Table1
EC sp_rename 'Table2', 'Table1'
出处:BLOG:domino的专栏


[!--infotagslink--]

相关文章

  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • PostgreSQL TIMESTAMP类型 时间戳操作

    这篇文章主要介绍了PostgreSQL TIMESTAMP类型 时间戳操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-26
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • postgresql 实现多表关联删除

    这篇文章主要介绍了postgresql 实现多表关联删除操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-02
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • Postgresql 如何选择正确的关闭模式

    这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • postgresql数据添加两个字段联合唯一的操作

    这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24