MSSQL编程:懂得SQL2005中的SMO工具利用(-)
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。sql2005|工具1、简介:在这系列文章中,我将树模怎样利用SMO(SQLManagementObjects)来完成多种通用的数据库办理义务,好比:备份、恢复、索引处置、完全性反省等
在此文中我们将会合怎样编译一个SMO使用程序和怎样利用SMO毗连到SQLSERVER并取得一些服务器信息,示例代码将分离利用VB.NET、C#和VBSCRIPT。假如你没有利用VisualStudio2005,我将先容怎样用命令行举行编译操纵
2、编译一个SMO使用程序:
要利用SMO工具在.NET使用程序,我们必需增加SMOassemblies使用程序中,在VisualStudio2005这长短常简单的,经由过程选择Project>AddReference菜单项,然后选择上面assemblies便可
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SmoEnum
Microsoft.SqlServer.SqlEnum
固然,假如你想COOL一点,你能够用命令行来编译,如:
vbc/t:exec:SMOtest.vb/r:
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.ConnectionInfo.dll",
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.Smo.dll",
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.SmoEnum.dll",
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.SqlEnum.dll"
csc/t:exe/out:c:SMOTest.exec:SMOtest.vb/r:
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.ConnectionInfo.dll",
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.Smo.dll",
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.SmoEnum.dll",
"C:ProgramFilesMicrosoftSQLServer90SDKAssembliesMicrosoft.SqlServer.SqlEnum.dll"
3、取得毗连
取得到SQLSERVER的毗连长短常简单的,关于缺省的实例并接纳WIN受权考证的毗连,我们只需复杂的创立一个SMO服务器工具,以下代码
ImportsMicrosoft.SqlServer.Management.Smo
ModuleSMOTest
SubMain()
DimsvrAsServer=NewServer()
Console.Writeline(svr.Name&""&svr.Information.VersionString)
EndSub
EndModule
usingSystem;
usingMicrosoft.SqlServer.Management.Smo;
namespaceSMOTest
{
classProgram
{
staticvoidMain()
{
Serversvr=newServer();
Console.WriteLine(svr.Name+""+svr.Information.VersionString);
}
}
}
Setsvr=CreateObject("SQLSMO.Server")
WScript.Echosvr.Name&""&svr.Information.VersionString
Setsvr=Nothing
固然,假如你的服务器不是缺省的,好比是用服务器名/实例名构成,可使用上面语句:
DimsvrAsServer=NewServer("(local)")
Serversvr=newServer(@"(local)INSTANCE01")
假如你想更庞大一点,也不想用WIN受权考证,能够参考上面代码
ImportsMicrosoft.SqlServer.Management.Smo
ImportsMicrosoft.SqlServer.Management.Common
ModuleSMOTest
SubMain()
DimsvrAsServer=NewServer()
svr.ConnectionContext.LoginSecure=false
svr.ConnectionContext.Login="username"
svr.ConnectionContext.Password="password"
Console.Writeline(svr.Name&""&svr.Information.VersionString)
EndSub
EndModule
usingSystem;
usingMicrosoft.SqlServer.Management.Smo;
usingMicrosoft.SqlServer.Management.Common;
namespaceSMOTest
{
classProgram
{
staticvoidMain()
{
ServerConnectionconn=newServerConnection();
conn.LoginSecure=false;
conn.Login="username";
conn.Password="password";
Serversvr=newServer(conn);
Console.WriteLine(svr.Name+""+svr.Information.VersionString);
}
}
}
Setsvr=CreateObject("SQLSMO.Server")
svr.ConnectionContext.LoginSecure=False
svr.ConnectionContext.Login="username"
svr.ConnectionContext.Password="password"
WScript.Echosvr.Name&""&svr.Information.VersionString
Setsvr=Nothing
缺省SMO工具举动是利用毗连池的,毗连将主动创建和按请求被开释。假如你不想如许,你能够设置AutoDisconnectMode属性改动它的举动,假如设置固然属性值为NoAutoDisconnect,则毗连请求显现的创建和显现的封闭,且这个毗连是不克不及被池使用的,经由过程设置NonPooledConnection属性值为TRUE时,我们是明白指出以后毗连不克不及被POOL,你能够经由过程利用Profiler来察看SMO使用程序的这类举动
以下:
缺省举动-缓冲毗连
DimsvrAsServer=NewServer()
Console.Writeline(svr.Name&""&svr.Information.VersionString)
Profiler察看器将会显现上面信息:
非缺省举动-非缓冲毗连
DimsvrAsServer=NewServer()
svr.ConnectionContext.NonPooledConnection=True
svr.ConnectionContext.Connect()
Console.Writeline(svr.Name&""&svr.Information.VersionString)
svr.ConnectionContext.Disconnect()
Profiler察看器将会显现上面信息:
好了,此文到此为止,下文将会加倍深切的懂得SMO工具,并使用其做一些复杂的备份、恢复等操纵
该文来自英文文章-http://www.sqldbatips.com/showarticle.asp?ID=37
“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识 微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过! 数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 也可谈一下你是怎么优化存储过程的? 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。 对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。 比如日志传送、比如集群。。。 不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。 还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。 一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。) 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。