﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-处变不惊，处忧不虑，不争一年的兴衰，但看十年的功过。笑中千关过，愁内百事哀，挣胜是祸，繁华似梦，平淡是福。-随笔分类-SQL Server2005数据库</title><link>http://www.cnitblog.com/nana/category/6323.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 16:33:39 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 16:33:39 GMT</pubDate><ttl>60</ttl><item><title>从被置疑的数据库中抢救数据[SQL2005]</title><link>http://www.cnitblog.com/nana/archive/2008/12/01/52127.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Mon, 01 Dec 2008 13:23:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/12/01/52127.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/52127.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/12/01/52127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/52127.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/52127.html</trackback:ping><description><![CDATA[<p>12月头一日一大早就被告知系统不能登录，用户描述的错误信息是弹出了一个设置数据库连接的对话框，连接服务器一看数据库被置疑了，此状态下只有脱机/联机正常操作可以执行其他都报错，sp_attach_single_file_db、dbcc等命令也没法进行。<br>网上提供的解决办法中只有替换MDF的方法可用，当然服务器上运行着其他的数据库，不允许停止服务来修复数据，所以我的处理方法稍有不同：<br>1、删除数据库，但保留数据库文件MDF。<br>2、移走数据库文件。<br>3、建立同名数据库，生成同名的数据库文件（路径也一样）<br>4、将新数据库置为脱机。<br>5、复制旧MDF文件替换新生成的MDF文件<br>6、将数据库置为联机，此时数据库被置疑。<br>7、运行alter database dbname set emergency<br>8、运行以下语句修复数据库：<br>use master <br>declare @databasename varchar(255)<br>set @databasename='数据库名' <br>exec sp_dboption @databasename, N'single', N'true'--将目标数据库置为单用户状态 <br>dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)<br>dbcc checkdb(@databasename,REPAIR_REBUILD)<br>exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态</p>
<p><br>至此，数据库内数据已经找回了，但发现强制约束不正确，不过能找到数据已经不错了。要彻底修复可以手工重建强制约束或建立新数据库导入旧数据，我选择后者。<br><br><a href="http://blog.csdn.net/nhconch/archive/2008/12/01/3420032.aspx">http://blog.csdn.net/nhconch/archive/2008/12/01/3420032.aspx</a></p>
<img src ="http://www.cnitblog.com/nana/aggbug/52127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-12-01 21:23 <a href="http://www.cnitblog.com/nana/archive/2008/12/01/52127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GHOST CLEANUP Process</title><link>http://www.cnitblog.com/nana/archive/2008/11/25/51859.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Tue, 25 Nov 2008 03:23:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/11/25/51859.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/51859.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/11/25/51859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/51859.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/51859.html</trackback:ping><description><![CDATA[<br>原文摘自<a href="http://sqlserverpedia.com/blog/internals-and-architecture/164/">http://sqlserverpedia.com/blog/internals-and-architecture/164/</a><br><a href="http://sqlserverpedia.com/blog/internals-and-architecture/164/" rel=bookmark><u><font color=#606420>What is the GHOST CLEANUP process and what is it doing?</font></u></a><br><strong>Q: </strong>Last night my SQL Server instance apparently froze &#8211; when I could login and sp_who2, I see GHOST CLEANUP as the top process using cpu. It is not killable. What is it doing, and how can I prevent it from running during critical time periods? (NOTE: this was on a virtual machine).
<p><strong>Bryan Oliver says: </strong>Here&#8217;s a couple of things that you might want to do and/or check to help get past this issue.</p>
<p>1. Have you got auto shrink turn on for any of the databases or have you got a schd task to run a shrink?</p>
<p>2. Are you getting errors in the SQL log? Sounds like if there is a Delete command pending which maybe causing the problem. Do a SQL Profiler at the times when the Ghost Clean up occurs (before if you can).</p>
<p>3. Also it may be worth running a DBCC Checkdb on the database that is causing the Ghost Clean Up process.</p>
<p>4. Check these items on the Microsoft knowledge base as well:<br>&nbsp; <a href="http://support.microsoft.com/kb/931975"><u><font color=#606420>http://support.microsoft.com/kb/931975</font></u></a><br>&nbsp; <a href="http://support.microsoft.com/kb/815594"><u><font color=#0000ff>http://support.microsoft.com/kb/815594</font></u></a></p>
<p><strong>Kevin Kline says:</strong> The Ghost Thread is a system activity that monitors other normal &amp; natural internal processes such as the lazywriter, checkpoints, and so forth.&nbsp; I find it hard to believe that it&#8217;s consuming many of the system resources unless there&#8217;s a bug at play.&nbsp; One such bug that comes into play is when you have memory problems associated with MemToLeave or with opening but not closing XML documents.&nbsp; Make sure you&#8217;re up-to-date on the latest service pack for your version of SQL Server (you didn&#8217;t say which).</p>
<p>Finally, you can start-up SQL Server without a Ghost Process by using the -T661 startup switch.&nbsp; I <em>do not recommend this course of action, </em>however, a Microsoft PSS rep may advise you to do so.&nbsp; Without the Ghost Thread, you won&#8217;t see those omnipresent 4 or 5 activities in Current Activities (or via sp_who) since the Ghost Thread is what monitors those internal processes.</p>
<!-- start wp-tags-to-technorati 1.01 --><!-- end wp-tags-to-technorati -->
<img src ="http://www.cnitblog.com/nana/aggbug/51859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-11-25 11:23 <a href="http://www.cnitblog.com/nana/archive/2008/11/25/51859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows 2003企业版与ms sql server2005企业版在HP DL380上实现双机热备</title><link>http://www.cnitblog.com/nana/archive/2008/05/27/44410.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Tue, 27 May 2008 05:59:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/05/27/44410.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/44410.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/05/27/44410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/44410.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/44410.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、硬件需求：1、&nbsp;两台配置相同的HP DL 380服务器；2、&nbsp;外置磁盘阵列柜一台(HP 500 G2)；3、&nbsp;外置SCSI电缆线两条；4、&nbsp;网络适配卡四块(服务器集成)；5、&nbsp;心跳线（交叉双交线一条）；二、软件需求：1、&nbsp;HP自带ServerRaid CD;2、&nbsp;Windows 2003 En...&nbsp;&nbsp;<a href='http://www.cnitblog.com/nana/archive/2008/05/27/44410.html'>阅读全文</a><img src ="http://www.cnitblog.com/nana/aggbug/44410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-05-27 13:59 <a href="http://www.cnitblog.com/nana/archive/2008/05/27/44410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Monitor your SQL Server</title><link>http://www.cnitblog.com/nana/archive/2008/04/29/43087.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Tue, 29 Apr 2008 07:48:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/29/43087.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/43087.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/29/43087.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/43087.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/43087.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><strong><span>Monitor your SQL Server on the cheap with SQL Sever Reporting Services.</span></strong></p>
<p align=center><strong>&nbsp;</strong></p>
<p><span>There are a lot of very nice SQL Server performance monitoring systems on the market, and they come in all kinds of shapes and sizes.&nbsp;Usually the level of functionality is directly proportional to the price.&nbsp;Most of these systems will allow you to track the necessary performance data to effectively monitor your systems but can cost a lot of money.</span></p>
<p>&nbsp;</p>
<p><span>Very often, DBAs are limited in the tools that they can implement.&nbsp;They may not have the hardware to support Commercial Off the Shelf (COTS) performance monitoring.&nbsp;Once installed, these systems will inevitably begin to eat up resources.&nbsp;Processor resources utilized by these systems can be significant.&nbsp;These tools can also be inflexible and bring up a lot of information that you really don&#8217;t need for your normal day to day operations.&nbsp;Another, frequently more important, consideration are issues related to installing software on your servers.&nbsp;Hardware or procedural constraints can make even affordable software unappealing.&nbsp;Many environments require some minimal configuration and change management for COTS software.&nbsp;The effort required to implement software can surpass the benefits in many cases. &nbsp;Finally the cost of these systems can be prohibitive for many small and mediums sized businesses.&nbsp;Many decision makers don&#8217;t understand the metrics, and consequently they are <a name=OLE_LINK2></a><a name=OLE_LINK1><span>loathe </span></a>to spend money to monitor them. </span></p>
<p>&nbsp;</p>
<p><span>Do you mean &#8220;constrained by&#8221; as in limited, or &#8220;constrained in&#8221; as in few choices?</span></p>
<p>&nbsp;</p>
<p><span>Thankfully, there is an inexpensive alternative to COTS performance monitoring.&nbsp;Microsoft operating systems capture performance data and make this information readily available to users or developers in the Microsoft Management Console &#8211; Performance Application.&nbsp;The perfmon.exe application allows access to thousands of different metrics for you to monitor.&nbsp;Moreover, these metrics can be piped to data tables in SQL Server.</span></p>
<p>&nbsp;</p>
<p><span>This article will explain the steps necessary to build your very own SQL Server Hardware Performance monitoring system with tools that would normally be accessible to most DBAs and Developers. Setup costs are minimal (a few hours of effort) and the resulting product is both flexible and highly customizable. &nbsp;I will also cover some techniques on analyzing the data.&nbsp;A good analysis of the monitoring data can help with troubleshooting and be used for planning future system hardware upgrades.</span></p>
<p>&nbsp;</p>
<p><strong><span>Requirements:</span></strong></p>
<p><span>Before we get started, we need to go over the system requirements for creating the Hardware Performance Monitoring System: </span></p>
<p><span>&nbsp;</span></p>
<p><strong><span>Operating System:</span></strong><span> Windows XP Professional SP2 or Windows 2003 Server (for creating the Counter Log in perfmon.exe)</span></p>
<p><strong><span>Database:</span></strong><span> SQL Server 2000 (Developer, Standard or <st1:city w:st="on"><st1:place w:st="on">Enterprise</st1:place></st1:city> Edition) SP3a (Windows 2000 or Windows 2000/2003 Server)</span></p>
<p><strong><span>Reports:</span></strong><span> SQL Server Reporting Services SP1 (Windows 2000 SP4, Windows XP SP1, Windows 2000\2003 Server</span></p>
<p><strong><span>Development:</span></strong><span> </span><span><a href="http://msdn.microsoft.com/vstudio/howtobuy/">Microsoft Visual Studio&#174; .NET 2003</a> (any edition) or the standard edition of Visual Basic&#174; .NET</span><span> (for Reporting Services report development)</span></p>
<p>&nbsp;</p>
<p><span>After you verify that you have met the system requirements listed above, we can begin building the Performance Monitoring System.&nbsp;</span></p>
<p>&nbsp;</p>
<p><span>Is this VS 2003? Or plain VS.net Also does this work with RS 2005 or only 2k? Lastly, is everything listed below run on an XP machine? Is there any consideration for having an RS instance already running on 2k3?</span></p>
<p>&nbsp;</p>
<p><strong><span>Overview:</span></strong></p>
<p><span>Extracting and reporting performance information is a straight-forward process as depicted in Figure 1 below.</span></p>
<p>&nbsp;</p>
<p><strong><span>Figure 1:</span></strong></p>
<p>&nbsp;</p>
<p><span>The steps for creating the system are as follows: </span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Access perfmon.exe data by creating a System Data Source Name (DSN)</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Identify the metrics that you want to capture in perfmon.exe and create a new Counter log that will pipe data to the SQL Server</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Create the database to receive data from the perfmon application</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Build reports in SQL Server Reporting Services report to graphically represent the data</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Analyze the data.</span></p>
<p>&nbsp;</p>
<p><strong><span>Create the System Data Source Name</span></strong></p>
<p><span>In order for the Counter Log data to be sent to the database, you will need to create an ODBC connection.&nbsp;ODBC connections are made by creating a DSN which stands for Data Source Name.&nbsp;Before you create the System DSN to connect to the database, you will need to create a database to store your Counter Log data.&nbsp;You can place this data into any database you desire but it is recommended that you create a new database to provide one central location for all of your performance data.&nbsp;For the sake of this article, I have issued the following script in Query Analyzer to create the performance monitoring database.&nbsp;</span></p>
<p>&nbsp;</p>
<p><em><span>CREATE DATABASE dbSQLPerfMon. &nbsp;</span></em></p>
<p>&nbsp;</p>
<p><span>Now that you have a repository for your data, you are ready to create your DSN. &nbsp;To create your DSN </span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Go to the <strong>Start Menu </strong>and open the<strong> Control Panel</strong> </span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Open <strong>Administrative Tools</strong></span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Open <strong>Data</strong> <strong>Sources (ODBC)</strong>. </span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Go to the <strong>System DSN</strong> tab and press the <strong>Add&#8230;</strong> button.&nbsp;</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Select the <strong>SQL Server</strong> database driver and click <strong>Finish</strong>.&nbsp;Name the DSN: <strong>dsnSQLPerfMon.&nbsp;</strong></span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Select the SQL Server you will be connecting to and then hit <strong>Next.</strong> </span></p>
<p><span><span>7.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Ensure that the <strong>With Windows NT&#8230;</strong>&nbsp;radio button is selected and that the <strong>Connect to SQL Server to obtain &#8230;</strong> check box is checked.&nbsp;Click <strong>Next</strong>.</span></p>
<p><span><span>8.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><strong><span>Change the default database to</span></strong><span> <strong>dbSQLPerfMon</strong> or the database where you would like to store the data. </span></p>
<p><span><span>9.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Select <strong>Next</strong> and then <strong>Finish</strong> and finally <strong>OK</strong>.&nbsp;</span></p>
<p>&nbsp;</p>
<p><span>You now have a DSN that will provide connectivity from your Counter Log to your SQL Server database.&nbsp;Now you need to create a Counter Log to populate your database.</span></p>
<p>&nbsp;</p>
<p><span>You mention XP as the OS, but you cannot install all versions of SQL on XP. Is this DSN created on a client computer or the SQL Server computer storing the perf db?&nbsp;The perfmon.exe needs to be created with Windows XP or Windows 2003 Server as noted in the updated requirement above.</span></p>
<p>&nbsp;</p>
<p><strong><span>Create the Counter Log in perfmon.exe</span></strong></p>
<p><span>Perfmon.exe is a Windows performance monitoring tool that comes standard with the Windows Operating system.&nbsp;It can be configured to provide detailed monitoring of the utilization of the operating system resources.&nbsp;The portion of the perfmon.exe utility we will focus on is the Counter Logs.&nbsp;Counter Logs are named instances of performance counters.&nbsp;For example, assume that you want to collect performance data about your processors.&nbsp;All you need to do is select all of the processor performance counters that you wanted to review and save the Counter Log as MyProccessorMonitor.&nbsp;This named instance (MyProcessorMonitor) of performance counters will only supply performance data about your processors.&nbsp;</span></p>
<p>&nbsp;</p>
<p><span>To create a new Counter log:</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Go to the Start Button and select Run.</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>In the Run window type <strong>perfmon</strong> and click <strong>OK</strong>.&nbsp;This will open a Microsoft Management Console that will allow you to select the counters you will need for monitoring your system resources. &nbsp;</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Select the <strong>Performance Logs and Alerts</strong> item on the menu tree, right click on <strong>Counter Logs</strong> and click on <strong>New Log Settings</strong>.&nbsp;</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>In the <strong>New Log Settings</strong> window, type <strong>SQLPerfCounter1</strong> (as shown in figure 2 below) and click <strong>OK.</strong></span></p>
<p><span>.</span></p>
<p><strong><span>Figure 2:</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Click on the <strong>Add Counters...</strong> button and select the following counters from the table below.&nbsp;Note that there are hundreds of performance counters to select from.&nbsp;I have included only these four counters to give you a good start in creating your very own personalized performance monitoring system.&nbsp;You can add as many counters as you like.&nbsp;These counters will monitor your CPU, Memory and Physical Disk subsystems.</span></p>
<p>&nbsp;</p>
<table cellSpacing=0 cellPadding=0 width=582 border=0>
    <tbody>
        <tr>
            <td vAlign=bottom noWrap width=162>
            <p><span>Performance object</span></p>
            </td>
            <td vAlign=bottom noWrap width=132>
            <p><span>Counter</span></p>
            </td>
            <td vAlign=bottom width=288>
            <p><span>Description</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=bottom width=162>
            <p><span>Processor</span></p>
            </td>
            <td vAlign=bottom width=132>
            <p><span>% Processor Time</span></p>
            </td>
            <td vAlign=bottom width=288>
            <p><span>% Processor Time is the percentage of elapsed time that the processor spends to execute a non-Idle thread.&nbsp;Ensure _Total is selected so overall CPU utilization is captured.</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=bottom width=162>
            <p><span>Memory</span></p>
            </td>
            <td vAlign=bottom width=132>
            <p><span>Pages/sec</span></p>
            </td>
            <td vAlign=bottom width=288>
            <p><span>Pages/sec is the rate at which pages are read from or written to disk to resolve hard page faults. </span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=bottom width=162>
            <p><span>Physical Disk</span></p>
            </td>
            <td vAlign=bottom width=132>
            <p><span>% Disk Time</span></p>
            </td>
            <td vAlign=bottom width=288>
            <p><span>% Disk Time is the percentage of elapsed time that the selected disk drive was busy servicing read or write requests. </span></p>
            <p><span>* Disk performance counters are permanently enabled on systems beyond Windows 2000.</span></p>
            <p><span>*If you are trying to run this on Windows 2000 or an earlier version of Windows, then you must issue the <strong>diskperf &#8211;y</strong> at the command prompt and restart your system.&nbsp;If you do not initialize the disk counter with this command, your disk counter values will be 0.</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=bottom width=162>
            <p><span>MSSQL$YourServer: Buffer Manager</span></p>
            </td>
            <td vAlign=bottom width=132>
            <p><span>Buffer cache hit ratio</span></p>
            </td>
            <td vAlign=bottom width=288>
            <p><span>Percentage of pages that were found in the buffer pool without having to incur a read from disk.</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><strong>&nbsp;</strong></p>
<ol type=1 start=6>
    <li><span>After you have selected the four Counters from the table above, change the <strong>Interval </strong>to 15 minutes.&nbsp;I have found that this time interval is small enough to provide useful performance data for analysis.&nbsp;Any smaller and you may get more data than you need, any larger and you may not get a good picture of how your system is performing. </span>
    <li><span>Depending on your security configuration, you may need to put your user name and password in the <strong>Run As:</strong> field.&nbsp;</span>
    <li><span>Go to the <strong>Log Files</strong> tab.&nbsp;This window will allow you to determine what type of output the Counter log will provide.&nbsp;</span>
    <li><span>In the <strong>Log file type:</strong> drop down menu, select <strong>SQL Database</strong> and then select <strong>Configure&#8230;</strong>&nbsp;This will bring up the <strong>Configure SQL Logs</strong> window for selecting your DSN that will connect you to your specific database. </span>
    <li><span>Select the DSN called <strong>dsnSQLPerfmon</strong>. &nbsp;</span>
    <li><span>Click <strong>OK</strong> twice to complete your Counter Log and viola, you have a Counter Log that is ready to connect and log data to your performance monitoring database.&nbsp;</span>
    <li><span>Finally, to initialize your new Counter Log, right click on it and click <strong>Start</strong>.</span> </li>
</ol>
<p>&nbsp;</p>
<p><strong><span>Figure 3:</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>Your SQLPerfCounter1 icon should change from red to green as shown in figure 3.&nbsp;Green means that your Counter Log is connected to the SQL Server database and that it is sending performance counter data at intervals of every 15 minutes. </span></p>
<p>&nbsp;</p>
<p><span>On the first start of the Counter Log, the perfmon.exe utility will create three new tables in your performance monitoring database.&nbsp;These tables will be the central repository for all of your monitoring data. The tables and their descriptions are as follows:</span></p>
<p>&nbsp;</p>
<p><strong><span>Table<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Description</span></strong></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=319>
            <p><span>CounterData</span></p>
            </td>
            <td vAlign=top width=319>
            <p><span>The CounterData table contains a row for each counter that is collected at a particular time. There can be a large number of these rows. </span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=319>
            <p><span>CounterDetails</span></p>
            </td>
            <td vAlign=top width=319>
            <p><span>The CounterDetails table describes a specific counter on a particular computer or node</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=319>
            <p><span>DisplayToID</span></p>
            </td>
            <td vAlign=top width=319>
            <p><span>The DisplayToID table establishes a relation between the user-friendly string displayed by the System Monitor to the GUID stored in the other tables.</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><span>The Entity Relationship (ER) Diagram for the Counter Log (Figure 4) shows that the CounterID forms a Primary Key\Foreign Key relationship between the CounterDetails and CounterData tables.&nbsp;The CounterID columns will be used to join these two tables.</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align=center><strong><span>Figure 4</span></strong></p>
<p>&nbsp;</p>
<p><strong><span>Creating the SQL Server view to format the data for the reports</span></strong></p>
<p><span>Now that you have your Counter Log periodically inserting counter data into your monitoring database, you can begin putting together the SQL Server view that will format the data for the reports.&nbsp;Using both the CounterData and CounterDetails tables, the script in Listing 1 formats the Counter Log data for the report.</span></p>
<p>&nbsp;</p>
<p><strong><span>Listing 1</span></strong><span>.</span></p>
<p><span>CREATE VIEW vSQLPerfMon AS (</span></p>
<p><span>/*******************************************************************************</span></p>
<p><span>DESCRIPTION:<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Format the Counter Log data to be used in the reports.</span></p>
<p><span>AUTHOR:<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><st1:personname w:st="on">Shawn Calderon</st1:personname></span></p>
<p><span>DATE WRITTEN:<span>&nbsp;&nbsp;&nbsp; </span>September 1, 2005</span></p>
<p><span>*******************************************************************************/</span></p>
<p><span>SELECT&nbsp;</span></p>
<p><span>CounterDetails.MachineName, CounterDetails.ObjectName, </span></p>
<p><span>CASE WHEN CounterDetails.CounterName = '% Processor Time' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN '% Processor Time - Consistent values over 85% suggests a processor bottleneck' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN CounterDetails.CounterName = 'Pages/sec' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 'Pages/sec - Extended periods of 20 or greater suggests a memory bottleneck' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN CounterDetails.CounterName = 'Buffer cache hit ratio' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 'Buffer cache hit ratio - dipping below 85-95% suggests a memory bottleneck' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN CounterDetails.CounterName = '% Disk Time' </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN '%Disk Time - Consistent periods exceeding 90% suggests an I/O bottleneck'</span></p>
<p><span>ELSE CounterDetails.CounterName END AS CounterName,</span></p>
<p><span>CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime) CounterDate, </span></p>
<p><span>DATEPART(YEAR, CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS CounterYear, </span></p>
<p><span>DATENAME(MONTH, CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS CounterMonth, </span></p>
<p><span>DATENAME(WEEK, CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS CounterWeek, </span></p>
<p><span>DATENAME(WEEKDAY, CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS CounterWeekDay,</span></p>
<p><span>DATENAME(DAY, CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS CounterDay, </span></p>
<p><span>CAST(CAST(DATEPART(HOUR,CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS varchar) + </span></p>
<p><span>CAST(CASE WHEN datepart(MINUTE,(cast(LEFT(CounterDateTime, 19) AS smalldatetime))) BETWEEN 1 AND 15 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 15 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN datepart(minute,(cast(LEFT(CounterDateTime, 19) AS smalldatetime))) BETWEEN 16 AND 30 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 30 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN datepart(minute,(cast(LEFT(CounterDateTime, 19) AS smalldatetime))) BETWEEN 31 AND 45 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 45 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>ELSE 59 <st1:place w:st="on"><st1:city w:st="on">END</st1:city> <st1:state w:st="on">AS</st1:state></st1:place> varchar) AS int) AS CounterTime,</span></p>
<p><span>ROUND(CounterData.CounterValue,0) CounterValue</span></p>
<p>&nbsp;</p>
<p><span>FROM<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CounterData </span></p>
<p><span>INNER JOIN</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;CounterDetails </span></p>
<p><span>ON<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CounterDetails.CounterID = CounterData.CounterID</span></p>
<p><span>WHERE</span></p>
<p><span>CAST(CAST(DATEPART(hour,CAST(LEFT(CounterData.CounterDateTime, 19) AS smalldatetime)) AS varchar) + </span></p>
<p><span>CAST(CASE WHEN datepart(minute,(cast(LEFT(CounterDateTime, 19) AS smalldatetime))) BETWEEN 1 AND 15 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 15 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN datepart(minute,(cast(LEFT(CounterDateTime, 19) AS smalldatetime))) BETWEEN 16 AND 30 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 30 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WHEN datepart(minute,(cast(LEFT(CounterDateTime, 19) AS smalldatetime))) BETWEEN 31 AND 45 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN 45 </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>ELSE 59 <st1:place w:st="on"><st1:city w:st="on">END</st1:city> <st1:state w:st="on">AS</st1:state></st1:place> varchar) AS int) BETWEEN 659 AND 1901</span></p>
<p><span>)</span></p>
<p>&nbsp;</p>
<p><span>Might need to remove this for space in the final version. Keep that in mind for the prose.&nbsp;I will defer to your expertise.&nbsp;Just let me know what you would like me to do.</span></p>
<p>&nbsp;</p>
<p><span>I use a view because it simplifies the code used in the report and allows for an added level of server side security i.e. you can limit who has access to the view through a role. Notice that in my SELECT clause, I have written CASE statements to make the CounterName output more descriptive.&nbsp;This will help the user to determine what the limiters for a particular counter are and whether or not there is a possible bottleneck.&nbsp;You will also notice that the CounterDateTime field is not a datetime data type but rather a char data type.&nbsp;This script extracts the first 19 characters of the CounterDateTime field and then coverts it to a smalldatetime.&nbsp;It then breaks this field into years, months, weekdays, days and hours.&nbsp;The ROUND function is used to help make the Counter values easier to report as it will limit the number of numeric digits displayed.&nbsp;For the CounterTime field, a CASE statement is used to place the actual times into consistent 15 minute timeframes. Again this is done to make the report time display both consistent and intuitive.&nbsp;In the WHERE clause, you will find that the output is limited to display records that occur between 7:00 AM and 7:00 PM.&nbsp;I like this time range because it allows me to see how my server is performing during normal working hours.&nbsp;This clause is optional so if you want to get a complete 24 hour picture of the system usage then I recommend that you leave this part of the statement out.</span></p>
<p>&nbsp;</p>
<p><strong><span>Creating the Daily Performance Monitor Report.</span></strong></p>
<p><strong><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><span>Now that we have our new SQL view, let&#8217;s build the report.&nbsp;Launch <strong>Visual Studio .Net</strong> and create a new project called SQL Performance Monitor.&nbsp;Ensure that the <strong>Business Intelligence project </strong>folder and the <strong>Report Project wizard </strong>are selected.&nbsp;Click <strong>OK</strong>.&nbsp;Click <strong>Next</strong> after the Report Wizard window comes up. In the <strong>Select data source window</strong>, name the <strong>new data source name:</strong> dbSQLPerfMon and click on the <strong>Edit</strong> button.&nbsp;<strong>Select or enter a server name</strong> and click on the <strong>Use Windows NT integrated security</strong> radio button as shown if Figure 5&nbsp;<strong>Select the database on the server </strong>and click <strong>OK</strong> to return to the <strong>Report Wizard</strong> window.</span></p>
<p><span>&nbsp;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span>Figure 5:</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>Click <strong>Next</strong> and copy the following code<strong> </strong>into the <strong>Query String Window </strong>as in Figure 6<strong>.</strong></span></p>
<p><strong>&nbsp;</strong></p>
<p><span>/*******************************************************************************</span></p>
<p><span>DESCRIPTION:<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>List Counter Log data for the Performance Monitor Report</span></p>
<p><span>AUTHOR:<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><st1:personname w:st="on">Shawn Calderon</st1:personname></span></p>
<p><span>DATE WRITTEN:<span>&nbsp;&nbsp;&nbsp; </span>September 1, 2005</span></p>
<p><span>*******************************************************************************/</span></p>
<p><span>SELECT<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MachineName,ObjectName,CounterName,CounterDate,CounterYear,</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CounterMonth,CounterWeek,CounterWeekDay,CounterDay,CounterTime,CounterValue</span></p>
<p><span>FROM<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>vSQLPerfMon</span></p>
<p><span>WHERE<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CounterYear<span>&nbsp;&nbsp; </span>= @CounterYear</span></p>
<p><span>AND<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CounterMonth = @CounterMonth</span></p>
<p><span>AND<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CounterDay<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>= @CounterDay</span></p>
<p><span>ORDER BY MachineName,ObjectName,CounterName,CounterDate</span></p>
<p>&nbsp;</p>
<p><strong><span>Figure 6</span></strong></p>
<p><strong><span>Query String Window</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>Click<strong> Next.&nbsp;</strong>Ensure <strong>Tabular</strong> is selected and click <strong>Next</strong>. Select MachineName and press the <strong>Page &gt; </strong>button.&nbsp;Select ObjectName and press the <strong>Group&gt;</strong> button.&nbsp;Finally, select CounterName and press the <strong>Details&gt;</strong> button and click <strong>Next</strong> as shown in Figure 7.</span></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>Figure 7:</span></strong></p>
<p><strong></strong></p>
<p><strong>&nbsp;</strong></p>
<p>&nbsp;</p>
<p><span>To add a chart, go to the <strong>Toolbox</strong> tab in the left lower part of the design pane and select <strong>Chart</strong> and click on the bottom Group row.&nbsp;A Chart should appear in this group as seen in Figure 8 below.</span></p>
<p>&nbsp;</p>
<p><strong><span>Figure 8:</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>Click on the <strong>Fields</strong> tab located in the lower left part of the design pane.&nbsp;Drag and drop the CounterName, CounterValue and CounterTime field into the <strong>Drop series fields here </strong>box.&nbsp;Right click on the CounterTime field select <strong>Properties</strong>.&nbsp;Ensure that the Click on the <strong>Sorting </strong>tab and ensure that the <strong>Expression field</strong> under the sorting tab reads &#8220;<strong>=Fields!CounterTime.Value&#8221;</strong> selected.&nbsp;</span></p>
<p><span>Again, right click on the <strong>Chart</strong> and select <strong>Properties.</strong> When the <strong>Chart Properties</strong> window pops up, go to the <strong>Palette:</strong> field and choose <strong>Semi-Transparent</strong>.&nbsp;Click on the <strong>Legend</strong> tab and select the button in the bottom middle position and click <strong>OK</strong>.</span></p>
<p><span>Go to the top of the screen and select the <strong>Report</strong> menu item and click on <strong>Report Parameters</strong>.&nbsp;You should see report parameters for CounterYear, CounterMonth and CounterDay.&nbsp;In the CounterYear parameter type <strong>Year:</strong> into the Prompt field.&nbsp;In the <strong>Available values:</strong> section add the list of years in both the <strong>Label</strong> and <strong>Value</strong> fields for the Year Parameter.&nbsp;Similarly add the lists of months and days to <strong>Month: </strong>and <strong>Day: </strong>respectively (as shown in Figure 9 below.</span></p>
<p>&nbsp;</p>
<p><strong><span>Figure 9.&nbsp;</span></strong></p>
<p><span>&nbsp;</span></p>
<p>&nbsp;</p>
<p><span>Figure 10 is an example of the kind of report that you can produce.</span></p>
<p>&nbsp;</p>
<p><strong><span>Figure 10:</span></strong></p>
<p>&nbsp;</p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>A little more about Counters</span></strong></p>
<p><strong><span>Processor</span></strong><span>: % Processor Time is a comprehensive indicator of processor activity.</span></p>
<p><span>If % Processor Time exceeds 85% for prolonged periods of time then you should consider the following:&nbsp;</span></p>
<ul type=disc>
    <li><span>Find the application that is causing the excessive load on the system.&nbsp;In an environment where ad-hoc query tools are prevalent, poorly written queries can cause processor usage to spike leaving little left for competing processes.&nbsp;When ever I get a user complaint that the database application is running sluggish, the first place I look is how my processors are being utilized.&nbsp;Whether it is a database application or an ad-hoc query, the steps are the same.&nbsp;Localize the resource intensive process and look for ways to tune it.&nbsp;Sometimes just adding an index can mean the difference between queries that take a long time to run to having them run in under a second.&nbsp;</span>
    <li><span>Add CPUs.&nbsp;In a recent systems upgrade, we purchased a server with 4 Processor slots but only filled two.&nbsp;We did this with the hope of adding processors later when the load requirements surpassed the current configuration.&nbsp;If you do not have the option of adding additional CPUs then get faster CPUs.&nbsp;You also may want to consider putting in CPUs with more cache.&nbsp;The larger the processor cache, the more transactions that can be handled internally by the CPU and &nbsp;the better the performance. <span>&nbsp;&nbsp;&nbsp; </span></span>
    <li><span>Go 64 bit. Many administrators run SQL Server 2000 in standard 32 bit mode which is the default.&nbsp;However, many systems have the option of upgrading to SQL Server 2000 64 bit.&nbsp;Because Microsoft has come out with SQL Server 2000 Service pack 4, you can take full advantage of the 64 bit capabilities on either an AMD Opteron server or the more expensive Itanium systems.&nbsp;Using the 64 bit functionality greatly increases the processing power by allowing the CPUs to process data in larger chunks and increasing the amount of memory it can address. This means your server can have more RAM, and therefore can store more data in memory, making memory-intensive queries run faster.</span> </li>
</ul>
<p>&nbsp;</p>
<p><strong><span>PhysicalDisk</span></strong><span>: % Disk Time lets you know how busy your disk arrays are.&nbsp;It can also show you which ones are working harder than others.</span></p>
<p><span>If % Disk Time is &gt;90% for prolonged periods of time then you may want to consider adding drives to your Physical disk subsystem.&nbsp;The more drives you add, the more drive heads you have working for your read/write operations. You can also try replacing your 5200 and 7800 RPM drives with 10,000 and 15,000 RPM drives to greatly increase the through put of megabytes per second.&nbsp;Also, consider configuring your disk arrays for faster RAID levels.&nbsp;RAID 10 is the fastest for all of your files except transaction logs.&nbsp;Since the transaction log writes are sequential, a RAID 1 works well and will save on the cost of additional drives.&nbsp;Below is an example of an optimal RAID configuration to support an efficient SQL Server file placement strategy:</span></p>
<ul type=circle>
    <ul type=circle>
        <li><span>SQL Server executables: RAID 1</span>
        <li><span>tempdb: RAID 10</span>
        <li><span>Data files i.e. mdf and ndf files: RAID 10</span>
        <li><span>Transaction Logs i.e. .ldf files: RAID 1</span> </li>
    </ul>
</ul>
<p>&nbsp;</p>
<p><span>Add more physical RAM to your system to allow for more processes to be handled in memory, and therefore freeing up your disk subsystem.</span></p>
<p>&nbsp;</p>
<p><strong><span>Memory</span></strong><span>: Pages/sec tracks how many pages per second are being processed on disk.&nbsp;As disk I/O is much slower than RAM, excessive paging can be a huge performance hit. If Pages\sec is &gt; 20 for long periods of time, consider letting SQL server dynamically allocate memory. This will allow SQL Server to scale memory usage to meet ever changing database needs. To ensure that SQL Server is dynamically allocating memory, right click on your SQL Server instance in Enterprise Manager and select properties.&nbsp;Click on the memory tab and make sure that the Dynamically configure SQL Server memory radio button is selected.</span></p>
<p><span>You can also try to ensure that only SQL Server is running on your system.&nbsp;Any other applications will rob SQL Server of precious memory resources. &nbsp;Don&#8217;t let the IT Group use it as a Domain Controller!&nbsp;</span></p>
<p><span>Another suggestion is to shut down any unneeded processes.&nbsp;From time to time, I will bring up the Task manager and click the processes tab to see what&#8217;s running.&nbsp;If I do not recognize the process, I throw the process name into a search engine to get a complete description,&nbsp;this helps me determine whether or not the process should be killed.&nbsp;</span></p>
<p><span>If you have more than 4GB of memory, learn how to configure AWE memory support to ensure that SQL Server is effectively utilizing all of its available memory resources. Adding additional memory might be your best option.&nbsp;The amount RAM that can be used is both operating system and SQL Server version dependant so make sure you know what your limitations are before you make any purchases.</span></p>
<p>&nbsp;</p>
<p><strong><span>Buffer Manager</span></strong><span>: Buffer cache hit ratio displays the percentage of SQL Server activities that are processed in memory instead of disk.&nbsp;Again, since disk through put is significantly slower than RAM, this value should normally be close to a 100%.</span></p>
<p><span>If the Buffer cache hit ratio is running &lt; 85-95%, consider setting up SQL Profiler Trace to try and see which T-SQL statements are the culprits and check to see if they could use a little performance tuning.&nbsp;As mentioned above, if you have more than 4GB of memory, learn how to configure AWE memory support to ensure that SQL Server is optimally utilizing its memory resources.<span>&nbsp;&nbsp; </span></span></p>
<p><span>If SQL Server is effectively using all of its memory the find out what your system requirements are and consider buying more RAM.&nbsp;The more RAM you have, the less likely SQL Server will page its processes to disk.</span><strong></strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>Using the Daily SQL Performance Monitor report</span></strong></p>
<p><span>The main purpose of these performance monitoring reports is to provide a visual representation of how the server hardware is performing and to determine if there are any resource bottlenecks. Bottlenecks occur when the hardware cannot keep up with the demands of the software.&nbsp;In the example above, you can see that as the Pages/sec counter begins to peak, the Buffer cache hit ratio begins to decrease.&nbsp;This can mean the memory subsystem capacity has been exceeded and that operations that would normally be handled in memory are now being paged to disk.&nbsp;This would be considered a possible memory bottleneck.&nbsp;Things to take into account when experiencing a hardware resource bottleneck are:</span></p>
<p><span><span>&#183;<span> </span></span></span><span>Consider the user experience during peak load times.&nbsp;Even though you may see possible bottlenecks occur through out the day, the user experience may not be affected.&nbsp;You may just want to keep an eye on things and see if the trend begins to increase over time. In other words, &#8220;peak usage spikes do not always necessitate an immediate or drastic action&#8221;.</span></p>
<p><span><span>&#183;<span> </span></span></span><span>Even if the users aren&#8217;t complaining, it may be a good idea to fire up the SQL Profiler and trap the T-SQL Statements that are running during these peak usage times.&nbsp;You may find poorly written T-SQL queries to be the cause of your peak usage spikes.&nbsp;&nbsp;</span></p>
<p><span><span>&#183;<span> </span></span></span><span>If you find that both the users are being negatively affected and that there are no poorly written T-SQL code, it is probably time to upgrade your hardware. </span></p>
<p>&nbsp;</p>
<p><span>You can also use the report for :</span></p>
<p><span><span>&#183;<span> </span></span></span><span>Daily usage trends and what are the peak usage times.</span></p>
<p><span><span>&#183;<span> </span></span></span><span>Granular detail of system resource utilization </span></p>
<p><span><span>&#183;<span> </span></span></span><span>Correlate peak usage to the user experience </span></p>
<p><span><span>&#183;<span> </span></span></span><span>Compare counters from each subsystem to get a more complete picture</span></p>
<p><span>For Example, Page/sec exceeding 20 may not be an issue if the Buffer cache hit ratio stays with in the &gt; 85 -95% range.</span></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>Build the Monthly SQL Server Performance Monitor Report</span></strong></p>
<p><span>I have designed the Daily SQL Server Performance Monitor Report to be easily reconfigurable to both a Monthly and Yearly report. </span></p>
<ul type=circle>
    <li><span>Make a copy of the Daily SQL Performance Monitor.rdl and name it Monthly</span>
    <li><span>Open the report in Visual Studio .NET</span>
    <li><span>Remove the CounterDay parameter and in the WHERE clause, take out &#8220;<strong>AND CounterDay = @CounterDay&#8221;</strong></span>
    <li><span>Take out the CounterTime field from the chart and add the CounterDay field in its place.&nbsp;Ensure that the chart sorts by the CounterDay field.</span>
    <li><span>In the <strong>Drop data fields here box</strong>, double click the Counter Value field. Change the =<strong>SUM(Fields!CounterValue.Value)</strong> to <strong>= MAX(Fields!CounterValue.Value)</strong> Change the <strong>Series label:</strong> from Counter Value to MAX Counter Value.&nbsp;Drag and drop a second CounterValue field into the <strong>Drop data fields here</strong> box. Double click this second Counter Value field. Change the <strong>=SUM(Fields!CounterValue.Value)</strong> to <strong>= AVG(Fields!CounterValue.Value)</strong> Change the Series label: from Counter Value to AVG Counter Value and Click <strong>OK</strong>.</span>
    <li><span>Change the Report title from Daily to Monthly&nbsp;</span> </li>
</ul>
<p><strong>&nbsp;</strong></p>
<p><strong><span>Using the Monthly SQL Performance Monitor report</span></strong></p>
<p><span>Like the Daily SQL Performance Monitor report, the monthly report provides useful information about your hardware resources.&nbsp;This report provides a summary of average daily usage.&nbsp;You can use this report to:</span></p>
<p><span><span>&#183;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Determine the peak usage days for a particular month</span></p>
<p><span><span>&#183;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Load balancing.&nbsp;For example, lets say you notice that two very resource intensive reports are being run during the same peak usage times.&nbsp;You can talk to the users of these reports and request that they run their reports at known off peak hours to help evenly distribute the load on the SQL Server.</span></p>
<p><span><span>&#183;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Subtle rises in system resource usage can be monitored to assist in system upgrade planning.</span></p>
<p>&nbsp;</p>
<p><strong><span>Build the Yearly SQL Server Performance Monitor Report</span></strong></p>
<ul type=circle>
    <li><span>Make a copy of the Monthly SQL Performance Monitor.rdl and name it Yearly</span>
    <li><span>Open the report in Visual Studio .NET</span>
    <li><span>Remove the CounterMonth parameter and in the WHERE clause, take out &#8220;<strong>AND CounterDay = @CounterMonth&#8221;</strong></span>
    <li><span>Take out the CounterDay field from the chart and add the CounterMonth field and CounterWeek field in its place. Ensure that the chart sorts by the CounterMonth field then by CounterWeek.</span>
    <li><span>Change the Report title from Monthly to Yearly&nbsp;</span> </li>
</ul>
<p><strong>&nbsp;</strong></p>
<p><strong><span>Using the Yearly SQL Performance Monitor report</span></strong></p>
<p><span>This report shows the average usage per week.&nbsp;The main purpose for this report is to look for trends that will help you plan your next system upgrade.&nbsp;As with most SQL Servers, more and more databases are being added and with these new databases come new users.&nbsp;Because of this upward trend in utilization, you will be able to use this report to help project when you will need to update your systems or when to buy new servers.</span></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>Conclusion</span></strong></p>
<p><span>Using Microsoft&#8217;s perfmon.exe and SQL Reporting services to monitor hardware performance can help you find out where the bottlenecks are occurring on your server.&nbsp;Knowing where the bottlenecks exist is half the battle and can lead to making smart decisions to ensure the efficiency of your systems. This information can also help system administrators come up with good strategies for future hardware upgrades and\or new server acquisitions.</span></p>
<p>&nbsp;</p>
<p><span>Overall this is a nice &#8220;howto&#8221; that I think many sys admins will find extremely useful. </span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnitblog.com/nana/aggbug/43087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-29 15:48 <a href="http://www.cnitblog.com/nana/archive/2008/04/29/43087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2000与SQL Server 2005 链接服务器兼容的问题</title><link>http://www.cnitblog.com/nana/archive/2008/04/11/42250.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Fri, 11 Apr 2008 08:35:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/11/42250.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/42250.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/11/42250.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/42250.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/42250.html</trackback:ping><description><![CDATA[<p>不通过服务器ip 172.16.2.1，而通过域名CustomerDB</p>
表名customer
<img src ="http://www.cnitblog.com/nana/aggbug/42250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-11 16:35 <a href="http://www.cnitblog.com/nana/archive/2008/04/11/42250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSIS处理导入数据时, 存在的更新, 不存在的插入</title><link>http://www.cnitblog.com/nana/archive/2008/04/10/42196.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Thu, 10 Apr 2008 03:45:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/10/42196.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/42196.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/10/42196.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/42196.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/42196.html</trackback:ping><description><![CDATA[<p><strong><span>下面具体演示一下如何用</span></strong><strong><span><font face="Times New Roman">SSIS</font></span></strong><strong><span>完成这样的处理</span></strong><strong><span><font face="Times New Roman">:</font></span></strong></p>
<div>
<p><strong><span><span><font face="Times New Roman">1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>准备测试环境</span></strong><strong></strong></p>
</div>
<div>
<p align=left><span>-- 1. </span><span>在数据库中创建下面的对象</span></p>
<p align=left><span>USE</span><span> tempdb</span></p>
<p align=left><span>GO</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>CREATE</span><span> <span>TABLE</span> dbo.tb<span>(</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>id <span>int</span> <span>PRIMARY</span> <span>KEY</span><span>,</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>name</span> <span>nvarchar</span><span>(</span>128<span>))</span></span></p>
<p align=left><span>GO</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>-- 2. </span><span>准备两个文本文件</span><span>, </span><span>放在</span><span>d:\test </span><span>目录下</span><span>, </span><span>文件的内容如下</span></p>
<p align=left><span>t1<span>.</span>txt</span></p>
<p align=left><span>id&nbsp;<span>name</span></span></p>
<p align=left><span>1<span>&nbsp;&nbsp; </span></span><span>张三</span></p>
<p align=left><span>2<span>&nbsp;&nbsp; </span></span><span>李四</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>t2<span>.</span>txt</span></p>
<p align=left><span>id&nbsp;<span>name</span></span></p>
<p align=left><span>1<span>&nbsp;&nbsp; </span></span><span>张三君</span></p>
<p align=left><span>3<span>&nbsp;&nbsp; </span></span><span>李林</span></p>
<p align=left><span>4<span>&nbsp;&nbsp; </span></span><span>阿联酋</span></p>
</div>
<p align=left>&nbsp;</p>
<div>
<p><strong><span><span><font face="Times New Roman">2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>创建新的</span></strong><strong><span><font face="Times New Roman"> Integration Services </font></span></strong><strong><span>项目（创建</span></strong><strong><span><font face="Times New Roman">SSIS</font></span></strong><strong><span>包）</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;开始&#8221;菜单中，依次指向&#8220;所有程序&#8221;、&#8220;</span><span><font face="Times New Roman">Microsoft SQL Server </font><st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2005" unitname="&#8221;" w:st="on"><font face="Times New Roman">2005</font><span><span>&#8221;</span></span></st1:chmetcnv><span>，再单击</span><font face="Times New Roman"> SQL Server Business Intelligence Development Studio</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;文件&#8221;菜单中，指向&#8220;新建&#8221;，再单击&#8220;项目&#8221;，以创建一个新的</span><span><font face="Times New Roman"> Integration Services </font></span><span>项目。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;新建项目&#8221;对话框的&#8220;模板&#8221;窗格中，选择&#8220;</span><span><font face="Times New Roman">Integration Services </font></span><span>项目&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;名称&#8221;框中，将默认名称更改为</span><span><font face="Times New Roman"> SSIS Tutorial</font></span><span>。或者，清除&#8220;创建解决方案的目录&#8221;复选框。</span><span><font face="Times New Roman"> </font></span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>接受默认位置，或单击&#8220;浏览&#8221;，以浏览并找到要使用的文件夹。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;项目位置&#8221;对话框中，单击文件夹，再单击&#8220;打开&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击&#8220;确定&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>默认情况下，将创建一个名为</span><span><font face="Times New Roman"> <span>&#8220;</span></font></span><span>新建包</span><span><font face="Times New Roman">.dtsx</font></span><span>&#8220;</span><span><font face="Times New Roman"> </font></span><span>的空包，并将该包添加到项目中。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在解决方案资源管理器工具栏中，右键单击</span><span><font face="Times New Roman"> Package.dtsx</font></span><span>，再单击&#8220;重命名&#8221;，将默认包重命名为</span><span><font face="Times New Roman"> Lesson 1.dtsx</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>当系统提示重命名包对象时，单击&#8220;是&#8221;。</span></p>
</div>
<p align=left>&nbsp;</p>
<div>
<p><strong><span><span><font face="Times New Roman">3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>为</span></strong><strong><span><font face="Times New Roman">SSIS</font></span></strong><strong><span>包添加数据源（导入数据的源和目标数据源）</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>首先添加导入数据的源</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>右键单击&#8220;连接管理器&#8221;区域中的任意位置，再单击&#8220;新建平面文件连接&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;平面文件连接管理器编辑器&#8221;对话框的&#8220;连接管理器名称&#8221;字段中，键入</span><span><font face="Times New Roman"> Source</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击&#8220;浏览&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;打开&#8221;对话框中，浏览并找到&#8220;</span><span><font face="Times New Roman">d:\test\t1.txt</font></span><span>&#8221;文件。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>&#8220;常规&#8221;选项中，勾选&#8220;在第</span><span><font face="Times New Roman">1</font></span><span>个数据行中显示列名称&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>&#8220;高级&#8221;选项中，选择&#8220;</span><span><font face="Times New Roman">id</font></span><span>&#8221;列，将数据类型设置为&#8220;</span><span><font face="Times New Roman">four-byte single integer[DT_I4]</font></span><span>&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>&#8220;高级&#8221;选项中，选择&#8220;</span><span><font face="Times New Roman">name</font></span><span>&#8221;列，将数据类型设置为&#8220;</span><span><font face="Times New Roman">Unicode string[DT_WSTR]</font></span><span>&#8221;。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>然后，你可以在&#8220;预览&#8221;中查看数据是否正确。</span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>然后添加接收数据的目的数据源</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>右键单击连接管理器区域中的任意位置，再单击&#8220;新建</span><span><font face="Times New Roman">OLE DB </font></span><span>连接</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>配置</span><span><font face="Times New Roman">OLE DB </font></span><span>连接管理器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>新建</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>服务器名称</span><span><font face="Times New Roman">&#8221;</font></span><span>中，输入</span><span><font face="Times New Roman">localhost</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>将</span><span><font face="Times New Roman">localhost </font></span><span>指定为服务器名称时，连接管理器将连接到本地计算机上</span><span><font face="Times New Roman">Microsoft SQL Server 2005 </font></span><span>的默认实例。若要使用</span><span><font face="Times New Roman">SQL Server 2005 </font></span><span>的远程实例，请将</span><span><font face="Times New Roman">localhost </font></span><span>替换为要连接到的服务器的名称。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>登录到服务器</span><span><font face="Times New Roman">&#8221;</font></span><span>组中，确认选择了</span><span><font face="Times New Roman">&#8220;</font></span><span>使用</span><span><font face="Times New Roman">Windows </font></span><span>身份验证</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>连接到数据库</span><span><font face="Times New Roman">&#8221;</font></span><span>组的</span><span><font face="Times New Roman">&#8220;</font></span><span>选择或输入数据库名称</span><span><font face="Times New Roman">&#8221;</font></span><span>框中，键入或选择</span><span><font face="Times New Roman">tempdb</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>测试连接</span><span><font face="Times New Roman">&#8221;</font></span><span>，验证指定的连接设置是否有效。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>配置</span><span><font face="Times New Roman">OLE DB </font></span><span>连接管理器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框的</span><span><font face="Times New Roman">&#8220;</font></span><span>数据连接</span><span><font face="Times New Roman">&#8221;</font></span><span>窗格中，确认选择了</span><span><font face="Times New Roman">localhost.tempdb</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>为</span></strong><strong><span><font face="Times New Roman">SSIS</font></span></strong><strong><span>包添加数据流任务</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击&#8220;控制流&#8221;选项卡。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;工具箱&#8221;中，展开&#8220;控制流项&#8221;，并将一个数据流任务拖到&#8220;控制流&#8221;选项卡的设计图面上。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;控制流&#8221;设计图面中，右键单击新添加的数据流任务，再单击&#8220;重命名&#8221;，将名称更改为</span><span><font face="Times New Roman">Import Data</font></span><span>。</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>在数据流任务中设置数据流源</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>打开&#8220;数据流&#8221;设计器，方法是双击</span><span><font face="Times New Roman">Import Data </font></span><span>数据流任务或单击</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>工具箱</span><span><font face="Times New Roman">&#8221;</font></span><span>中，展开</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流源</span><span><font face="Times New Roman">&#8221;</font></span><span>，然后将</span><span><font face="Times New Roman">&#8220;</font></span><span>平面文件源</span><span><font face="Times New Roman">&#8221;</font></span><span>拖动到</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡的设计图面上。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>设计图面上，右键单击新添加的</span><span><font face="Times New Roman">&#8220;</font></span><span>平面文件源</span><span><font face="Times New Roman">&#8221;</font></span><span>，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>重命名</span><span><font face="Times New Roman">&#8221;</font></span><span>，然后将该名称更改为</span><span><font face="Times New Roman">Source Data</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>双击此平面文件源，打开</span><span><font face="Times New Roman">&#8220;</font></span><span>平面文件源编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>平面文件连接管理器</span><span><font face="Times New Roman">&#8221;</font></span><span>框中，键入或选择</span><span><font face="Times New Roman">Source</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>列</span><span><font face="Times New Roman">&#8221;</font></span><span>并验证列名是否正确。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>在数据流任务中添加查找处理组件</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;工具箱&#8221;中，展开&#8220;数据流转换&#8221;，然后将&#8220;查找&#8221;拖动到&#8220;数据流&#8221;选项卡的设计图面上。将&#8220;查找&#8221;直接放置在</span><span><font face="Times New Roman">Source Data </font></span><span>源的下面。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">Source Data </font></span><span>平面文件源，并将绿色箭头拖动到新添加的</span><span><font face="Times New Roman">&#8220;</font></span><span>查找</span><span><font face="Times New Roman">&#8221;</font></span><span>转换中，以连接这两个组件。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>设计图面上，右键单击新添加的</span><span><font face="Times New Roman">&#8220;</font></span><span>查找</span><span><font face="Times New Roman">&#8221;</font></span><span>转换，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>重命名</span><span><font face="Times New Roman">&#8221;</font></span><span>，然后将该名称更改为</span><span><font face="Times New Roman">Lookup id</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>双击</span><span><font face="Times New Roman">Lookup id </font></span><span>转换。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>查找转换编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框的</span><span><font face="Times New Roman">&#8220;OLE DB </font></span><span>连接管理器</span><span><font face="Times New Roman">&#8221;</font></span><span>框中，确保显示</span><span><font face="Times New Roman">localhost.tempdb</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>使用表或视图</span><span><font face="Times New Roman">&#8221;</font></span><span>框中，键入或选择</span><span><font face="Times New Roman">[dbo].[tb]</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>列</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>可用输入列</span><span><font face="Times New Roman">&#8221;</font></span><span>面板中，将</span><span><font face="Times New Roman">id </font></span><span>拖放到</span><span><font face="Times New Roman">&#8220;</font></span><span>可用查找列</span><span><font face="Times New Roman">&#8221;</font></span><span>面板的</span><span><font face="Times New Roman">id </font></span><span>上。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">7.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>在数据流任务中添加插入数据处理需要的目标数据源</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;工具箱&#8221;中，展开&#8220;数据流目标&#8221;，并将&#8220;</span><span><font face="Times New Roman">OLE DB </font></span><span>目标</span><span><font face="Times New Roman">&#8221;</font></span><span>拖到</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡的设计图面上。将</span><span><font face="Times New Roman">OLE DB </font></span><span>目标直接放置在</span><span><font face="Times New Roman">&#8220;Lookup id&#8221;</font></span><span>转换的下面。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;Lookup id&#8221;</font></span><span>转换，并将<span>红色</span>箭头拖到新添加的</span><span><font face="Times New Roman">&#8220;OLE DB </font></span><span>目标</span><span><font face="Times New Roman">&#8221;</font></span><span>上，以便将两个组件连接在一起。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在出现的</span><span><font face="Times New Roman">&#8220;</font></span><span>配置错误输出</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，&#8220;错误&#8221;列中选择&#8220;重定向行&#8221;</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>设计图面上，右键单击新添加的</span><span><font face="Times New Roman">&#8220;OLE DB </font></span><span>目标</span><span><font face="Times New Roman">&#8221;</font></span><span>组件，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>重命名</span><span><font face="Times New Roman">&#8221;</font></span><span>，然后将名称更改为</span><span><font face="Times New Roman">Insert data</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>双击</span><span><font face="Times New Roman">Insert data</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;OLE DB </font></span><span>目标编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，确保已在</span><span><font face="Times New Roman">&#8220;OLE DB </font></span><span>连接管理器</span><span><font face="Times New Roman">&#8221;</font></span><span>框中选中</span><span><font face="Times New Roman">localhost.tempdb</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>表或视图的名称</span><span><font face="Times New Roman">&#8221;</font></span><span>框中，键入或选择</span><span><font face="Times New Roman">[dbo].[tb]</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>映射</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>验证</span><span><font face="Times New Roman">id, name </font></span><span>输入列是否已正确映射到目标列。如果映射了同名列，则说明映射正确。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">8.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>在数据流任务中添加更新数据处理需要的</span></strong><strong><span><font face="Times New Roman">OLE DB</font></span></strong><strong><span>命令组件</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;工具箱&#8221;中，展开&#8220;数据流组件转换&#8221;，并将&#8220;</span><span><font face="Times New Roman">OLE DB </font></span><span>命令</span><span><font face="Times New Roman">&#8221;</font></span><span>拖到</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡的设计图面上。将</span><span><font face="Times New Roman">OLE DB </font></span><span>目标直接放置在</span><span><font face="Times New Roman">&#8220;Lookup id&#8221;</font></span><span>转换的下面。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;Lookup id&#8221;</font></span><span>转换，并将<span>绿色</span>箭头拖到新添加的</span><span><font face="Times New Roman">&#8220;OLE DB </font></span><span>命令</span><span><font face="Times New Roman">&#8221;</font></span><span>上，以便将两个组件连接在一起。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>数据流</span><span><font face="Times New Roman">&#8221;</font></span><span>设计图面上，右键单击新添加的</span><span><font face="Times New Roman">&#8220;OLE DB</font></span><span>命令</span><span><font face="Times New Roman">&#8221;</font></span><span>组件，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>重命名</span><span><font face="Times New Roman">&#8221;</font></span><span>，然后将名称更改为</span><span><font face="Times New Roman">Update data</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>双击</span><span><font face="Times New Roman">Update data</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;Update Data </font></span><span>高级编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，&#8220;连接管理&#8221;选项的&#8220;连接管理器&#8221;列中，选中</span><span><font face="Times New Roman">localhost.tempdb</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在&#8220;组件属性&#8221;选项中，&#8220;自定义属性&#8221;的&#8220;</span><span><font face="Times New Roman">SQLCommand</font></span><span>&#8221;属性中输入：</span></p>
<p><span>UPDATE</span><span> dbo<span>.</span>tb <span>SET</span> <span>name</span> <span>=</span> ? <span>WHERE</span> id <span>=</span> ?</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>列映射</span><span><font face="Times New Roman">&#8221;</font></span><span>选项中，设置&#8220;输入列&#8221;，将</span><span><font face="Times New Roman">name</font></span><span>映射到</span><span><font face="Times New Roman">param_0</font></span><span>，将</span><span><font face="Times New Roman">id</font></span><span>映射到</span><span><font face="Times New Roman">param_1</font></span><span>。注：</span><span><font face="Times New Roman">param_0</font></span><span>对应</span><span><font face="Times New Roman">UPDAT</font></span><span>语句中的第</span><span><font face="Times New Roman">1</font></span><span>个</span><span><font face="Times New Roman">?</font></span><span>，而</span><span><font face="Times New Roman">param_1</font></span><span>对应</span><span><font face="Times New Roman">UPDATE</font></span><span>语句中的第</span><span><font face="Times New Roman">2</font></span><span>个</span><span><font face="Times New Roman">?</font></span><span>，这是固定的。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">9.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>测试</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>按&#8220;</span><span><font face="Times New Roman">F5</font></span><span>&#8221;执行</span><span><font face="Times New Roman">SSIS</font></span><span>包</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>执行结束（所有的组件都变为绿色），你会看到数据流向&#8220;</span><span><font face="Times New Roman">Inset Data&#8221;</font></span><span>的有两条数据</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>双击&#8220;连接管理器&#8221;中的</span><span><font face="Times New Roman">Source</font></span><span>，重新设置文件名为</span><span><font face="Times New Roman">D:\test\d2.txt</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击&#8220;确定&#8221;</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>按&#8220;</span><span><font face="Times New Roman">Ctrl+Shift+F</font><st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="5" unitname="&#8221;" w:st="on"><font face="Times New Roman">5</font><span><span>&#8221;</span></span></st1:chmetcnv><span>，重新启动</span><font face="Times New Roman">SSIS</font></span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>执行结束（所有的组件都变为绿色），你会看到数据流向&#8220;</span><span><font face="Times New Roman">Inset Data&#8221;</font></span><span>的有两条数据，流向&#8220;</span><span><font face="Times New Roman">Update Data</font></span><span>&#8221;的有</span><span><font face="Times New Roman">1</font></span><span>条数据</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>最后，在数据库中查询</span><span><font face="Times New Roman">tempdb.dbo.tb</font></span><span>，验证数据导入的正确性</span></p>
</div>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<div>
<p><strong><span><span><font face="Times New Roman">10.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span></strong><strong><span>添加循环，一次完成</span></strong><strong><span><font face="Times New Roman">test</font></span></strong><strong><span>目录下所有文件的导入</span></strong><strong></strong></p>
</div>
<div>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">Business Intelligence Development Studio </font></span><span>中，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>控制流</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>工具箱</span><span><font face="Times New Roman">&#8221;</font></span><span>中，展开</span><span><font face="Times New Roman">&#8220;</font></span><span>控制流项</span><span><font face="Times New Roman">&#8221;</font></span><span>，然后将</span><span><font face="Times New Roman">&#8220;Foreach </font></span><span>循环容器</span><span><font face="Times New Roman">&#8221;</font></span><span>拖到</span><span><font face="Times New Roman">&#8220;</font></span><span>控制流</span><span><font face="Times New Roman">&#8221;</font></span><span>选项卡的设计图面上。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>右键单击新添加的</span><span><font face="Times New Roman">&#8220;Foreach </font></span><span>循环容器</span><span><font face="Times New Roman">&#8221;</font></span><span>，并选择</span><span><font face="Times New Roman">&#8220;</font></span><span>编辑</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;Foreach </font></span><span>循环编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框的</span><span><font face="Times New Roman">&#8220;</font></span><span>常规</span><span><font face="Times New Roman">&#8221;</font></span><span>页中，为</span><span><font face="Times New Roman">&#8220;</font></span><span>名称</span><span><font face="Times New Roman">&#8221;</font></span><span>输入</span><span><font face="Times New Roman">Foreach File in Folder</font></span><span>。单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>为</span><span><font face="Times New Roman">Foreach </font></span><span>循环容器配置枚举器</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>双击文件夹中的</span><span><font face="Times New Roman">Foreach </font></span><span>文件以重新打开</span><span><font face="Times New Roman">&#8220;Foreach </font></span><span>循环编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>集合</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>集合</span><span><font face="Times New Roman">&#8221;</font></span><span>页中，选择</span><span><font face="Times New Roman">&#8220;Foreach </font></span><span>文件枚举器</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>枚举器配置</span><span><font face="Times New Roman">&#8221;</font></span><span>组中，单击</span><span><font face="Times New Roman">&#8220;</font></span><span>浏览</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>浏览文件夹</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，找到</span><span><font face="Times New Roman">d:\test</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>文件</span><span><font face="Times New Roman">&#8221;</font></span><span>框中，键入</span><span><font face="Times New Roman">*.txt</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>变量映射</span><span><font face="Times New Roman">&#8221;</font></span><span>，</span><span><font face="Times New Roman"> </font></span><span>将枚举器映射为用户定义的变量。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>变量映射</span><span><font face="Times New Roman">&#8221;</font></span><span>页的</span><span><font face="Times New Roman">&#8220;</font></span><span>变量</span><span><font face="Times New Roman">&#8221;</font></span><span>列中，单击空单元格并选择</span><span><font face="Times New Roman">&#8220;&lt;</font></span><span>新建变量</span><span><font face="Times New Roman">&#8230;&gt;&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>添加变量</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，为</span><span><font face="Times New Roman">&#8220;</font></span><span>名称</span><span><font face="Times New Roman">&#8221;</font></span><span>键入</span><span><font face="Times New Roman">varFileName</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>再次单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>，退出</span><span><font face="Times New Roman">&#8220;Foreach </font></span><span>循环编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框。</span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>将数据流任务</span><span><font face="Times New Roman">Import Data </font></span><span>数据流任务拖动到现已重命名为</span><span><font face="Times New Roman">Foreach File in Folder </font></span><span>的</span><span><font face="Times New Roman">Foreach </font></span><span>循环容器中。</span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>配置平面文件连接管理器以使用连接字符串的变量</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>连接管理器</span><span><font face="Times New Roman">&#8221;</font></span><span>窗格中，右键单击</span><span><font face="Times New Roman">Source Data</font></span><span>，再选择</span><span><font face="Times New Roman">&#8220;</font></span><span>属性</span><span><font face="Times New Roman">&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>属性</span><span><font face="Times New Roman">&#8221;</font></span><span>窗口中，针对</span><span><font face="Times New Roman">&#8220;</font></span><span>表达式</span><span><font face="Times New Roman">&#8221;</font></span><span>，单击空单元，然后单击省略号按钮</span><span><font face="Times New Roman">&#8220;(&#8230;)&#8221;</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>属性表达式编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框的</span><span><font face="Times New Roman">&#8220;</font></span><span>属性</span><span><font face="Times New Roman">&#8221;</font></span><span>列中，键入或选择</span><span><font face="Times New Roman">ConnectionString</font></span><span>。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>表达式</span><span><font face="Times New Roman">&#8221;</font></span><span>列中，单击省略号按钮</span><span><font face="Times New Roman">&#8220;(&#8230;)&#8221;</font></span><span>以打开</span><span><font face="Times New Roman">&#8220;</font></span><span>表达式生成器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在</span><span><font face="Times New Roman">&#8220;</font></span><span>表达式生成器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框中，展开</span><span><font face="Times New Roman">&#8220;</font></span><span>变量</span><span><font face="Times New Roman">&#8221;</font></span><span>节点。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>将变量用户</span><span><font face="Times New Roman">::varFileName </font></span><span>拖到</span><span><font face="Times New Roman">&#8220;</font></span><span>表达式</span><span><font face="Times New Roman">&#8221;</font></span><span>框中。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>关闭</span><span><font face="Times New Roman">&#8220;</font></span><span>表达式生成器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框。</span></p>
<p><span><span>&#216;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>再次单击</span><span><font face="Times New Roman">&#8220;</font></span><span>确定</span><span><font face="Times New Roman">&#8221;</font></span><span>关闭</span><span><font face="Times New Roman">&#8220;</font></span><span>属性表达式编辑器</span><span><font face="Times New Roman">&#8221;</font></span><span>对话框。<br><br><br><br>From:http://blog.csdn.net/zjcxc/archive/2006/09/10/1202876.aspx<br></span><br></p>
</div>
<img src ="http://www.cnitblog.com/nana/aggbug/42196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-10 11:45 <a href="http://www.cnitblog.com/nana/archive/2008/04/10/42196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监控发布和分发</title><link>http://www.cnitblog.com/nana/archive/2008/04/10/42194.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Thu, 10 Apr 2008 03:30:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/10/42194.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/42194.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/10/42194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/42194.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/42194.html</trackback:ping><description><![CDATA[分发服务器中distribution数据库〉表〉系统表&nbsp; 里的MSrepl_errors<br><br>如果该表有记录，则证明有错误发生
<img src ="http://www.cnitblog.com/nana/aggbug/42194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-10 11:30 <a href="http://www.cnitblog.com/nana/archive/2008/04/10/42194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005中的SQLCMD工具使用</title><link>http://www.cnitblog.com/nana/archive/2008/04/08/42133.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Tue, 08 Apr 2008 09:34:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/08/42133.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/42133.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/08/42133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/42133.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/42133.html</trackback:ping><description><![CDATA[<p>1、你可以用SQLCMD执行交互式动作，如：<br>C:\sqlcmd&gt;sqlcmd </p>
<p>1&gt; SELECT name from sys.databases </p>
<p>2&gt; GO</p>
<p>你也可以试着键入如下命令，现实服务器列表<br>1&gt;:ServerList<br>&nbsp;<br>&nbsp;SERVERS:<br>&nbsp;&nbsp;WUYZ<br>1&gt;<br>如果想看其他命令的使用，可以键入:Help /? </p>
<p>2、执行SQL脚本文件&nbsp;&nbsp;<br>&nbsp;你可以在SQLCMD命令上加入参数I来执行SQL脚本文件，例如<br>&nbsp;C:\sqlcmd&gt;sqlcmd -i test.sql<br>&nbsp;上面的I选项允许你执行一个脚本文件，另外，你也可以指定O选项，把命令的输出导出到指定文件,当然，我们也可以在代码中指定输出结果，如下<br>&nbsp;C:\sqlcmd&gt;sqlcmd <br>&nbsp; 1&gt; :out output.txt<br>&nbsp; 2&gt; :r test.sql <br>&nbsp; </p>
<p>3、在脚本中使用变量<br>&nbsp;SQLCMD支持可以在脚本中接收用户传入的变量信息，如下面语句<br>&nbsp;SET NOCOUNT ON <br>&nbsp;&nbsp;Select $(Cols) from $(tablename) <br>&nbsp;GO<br>&nbsp;上面语句请求2个参数，我们可以通过指定相应的参数信息传给脚本，如下<br>&nbsp;C:\sqlcmd&gt;sqlcmd -i test.sql -o Output.txt -v cols="name,object_id,create_date" tablename="sys.objects"<br>&nbsp;上面语句的用途是：执行TEST.SQL脚本文件，并把输出的信息输出到OUTPUT.TXT文件中，并分别指定了COLS,TABLENAME的参数值</p>
<p>4、在脚本中设置变量的值<br>&nbsp;除了通过外部传入参数的值外，还可以在内部设置参数的值，如下面例子</p>
<p>&nbsp;&nbsp;e:\sqlcmd\backuptemplate.sql<br>&nbsp;&nbsp;use master<br>&nbsp;&nbsp;backup database [$(db)] to disk='$(file)'<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;e:\sqlcmd\backupsingle.sql<br>&nbsp;&nbsp;:setvar db msdb<br>&nbsp;&nbsp;:setvar file c:\temp\msdb.bak<br>&nbsp;&nbsp;:r e:\sqlcmd\backuptemplate.sql<br>&nbsp;&nbsp;<br>&nbsp;如果你想知道当然定义了哪些变量，可以使用:listvar命令来显示</p>
<p>主要命令汇总：<br>&nbsp;:r filename<br>&nbsp;:ServerList<br>&nbsp;:List<br>&nbsp;:Listvar<br>&nbsp;:Error filename | STDOUT | STDERR<br>&nbsp;:Out filename | STDOUT | STDERR<br>&nbsp;:Perftrace filename | STDOUT | STDERR<br>&nbsp;:Connect server[\instance] [timeout] [user_name[password] ]<br>&nbsp;:On Error [exit | ignore]<br>&nbsp;:SetVar variable value<br>&nbsp;:Help:XML ON | OFF<br>&nbsp;&nbsp;&nbsp;<br>主要环境变量汇总：<br>&nbsp;-a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDPACKETSIZE<br>&nbsp;-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDDBNAME<br>&nbsp;-H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDWORKSTATION<br>&nbsp;-h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDHEADERS<br>&nbsp;-l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDLOGINTIMEOUT<br>&nbsp;-m&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDERRORLEVEL<br>&nbsp;-P&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDPASSWORD<br>&nbsp;-S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMSSERVER<br>&nbsp;-s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDCOLSEP<br>&nbsp;-t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDSTATTIMEOUT<br>&nbsp;-U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDUSER<br>&nbsp;-w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLCMDCOLWIDTH&nbsp;</p>
<a href="http://www.itcomputer.com.cn/Database/SQL/200601/74113.html"><br><br><br>http://www.itcomputer.com.cn/Database/SQL/200601/74113.html</a>
<img src ="http://www.cnitblog.com/nana/aggbug/42133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-08 17:34 <a href="http://www.cnitblog.com/nana/archive/2008/04/08/42133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何计算表大小？</title><link>http://www.cnitblog.com/nana/archive/2008/04/08/42119.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Tue, 08 Apr 2008 03:00:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/08/42119.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/42119.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/08/42119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/42119.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/42119.html</trackback:ping><description><![CDATA[下面是估计数据库大小的一般步骤：<br>1。计算表的记录大小。这可以将表中每列的宽度累加起来计算出来。<br>2。用8092除以第1步中计算出的行大小，并向下舍入到最近的整数。8092是单个数据页面能保存的实际数据量，而且由于一行不能跨页，所以向下舍入。<br>3。用预计拥有的行数除以第2步中计算出的结果。这将得出需要为该表使用的数据页面数量。<br>4。用第3步中计算出的结果乘以8192（单个数据页面的字节大小）。这将准确地得出该表在磁盘上将占用的字节数量。<br><br>例如：<br>1。已经规划好的数据库，将客户表中所有字段大小累加起来。需要说明的是nvarchar数据类型占用两倍于给它指定的空间，因为nvarchar（20）实际上是40个字节。下面是表布局（应得出235个字节）<br>custid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int（注：4个字节的存储空间）<br>fname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nvarchar（20）<br>lname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nvarchar（20）<br>address&nbsp;&nbsp; nvarchar（50）<br>city&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nvarchar（20）<br>state&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char（2）<br>zip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char（9）<br>2。用8092除以235，并向下舍入到最近的整数来得出单个数据页面上能存放这些行当中的多少行。在每种情况中，都向下舍入，因为单行不能跨页。答案应该是34。<br>3。用10000（该表中的估计行数）除以单个数据页面上的行数（34），并向上舍入到最近的整数。这里向上舍入是因为一个不完整的行将移到新的数据页面上。答案应该是294。<br>4。用294（保存10000条记录所需要的页面数量）乘以8192（磁盘上的单页大小）。最终得出该表在磁盘上占用的字节数量应该是2 408 448个字节。<br>因此，就10000条记录而言，该数据库中客户表将需要大约1.5MB的硬盘空间。通过对数据库中的每个表重复这些步骤，可以计算出在最初创建该数据库时需要给它分配的大致空间。<br><br>完成这些计算之后，随时可以开始创建数据库。<br><br><br><br><br>
<img src ="http://www.cnitblog.com/nana/aggbug/42119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-08 11:00 <a href="http://www.cnitblog.com/nana/archive/2008/04/08/42119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server 2005系统表</title><link>http://www.cnitblog.com/nana/archive/2008/04/07/42087.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Mon, 07 Apr 2008 10:02:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/07/42087.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/42087.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/07/42087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/42087.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/42087.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">SQL Server 2005中有很多自带的系统表，这些表都有各自的作用，下面的表格则分别描述了这些系统表的所属及其作用，仅供参考 </p>
<p style="TEXT-INDENT: 2em">sysaltfiles 主数据库 保存数据库的文件 </p>
<p style="TEXT-INDENT: 2em">syscharsets 主数据库 字符集与排序顺序 </p>
<p style="TEXT-INDENT: 2em">sysconfigures 主数据库 配置选项 </p>
<p style="TEXT-INDENT: 2em">syscurconfigs 主数据库 当前配置选项 </p>
<p style="TEXT-INDENT: 2em">sysdatabases 主数据库 <a href="http://product.itzero.com/server/index.html" target=_blank><font color=#333333><u>服务器</u></font></a>中的数据库 </p>
<p style="TEXT-INDENT: 2em">syslanguages 主数据库 语言 </p>
<p style="TEXT-INDENT: 2em">syslogins 主数据库 登陆帐号信息 </p>
<p style="TEXT-INDENT: 2em">sysoledbusers 主数据库 链接<a href="http://product.itzero.com/server/index.html" target=_blank><font color=#333333><u>服务器</u></font></a>登陆信息 </p>
<p style="TEXT-INDENT: 2em">sysprocesses 主数据库 进程 </p>
<p style="TEXT-INDENT: 2em">sysremotelogins主数据库 远程登录帐号 </p>
<p style="TEXT-INDENT: 2em">syscolumns 每个数据库 列 </p>
<p style="TEXT-INDENT: 2em">sysconstrains 每个数据库 限制 </p>
<p style="TEXT-INDENT: 2em">sysfilegroups 每个数据库 文件组 </p>
<p style="TEXT-INDENT: 2em">sysfiles 每个数据库 文件 </p>
<p style="TEXT-INDENT: 2em">sysforeignkeys 每个数据库 外部关键字 </p>
<p style="TEXT-INDENT: 2em">sysindexs 每个数据库 索引 </p>
<p style="TEXT-INDENT: 2em">sysmenbers 每个数据库 角色成员 </p>
<p style="TEXT-INDENT: 2em">sysobjects 每个数据库 所有数据库对象 </p>
<p style="TEXT-INDENT: 2em">syspermissions 每个数据库 权限 </p>
<p style="TEXT-INDENT: 2em">systypes 每个数据库 用户定义数据类型 </p>
<p style="TEXT-INDENT: 2em">sysusers 每个数据库 用户&nbsp;&nbsp;<br><br><br><a href="http://blog.csdn.net/onlyzhangqin/archive/2007/06/18/1656910.aspx">http://blog.csdn.net/onlyzhangqin/archive/2007/06/18/1656910.aspx</a></p>
<img src ="http://www.cnitblog.com/nana/aggbug/42087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-07 18:02 <a href="http://www.cnitblog.com/nana/archive/2008/04/07/42087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何估计表的盘区数量？</title><link>http://www.cnitblog.com/nana/archive/2008/04/02/41845.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Wed, 02 Apr 2008 11:56:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/04/02/41845.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/41845.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/04/02/41845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/41845.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/41845.html</trackback:ping><description><![CDATA[1。计算表中一条记录的大小<br>2。用8092除以第1步的结果<br>3。用估算行数除以第2步的结果<br>4。用第3步的结果除以8---这将得出表占用的盘区数量
<img src ="http://www.cnitblog.com/nana/aggbug/41845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-04-02 19:56 <a href="http://www.cnitblog.com/nana/archive/2008/04/02/41845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修复数据库出现一致性错误的方法</title><link>http://www.cnitblog.com/nana/archive/2008/03/27/41568.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Thu, 27 Mar 2008 09:21:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2008/03/27/41568.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/41568.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2008/03/27/41568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/41568.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/41568.html</trackback:ping><description><![CDATA[修复数据库出现一致性错误和分配错误方法 一些数据库服务器在使用中有时由于非正常关闭或重新启动服务器,可能会发生数据库错误，目前我们的方法基本上是把数据库导入到另外一个空数据库中来修复。这种方法是可以修复成功的，但是耗时比较长。<br><br>对于一些比较简单的数据库错误（比较少的一致性错误和非配错误）我们可以通过如下方法来修复数据，这样操作更快.注意：在做任何数据库操作前请一定注意备份数据库。并把其它使用数据库的应用程序停止掉，只启动SQLSERVER服务。<br><br>第一步：在服务器上,使用命令行 运行OSQL &#8211;E 命令进入数据库，<br><br>第二步：选择所使用的数据库(DbName),并检查该数据库是否存在错误。 从检查图中我们可以看到该数据库存在4个分配错误和1个一致性错误。 (注:DbName--为你实际要处理 的数据库.)<br><br>第三步：发现错误后我们要开始修复，所使用语句下：sp_dboption 'DbName', 'single user', 'true'--把数据库置为单用户模式DBCC checkdb('DbName',REPAIR_ALLOW_DATA_LOSS)--在允许数据丢失情况下修复数据库。 如果DBCC checkdb('DbName',REPAIR_A LLOW_DATA_LOSS)语句执行一次不行，可以在多执行几次直到没有再提示数据库有错误为止。<br><br>第四步：检查没有错误后，把数据库重新设置为多用户模式sp_dboption 'local', 'single user', 'false'--设置为多用户模式 这样这个数据库的错误修复就完成了 。然后停止掉SQLSERVER,重新启动服务器就可以.这种方法对于一般出现问题可以不用安装企业管理器。直接在服务器用OSQL &#8211;E 进入数据库。然后通过上面两条命令来修复数据库。这样速度比较快。<br><br><br><br><br><br>摘自<a href="http://blog.csdn.net/yang_141/archive/2008/03/27/2221717.aspx">http://blog.csdn.net/yang_141/archive/2008/03/27/2221717.aspx</a>
<img src ="http://www.cnitblog.com/nana/aggbug/41568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2008-03-27 17:21 <a href="http://www.cnitblog.com/nana/archive/2008/03/27/41568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用 Integration Services 服务导入包</title><link>http://www.cnitblog.com/nana/archive/2007/11/19/36491.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Mon, 19 Nov 2007 03:25:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2007/11/19/36491.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/36491.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2007/11/19/36491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/36491.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/36491.html</trackback:ping><description><![CDATA[<div class=title>如何使用 Integration Services 服务导入包<!----></div>
<!--content type: DocStudio. Transform: devdiv2mtps.xslt.-->
<div id=mainSection>
<div id=mainBody><span style="COLOR: darkgray"></span>
<p><span id=changeHistory></span>
<p>可以导入存储在 Microsoft SQL Server 实例、文件系统或 SSIS 包存储区中的包。导入的包保存在 SSIS 包存储区中的文件夹中。</p>
<div class=MTPS_CollapsibleRegion>
<script type=text/Javascript>
var ExpCollDivStr = ExpCollDivStr;
ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl065f4fefc,";
var ExpCollImgStr = ExpCollImgStr;
ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl06img,";
</script>
<a class=CollapseRegionLink onclick="ShowHideCollapsibleArea('ctl00_LibFrame_ctl065f4fefc','ctl00_LibFrame_ctl06img');return false;" href="http://technet.microsoft.com/zh-cn/library/ms141235.aspx#"><img class=CollapseRegionImg id=ctl00_LibFrame_ctl06img alt=导入包 src="http://technet.microsoft.com/technet/Controls/CollapsibleArea/en-us/minus.gif" align=middle><u><font color=#0000ff>导入包</font></u></a><br>
<div class=section id=ctl00_LibFrame_ctl065f4fefc style="DISPLAY: block">
<div id=ctl00_LibFrame_ctl06><a name=procedureToggleEDBHA>
<ol>
    <li>
    <p>单击<strong>&#8220;开始&#8221;</strong>，指向<strong>&#8220;Microsoft SQL Server 2005&#8221;</strong>，然后单击<strong>&#8220;SQL Server Management Studio&#8221;</strong>。</p>
    <li>
    <p>在<strong>&#8220;连接到服务器&#8221;</strong>对话框中，设置以下选项：</p>
    <ul>
        <li>在<strong>&#8220;服务器类型&#8221;</strong>框中，选择<strong>&#8220;Integration Services&#8221;</strong>。<br>
        <li>在<strong>&#8220;服务器名称&#8221;</strong>框中，提供服务器名称或单击<strong>&#8220;&lt;浏览更多&#8230;&gt;&#8221;</strong>，并找到要使用的服务器。<br></li>
    </ul>
    <li>
    <p>如果对象资源管理器未打开，请在<strong>&#8220;视图&#8221;</strong>菜单上，单击<strong>&#8220;对象资源管理器&#8221;</strong>。</p>
    <li>
    <p>在对象资源管理器中，展开<strong>&#8220;已存储的包&#8221;</strong>文件夹。</p>
    <li>
    <p>展开子文件夹，找到要向其中导入包的文件夹。</p>
    <li>
    <p>右键单击该文件夹，单击<strong>&#8220;导入包&#8221;</strong>，然后请执行下列操作之一：</p>
    <ul>
        <li>若要从 SQL Server 的实例导入，请选择<strong>&#8220;SQL Server&#8221;</strong>选项，然后指定服务器并选择身份验证模式。如果选择 SQL Server 身份验证，请提供用户名和密码。 <br>单击浏览按钮 <strong>(&#8230;)</strong>，选择要导入的包，再单击<strong>&#8220;确定&#8221;</strong>。<br>
        <li>若要从文件系统导入，请选择<strong>&#8220;文件系统&#8221;</strong>选项。<br>单击浏览按钮<strong>(&#8230;)</strong>，选择要导入的包，然后单击<strong>&#8220;打开&#8221;</strong>。<br>
        <li>若要从 SSIS 包存储区中导入，请选择<strong>&#8220;SSIS 包存储区&#8221;</strong>选项，并指定服务器。 <br>单击浏览按钮 <strong>(&#8230;)</strong>，选择要导入的包，再单击<strong>&#8220;确定&#8221;</strong>。<br></li>
    </ul>
    <li>
    <p>根据需要，也可以更新包名称。</p>
    <li>
    <p>若要更新包的保护级别，请单击浏览按钮 <strong>(&#8230;)</strong>，然后使用<strong>&#8220;包保护级别&#8221;</strong>对话框选择另一个保护级别。如果选定了<strong>&#8220;使用密码加密敏感数据&#8221;</strong>或<strong>&#8220;使用密码加密所有数据&#8221;</strong>选项，请键入并确认密码。</p>
    <li>
    <p>单击<strong>&#8220;确定&#8221;</strong>，完成导入操作。</p>
    </li>
</ol>
</a></div>
</div>
</div>
</div>
</div>
<img src ="http://www.cnitblog.com/nana/aggbug/36491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2007-11-19 11:25 <a href="http://www.cnitblog.com/nana/archive/2007/11/19/36491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sqlcmd</title><link>http://www.cnitblog.com/nana/archive/2007/11/18/36452.html</link><dc:creator>你向前迈了一步后，就不要再留恋过去的风景</dc:creator><author>你向前迈了一步后，就不要再留恋过去的风景</author><pubDate>Sun, 18 Nov 2007 07:01:00 GMT</pubDate><guid>http://www.cnitblog.com/nana/archive/2007/11/18/36452.html</guid><wfw:comment>http://www.cnitblog.com/nana/comments/36452.html</wfw:comment><comments>http://www.cnitblog.com/nana/archive/2007/11/18/36452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/nana/comments/commentRss/36452.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/nana/services/trackbacks/36452.html</trackback:ping><description><![CDATA[<p><strong>1、你可以用SQLCMD执行交互式动作</strong>，如：</p>
<p>C:\sqlcmd&gt;sqlcmd <br><br>1&gt; SELECT name from sys.databases <br><br>2&gt; GO</p>
<p>你也可以试着键入如下命令，现实服务器列表<br><br>1&gt;:ServerList</p>
<p>SERVERS:<br><br>WUYZ</p>
<p>1&gt;如果想看其他命令的使用，可以键入:Help /? </p>
<p>2、执行SQL脚本文件</p>
<p>你可以在SQLCMD命令上加入参数I来执行SQL脚本文件，例如：<br><br>C:\sqlcmd&gt;sqlcmd -i test.sql</p>
<p>上面的I选项允许你执行一个脚本文件，另外，你也可以指定O选项，把命令的输出导出到指定文件,当然，我们也可以在代码中指定输出结果，如下<br><br>C:\sqlcmd&gt;sqlcmd <br><br>1&gt; :out output.txt<br><br>2&gt; :r test.sql <br><br><strong>3、在脚本中使用变量</strong></p>
<p>SQLCMD支持可以在脚本中接收用户传入的变量信息，如下面语句：<br><br>SET NOCOUNT ON <br><br>Select $(Cols) from $(tablename) <br><br>GO</p>
<p>上面语句请求2个参数，我们可以通过指定相应的参数信息传给脚本，如下：<br><br>C:\sqlcmd&gt;sqlcmd -i test.sql -o Output.txt -v cols="name,object_id,create_date" tablename="sys.objects"</p>
<p>上面语句的用途是：执行TEST.SQL脚本文件，并把输出的信息输出到OUTPUT.TXT文件中，并分别指定了COLS,TABLENAME的参数值</p>
<p><strong>4、在脚本中设置变量的值</strong></p>
<p>除了通过外部传入参数的值外，还可以在内部设置参数的值，如下面例子<br><br>e:\sqlcmd\backuptemplate.sql<br><br>use master<br><br>backup database [$(db)] to disk='$(file)'<br><br>e:\sqlcmd\backupsingle.sql<br><br>:setvar db msdb<br><br>:setvar file c:\temp\msdb.bak<br><br>:r e:\sqlcmd\backuptemplate.sql<br><br>如果你想知道当然定义了哪些变量，可以使用:listvar命令来显示。主要命令汇总：</p>
<p>:r filename<br><br>:ServerList<br><br>:List<br><br>:Listvar<br><br>:Error filename | STDOUT | STDERR<br><br>:Out filename | STDOUT | STDERR<br><br>:Perftrace filename | STDOUT | STDERR<br><br>:Connect server[\instance] [timeout] [user_name[password] ]<br><br>:On Error [exit | ignore]<br><br>:SetVar variable value<br><br>:Help:XML ON | OFF<br><br>主要环境变量汇总：</p>
<p>-a SQLCMDPACKETSIZE<br><br>-d SQLCMDDBNAME<br><br>-H SQLCMDWORKSTATION<br><br>-h SQLCMDHEADERS<br><br>-l SQLCMDLOGINTIMEOUT<br><br>-m SQLCMDERRORLEVEL<br><br>-P SQLCMDPASSWORD<br><br>-S SQLCMSSERVER<br><br>-s SQLCMDCOLSEP<br><br>-t SQLCMDSTATTIMEOUT<br><br>-U SQLCMDUSER<br><br>-w SQLCMDCOLWIDTH</p>
<img src ="http://www.cnitblog.com/nana/aggbug/36452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/nana/" target="_blank">你向前迈了一步后，就不要再留恋过去的风景</a> 2007-11-18 15:01 <a href="http://www.cnitblog.com/nana/archive/2007/11/18/36452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>