灵魂腐蚀 发表于 2015-1-16 22:38:07

MSSQL网页编程之SQL Server毗连失利毛病及办理[2]

目前的方案是用mysqlbinlog工具,增加一个flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。server|毛病|办理经由过程以上几个方面的反省,毛病1产生的缘故原由基础上能够被扫除。上面我们再具体形貌怎样来办理毛病2。

  当用户实验在查询剖析器内里利用sa来毗连SQLServer,大概在企业办理器内里利用sa来新建一个SQLServer注册时,常常会碰到如所示的毛病信息。该毛病发生的缘故原由是因为SQLServer利用了"仅Windows"的身份考证体例,因而用户没法利用SQLServer的登录帐户(如sa)举行毗连。办理办法以下所示:

  1、在服务器端利用企业办理器,而且选择"利用Windows身份考证"毗连上SQLServer;

  2、睁开"SQLServer组",鼠标右键点击SQLServer服务器的称号,选择"属性",再选择"平安性"选项卡;

  3、在"身份考证"下,选择"SQLServer和Windows"。

  4、从头启动SQLServer服务。

  在以上办理办法中,假如在第1步中利用"利用Windows身份考证"毗连SQLServer失利,那末我们将碰到一个两难的地步:起首,服务器只同意了Windows的身份考证;其次,即便利用了Windows身份考证仍旧没法毗连上服务器。这类情况被抽象地称之为"本人把本人锁在了门外",由于不管用何种体例,用户均没法利用举行毗连。实践上,我们能够经由过程修正一个注册表键值来将身份考证体例改成SQLServer和Windows夹杂考证,步骤以下所示:

  1、点击"入手下手"-"运转",输出regedit,回车进进注册表编纂器;

  2、顺次睁开注册表项,扫瞄到以下注册表键:



  3、在屏幕右方找到称号"LoginMode",双击编纂双字节值;

  4、将原值从1改成2,点击"断定";

  5、封闭注册表编纂器;

  6、从头启动SQLServer服务。

  此时,用户能够乐成地利用sa在企业办理器中新建SQLServer注册,可是仍旧没法利用Windows身份考证形式来毗连SQLServer。这是由于在SQLServer中有两个缺省的登录帐户:BUILTINAdministrators和<呆板名>Administrator被删除。要恢复这两个帐户,可使用以下的办法:

  1、翻开企业办理器,睁开服务器组,然后睁开服务器;

  2、睁开"平安性",右击"登录",然后单击"新建登录";

  3、在"称号"框中,输出BUILTINAdministrators;

  4、在"服务器脚色"选项卡中,选择"SystemAdministrators";

  5、点击"断定"加入;

  6、利用一样办法增加<呆板名>Administrator登录。

  以下注册表键

HKEY_LOCAL_MACHINEOFTWAREMicrosoftMSSQLServerMSSQLServerLoginMode

  的值决意了SQLServer将接纳何种身份考证形式。该值为1,暗示利用Windows身份考证形式;该值为2,暗示利用夹杂形式(Windows身份考证和SQLServer身份考证)。

  看完怎样办理前两个毛病的办法以后,让我们来看一下如所示的第三个毛病。

  假如碰到第三个毛病,一样平常而言暗示客户端已找到了这台服务器,而且能够举行毗连,不外是因为毗连的工夫年夜于同意的工夫而招致堕落。这类情形一样平常会产生在当用户在Internet上运转企业办理器来注册别的一台一样在Internet上的服务器,而且是慢速毗连时,有大概会招致以上的超时毛病。有些情形下,因为局域网的收集成绩,也会招致如许的毛病。

  要办理如许的毛病,能够修正客户真个毗连超时设置。默许情形下,经由过程企业办理器注册别的一台SQLServer的超时设置是4秒,而查询剖析器是15秒(这也是为何在企业办理器里产生毛病的大概性对照年夜的缘故原由)。详细步骤为:

  1、在企业办理器中,选择菜单上的"工具",再选择"选项";

  2、在弹出的"SQLServer企业办理器属性"窗口中,点击"初级"选项卡;

  3、在"毗连设置"下的"登录超时(秒)"右侧的框中输出一个对照年夜的数字,如20。

  查询剖析器中也能够在一样地位举行设置。

2、使用程序毗连失利

  以上的三种毛病信息都是产生在SQLServer自带的客户端工具中,在使用程序中我们也会碰到相似的毛病信息,比方:

MicrosoftOLEDBProviderforSQLServer(0x80004005)
SpecifiedSQLservernotfound.

MicrosoftOLEDBProviderforSQLServer(0x80004005)
用户sa登录失利。缘故原由:未与信托SQLServer毗连相干联。

MicrosoftOLEDBProviderforODBCDrivers毛病80004005.
超时已过时.

  起首,让我们来具体看以下的表示图来懂得一下利用ODBC和利用OLEDB毗连SQLServer有甚么分歧的地方。

  


  从上图中,我们能够看出在实践利用中,使用程序创立和利用各类ADO工具,ADO工具框架挪用享用的OLEDB供应者。为了会见SQLServer数据库,OLEDB供应了两种分歧的办法:用于SQLServer的OLEDB供应者和用于ODBC的OLEDB供应者。这两种分歧的办法对应于两种分歧的毗连字符串,尺度的毗连字符串写法以下所示:

  1、利用用于SQLServer的OLEDB供应者:

  利用SQLServer身份考证:

oConn.Open"Provider=sqloledb;"&_
"DataSource=myServerName;"&_
"InitialCatalog=myDatabaseName;"&_
"UserId=myUsername;"&_
"Password=myPassword"

  利用Windows身份考证(信托毗连):

oConn.Open"Provider=sqloledb;"&_
"DataSource=myServerName;"&_
"InitialCatalog=myDatabaseName;"&_
"IntegratedSecurity=SSPI"

  2、利用用于ODBC的OLEDB供应者(不利用ODBC数据源):

  利用SQLServer身份考证:

oConn.Open"Driver={SQLServer};"&_
"Server=MyServerName;"&_
"Database=myDatabaseName;"&_
"Uid=myUsername;"&_
"Pwd=myPassword"

  利用Windows身份考证(信托毗连):

oConn.Open"Driver={SQLServer};"&_
"Server=MyServerName;"&_
"Database=myDatabaseName;"&_
"Trusted_Connection=yes"

  3、利用用于ODBC的OLEDB供应者(利用ODBC数据源):

oConn.Open"DSN=mySystemDSN;"&_
"Uid=myUsername;"&_
"Pwd=myPassword"

  假如碰到毗连失利的情形,我们只需依照一中所示的办法,分离程序中的毗连字符串举行反省,基础都能失掉办理。别的,另有以下几个要注重的中央:

  1、设置ODBC数据源时,点击"客户端"设置选项可让我们指定毗连利用的收集库、端标语等属性,以下图所示:

  



  2、假如碰到毗连超时的毛病,我们能够在程序中修正Connection工具的超时设置,再翻开该毗连。比方:



<%
SetConn=Server.CreateObject("ADODB.Connection")
DSNtest="DRIVER={SQLServer};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase"
Conn.Properties("ConnectTimeout")=15以秒为单元
Conn.openDSNtest
%>


  3、假如碰到查询超时的毛病,我们能够在程序中修正Recordset工具的超时设置,再翻开了局集。比方:



DimcnAsNewADODB.Connection
DimrsAsADODB.Recordset
...
cmd1=txtQuery.Text
Setrs=NewADODB.Recordset
rs.Properties("CommandTimeOut")=300
一样以秒为单元,假如设置为0暗示无穷制
rs.Opencmd1,cn
rs.MoveFirst
...


  3、小结

  本文针对年夜部分用户在利用SQLServer过程当中罕见的毗连失利的毛病,重点会商了在利用SQLServer客户端工具和用户开辟的使用程序两种情形下,怎样诊断并办理毗连失利的毛病。看过本文今后,信任每个读者城市对SQLServer的毗连事情道理、身份考证体例和使用程序开辟等有一个较为周全而深切的毗连。本文中一切的测试大概示例均在Windows2000AdvancedServer+SQLServer2000企业版上经由过程。

虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。

冷月葬花魂 发表于 2015-1-19 19:49:53

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

再见西城 发表于 2015-1-28 10:10:29

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

兰色精灵 发表于 2015-2-5 20:29:58

而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~

小魔女 发表于 2015-2-13 13:15:20

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

愤怒的大鸟 发表于 2015-3-3 21:48:12

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。

活着的死人 发表于 2015-3-11 14:03:54

原来公司用过MYSQL自己也只是建个表写个SQL

若天明 发表于 2015-3-26 19:42:45

这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
页: [1]
查看完整版本: MSSQL网页编程之SQL Server毗连失利毛病及办理[2]