<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>微软中国 TechNet 团队博客</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/chinatechnet/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/chinatechnet/feed.xml</link>
    <description>IT 专业人士自己的博客！与您分享最新产品技术文章！</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:27:31 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>通过 COM 从 Orchestrator 中获得更深入的信息</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/com-orchestrator</link>
      <pubDate>Mon, 13 Apr 2015 23:40:46 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/04/13/com-orchestrator/</guid>
      <description><![CDATA[我发现很多用户请求利用 Orchestrator 来创建集成，以获得一些有关某一安装过程的内部工作机制的信息，而这些信息都是无法通过 Web 服务所获得的。Web...]]></description>
      <content:encoded><![CDATA[<div class="PostContent">
<p>我发现很多用户请求利用 Orchestrator 来创建集成，以获得一些有关某一安装过程的内部工作机制的信息，而这些信息都是无法通过 Web 服务所获得的。Web 服务可让您检索有关以下内容的信息：</p>
<ul>
<li>文件夹</li>
<li>Runbook</li>
<li>Runbook 参数</li>
<li>活动</li>
<li>作业</li>
<li>Runbook 实例</li>
<li>Runbook 实例参数</li>
<li>活动实例</li>
<li>活动实例数据</li>
<li>Runbook 服务器</li>
<li>Runbook 关系图</li>
<li>统计信息</li>
<li>事件</li>
</ul>
<p>除了开始作业和停止作业以外，其他所有通过 Web 服务所获得的内容都是只读的。但是，用户还希望能够进行编程操作（和修改操作），并执行类似于以下的操作：</p>
<ul>
<li>查看并修改变量和计数器</li>
<li>查看安装了哪些集成包</li>
<li>查看日志历史记录</li>
<li>导出或导入 Runbook</li>
<li>签入或签出（或取消签出）Runbook</li>
<li>查看哪位用户拥有连接到 Management Server 的 Runbook Designer</li>
</ul>
<p>所有这些功能，以及更多功能均已通过 Orchestrator COM 界面可用。我将撰写一篇新的文章来解释如何连接到 COM 界面，并使用该界面来进行多个有助于您进一步自动化与 Orchestrator 交互的操作。由于使用 C# 代码进行编写和编译更为简单（对我而言这比使用 C++ 简单多了），因此我将在这些示例中使用 PowerShell。</p>
<p>首先，我将打开一个 PowerShell (x86) ISE（这是因为 Orchestrator 2012 为 64 位软件）。<strong>请注意，在这一示例中，您将需要在 Orchestrator Management Server 上进行操作。</strong></p>
<p>我将使用以下命令在 PowerShell 中创建一个新项目：</p>
<blockquote><span style="font-family:Courier New;font-size:x-small;">$oismgr = <span style="color:#0000ff;">new-object</span> -com OpalisManagementService.OpalisManager</span></blockquote>
<p>我可从这查看 COM 对象的内部，以及所有可用的方法列表（这些方法的数量很多！）：</p>
<blockquote>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f3fdda2b-d32d-42c0-8cfc-c219a5c6d4a9" style="margin:0px;display:inline;float:none;padding:0px;">
<div style="border:#000080 1px solid;color:#000;font-family:&#39;Courier New&#39;, Courier, Monospace;font-size:10pt;">
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;">$oismgr | gm<br /> <br /> <br /> &nbsp;&nbsp;&nbsp;TypeName: System.<span style="color:#2b91af;">__ComObject</span>#{9b7ffff7-3ac0-40ce-b2ae-99514a43307e}<br /> <br /> Name&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;MemberType Definition&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> ----&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;&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;<br /> AccessCheck&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> AccessCheck (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> AddFolder&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> AddFolder (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> AddIntegrationPack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> AddIntegrationPack (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> AddPolicy&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> AddPolicy (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> AddResource&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> AddResource (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> AddUserToRuntimeRole&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> AddUserToRuntimeRole (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</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;<br /> ChangeLicense&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ChangeLicense (<span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> CheckIn&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> CheckIn (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> CheckOut&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> CheckOut (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> ClientConnectSignal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ClientConnectSignal (Variant)&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;<br /> ConfigureActionServer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ConfigureActionServer (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> Connect&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> Connect (<span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> CreatePolicyRequest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> CreatePolicyRequest (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant, Variant)<br /> DeleteEvent&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeleteEvent (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</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;<br /> DeleteFolder&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeleteFolder (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</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;<br /> DeleteLogEntry&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeleteLogEntry (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> DeleteObject&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeleteObject (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</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;<br /> DeletePolicy&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeletePolicy (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</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;<br /> DeletePolicyImages&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeletePolicyImages (Variant)&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;<br /> DeleteResource&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DeleteResource (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> Disconnect&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> Disconnect (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</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;<br /> DoesPolicyExist&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> DoesPolicyExist (<span style="color:#0000ff;">string</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;<br /> Find&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> Find (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> FindPoliciesWithoutImages&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> FindPoliciesWithoutImages (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetActionServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetActionServers (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetActionServerTypes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetActionServerTypes (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetAuditHistory&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetAuditHistory (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetCheckOutStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetCheckOutStatus (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetClientConnections&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetClientConnections (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetConfigurationIds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetConfigurationIds (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetConfigurationValues&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetConfigurationValues (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetCountersValueAndMarker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetCountersValueAndMarker (Variant)&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;<br /> GetCustomStartParameterName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetCustomStartParameterName (<span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetCustomStartParameters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetCustomStartParameters (Variant)&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;<br /> GetDatastoreType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetDatastoreType (<span style="color:#0000ff;">int</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;<br /> GetEventDetails&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetEventDetails (<span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetEvents&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetEvents (Variant)&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;<br /> GetFolderContents&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetFolderContents (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetFolderPathFromID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetFolderPathFromID (<span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetFolders&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetFolders (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetInstanceStatusForRequests&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetInstanceStatusForRequests (<span style="color:#0000ff;">int</span>, Variant, Variant, Variant)&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;<br /> GetIntegrationPacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetIntegrationPacks (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetLatestPolicyReturnDataDefinition&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLatestPolicyReturnDataDefinition (<span style="color:#0000ff;">string</span>, Variant, Variant)&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;<br /> GetLicenseExpirationTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLicenseExpirationTime (<span style="color:#0000ff;">string</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;<br /> GetLicenseInformation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLicenseInformation (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetLogHistory&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLogHistory (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetLogHistoryObjectDetails&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLogHistoryObjectDetails (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> GetLogHistoryObjects&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLogHistoryObjects (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetLogObjectDetails&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetLogObjectDetails (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetObjectSecurity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetObjectSecurity (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetObjectTypes&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetObjectTypes (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetPolicyIDFromPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyIDFromPath (<span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetPolicyInputParameterId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyInputParameterId (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> GetPolicyObjectList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyObjectList (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetPolicyPathFromID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyPathFromID (<span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetPolicyPublishState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyPublishState (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</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;<br /> GetPolicyRunningState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyRunningState (Variant, Variant)&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;<br /> GetPolicyRunStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetPolicyRunStatus (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetProductKey&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetProductKey (<span style="color:#0000ff;">string</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;<br /> GetRequestOutputData&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetRequestOutputData (<span style="color:#0000ff;">int</span>, Variant, Variant, Variant)&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;<br /> GetResources&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetResources (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> GetRunbookTesterPublishedRequests&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetRunbookTesterPublishedRequests (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> GetVersionInformation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> GetVersionInformation (Variant)&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;<br /> Initialize&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> Initialize ()&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;&nbsp;&nbsp;&nbsp;&nbsp;<br /> IsPolicyRunning&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> IsPolicyRunning (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</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;<br /> LoadObject&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> LoadObject (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> LoadPolicy&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> LoadPolicy (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> LoadResource&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> LoadResource (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> ModifyFolder&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ModifyFolder (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> ModifyObject&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ModifyObject (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> ModifyPolicy&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ModifyPolicy (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant, Variant)&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;<br /> ModifyResource&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> ModifyResource (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> MoveObject&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> MoveObject (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> PolicyHasMonitor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> PolicyHasMonitor (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> RemoveClientConnection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> RemoveClientConnection (<span style="color:#0000ff;">string</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;<br /> RemoveIntegrationPack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> RemoveIntegrationPack (<span style="color:#0000ff;">int</span>, Variant)&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;<br /> RemoveSatellite&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> RemoveSatellite (<span style="color:#0000ff;">string</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;<br /> Replace&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> Replace (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> RetrievePoliciesLinkedToAS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> RetrievePoliciesLinkedToAS (<span style="color:#0000ff;">string</span>, Variant)&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;<br /> SetConfigurationValues&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetConfigurationValues (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> SetLicenseInformation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetLicenseInformation (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&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;<br /> SetObjectSecurity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetObjectSecurity (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</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;<br /> SetPolicyImage&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetPolicyImage (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, Variant)&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;<br /> SetPolicyPublishState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetPolicyPublishState (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</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;<br /> SetPolicyPublishStateWithParams&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetPolicyPublishStateWithParams (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</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;<br /> SetPolicyPublishStateWithParamsAndGetID Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetPolicyPublishStateWithParamsAndGetID (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, Variant)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> SetReportingOptions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> SetReportingOptions (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</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;<br /> StartSqmNotification&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> StartSqmNotification ()&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;<br /> UndoCheckOut&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;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> UndoCheckOut (<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">int</span>, Variant)&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;<br /> UpdateClientActivity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff;">void</span> UpdateClientActivity (<span style="color:#0000ff;">string</span>, <span style="color:#0000ff;">string</span>)</div>
</div>
</div>
</blockquote>
<p>很遗憾，其他地方都没有记录这些方法，因此有时您需要进行多次尝试才能使其正常运行，所幸的是，我将为您避免这些麻烦。在使用 COM 界面时，Orchestrator 中的安全模式仍然有效，而且您需要拥有管理员权限才能使用其中很多功能，因此，这实际上稍微提高了 Orchestrator 的限制程度，而这对于用户而言将是一条好消息。而且大多数操作需要用户（通过连接方法）建立一个连接句柄，但是用户也可在不进行连接的情况下使用一些方法（如 GetEvents）。此处所显示的一些界面并未真正实施，或可从外部代码中访问。</p>
<p>为了向您展示这些内容的工作原理，我将从可向您展示不需要任何连接句柄即可运行的 GetEvents 开始。对于许多方法而言，它们需要在一个对象周围设置一个&ldquo;可变包装&rdquo;，以创建该方法所预期的&ldquo;可变&rdquo;类型。此外，您还将经常在一个将成为该方法输出的引用变量中传递，而非在确实只是一个 HResult 代码的&ldquo;返回值&rdquo;中传递。</p>
<blockquote>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c8553d37-7fc9-4f57-bcf9-0544d8e58185" style="margin:0px;display:inline;float:none;padding:0px;">
<div style="border:#000080 1px solid;color:#000;font-family:&#39;Courier New&#39;, Courier, Monospace;font-size:10pt;">
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$oismgr = <span style="color:#0000ff;">new</span>-<span style="color:#0000ff;">object</span> -com OpalisManagementService.OpalisManager<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$oevents = New-<span style="color:#2b91af;">Object</span> <span style="color:#0000ff;">object</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$events = $events = New-<span style="color:#2b91af;">Object</span> Runtime.InteropServices.VariantWrapper($oevents)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$oismgr.GetEvents([<span style="color:#0000ff;">ref</span>]$events)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$xml = [XML]$events<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$xml.OuterXml</div>
</div>
</div>
</blockquote>
<p>该方法将输出类似于以下内容的代码（我编排了该 XML 的格式，以更易于您查看）：</p>
<blockquote>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:959034b8-b1bc-44a7-a3af-3d5fd1b09e99" style="margin:0px;display:inline;float:none;padding:0px;">
<div style="border:#000080 1px solid;color:#000;font-family:&#39;Courier New&#39;, Courier, Monospace;font-size:10pt;">
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">Events</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Event</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">UniqueID</span><span style="color:#0000ff;">&gt;{</span>09A4CEEE-8EBE-4D1C-B5DD-06DA3EBCE01A}<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">UniqueID</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Type</span><span style="color:#0000ff;">&gt;</span>Information<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Type</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Computer</span><span style="color:#0000ff;">&gt;&lt;/</span><span style="color:#a31515;">Computer</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Summary</span><span style="color:#0000ff;">&gt;</span>Completed Log Cleanup<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Summary</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">DateTime</span><span style="color:#0000ff;">&gt;</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;129782594190000000<br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="color:#a31515;">DateTime</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&lt;/</span><span style="color:#a31515;">Event</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Events</span><span style="color:#0000ff;">&gt;</span></div>
</div>
</div>
</blockquote>
<p>因此，您可发现从 COM 界面中获取信息相对而言将简单很多。当然，我更愿意从 Web 服务中获取诸如事件之类的信息，因此这样更易于处理。现在，一起来看看我将如何执行需要凭据和连接的操作。将第一个参数显示为一个 <strong><span style="color:#0000ff;font-family:Courier New;font-size:x-small;">int</span></strong> 的任何方法基本上都需要连接。例如，<span style="color:#0000ff;font-family:Courier New;font-size:x-small;">GetIntegrationPacks</span><strong> </strong>方法。以下 PowerShell 脚本将使用<strong>连接</strong>方法来为 COM 界面创建一个连接句柄，并返回一个包含连接 ID 的整数。（$Username 为 &ldquo;&lt;domain&gt;\&lt;username&gt;&rdquo;）</p>
<blockquote>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:08cf0f63-d265-428b-a687-4333442108bc" style="margin:0px;display:inline;float:none;padding:0px;">
<div style="border:#000080 1px solid;color:#000;font-family:&#39;Courier New&#39;, Courier, Monospace;font-size:10pt;">
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$oismgr = <span style="color:#0000ff;">new</span>-<span style="color:#0000ff;">object</span> -com OpalisManagementService.OpalisManager<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ohandle = New-<span style="color:#2b91af;">Object</span> <span style="color:#0000ff;">object</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$handle = $handle = New-<span style="color:#2b91af;">Object</span> Runtime.InteropServices.VariantWrapper($ohandle)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$retval = $oismgr.Connect($UserName, $password, [<span style="color:#0000ff;">ref</span>]$handle)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$handle</div>
</div>
</div>
</blockquote>
<p>然后，您将使用该句柄 ID 作为该&ldquo;需要连接&rdquo;的方法的首个参数，如下：</p>
<blockquote>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:81fd85dc-145a-4bd7-b69d-c5a2f6f11865" style="margin:0px;display:inline;float:none;padding:0px;">
<div style="border:#000080 1px solid;color:#000;font-family:&#39;Courier New&#39;, Courier, Monospace;font-size:10pt;">
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$odetails = <span style="color:#0000ff;">new</span>-<span style="color:#0000ff;">object</span> <span style="color:#0000ff;">object</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ipdetails = $evdetails = New-<span style="color:#2b91af;">Object</span> Runtime.InteropServices.VariantWrapper($odetails)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$retval = $oismgr.GetIntegrationPacks($Handle, [<span style="color:#0000ff;">ref</span>]$ipdetails)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output = [XML]$ipdetails<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output.OuterXml</div>
</div>
</div>
</blockquote>
<p>上述代码将生成类似于以下的 XML（我编排了其格式，以便于您查看）：</p>
<blockquote>
<div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2e3b6506-b129-4f3e-8cec-21e5fc19b264" style="margin:0px;display:inline;float:none;padding:0px;">
<div style="border:#000080 1px solid;color:#000;font-family:&#39;Courier New&#39;, Courier, Monospace;font-size:10pt;">
<div style="background-color:#ffffff;overflow:auto;padding:2px 5px;white-space:nowrap;"><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">IntegrationPacks</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">IntegrationPack</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">UniqueID</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">string</span>&quot;<span style="color:#0000ff;">&gt;{</span>12A45CB8-39DE-43A7-8FA2-E90379A5091F}<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">UniqueID</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Name</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">string</span>&quot;<span style="color:#0000ff;">&gt;</span>System Center Integration Pack for Microsoft .NET Framework Activities<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Name</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Description</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">string</span>&quot;<span style="color:#0000ff;">&gt;</span>Activities for Orchestrator Integration Toolkit for Microsoft .NET<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Description</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Version</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">int64</span>&quot;<span style="color:#0000ff;">&gt;</span>7<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Version</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">Library</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">string</span>&quot;<span style="color:#0000ff;">&gt;</span>Microsoft.SystemCenter.Orchestrator.Integration.Toolkit.IP.ServerExtension.dll<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">Library</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">ProductName</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">string</span>&quot;<span style="color:#0000ff;">&gt;{</span>12A45CB8-39DE-43a7-8FA2-E90379A5091F}.OIP<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ProductName</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color:#a31515;">ProductID</span><span style="color:#ff0000;">datatype</span><span style="color:#0000ff;">=</span>&quot;<span style="color:#0000ff;">string</span>&quot;<span style="color:#0000ff;">&gt;{</span>E88EF9F3-448F-49DC-BF02-2C93BFC8BB29}<span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">ProductID</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&nbsp;&nbsp;&lt;/</span><span style="color:#a31515;">IntegrationPack</span><span style="color:#0000ff;">&gt;</span><br /> <span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">IntegrationPacks</span><span style="color:#0000ff;">&gt;</span></div>
</div>
</div>
</blockquote>
<p>正如您可看到的，获得这些信息将十分容易。实际上，我编写了一个 PowerShell 脚本，该脚本可在您将其导入之前验证 Runbook，以确保 Runbook 中所含的活动实际上已安装，并作为 IP 中的一部分，从而您无需导入 Runbook，并获得不必要的&ldquo;未知&rdquo;活动。&hellip;</p>
<p>今后我将继续这一博文系列，向您介绍有关如何在 COM 界面中使用更多方法的信息。希望您届时您能享受编码的过程！:)</p>
<!-- title: "通过 COM 从 Orchestrator 中获得更深入的信息" --></div>]]></content:encoded>
    </item>
    <item>
      <title>创建无需排队的单实例 Runbook</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/runbook-4</link>
      <pubDate>Wed, 25 Mar 2015 19:22:45 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/03/25/runbook-4/</guid>
      <description><![CDATA[Orchestrator 的一个妙处是它可以自动处理 Runbook 的多实例线程，或者根据您的需要将它们排队。例如，您可以将处理新用户的 Runbook 添加到 Active...]]></description>
      <content:encoded><![CDATA[<div class="PostContent">
<p>Orchestrator 的一个妙处是它可以自动处理 Runbook 的多实例线程，或者根据您的需要将它们排队。例如，您可以将处理新用户的 Runbook 添加到 Active Directory，对于大公司而言，可能存在多个并发请求，因此可能需要运行 Runbook 的多个实例。或者，您可能有一个更改系统的事务类型的流程，并希望确保在多个用户请求更改时将这些请求排队并按顺序运行，以避免相互之间发生潜在冲突。通过 Runbook 的&ldquo;属性&rdquo;对话框中的&ldquo;作业并发&rdquo;选项卡可以轻松控制此 Runbook 行为：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/4375.image_6DEF79AC.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/4375.image_5F00_6DEF79AC.png"><img width="610" height="411" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/1050.image_thumb_3B8BA62D.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/1050.image_5F00_thumb_5F00_3B8BA62D.png" border="0" /></a></p>
<p>默认情况下，该值设置为 1，这意味着一个 Runbook 将运行一个实例，并将所有其他请求排队。如果希望增加此数字，以允许多个并发实例，只需将该数字调大一些即可。相当容易，不是吗？</p>
<p>但是，如果您有一些作业需要作为单一实例运行，但希望在当前作业完成之前忽略所有其他请求，应该怎么办？此情况的一个示例是云服务的自动横向扩展。让我们假定您在使用 Operations Manager 监视一个服务，一个性能警报触发一个 Runbook，开始横向扩展该服务。该横向扩展进程可能需要一些时间，并且在该进程完成之后可能还需要一段时间，以使性能平均数下降到一个可接受的范围（我们称其为&ldquo;冷却&rdquo;期间）。无论出于何种原因，都可能会再次触发警报，告诉 Orchestrator 纵向扩展该服务。如果已经有一个 Runbook 正在纵向扩展该服务，您不希望接受任何其他请求，当然也不希望只是将它们排队。您知道您只是想忽略或丢弃任何请求，直到此 Runbook 完成之后为止。那么如何处理此情况？</p>
<p><strong>注意：</strong>与任何示例一样，我向您展示的是一个相对简单的视图，在现实世界中，您拥有的可能是一些更为详细的逻辑。不过，我认为通过这个基本示例可以学到这种理念，并在自己的环境中根据情况举一反三。</p>
<p>首先，创建一个新的 Runbook。现在，如果希望避免将 Runbook 作业的请求排队，我们首先需要做的是增加同步作业的数量。在上面所示的对话框中，我们将该数字增加到了 10（这样，如果后续请求快速连发，我们可以处理它们而无需排队）。</p>
<p>接下来，将&ldquo;初始化数据&rdquo;活动和&ldquo;查询数据库&rdquo;活动拖放到 Runbook 并将它们链接起来。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/0564.image_346C69B5.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/0564.image_5F00_346C69B5.png"><img width="168" height="94" style="background-image:none;margin:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/8081.image_thumb_2942DF6B.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/8081.image_5F00_thumb_5F00_2942DF6B.png" border="0" /></a></p>
<p>我们在这里完成的工作基本上是，在 Orchestrator 数据库中查询包含此 Runbook 中&ldquo;初始化数据&rdquo;活动的活动 ID 的任何活动作业 (TimeEnded = NULL)。但是我们需要采取迂回的办法完成此工作。在运行时我们无法访问 Runbook 的 ID，因此我们需要使用连接两个表的查询从活动 ID 中推测该 ID，如下图所示：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/2627.image_6D1713C2.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/2627.image_5F00_6D1713C2.png"><img width="610" height="410" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/2211.image_thumb_28D6AC76.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/2211.image_5F00_thumb_5F00_28D6AC76.png" border="0" /></a></p>
<p>您可能会注意到，查询中执行了一些奇怪的字符串替换。此问题是由于每个活动的活动 ID 属性都格式化为带花括号的 GUID 形式，如下所示：</p>
<blockquote>
<p><span style="font-family:Courier New;">{5AC4D430-BF24-4E70-B117-C3ABB69A06F5}</span></p>
</blockquote>
<p>不过，数据库中的数据格式不带花括号，因此需要重新格式化 ID 以剥离花括号。幸运的是，SQL 提供了一些格式化字符串的简单方法，因此我们不必在这两个活动之间放置其他活动来转换字符串。</p>
<p>我要再向 Runbook 添加一些其他活动，以便它可以执行一些操作。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/3782.image_6CAAE0CD.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/3782.image_5F00_6CAAE0CD.png"><img width="407" height="198" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/1638.image_thumb_4C8FD410.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/1638.image_5F00_thumb_5F00_4C8FD410.png" border="0" /></a></p>
<p>我在其中放置了一个&ldquo;sleep&rdquo;（休眠）活动，以保持该作业运行 60 秒，与此同时我激活更多实例来测试此功能。我还添加了一个&ldquo;发送平台事件&rdquo;活动，以便在故意丢弃新作业时我可以得到通知。我还从 Query Database 活动中修改了链接条件，以相应地路由进程流。对于指向 [Sleep 60]（休眠 60 秒）活动（以及指向&ldquo;real&rdquo;Runbook 的操作部分）的链接，我将链接条件设置为：如果此 Runbook 只有一个正在运行的实例（包括此 Runbook），则执行操作。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/8585.image_2C74C753.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/8585.image_5F00_2C74C753.png"><img width="610" height="411" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/3617.image_thumb_0C59BA96.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/3617.image_5F00_thumb_5F00_0C59BA96.png" border="0" /></a></p>
<p>对于&ldquo;发送平台事件&rdquo;活动链接，我将其设置为：如果存在此 Runbook 的多个最新实例，则执行此路由。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/6825.image_40FA16D1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/6825.image_5F00_40FA16D1.png"><img width="610" height="411" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/8156.image_thumb_47AD2054.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/8156.image_5F00_thumb_5F00_47AD2054.png" border="0" /></a></p>
<p>在 Runbook 中检查之后，我切换到 Orchestration 控制台并浏览到该 Runbook。然后在&ldquo;操作&rdquo;窗格上，我单击&ldquo;启动 Runbook&rdquo;，然后单击&ldquo;开始&rdquo;按钮，重复了几遍同样的操作。在刷新视图之后，可以看到我的原始实例仍在运行，但我启动的其他两个实例已经完成。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/2211.image_0B8154AC.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/2211.image_5F00_0B8154AC.png"><img width="660" height="108" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/8562.image_thumb_79388DE9.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/8562.image_5F00_thumb_5F00_79388DE9.png" border="0" /></a></p>
<p>在左窗格中单击&ldquo;事件&rdquo;，可以看到早先完成的两个 Runbook 生成了预期的事件。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/2318.image_2006A42A.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/2318.image_5F00_2006A42A.png"><img width="805" height="88" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/7870.image_thumb_5FD08AAF.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/7870.image_5F00_thumb_5F00_5FD08AAF.png" border="0" /></a></p>
<p>在页面底部，可以看到此消息的描述：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/7802.image_71AD1E7C.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/7802.image_5F00_71AD1E7C.png"><img width="820" height="140" style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/87/95/metablogapi/8463.image_thumb_6A8DE204.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-95-metablogapi/8463.image_5F00_thumb_5F00_6A8DE204.png" border="0" /></a></p>
<p>现在，就我个人而言，如果在 Runbook 的预期完整操作完成之前停止了它，我不一定希望该 Runbook 显示为成功完成。我可能想让它显示为一个警告，以便引起我的注意，而不像事件通知那样（当前每种情况各不相同）。因此，在此情况下，我可以创建一个自定义活动，该活动不执行任何操作，只是从 Runbook 抛出警告，导致该 Runbook 停止并带一个警告状态。我将在以后的博客中提供此代码的示例。</p>
<!-- title: "创建无需排队的单实例 Runbook" --></div>]]></content:encoded>
    </item>
    <item>
      <title>使用Azure HDInsight大数据技术来进行Azure WebSites网站及其他日志文件分析(Log Analysis)</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/azure-hdinsightazure-websiteslo</link>
      <pubDate>Mon, 09 Mar 2015 19:54:17 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/03/09/azure-hdinsightazure-websiteslo/</guid>
      <description><![CDATA[原文地址：http://blogs.technet.com/b/nevin_dongs_blog/archive/2015/03/07/azure-hdinsight-azure-websites-l...]]></description>
      <content:encoded><![CDATA[<p><strong>原文地址：<a href="/b/nevin_dongs_blog/archive/2015/03/07/azure-hdinsight-azure-websites-log-analysis.aspx">http://blogs.technet.com/b/nevin_dongs_blog/archive/2015/03/07/azure-hdinsight-azure-websites-log-analysis.aspx</a></strong></p>
<p>在使用大数据（Big Data）的实际应用场景中，日志文件是一个很重要的数据来源。相比其他数据源，日志信息总在源源不断的产生中，不论是系统或代码中设置好的触发/生成机制，还是系统（例如 Web Server、Database Server等）配置自动生成的日志，甚至包括了系统或应用执行发生异常或错误的情况，例如，<a href="/b/nevin_dongs_blog/archive/2014/08/29/sql-server-azure-vm-alwayson-ha-status-diagnostics.aspx">SQL Server Azure VM上AlwaysOn高可用（HA）方案的运行状态相关的日志</a>。</p>
<p>而日志文件里所潜藏的价值也正被大数据技术所挖掘，透过对于日志文件一些基础数据的统计、挖掘及分析，可以进一步获得很多非常有用的信息，例如，对网站日志的分析，可以获得页面的点击的情况、外部访问的情况、客户端/服务端错误的情况等，从而进一步分析网页运行的健康度、使用率分布、访问者行为等。</p>
<p>在 Azure 中提供了 HDInsight 云服务来帮助大家进行大数据开发工作，可以把相关数据文件存储在 Azure Storage 中，然后利用 HDinsight 节点来对这些数据进行分析。</p>
<p>在 Azure HDInsight 的查询控制台（Query Console）中，最近提供了一些辅助性的解决方案，其中就包括了如何快速、简捷地建立日志文件分析的应用。如下图可在 HDInsight 服务页面的底部进入查询控制台：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image002_6637BF90.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image002_5F00_6637BF90.jpg"><img width="579" height="314" title="clip_image002" style="border:0px currentColor;display:inline;" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image002_thumb_3774979F.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image002_5F00_thumb_5F00_3774979F.jpg" border="0" /></a></p>
<p>在查询控制台可以看到一些解决方案的样例，就包括了对 Azure WebSites 日志文件分析的解决方案，见下图：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image003_7021D25D.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image003_5F00_7021D25D.png"><img width="579" height="271" title="clip_image003" style="border:0px currentColor;display:inline;" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image003_thumb_6179B729.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image003_5F00_thumb_5F00_6179B729.png" border="0" /></a></p>
<p>在搭建和运行Azure WebSites网站时，需要对日志选项进行配置，确保可以根据需要保留网站的运行日志信息，如下图：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image004_67C31E68.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image004_5F00_67C31E68.png"><img width="579" height="276" title="clip_image004" style="border:0px currentColor;display:inline;" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image004_thumb_272362AA.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image004_5F00_thumb_5F00_272362AA.png" border="0" /></a></p>
<p>在查询控制台的日志分析解决方案中，提供了 step-by-step 的执行向导，并提供了详细的解释信息，便于大家了解其中相关的技术细节。如下图：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image005_31E34AB0.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image005_5F00_31E34AB0.png"><img width="579" height="304" title="clip_image005" style="border:0px currentColor;display:inline;" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image005_thumb_1EC4AEB5.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image005_5F00_thumb_5F00_1EC4AEB5.png" border="0" /></a></p>
<p>其中，关键步骤包括了基于日志文件的数据结构，创建 Hive 的表及分区，如下图，解决方案中列出了具体创建过程的语句：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image006_3E09E639.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image006_5F00_3E09E639.png"><img width="575" height="327" title="clip_image006" style="border:0px currentColor;display:inline;" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image006_thumb_78F3A9B3.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image006_5F00_thumb_5F00_78F3A9B3.png" border="0" /></a></p>
<p>解决方案提供了一些常见的分析，并提供了样例程序，可以基于这些代码进行修改，满足自己的需要。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image007_3F06F778.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image007_5F00_3F06F778.png"><img width="571" height="331" title="clip_image007" style="border:0px currentColor;display:inline;" alt="clip_image007" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image007_thumb_1A2DE254.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image007_5F00_thumb_5F00_1A2DE254.png" border="0" /></a></p>
<p>执行结果可以通过 Excel 来展现，并可以利用大家熟悉的工具，例如 PivotChart，来做进一步分析。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image009_53933762.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image009_5F00_53933762.jpg"><img width="574" height="250" title="clip_image009" style="border:0px currentColor;display:inline;" alt="clip_image009" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image009_thumb_253C4266.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image009_5F00_thumb_5F00_253C4266.jpg" border="0" /></a></p>
<p>此外，还可以通过查询控制台，查看任务的输出及执行的Log。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image010_76E54D69.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image010_5F00_76E54D69.png"><img width="572" height="328" title="clip_image010" style="border:0px currentColor;display:inline;" alt="clip_image010" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image010_thumb_55F46B73.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image010_5F00_thumb_5F00_55F46B73.png" border="0" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>中国版SharePoint 应用商店已正式上线</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/sharepoint</link>
      <pubDate>Mon, 02 Mar 2015 23:10:00 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/03/02/sharepoint/</guid>
      <description><![CDATA[&nbsp; &nbsp;...]]></description>
      <content:encoded><![CDATA[<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">&nbsp; &nbsp; &nbsp;&nbsp;中国版SharePoint应用商店已于近日正式上线。SharePoint商店是用户可通过SharePoint&nbsp;网站直接访问、购买第三方开发人员所发布的个人或企业应用程序的公共商城。SharePoint&nbsp;的应用程序是用以执行某项特定任务或满足某项业务需要的独立应用程序，轻便灵活，简单易用。用户可以将免费或付费的应用添加至网站，自定义设置以便使用某些特定功能或显示信息。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">具体购买添加操作请参见以下步骤：</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;"><img style="border:0px currentColor;cursor:default;" alt=" " src="https://support.content.office.net/zh-CN/media/d1f6511e-6ade-472b-bf32-1dbfd4d3cbd9.jpg" /></p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">要将应用程序添加到网站，您必须至少有该网站的完全控制权限。如果您是网站所有者，那么您已经拥有此权限。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">1.&nbsp;&nbsp;&nbsp;&nbsp;在要添加应用程序的网站上，转到&ldquo;<b>设置</b>&rdquo;&nbsp;&gt;&ldquo;<b>添加应用程序</b>&rdquo;。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">2.&nbsp;&nbsp;&nbsp;&nbsp;在&ldquo;您的应用程序&rdquo;页面上，单击左侧导航中的&ldquo;<b>SharePoint&nbsp;</b><b>商店</b>&rdquo;。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">3.&nbsp;&nbsp;&nbsp;&nbsp;使用左侧的&ldquo;类别&rdquo;筛选选定内容，并通过浏览找到所需的应用程序。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">或者，如果您已经知道所需的应用程序的名称或标签，则可以在搜索框中键入该信息并直接进行搜索。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">4.&nbsp;&nbsp;&nbsp;&nbsp;单击您要添加的应用程序。单击&ldquo;<b>详细信息</b>&rdquo;或&ldquo;<b>评论</b>&rdquo;以了解有关应用程序的更多信息。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">5.&nbsp;&nbsp;&nbsp;&nbsp;如果您要购买此应用程序，请使用价格下的下拉列表来指定您是要购买该应用程序以供自己使用还是供多位用户使用。如果需要，请指定要购买的用户许可证数量。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">6.&nbsp;&nbsp;&nbsp;&nbsp;要购买应用程序，请单击&ldquo;<b>购买</b>&rdquo;。（如果它是一个免费应用程序，则单击&ldquo;<b>添加</b>&rdquo;。）</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">7.&nbsp;&nbsp;&nbsp;&nbsp;按照相应步骤使用您的&nbsp;<a href="http://windows.microsoft.com/zh-cn/windows-live/sign-up-create-account-how" target="_blank">Microsoft&nbsp;帐户</a>登录以购买应用程序。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">8.&nbsp;&nbsp;&nbsp;&nbsp;当系统询问您是否要信任该应用程序时，请查看来自应用程序开发商的条款和条件以及隐私声明，然后单击&ldquo;<b>信任它</b>&rdquo;。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">9.&nbsp;&nbsp;&nbsp;&nbsp;应用程序现在将显示在&ldquo;网站内容&rdquo;页面上。您可以通过在&ldquo;网站内容&rdquo;页面上单击该应用程序进行访问，这将使您转到该应用程序。</p>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">扩展知识：</p>
<p><a href="http://windows.microsoft.com/zh-cn/windows-live/sign-up-create-account-how" target="_blank">Microsoft&nbsp;帐户</a>并不等同于工作或学校帐户，如果您还没有&nbsp;Microsoft&nbsp;帐户，则可以<a href="http://windows.microsoft.com/zh-cn/windows-live/sign-up-create-account-how" target="_blank">注册一个</a>。</p>
<ul style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">
<li>SharePoint&nbsp;商店中的部分应用程序是免费的，其他应用程序可供购买。</li>
<li>即使管理员并未将您的网站配置为允许用户购买应用程序，您仍然可以请求购买应用程序。您的组织中负责管理应用程序目录网站的人员可以批准或拒绝购买应用程序的请求。</li>
</ul>
<p style="color:#000000;text-transform:none;text-indent:0px;letter-spacing:normal;white-space:normal;">注：Office&nbsp;和&nbsp;SharePoint&nbsp;应用商店是可选服务，由&nbsp;Microsoft Corporation&nbsp;或其分支机构从&nbsp;Microsoft&nbsp;分布在全球的任一设施运营。应用商店中提供的应用由各种应用发布者提供，受应用发布者的条款和条件以及隐私声明的约束。您使用其中的任何应用可能会导致您的数据被传输到应用发布者、其分支机构或服务提供商维护设施所在的国家/地区，或者在那里存储或处理。特定应用和支付方式的可用性取决于您所在的地区和服务。下载和使用此类应用之前，请仔细阅读应用发布者的条款和条件以及隐私声明。</p>]]></content:encoded>
    </item>
    <item>
      <title>Azure 中的多个 VM NIC 和网络虚拟设备</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/azure-vm-nic</link>
      <pubDate>Thu, 12 Feb 2015 19:12:50 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/02/12/azure-vm-nic/</guid>
      <description><![CDATA[原文地址：http://azure.microsoft.com/blog/2014/10/30/multiple-vm-nics-and-network-virtual-appliances-in-a...]]></description>
      <content:encoded><![CDATA[<p><strong><span lang="zh-CHS">原文地址：<a href="http://azure.microsoft.com/blog/2014/10/30/multiple-vm-nics-and-network-virtual-appliances-in-azure/">http://azure.microsoft.com/blog/2014/10/30/multiple-vm-nics-and-network-virtual-appliances-in-azure/</a></span></strong></p>
<p><span lang="zh-CHS">在</span><span lang="zh-CHS">2014</span><span lang="zh-CHS">年欧洲 </span><span lang="zh-CHS">TechEd </span><span lang="zh-CHS">大会上，我们宣布了在 </span><span lang="zh-CHS">Azure VM </span><span lang="zh-CHS">中为多个网络接口</span><span lang="zh-CHS">(NIC)</span><span lang="zh-CHS">提供支持，并与多家重要厂商合作，在 </span><span lang="zh-CHS">Azure </span><span lang="zh-CHS">中引入了网络虚拟设备，其中最引人注目的是 </span><span lang="zh-CHS">Citrix Netscaler </span><span lang="zh-CHS">和 </span><span lang="zh-CHS">Riverbed </span><span lang="zh-CHS">设备。</span><span lang="zh-CHS">很多网络虚拟设备都要求使用多个</span><span lang="zh-CHS"> NIC </span><span lang="zh-CHS">。</span><span lang="zh-CHS">现在您可以在</span><span lang="zh-CHS"> Azure VM 中创建多个 NIC</span><span lang="zh-CHS">。</span><span lang="zh-CHS">借助多个</span> NIC<span lang="zh-CHS">，您可以更好地管理网络流量。</span><span lang="zh-CHS">您也可以将前端</span><span lang="zh-CHS"> NIC 和后端 NIC </span><span lang="zh-CHS">之间的流量隔离开来，或者将数据层通信与管理层通信分开。</span><span lang="zh-CHS">以下是含有</span><span lang="zh-CHS"> 3 个 NIC 的 VM 示例：</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/2541.ss.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/2541.ss.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/2541.ss.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/2541.ss.png" border="0" /></a></p>
<p><span lang="zh-CHS"><b>如何创建含有多个</b></span><span lang="zh-CHS"><b> NIC </b></span><span lang="zh-CHS"><b>的</b></span><span lang="zh-CHS"><b> VM </b></span></p>
<p><span lang="zh-CHS">以下说明将帮助您创建一个含有</span><span lang="zh-CHS">3</span><span lang="zh-CHS">个</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">的</span><span lang="zh-CHS">VM</span><span lang="zh-CHS">：默认</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">和两个额外的</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">。</span><span lang="zh-CHS">配置步骤中使用包含</span><span lang="zh-CHS"> 3 个子网的虚拟网络：Frontend(10.1.0.0/24)、Midtier (10.1.1.0/24) 和</span><span lang="zh-CHS"> Backend(</span><span lang="zh-CHS">10.1.2.0/24)</span><span lang="zh-CHS">，虚拟网络名称为 &ldquo;ThreeTier-VNet&rdquo;，如下所示：</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/1050.ss.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/1050.ss.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/1050.ss.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/1050.ss.png" border="0" /></a></p>
<p>&nbsp;</p>
<p><span lang="zh-CHS">以下配置</span><span lang="zh-CHS">cmdlet</span><span lang="zh-CHS">使用最新的</span><span lang="zh-CHS">Azure PowerShell</span><span lang="zh-CHS">版本。</span><span lang="zh-CHS">请按</span><span lang="zh-CHS"><a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.windowsazure.com%2Fdocumentation%2Farticles%2Finstall-configure-powershell%2F" target="_top">此处</a>的说明下载和配置 Azure PowerShell</span>。<span></span></p>
<p lang="zh-CHS">1. 从 Azure VM 影像库中选择一个 VM 映像 ：</p>
<p>$image = Get-AzureVMImage -ImageName &quot;a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201408.01-en.us-127GB.vhd&quot;</p>
<p lang="zh-CHS">2. 创建 Azure VM 配置和默认管理员登录：</p>
<p><span lang="zh-CHS">$vm = New-AzureVMConfig -Name &quot;MultiNicVM&quot; -InstanceSize &quot;ExtraLarge&quot; -Image $image.</span><span lang="zh-CHS">ImageName &ndash;AvailabilitySetName &ldquo;MyAVSet&rdquo;</span></p>
<p>Add-AzureProvisioningConfig &ndash;VM $vm -Windows -AdminUserName &ldquo;&lt;YourAdminUID&gt;&rdquo; -Password &ldquo;&lt;YourAdminPassword&gt;&rdquo;</p>
<p><span lang="zh-CHS">3. 指定默认 NIC 的子网和 IP </span><span lang="zh-CHS">地址。</span><span lang="zh-CHS">请注意，</span>SubnetNames <span lang="zh-CHS">参数必须是虚拟网络中某个子网的名称。</span><span lang="zh-CHS">本例中，我们使用</span> Frontend 子网。<span></span></p>
<p>Set-AzureSubnet -SubnetNames &quot;Frontend&quot; -VM $vm</p>
<p>Set-AzureStaticVNetIP -IPAddress &quot;10.1.0.10&quot; -VM $vm</p>
<p><span lang="zh-CHS">4. 为 VM 配置添加额外的 NIC</span><span lang="zh-CHS">。</span><span lang="zh-CHS">与第</span><span lang="zh-CHS"> 3步类似，SubnetName 和StaticVNetIPAddress </span><span lang="zh-CHS">必须与虚拟网络的子网定义相对应。</span><span lang="zh-CHS">接口名称对于</span><span lang="zh-CHS"> VM 必须是唯一的，但并不代表 VM 中 NIC </span>的名称。<span></span></p>
<p>Add-AzureNetworkInterfaceConfig -Name &quot;NIC1&quot; -SubnetName &quot;Midtier&quot; -StaticVNetIPAddress &quot;10.1.1.11&quot; -VM $vm</p>
<p>Add-AzureNetworkInterfaceConfig -Name &quot;NIC2&quot; -SubnetName &quot;Backend&quot; -StaticVNetIPAddress &quot;10.1.2.22&quot; -VM $vm</p>
<p><span lang="zh-CHS">5. 执行完上述步骤后，即已准备好创建 VM</span><span lang="zh-CHS">。</span><span lang="zh-CHS">下面您将需要在虚拟网络中创建一个包含以上所用子网名称和</span><span lang="zh-CHS"> IP 地址的 VM</span>。<span></span></p>
<p>New-AzureVM -ServiceName &quot;MultiNIC-CS&quot; &ndash;VNetName &ldquo;ThreeTier-VNet&rdquo; &ndash;VM $vm</p>
<p><span lang="zh-CHS"><b>关于多个</b></span><span lang="zh-CHS"><b> NIC </b></span><span lang="zh-CHS"><b>的功能的常见问题解答和限制</b></span></p>
<p><span lang="zh-CHS">当前版本的多个</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">功能具有以下要求和限制：</span></p>
<p>1. 该功能是已经正式发布还是处于预览阶段？<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;已经正式发布</p>
<p><span lang="zh-CHS">2. 哪些区域将提供多个 NIC </span><span lang="zh-CHS">功能？</span><span lang="zh-CHS">如果不是所有区域都提供该功能，其余区域的情况如何？</span><span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">客户现在可以使用多个</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">创建</span><span lang="zh-CHS">VM</span><span lang="zh-CHS">。</span><span lang="zh-CHS">该功能将首先在北欧地区提供，未来几周内将逐步扩展到所有</span>Azure <span lang="zh-CHS">区域。</span><span lang="zh-CHS">有关发布更新，请参阅</span><a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fazure.microsoft.com%2Fzh-tw%2Fupdates%2F%3Fservice%3Dvirtual-network" target="_top">此处。</a><span></span></span></p>
<p><span lang="zh-CHS">3. 多个 NIC </span>功能的定价如何？<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">没有额外费用，虽然</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">的数量是与</span><span lang="zh-CHS">VM SKU</span>相关联的。<span></span></span></p>
<p><span lang="zh-CHS">4. 我是否可以在 Linux、FreeBSD 和其他非 Windows OS 影像中使用多个 NIC </span>功能？<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">除基本</span><span lang="zh-CHS">SKU</span><span lang="zh-CHS">之外，其他任何</span><span lang="zh-CHS">Azure VM</span><span lang="zh-CHS">都支持多个</span><span lang="zh-CHS">NIC</span>。<span></span></span></p>
<p><span lang="zh-CHS">5. 我可以创建多少个 NIC</span>？<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">大型</span><span lang="zh-CHS">(A3)</span><span lang="zh-CHS">和</span><span lang="zh-CHS">A6</span><span lang="zh-CHS">：</span><span lang="zh-CHS">2</span><span lang="zh-CHS">个</span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">超大型</span><span lang="zh-CHS">(A4)</span><span lang="zh-CHS">和</span><span lang="zh-CHS">A7</span><span lang="zh-CHS">：</span><span lang="zh-CHS">4</span><span lang="zh-CHS">个</span></span></p>
<p><span>&middot; </span><span lang="zh-CHS">A9</span><span lang="zh-CHS">：2 个</span></p>
<p><span>&middot; </span><span lang="zh-CHS">D3</span><span lang="zh-CHS">：2 个</span></p>
<p><span>&middot; </span><span lang="zh-CHS">D4</span><span lang="zh-CHS">：4 个</span></p>
<p><span>&middot; </span><span lang="zh-CHS">D13</span><span lang="zh-CHS">：4 个</span></p>
<p>6. 该功能是否存在客户必须要知道的限制？<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">多个</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">的功能仅在</span><span lang="zh-CHS">Azure VM</span><span lang="zh-CHS">（</span><span lang="zh-CHS">IaaS</span><span lang="zh-CHS">、标准</span><span lang="zh-CHS">SKU</span><span lang="zh-CHS">）上受支持；</span><span lang="zh-CHS">VM</span><span lang="zh-CHS">必须位于</span><span lang="zh-CHS">Azure</span>虚拟网络中。<span></span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">当前版本不支持在</span><span lang="zh-CHS">VM</span><span lang="zh-CHS">创建后添加或删除</span><span lang="zh-CHS">NIC</span>。<span></span></span></p>
<p><span>&middot; </span><span lang="zh-CHS">Azure VM </span><span lang="zh-CHS">中的 NIC 无法转发流量，也不能作为第 3 层 (IP) </span>网关使用。<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">面向</span><span lang="zh-CHS">Internet</span><span lang="zh-CHS">的</span><span lang="zh-CHS">VIP</span><span lang="zh-CHS">仅在</span><span lang="zh-CHS">&ldquo;</span><span lang="zh-CHS">默认</span><span lang="zh-CHS">&rdquo;</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">上受支持，并且只有一个</span><span lang="zh-CHS">VIP</span><span lang="zh-CHS">会映像到默认</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">的</span><span lang="zh-CHS">IP</span><span lang="zh-CHS">。</span><span lang="zh-CHS">额外的</span> NIC 无法在负载平衡集中使用。<span></span></span></p>
<p><span>&middot; </span><span lang="zh-CHS">VM </span><span lang="zh-CHS">中 NIC 的顺序是随机的，但是 IP 地址和对应的 MAC </span>将保持不变。<span></span></p>
<p>&middot;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">您无法将网络安全组或强制隧道应用到非默认</span><span lang="zh-CHS">NIC</span><span lang="zh-CHS">。</span><span lang="zh-CHS">我们已在规划增加此项支持。</span><span></span></span></p>
<p><span lang="zh-CHS"><b>Azure </b></span><span lang="zh-CHS"><b>中的虚拟设备</b></span><span lang="zh-CHS"><b> </b> <b>&ndash; </b> <b> Citrix </b> <b>和</b> <b> Riverbed </b></span></p>
<p><span lang="zh-CHS">我们正在与多家网络设备供货商一起努力，将他们的虚拟机设备加入到</span><span lang="zh-CHS">Azure</span><span lang="zh-CHS">中。</span><span lang="zh-CHS">在</span><span lang="zh-CHS"> TechEd 大会上，我们进行了有关 Citrix Netscaler 和 Riverbed Steelhead </span><span lang="zh-CHS">的展示。</span><span lang="zh-CHS">我们将不断改进该平台，为更多第三方虚拟设备提供支持。</span><span lang="zh-CHS">除了多个</span><span lang="zh-CHS"> NIC 之外，我们还成功实现了 NIC 的以太网 (MAC) 地址在 VM </span><span lang="zh-CHS">整个生命周期中保持不变。</span><span lang="zh-CHS">这样就可以为那些依赖于</span> MAC 地址进行许可颁发的设备提供说明。<span></span></p>
<p><span lang="zh-CHS">以下是有关这次欧洲</span><span lang="zh-CHS">TechEd</span>大会展示的更多详细信息。<span></span></p>
<p><span lang="zh-CHS">1. 我们展示了一个可以在 Azure 中正常工作的 Citrix Netscaler 原型，该展示中使用了 2 个 NIC 并且</span><span lang="zh-CHS">MAC</span>保持不变。<span></span></p>
<p><span lang="zh-CHS">2. 我们和 Riverbed 一起创建了一个使用内部部署 SteelHead 的展示，此外，我们还创建在 Azure 中使用</span><span> </span><span lang="zh-CHS">SteelHead </span><span lang="zh-CHS">进行 WAN 优化的展示，说明如何将 WAN 优化与 Azure Site Recovery 和</span> ExpressRoute 相结合。<span></span></p>
<p><span lang="zh-CHS">Riverbed</span><span lang="zh-CHS">现已可用。</span><span lang="zh-CHS">我们将在</span>Azure 认证计划中增加网络合作伙伴的数量，敬请关注。<span></span></p>
<p><span lang="zh-CHS">让</span><span lang="zh-CHS">Azure</span><span lang="zh-CHS">网络平台为虚拟设备做好准备只是开始，在</span><span lang="zh-CHS">Azure</span>平台改进和虚拟设备合作方面，我们依然任重道远！</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Migration Accelerator简介</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/microsoft-migration-accelerator</link>
      <pubDate>Wed, 04 Feb 2015 01:43:17 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/02/04/microsoft-migration-accelerator/</guid>
      <description><![CDATA[原文地址：http://azure.microsoft.com/blog/2014/09/04/introducing-microsoft-migration-accelerator/
我怀着无比激...]]></description>
      <content:encoded><![CDATA[<p><strong>原文地址：<a href="http://azure.microsoft.com/blog/2014/09/04/introducing-microsoft-migration-accelerator/">http://azure.microsoft.com/blog/2014/09/04/introducing-microsoft-migration-accelerator/</a></strong></p>
<p>我怀着无比激动的心情宣布 Azure Migration Accelerator (MA) 限量预览版上线。MA由<a href="http://blogs.microsoft.com/blog/2014/07/11/microsoft-acquires-inmage-better-business-continuity-with-azure/">InMage 收购</a>技术衍生而来，旨在将物理、VMware、Amazon Web Services 和Microsoft Hyper-V工作负载无缝迁移至Azure。它会自动执行迁移操作的各个方面，包括发现源工作负载、远程代理安装、网络适应性和端点配置。有了MA，能够降低迁移项目的成本和风险。</p>
<p>MA 通过提供以下优势改变了云迁移范式：</p>
<ul>
<li><strong>异构性</strong>：您可以通过 MA 迁移各种平台（如VMware、Microsoft Hyper-V、Amazon Web Services和/或环境中的物理服务器）上运行的工作负载。MA 可支持Windows Server 2008 R2 sp1、Windows Server 2012 和 Windows Server 2012 R2操作系统上运行的工作负载。</li>
<li><strong>简单的自动化迁移</strong>：MA门户允许您从云中远程自动发现企业工作负载。只需单击几次，即可配置端到端迁移场景。MA允许您在云中测试工作负载，并且不会影响现有的本地生产工作负载，从而在执行直接转换之前验证工作负载功能性。</li>
<li><strong>迁移多层应用程序</strong>：让MA引以为豪的是，它不仅可以迁移多层生产系统，还能在各层实现应用程序级一致性。这样可确保多层应用程序在Azure中的运行模式与在来源中的运行模式完全相同。甚至可以遵循应用程序启动顺序，并且无需任何手动配置。</li>
<li><strong>持续复制，最低直接转换时间</strong>：MA for Azure提供了全系统复制，包括操作系统和应用程序数据。这种持续复制和内存更改跟踪功能可将直接转换时间缩短至短短几分钟，最大限度地降低了对生产工作负载的影响。</li>
</ul>
<h2>MA 的工作原理</h2>
<p>MA 运用多个组件安排迁移项目，如下图所示：</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MArch.png"><img width="470" height="253" title="MArch" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MArch" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MArch_thumb.png" border="0" /></a></p>
<ol>
<li>移动性服务：这是源服务器（本地物理或虚拟服务器）上的轻型（基于来宾机）集中部署代理。负责实时捕获数据，并将所选的源服务器卷同步到目标服务器。</li>
<li>流程服务器 (PS)：本地物理或虚拟服务器。促进简化移动性服务与Azure内部的目标虚拟机之间的通信。提供缓存、队列、压缩、加密和带宽管理。</li>
<li>主要目标(MT)：复制本地服务器磁盘的目标。安装于Azure订阅的专用Azure VM中。磁盘与 MT 相连以维护重复的副本。</li>
<li>配置服务器 (CS)：管理主要目标与 MA 门户之间的通信。安装于Azure订阅的专用Azure VM中。在CS 与MA门户之间进行定期同步。</li>
<li>MA 门户：用于发现、配置保护以及将本地工作负载迁移到 Azure的多租户门户。</li>
</ol>
<p>MA自动执行将企业内部源工作负载迁移到Azure云所需的各项关键流程。它可以发现ESX/Hyper-V、AWS或物理服务器中运行的本地工作负载。系统运用与MA门户相连的流程服务器发现工作负载。MA门户中将会列出发现的实例，如下所示：</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMADisc.png"><img width="398" height="321" title="MMADisc" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MMADisc" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMADisc_thumb.png" border="0" /></a></p>
<p>您可以从发现的工作负载列表中选择特定的实例进行迁移。接下来，在源服务器上安装移动性服务（代理）。此操作可使用MA门户远程安排，只需选择Install Mobility Service选项，如下所示：</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAinstallagent.png"><img width="397" height="156" title="MMAinstallagent" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MMAinstallagent" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAinstallagent_thumb.png" border="0" /></a></p>
<p>安装移动性服务后，您可以选择Protect选项，为所选的服务器配置复制。MA使用从受保护的源服务器的发现进程收集的配置信息，来确定并配置Azure环境的最佳规模。此外，还会在主要目标上配置目标VHD。设置复制后，随即开始将本地服务器磁盘同步到Azure云中的目标VHD。</p>
<p>现在，您已经配置初始同步，等待初始复制完成。完成初始复制后，从Cloud Services菜单中选择Migration选项。</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAmigrate.png"><img width="396" height="207" title="MMAmigrate" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MMAmigrate" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAmigrate_thumb.png" border="0" /></a></p>
<p>从Protected Application下显示的受保护服务器列表中，选择要迁移的保护计划。</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAprotect.png"><img width="403" height="283" title="MMAprotect" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MMAprotect" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAprotect_thumb.png" border="0" /></a></p>
<p>选择保护计划后，它将显示在 Migration &gt; Selected Hosts下。单击Migrate 以启动迁移流程。</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAcutover.png"><img width="405" height="129" title="MMAcutover" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MMAcutover" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAcutover_thumb.png" border="0" /></a></p>
<p>现在，您可以在Migration Scenarios &gt; Migration Status下监控迁移进度。</p>
<p><a style="color:#00abec;text-transform:none;text-indent:0px;letter-spacing:normal;text-decoration:none;white-space:normal;background-color:#ffffff;" href="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAstatus.png"><img width="409" height="163" title="MMAstatus" style="margin:0px 0px 1.5em;border:0px currentColor;height:auto;padding-top:0px;padding-right:0px;padding-left:0px;vertical-align:middle;display:inline-block;" alt="MMAstatus" src="http://acom.azurecomcdn.net/80C57D/blogmedia/blogmedia/2014/08/MMAstatus_thumb.png" border="0" /></a></p>
<p>成功迁移后，将在Azure云中创建虚拟机。现在，您可以登录迁移后的虚拟机，验证云中运行的实例是否与您的源服务器完全相同。</p>
<h2>小结</h2>
<p>总而言之，MA实现了前所未有的自动化水平，可以将异构资产无缝迁移到Azure。</p>
<p>关键要点：</p>
<ul>
<li>自动资产发现和迁移－－MA 门户安排从单一管理平台发现和迁移工作负载。</li>
<li>在几分钟内迁移到Azure －－持续复制和内存更改跟踪大大缩短了直接转换时间。</li>
<li>自动配置目标 Azure VM－－目标虚拟机在同步期间处于休眠状态以节约计算成本并在直接转换期间自动配置。</li>
<li>异构平台支持－－支持范围广泛的环境和平台。</li>
<li>持续复制－－源服务器上的轻型代理将各种更改持续复制到目标，确保迁移期间实现近零停机时间。</li>
<li>多层应用程序支持－－迁移多层生产系统，并在各层之间实现应用程序级一致性。</li>
<li>目标虚拟机网络和端点适配－－支持自动网络适配和端点重配置。</li>
<li>综合压缩、加密和带宽管理。</li>
</ul>
<p>要开始使用，请访问<a href="https://aka.ms/malanding">Microsoft Migration Accelerator</a>并注册预览版。</p>]]></content:encoded>
    </item>
    <item>
      <title>如何写出高效能TSQL - 关于索引不可不知道的事</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/tsql</link>
      <pubDate>Mon, 26 Jan 2015 19:47:12 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/01/26/tsql/</guid>
      <description><![CDATA[原文地址：http://blogs.technet.com/b/technet_taiwan/archive/2015/01/23/tsql-series-0123.aspx
本文将分成五大单元，分...]]></description>
      <content:encoded><![CDATA[<p><b>原文地址：<a href="/b/technet_taiwan/archive/2015/01/23/tsql-series-0123.aspx">http://blogs.technet.com/b/technet_taiwan/archive/2015/01/23/tsql-series-0123.aspx</a></b></p>
<p><b>本文将分成五大单元，分别带您了解：</b></p>
<p><b><a href="#a">索引简介</a></b></p>
<p><b><a href="#b">索引基本知识</a></b></p>
<p><b><a href="#c">索引类型介绍</a></b></p>
<p><b><a href="#d">索引设计注意事项</a></b></p>
<p><b><a href="#e">进阶推荐</a></b></p>
<p><b>&nbsp;</b></p>
<div align="center"><hr align="center" /></div>
<p id="a"><b>简介</b></p>
<p><span lang="zh-CHS">TSQL</span><span lang="zh-CHS">是查询</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">的核心，而索引则是提高查询效能的主角，如要写出高效能</span><span lang="zh-CHS">TSQL</span><span lang="zh-CHS">则无可避免需搭配正确索引，因为</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">需透过正确索引才可以快速有效地找到与索引键值相关数据，有了正确索引</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">就不需要扫描数据页</span><span lang="zh-CHS">(data page)</span><span lang="zh-CHS">上每一笔数据，而在众多查询效能调校技术中，透过建立并设计正确索引算是最基本的手法</span><span lang="zh-CHS"> (通常来说也是最有效、最快能看到效果的)</span><span lang="zh-CHS">，所以了解索引观念和特性，可以帮助我们在开发阶段设计规划正确索引，而且我们认为不管是开发人员或</span><span lang="zh-CHS">DBA</span><span lang="zh-CHS">都应该了解索引该如何设计，因为都有可能接收用户最直接的感受，说白话一点，每一句查询</span><span lang="zh-CHS">TSQL</span><span lang="zh-CHS">都要以最短时间响应给用户。</span><span lang="zh-CHS">但由于索引主题范围庞大，所以一开始我们会介绍索引基本知识、</span>B-tree 结构等，后面介绍索引类型、案例分享及设计须注意的方向，主要是希望透过本文可以让大家快速建立正确索引。<span></span></p>
<p>&nbsp;</p>
<p id="b"><b>索引基本知识</b></p>
<p><span lang="zh-CHS"><b><span style="text-decoration:underline;">SQL Server </span> </b></span><span lang="zh-CHS"><b> <span style="text-decoration:underline;">如何使用索引</span> </b></span></p>
<p><span lang="zh-CHS">我们都知道索引可以提高查询效能，但相对也增加新增</span><span lang="zh-CHS">(Insert)</span><span lang="zh-CHS">、删除</span><span lang="zh-CHS">(Delete)</span><span lang="zh-CHS">和更新</span><span lang="zh-CHS">(Update)</span>数据处理成本，所以对整体效能来说找一个合适平衡点相当重要。<span></span></p>
<p><span lang="zh-CHS">当一个数据表没有索引时，数据存放的顺序绝不是依照数据新增顺序，这是因为</span><span lang="zh-CHS">SQL Server Database Engine</span><span lang="zh-CHS">会自我处理数据储存位置，所以基本上，我们无法事先预测数据储存在数据页上是否都连续且都在同一区段中，而当一句</span><span lang="zh-CHS">Select</span><span lang="zh-CHS">送给</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">时，因为没有索引，这时</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">必须扫描整个数据表，以及该数据表的所有数据页和数据页上的每一笔数据，最后才返回用户最终所需要的数据结果集，这样的操作就称为表扫描</span><span lang="zh-CHS">(Full Table Scan)</span>。<span></span></p>
<p><span lang="zh-CHS">当数据表上有索引时</span><span lang="zh-CHS"> (假设索引设计正确)</span><span lang="zh-CHS">，这时数据表上的数据一定会经过排序，所以</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">将基于该索引键值和结构来定位</span><span lang="zh-CHS"> (透过指针) </span><span lang="zh-CHS">数据位置，简单来说只搜寻必要的数据页，而这些数据页已经包含用户最终所需要的数据结果集，这样的操作就称为索引搜寻</span><span lang="zh-CHS">(Index Seek)</span>。<span></span></p>
<p><span lang="zh-CHS"><b><span style="text-decoration:underline;">B-tree </span> </b></span><span lang="zh-CHS"><b> <span style="text-decoration:underline;">索引结构</span> </b></span></p>
<p><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">所有索引基本上都采用</span><span lang="zh-CHS">B-tree</span><span lang="zh-CHS">结构，除了</span><span lang="zh-CHS">xml</span><span lang="zh-CHS">索引、全文检索索引</span><span lang="zh-CHS">(full-text)</span><span lang="zh-CHS">、数据行存放区索引</span><span lang="zh-CHS">(columnstore index)</span><span lang="zh-CHS">和内存优化索引</span><span lang="zh-CHS">(Memory-optimized indexes)</span><span lang="zh-CHS">不用</span><span lang="zh-CHS">B-tree</span>。<span lang="zh-CHS"> xml 索引是存放在 SQL Server 底层数据表，全文检索索引是利用自己引擎来处理查德询和管理全文检索目录 (full-text catalogs)</span>，数据行存放区索引则是使用<span lang="zh-CHS"> in-memory 技术，内存优化索引则是使用 <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fresearch.microsoft.com%2Fpubs%2F178758%2Fbw-tree-icde2013-final.pdf" target="_top">BW-tree </a> </span>结构。<span></span></p>
<p><span lang="zh-CHS">一个标准的</span><span lang="zh-CHS">B-tree</span><span lang="zh-CHS">结构</span><span lang="zh-CHS"> (图1)</span><span lang="zh-CHS">是由根结点</span><span lang="zh-CHS">(root)</span><span lang="zh-CHS">开始的页面，下面有一或多个中继层节点及一或多个分叶</span><span lang="zh-CHS">(Leaf)</span>节点构成。<span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/1440.1.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/1440.1.jpg"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/1440.1.jpg" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/1440.1.jpg" border="0" /></a></p>
<p><span lang="zh-CHS">图</span><span lang="zh-CHS">1</span><span lang="zh-CHS"> B-tree</span>结构。<span></span></p>
<p>&nbsp;</p>
<p><span lang="zh-CHS">一个</span><span lang="zh-CHS">B-tree</span><span lang="zh-CHS">结</span> 构一定是平衡的，这代表每一层左右页面数量一定相等，最末的分叶页面包含了排序后的索引数据，每页索引数据列数量视索引所含数据行的储存空间而定。<span></span></p>
<p><span lang="zh-CHS">根节点及中继层节点包含其下层节点的第一项数据，即表示指向下层数据储存位置的指针</span><span lang="zh-CHS"> (图2)</span><span lang="zh-CHS">，</span><span lang="zh-CHS">SQL Server</span>执行查询时会先扫描每一个根节点所在页面，搜寻是否含有查询的值，找到后再以指针指向下一层继续搜寻，如此不断反复处理，直到在最末层的分叶节点中找到数据为止。<span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/6116.2.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/6116.2.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/6116.2.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/6116.2.png" border="0" /></a></p>
<p><span lang="zh-CHS">图</span><span lang="zh-CHS">2</span><span> </span>索引页面中的根、中继层和分叶节点。<span></span></p>
<p><span lang="zh-CHS">假设今天我们要在图</span><span lang="zh-CHS">2</span><span lang="zh-CHS">中搜寻</span><span lang="zh-CHS">ProductID199</span><span lang="zh-CHS">，查询会从根节点开始搜寻，因为</span><span lang="zh-CHS">ProductID199</span><span lang="zh-CHS">介于</span><span lang="zh-CHS">147~789</span><span lang="zh-CHS">之间，所以</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">会从</span><span lang="zh-CHS">ProductID147</span><span lang="zh-CHS">开始搜寻并计算</span><span lang="zh-CHS">Product199</span><span lang="zh-CHS">可能位置，指向下层</span><span lang="zh-CHS"> (中继层) </span><span lang="zh-CHS">由</span><span lang="zh-CHS">ProductID147</span><span lang="zh-CHS">开始搜寻至</span><span lang="zh-CHS">ProductID306</span><span lang="zh-CHS">节点后，再指向下层</span><span lang="zh-CHS"> (分叶层) </span><span lang="zh-CHS">搜寻</span><span lang="zh-CHS">ProductID199</span><span lang="zh-CHS">所在位置</span><span lang="zh-CHS">(147~208)</span><span lang="zh-CHS">，由于此时已在最末层，故可以在该层找到数据，且</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">也不需要去搜寻其他节点或页面找</span><span lang="zh-CHS">ProductID199</span><span lang="zh-CHS">。</span><span lang="zh-CHS">如果</span><span lang="zh-CHS"> ProductID199 不在数据表中，查询就会回传找不到的结果，而 B-tree 的平衡效果，使得 SQL Server </span><span lang="zh-CHS">每次在索引内搜寻数据动作时都只会在相同数量的各层索引页内处理</span><span lang="zh-CHS">，以利精准地找到所需数据。</span><span></span></p>
<p>&nbsp;</p>
<p><span lang="zh-CHS"><b><span style="text-decoration:underline;">更优的</span> </b></span><span lang="zh-CHS"><b> <span style="text-decoration:underline;"> </span> </b> <b><span style="text-decoration:underline;">Bw (Buzz Word) - tree </span> </b></span></p>
<p><span lang="zh-CHS">Bw-tree</span><span lang="zh-CHS">为内存优化索引和数据表带来重大改善，简单来说</span><span lang="zh-CHS">Bw-tree</span><span lang="zh-CHS">结构可以更省储存空间</span><span lang="zh-CHS">(内存)</span><span lang="zh-CHS">、更有效利用多核心且针对范围</span><span lang="zh-CHS">(range)</span><span lang="zh-CHS">和指针</span><span lang="zh-CHS">(point)</span>搜寻有很高效率。<span></span></p>
<p><span lang="zh-CHS">Bw-tree</span><span lang="zh-CHS">结构</span><span lang="zh-CHS"> (图3)</span><span lang="zh-CHS">和</span><span lang="zh-CHS">B-tree</span><span lang="zh-CHS">类似，所有分叶节点依然还是数据页</span><span lang="zh-CHS">(data page)</span><span lang="zh-CHS">，其他</span><span lang="zh-CHS">index node</span><span lang="zh-CHS">只存放</span><span lang="zh-CHS">key (有顺序) </span><span lang="zh-CHS">和下一页指针，且每页都透过一个逻辑指针</span><span lang="zh-CHS">(PID)</span><span lang="zh-CHS">串联一起，透过该</span><span lang="zh-CHS">PID</span><span lang="zh-CHS">对应</span><span lang="zh-CHS">Mapping Table</span>即可找到数据存放的物理位置。<span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/7558.3.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/7558.3.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/7558.3.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/7558.3.png" border="0" /></a></p>
<p><span lang="zh-CHS">图</span><span lang="zh-CHS">3</span><span lang="zh-CHS"> Bw-tree </span>结构。<span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">页面分割</span></b></p>
<p><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">每页可储存</span><span lang="zh-CHS">8060 bytes</span><span lang="zh-CHS">数据</span><span lang="zh-CHS"> (大小为8092 bytes)</span><span lang="zh-CHS">，如果以</span><span lang="zh-CHS">INT</span><span lang="zh-CHS">类型的数据行建立索引，数据表每一列数据就需要</span><span lang="zh-CHS">4 bytes</span><span lang="zh-CHS">的索引储存空间，假设数据表有</span><span lang="zh-CHS">2016</span><span lang="zh-CHS">笔数据</span><span lang="zh-CHS"> (需 8064 bytes 储存空间)</span><span lang="zh-CHS">，因为索引词条已无法容纳于一页内，则必须进行页面分割，所以会加入两个新索引页面，在现有的根节点页面下移成为分叶层页面，并将原索引页面的一半数据，移至新产生的分叶层页面上，而在上层的页面则成为新的根节点页面，最后则是将每一个分叶层页面的词条写入至新的根节点页面。</span><span lang="zh-CHS">所以总共使用三个索引页面，一个根节点页面和两个分叶层页面</span><span lang="zh-CHS"> (这时不需要中继层页面，因为根节点页面可包含全部分叶层页面的词条)</span><span lang="zh-CHS">，所以在搜寻数据时，最多会在两个页面执行，但如果页面分割发生频率过高将严重影响效能，</span><span lang="zh-CHS">所以设计索引上一定要考虑减少页面分割发生频率。</span><span></span></p>
<p><span lang="zh-CHS">Note:</span><span lang="zh-CHS">页面分割不仅影响效能，同时也会影响交易纪录档案大小，该案例可参考</span><span lang="zh-CHS"> <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.dotblogs.com.tw%2Fricochen%2Farchive%2F2012%2F02%2F20%2F69633.aspx" target="_top">[SQL SERVER][Memo]页面分割影响事务历史记录档大小</a> </span>。<span></span></p>
<p>&nbsp;</p>
<p id="c"><b>索引类型介绍</b></p>
<p><b><span style="text-decoration:underline;">丛集索引</span></b></p>
<p><span lang="zh-CHS">数据表存在丛集索引，那么数据就会依照丛集索引键值顺序存放，该索引分叶层包含数据页</span><span lang="zh-CHS">(data page)</span><span lang="zh-CHS">，所以当透过丛集索引搜寻数据即会返回数据真实存放位置，这样的特性即表示一个数据表只能有一个丛集索引，虽然并非每个数据表都一定要有丛集索引，但如有符合以下条件时，建议最好建立：</span></p>
<p lang="zh-CHS">1. 大数据表且没有任何非丛集索引 (nonclustered indexes)</p>
<p>当你要查询相关数据时，如果没有丛集索引，那么就会进行表扫描，将从数据表第一笔扫描到最后一笔数据才能返回相关所需数据。</p>
<p lang="zh-CHS">2. 针对某些字段常使用范围搜寻</p>
<p>有了丛集索引就可以避免整个数据表的物理数据排序处理，因为数据已经预先依照丛集索引键值排序过了。</p>
<p lang="zh-CHS">3. 针对某些字段常使用 group by</p>
<p><span lang="zh-CHS">数据要</span><span lang="zh-CHS">group by</span>需先经过排序处理，而丛集索引将可省下排序处理。<span></span></p>
<p lang="zh-CHS">4. 针对某些字段常使用排序</p>
<p>因为丛集索引已经排序了相关数据，所以查询一开始就可以避免排序处理。</p>
<p>&nbsp;</p>
<p><span lang="zh-CHS">建立丛集索引键值前需决定丛集索引键值</span><span lang="zh-CHS"> (相当重要的事)</span><span lang="zh-CHS">，因为数据存放顺序会依照所选择字段来排序</span><span lang="zh-CHS">(降或升幂)</span><span lang="zh-CHS">，虽然选择丛集索引键值没有一定的标准，但大致上还是方向可循，下面是我自己用来选择丛集索引键值准则：</span></p>
<p lang="zh-CHS">1. 排序、群组</p>
<p lang="zh-CHS">2. 唯一性</p>
<p lang="zh-CHS">3. 不可 null</p>
<p lang="zh-CHS">4. 避免宽索引</p>
<p lang="zh-CHS">5. 数据异动少</p>
<p><span lang="zh-CHS">6. 考虑 insert 数据排序 (最小碎片</span>)</p>
<p><span lang="zh-CHS">Note</span><span lang="zh-CHS">：当你定义数据表</span><span lang="zh-CHS">PK (Primary key)</span><span lang="zh-CHS">时，</span><span lang="zh-CHS">SQL Server</span>默认会自动建立丛集索引。<span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">非丛集索引</span></b></p>
<p><span lang="zh-CHS">非丛集索引不排序或存放任何数据，索引页</span><span lang="zh-CHS">(index page)</span>上所有分叶节点只存放指针，如果数据表已存在丛集索引，那么该指针将会指向丛集索引，如不存在将指向数据真实存放位置，所以建立丛集和非丛集索引顺序相当重要。<span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">综合索引</span></b></p>
<p><span><span lang="zh-CHS">该索引可以有两个以上字段，字段顺序请依照选择性高低摆放</span><span lang="zh-CHS"> (选择性高越前面)</span>，如果查询有需要多字段时即可建立提高效能。<span></span></span></p>
<p>范例：</p>
<p><span lang="zh-CHS">select </span><span lang="zh-CHS">FirstName,LastName</span></p>
<p><span lang="zh-CHS">from </span><span lang="zh-CHS">Person.Person</span></p>
<p><span lang="zh-CHS">where </span><span lang="zh-CHS">FirstName </span><span lang="zh-CHS">like </span><span lang="zh-CHS">&#39;r%&#39;</span><span lang="zh-CHS"> and LastName like &#39;%z&#39;</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/8304.11.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/8304.11.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/8304.11.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/8304.11.png" border="0" /></a></p>
<p><span lang="zh-CHS">使用索引扫描、执行计划成本：</span><span lang="zh-CHS">0.103029</span>。<span></span></p>
<p>&nbsp;</p>
<p><span lang="zh-CHS">依照该</span><span lang="zh-CHS">TSQL</span><span lang="zh-CHS">建立复合索引：</span></p>
<p><span lang="zh-CHS">create index </span><span lang="zh-CHS">idx1 </span><span lang="zh-CHS">on </span><span lang="zh-CHS">Person.Person(FirstName,LastName)</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/111.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/111.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/111.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/111.png" border="0" /></a></p>
<p><span lang="zh-CHS">改用索引搜寻，执行计划成本降低为</span><span lang="zh-CHS">0.0082498</span></p>
<p><span lang="zh-CHS">Note</span><span lang="zh-CHS">：密度和选择性可参考</span><span lang="zh-CHS"> <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.dotblogs.com.tw%2Fricochen%2Farchive%2F2013%2F03%2F16%2F96855.aspx" target="_top">[SQL SERVER] [Performance]密度和选择性 </a> </span>一文。<span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">单一索引</span></b></p>
<p>该索引只有一个字段，针对单一字段搜寻数据很有用。</p>
<p>&nbsp;</p>
<p>范例：</p>
<p><span lang="zh-CHS">create index </span><span lang="zh-CHS">idx2 </span><span lang="zh-CHS">on </span><span lang="zh-CHS">Person.Person(FirstName)</span></p>
<p><a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fblogs.technet.com%2Fcfs-file.ashx%2F__key%2Fcommunityserver-blogs-components-weblogfiles%2F00-00-00-75-38%2F22.png" target="_top"></a>&nbsp;<span><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/22.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/22.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/22.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/22.png" border="0" /></a>&nbsp;</span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">涵盖索引</span></b></p>
<p><span lang="zh-CHS">涵盖索引算是使用率最高的索引类型，建立索引时透过</span><span lang="zh-CHS">include</span><span lang="zh-CHS">子句来扩充非索引键字段，</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">会将非索引键字段存放在索引上的分叶阶层</span><span lang="zh-CHS"> (不会每一笔索引列都存在)</span><span lang="zh-CHS">，该层级几乎可说是索引叶上的最末层，且</span><span lang="zh-CHS">include</span><span lang="zh-CHS">只支持非丛集索引类型，涵盖字段有以下特性：</span></p>
<p><span lang="zh-CHS">1. 索引键不受限 900 byte 限制，因为不会存放在 root </span>或中继层。<span></span></p>
<p>2. 可包含计算数据行，但数值必须有一定性。<span></span></p>
<p><span lang="zh-CHS">3. 不能涵盖 text、ntext 和 image </span>数据类型。<span></span></p>
<p>4. 不能涵盖索引键值。<span></span></p>
<p>&nbsp;</p>
<p>范例：</p>
<p><span lang="zh-CHS">select </span><span lang="zh-CHS">FirstName,LastName,Title,PersonType</span></p>
<p><span lang="zh-CHS">from </span><span lang="zh-CHS">Person.Person</span></p>
<p><span lang="zh-CHS">where </span><span lang="zh-CHS">MiddleName=&#39;A&#39; and EmailPromotion&gt;=1</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/33.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/33.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/33.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/33.png" border="0" /></a></p>
<p><span lang="zh-CHS">使用丛集索引扫描、执行计划成本：</span><span lang="zh-CHS">2.84673</span>。<span></span></p>
<p>&nbsp;</p>
<p>建立涵盖索引</p>
<p><span lang="zh-CHS">create index </span><span lang="zh-CHS">idx3 </span><span lang="zh-CHS">on </span><span lang="zh-CHS">Person.Person(MiddleName,EmailPromotion)</span></p>
<p><span lang="zh-CHS">include</span><span lang="zh-CHS">(FirstName,LastName,Title,PersonType)</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/44.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/44.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/44.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/44.png" border="0" /></a></p>
<p><span lang="zh-CHS">改用索引搜寻、执行计划成本：</span><span lang="zh-CHS">0.0079515</span>。<span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">唯一索引</span></b></p>
<p><span lang="zh-CHS">该索引可以强制索引键字段具有唯一性，当你定义唯一约束默认会建立唯一非丛集索引，或数据表没有丛集索引且定义</span><span lang="zh-CHS">PK</span><span lang="zh-CHS">默认也会会建立唯一丛集索引，该索引一般来说会大幅提高效能</span><span lang="zh-CHS"> (可以产生很有效的执行计划)</span><span lang="zh-CHS">，如果你确定相关字段具有唯一值，且查询也需要这些字段，那么建立唯一索引绝对不会错，唯一索引特性如下</span></p>
<p lang="zh-CHS">1. 可以使用单一或多个字段</p>
<p lang="zh-CHS">2. 可以为丛集或非丛集 (包含 include)</p>
<p lang="zh-CHS">3. 索引建立 (或重建) 期间，会确认索引键字段是否有重复值</p>
<p lang="zh-CHS">4. 数据新增或更新期间，会确认索引键字段是否有重复值</p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">筛选索引</span></b></p>
<p><span lang="zh-CHS">筛选索引是优化的非丛集索引，但索引弹性相对低，所以实务上实用性较低的，但针对已知且固定的数据子集，建立筛选索引确实可以大大提高查询效能并减少索引使用空间，案例参考</span><span lang="zh-CHS"> <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.dotblogs.com.tw%2Fricochen%2Farchive%2F2010%2F12%2F02%2F19846.aspx" target="_top">[SQL SERVER][Memo]筛选索引</a></span><span style="text-decoration:underline;">一文。</span><span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">分割索引</span></b></p>
<p><span lang="zh-CHS">建立分割数据表并在该数据表上建立索引</span><span lang="zh-CHS"> (建议包含 (include) 分割数据行)</span><span lang="zh-CHS">，</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">默认会使用相同的分割结构</span><span lang="zh-CHS">(partition scheme)</span><span lang="zh-CHS">和分割数据行</span><span lang="zh-CHS">(partition column)</span><span lang="zh-CHS">自动对索引进行分割，主要是希望索引和数据表对齐</span><span lang="zh-CHS">(aligned)</span><span lang="zh-CHS">，索引和数据表对齐对效能来说相当重要，分割索引不只可以提高询效能，也可减少索引管理成本，因为你可以针对某区索引碎片执行重建操作，进而减少某种程度的</span><span lang="zh-CHS">SQL Server</span>停机时间。<span></span></p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">数据行存放区索引</span></b></p>
<p><span lang="zh-CHS">SQL 2012</span><span lang="zh-CHS">新增的数据行存放区索引主要是提高</span><span lang="zh-CHS">OLAP</span><span lang="zh-CHS">效能，储存方式不像以往采取</span><span lang="zh-CHS">row</span><span lang="zh-CHS">，而是改成</span><span lang="zh-CHS">column</span><span lang="zh-CHS">方式储存，这会大大提高缓冲命中率并减少</span><span lang="zh-CHS">I/O</span><span lang="zh-CHS">，同时对于完整扫描作业可以带来极大效能效益，但建立该索引后，数据表会变成唯独，这个限制导致不太适用在</span><span lang="zh-CHS">OLTP</span><span lang="zh-CHS">环境中，但开心的事在</span><span lang="zh-CHS">SQL 2014</span>移除了这项限制，这改善真是大快人心。<span></span></p>
<p>&nbsp;</p>
<p><span lang="zh-CHS">范例：</span><span lang="zh-CHS">SQL 2014</span><span lang="zh-CHS">数据行存放区索引数据更新测试</span></p>
<p><span lang="zh-CHS">create table </span><span lang="zh-CHS">mycolumnstore</span></p>
<p>(</p>
<p><span lang="zh-CHS">c1 </span><span lang="zh-CHS">int identity</span><span lang="zh-CHS">(1,1),</span></p>
<p><span lang="zh-CHS">c2 </span><span lang="zh-CHS">varchar</span><span lang="zh-CHS">(30),</span></p>
<p><span lang="zh-CHS">c3 </span><span lang="zh-CHS">date</span></p>
<p>)</p>
<p>&nbsp;</p>
<p>--<span><span lang="zh-CHS">建立</span><span lang="zh-CHS">columnstore index</span></span></p>
<p><span lang="zh-CHS">create clustered columnstore index </span><span lang="zh-CHS">cidx_cs</span></p>
<p><span lang="zh-CHS">on </span><span lang="zh-CHS">mycolumnstore</span></p>
<p>&nbsp;</p>
<p>新增操作</p>
<p><span><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/2352.12.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/2352.12.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/2352.12.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/2352.12.png" border="0" /></a> </span></p>
<p><span><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/122.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/122.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/122.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/122.png" border="0" /></a>&nbsp;</span></p>
<p>&nbsp;</p>
<p>更新操作</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/333.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/333.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/333.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/333.png" border="0" /></a></p>
<p>&nbsp;</p>
<p>删除操作</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/444.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/444.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/444.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/444.png" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><b><span style="text-decoration:underline;">内存优化索引</span></b></p>
<p><span lang="zh-CHS">SQL 2014</span><span lang="zh-CHS">内存优化索引使用</span><span lang="zh-CHS">Bw-tree</span>结构，所有逻辑指针都存在内存中，总共有两种非丛集索引类型。<span></span></p>
<p><span lang="zh-CHS">1. 非丛集哈希 (hash)索引</span>:</p>
<p><span lang="zh-CHS">该索引适用指针查阅，大小固定且没有任何页面</span><span lang="zh-CHS">(page)</span>，查询返回的值都是没有排序。<span></span></p>
<p><span lang="zh-CHS">2. 非丛集非哈希 (hash) 索引</span>:</p>
<p><span lang="zh-CHS">该索引适用范围或排序扫描，也适用任何符合</span><span lang="zh-CHS">SARG</span>查询参数，查询返回的值都会排序。<span></span></p>
<p>范例：</p>
<p>--建立内存优化数据表</p>
<p><span lang="zh-CHS">CREATE TABLE </span><span lang="zh-CHS">[TransactionHistoryArchive] (</span></p>
<p><span><span lang="zh-CHS">[TransactionID] [int] </span><span lang="zh-CHS">NOT NULL</span></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span><span lang="zh-CHS">CONSTRAINT </span><span lang="zh-CHS">PK_TransactionHistoryArchive </span><span lang="zh-CHS">primary key NONCLUSTERED HASH WITH</span><span lang="zh-CHS"> (BUCKET_COUNT = 100000),</span></span></p>
<p><span><span lang="zh-CHS">[ProductID] [int] </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span><span lang="zh-CHS">[ReferenceOrderID] [int] </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span><span lang="zh-CHS">[ReferenceOrderLineID] [int] </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span><span lang="zh-CHS">[TransactionDate] [datetime] </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span><span lang="zh-CHS">[TransactionType] [nchar](1) </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span><span lang="zh-CHS">[Quantity] [int] </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span><span lang="zh-CHS">[ActualCost] [money] </span><span lang="zh-CHS">NOT NULL</span></span>,</p>
<p><span lang="zh-CHS">[ModifiedDate] [datetime] </span><span lang="zh-CHS">NOT NULL</span><span lang="zh-CHS"> index idx1,</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span><span lang="zh-CHS">index </span><span lang="zh-CHS">idx2(TransactionID),</span></span></p>
<p>) <span><span lang="zh-CHS">WITH</span><span lang="zh-CHS"> (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)</span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>--<span><span lang="zh-CHS">新增数据</span><span>:</span><span lang="zh-CHS">内存数据表的交易无法跨数据库</span></span></p>
<p><span lang="zh-CHS">SELECT</span><span> * </span><span lang="zh-CHS">INTO </span><span lang="zh-CHS">mytemp</span></p>
<p><span lang="zh-CHS">FROM </span><span lang="zh-CHS">AdventureWorks2012.Production.TransactionHistoryArchive</span></p>
<p>&nbsp;</p>
<p><span lang="zh-CHS">INSERT INTO </span><span lang="zh-CHS">TransactionHistoryArchive</span></p>
<p><span lang="zh-CHS">SELECT</span><span> * </span><span lang="zh-CHS">FROM </span><span lang="zh-CHS">mytemp</span></p>
<p>&nbsp;</p>
<p>--排序查询</p>
<p>--good</p>
<p><span lang="zh-CHS">SELECT</span><span> * </span><span lang="zh-CHS">FROM </span><span lang="zh-CHS">TransactionHistoryArchive </span><span lang="zh-CHS">with</span><span lang="zh-CHS">(index(idx2))</span></p>
<p>order by TransactionID</p>
<p>--bad</p>
<p><span lang="zh-CHS">SELECT</span><span> * </span><span lang="zh-CHS">FROM </span><span lang="zh-CHS">TransactionHistoryArchive </span><span lang="zh-CHS">with</span><span lang="zh-CHS">(index(PK_TransactionHistoryArchive))</span></p>
<p><span lang="zh-CHS">order by </span><span lang="zh-CHS">TransactionID</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/43.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/43.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/43.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/43.png" border="0" /></a></p>
<p>&nbsp;</p>
<p>--lookup</p>
<p>--bad</p>
<p><span lang="zh-CHS">SELECT </span><span lang="zh-CHS">TransactionID,ReferenceOrderID,TransactionType,ActualCost</span></p>
<p><span lang="zh-CHS">FROM</span><span lang="zh-CHS">TransactionHistoryArchive </span><span lang="zh-CHS">with</span><span lang="zh-CHS">(index(idx2))</span></p>
<p><span lang="zh-CHS">where </span><span lang="zh-CHS">TransactionID=10</span></p>
<p>--good</p>
<p><span lang="zh-CHS">SELECT </span><span lang="zh-CHS">TransactionID,ReferenceOrderID,TransactionType,ActualCost</span></p>
<p><span lang="zh-CHS">FROM </span><span lang="zh-CHS">TransactionHistoryArchive </span><span lang="zh-CHS">with</span><span lang="zh-CHS">(index(PK_TransactionHistoryArchive))</span></p>
<p><span lang="zh-CHS">where </span><span lang="zh-CHS">TransactionID=10</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/123.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/123.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/123.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/123.png" border="0" /></a></p>
<p>&nbsp;</p>
<p id="d"><b>索引设计注意事项</b></p>
<p><span lang="zh-CHS">索引设计基本上需对应数据存取</span><span lang="zh-CHS">TSQL</span><span lang="zh-CHS">才能到位，这里提出一些索引设计须注意相关事项让大家参考：</span></p>
<p>&nbsp;</p>
<p lang="zh-CHS">1. <b>先建立非丛集索引后建立丛集索引</b></p>
<p><span lang="zh-CHS">前面索引类型内容有提到，当一个数据表没有丛集索引时，先建立非丛集索引的分叶层页面指针将指向真实数据位置，如丛集索引已经存在时将指向丛集索引，先建立非丛集索引可以避免当你重建丛集索引时，连带影响非丛集索引一起重建</span><span lang="zh-CHS"> (须注意索引两次重建问题)</span>，这不仅拉长重建索引时间，也增加交易纪录档大小且浪费硬盘空间。<span></span></p>
<p>&nbsp;</p>
<p lang="zh-CHS"><b>2. </b> <b>使用索引压缩</b></p>
<p><span lang="zh-CHS">使用索引压缩可以提高缓冲区命中率</span><span lang="zh-CHS"> (缓冲区可存放更多词条) </span><span lang="zh-CHS">并减少</span><span lang="zh-CHS">I/O</span><span lang="zh-CHS">和硬盘空间，建立索引时可以善加利用，但由于压缩操作需要使用较多</span><span lang="zh-CHS">CPU</span><span lang="zh-CHS">资源，所以须注意</span><span lang="zh-CHS">CPU</span>资源竞争情况。<span></span></p>
<p>&nbsp;</p>
<p>索引压缩测试：</p>
<p>--建立数据表</p>
<p><span lang="zh-CHS">create table </span><span lang="zh-CHS">test1</span></p>
<p><span lang="zh-CHS">(c1 int null</span>,</p>
<p><span><span lang="zh-CHS">c2 </span><span lang="zh-CHS">varchar</span><span lang="zh-CHS">(10) null</span></span>)</p>
<p>--新增数据</p>
<p><span lang="zh-CHS">declare </span><span lang="zh-CHS">@i int</span></p>
<p><span lang="zh-CHS">set </span><span lang="zh-CHS">@i=1</span></p>
<p><span lang="zh-CHS">while </span><span lang="zh-CHS">@i&lt;2016</span></p>
<p>begin</p>
<p><span><span lang="zh-CHS">insert into </span><span lang="zh-CHS">test1 </span><span lang="zh-CHS">values</span><span lang="zh-CHS">(@i,null</span></span>);</p>
<p><span lang="zh-CHS">set </span><span lang="zh-CHS">@i=@i+1;</span></p>
<p>end</p>
<p>--建立非丛集索引不使用压缩</p>
<p><span lang="zh-CHS">create nonclustered index </span><span lang="zh-CHS">nidx_1 </span><span lang="zh-CHS">on </span><span lang="zh-CHS">test1</span></p>
<p>(c1)</p>
<p>&nbsp;</p>
<p>--<span><span lang="zh-CHS">查看索引页面数</span><span lang="zh-CHS">(page_count)</span><span lang="zh-CHS">和其他相关信息，确认压缩所带来的优势</span></span></p>
<p><span lang="zh-CHS">SELECT </span><span lang="zh-CHS">o.name,</span></p>
<p>ips.index_id,</p>
<p>ips.partition_number,</p>
<p>ips.index_type_desc,</p>
<p>ips.record_count, ips.avg_record_size_in_bytes,</p>
<p>ips.min_record_size_in_bytes,</p>
<p>ips.max_record_size_in_bytes,</p>
<p>ips.page_count, ips.compressed_page_count</p>
<p><span lang="zh-CHS">FROM</span><span lang="zh-CHS"> sys.dm_db_index_physical_stats (DB_ID(N&#39;AdventureWorks2012&#39;), OBJECT_ID</span>(<span lang="zh-CHS"> N&#39;AdventureWorks2012.dbo.test1&#39;), NULL, NULL, &#39;DETAILED&#39;) ips</span></p>
<p><span lang="zh-CHS">JOIN </span><span lang="zh-CHS">sys.objects </span><span lang="zh-CHS">o </span><span lang="zh-CHS">on </span><span lang="zh-CHS">o.</span><span lang="zh-CHS">object_id</span><span lang="zh-CHS">= ips.</span><span lang="zh-CHS">object_id</span></p>
<p><span><span lang="zh-CHS">ORDER BY </span><span lang="zh-CHS">index_id asc,record_count </span><span lang="zh-CHS">DESC</span></span> ;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/413.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/413.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/413.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/413.png" border="0" /></a></p>
<p><span lang="zh-CHS">页面总数量</span><span lang="zh-CHS">5</span><span lang="zh-CHS">，每笔数据平均大小</span><span lang="zh-CHS">16 (bytes)</span></p>
<p>&nbsp;</p>
<p>--建立非丛集索引并使用页面压缩</p>
<p><span lang="zh-CHS">create nonclustered index </span><span lang="zh-CHS">nidx_2 </span><span lang="zh-CHS">on </span><span lang="zh-CHS">test1</span></p>
<p>(c1)</p>
<p><span><span lang="zh-CHS">WITH</span><span lang="zh-CHS"> ( DATA_COMPRESSION = PAGE</span></span> ) ;</p>
<p><span lang="zh-CHS">使用页面压缩可以看到每笔数据平均大小从</span><span lang="zh-CHS">16</span><span lang="zh-CHS">降低为</span><span lang="zh-CHS">9.434</span><span lang="zh-CHS">，页面数量从</span><span lang="zh-CHS">5</span><span lang="zh-CHS">降低为</span><span lang="zh-CHS">3</span>。<span></span></p>
<p>&nbsp;</p>
<p lang="zh-CHS"><b>3. </b> <b>设定填满因子</b> <b> (Fill Factor) </b></p>
<p><span lang="zh-CHS">透过设定填满因子可以微调索引效能和储存空间，该因子会决定分叶层页面填满数据的空间百分比</span><span lang="zh-CHS"> (保留每个页面可用空间)</span><span lang="zh-CHS">，以利未来数据成长使用，主要目的是要减少页面分割发生频率，如设定</span><span lang="zh-CHS">90 (默认 0)</span><span lang="zh-CHS">表示只预留</span><span lang="zh-CHS">10%</span><span lang="zh-CHS">空间比例，实务上我建议该值依数据表读写特性设定比较有效益，因为设定过低将增加页面分割频率，也造成索引碎片过多增加</span><span lang="zh-CHS">I/O</span><span lang="zh-CHS">，进而影响查询效能且容易发生长时间</span><span lang="zh-CHS">Lock</span><span lang="zh-CHS">资源情形，但设定过高也会影响数据异动效能，所以建议必须依数据表读写特性设定取得一个平衡值，下面是填满因子建议值：</span></p>
<p lang="zh-CHS">a. 只读或静态数据表: 设定 100%</p>
<p lang="zh-CHS">b. 异动频率很低的数据表: 设定 95%</p>
<p lang="zh-CHS">c. 异动频率一般的数据表: 设定 85%~90%</p>
<p><span lang="zh-CHS">d. 异动频率很高的数据表: 设定 50%-80%</span>&nbsp;</p>
<p>&nbsp;</p>
<p lang="zh-CHS"><b>4. </b> <b>索引键字段最好用于</b> <b> join </b> <b>操作</b></p>
<p><span lang="zh-CHS">Join</span><span lang="zh-CHS">多个数据表是常见的情况，当建立非丛集索引时最好第一优先考虑这些</span><span lang="zh-CHS">join</span><span lang="zh-CHS">字段，或是设定</span><span lang="zh-CHS">Foreign key</span>约束，这样才能让索引发挥效益并大大改善查询效能。<span></span></p>
<p>&nbsp;</p>
<p lang="zh-CHS"><b>5. </b> <b>善用涵盖索引</b></p>
<p><span lang="zh-CHS">涵盖索引</span><span lang="zh-CHS">include</span><span lang="zh-CHS">字段不受</span><span lang="zh-CHS">900 bytes</span><span lang="zh-CHS">限制，且又可满足查询所需数据字段，即不须额外浪费时间搜寻</span><span lang="zh-CHS">data page</span>，该索引效益永远比单一字段索引来的高，而且更有弹性。<span></span></p>
<p><span lang="zh-CHS">案例可以参考</span><span lang="zh-CHS"> <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.dotblogs.com.tw%2Fricochen%2Farchive%2F2015%2F01%2F05%2F147943.aspx" target="_top">[SQL SERVER]提高动态查询效能</a> </span></p>
<p>&nbsp;</p>
<p lang="zh-CHS"><b>6. </b> <b>优先考虑选择性高字段</b></p>
<p><span lang="zh-CHS">Distinct</span><span lang="zh-CHS">、</span><span lang="zh-CHS">where</span><span lang="zh-CHS">、</span><span lang="zh-CHS">order by</span><span lang="zh-CHS">、</span><span lang="zh-CHS">group by</span><span lang="zh-CHS">和</span><span lang="zh-CHS">like</span>子句相关字段最好选择性高，高选择性字段可以让索引更有效益，主要可以让统计值估计更准确。<span></span></p>
<p>&nbsp;</p>
<p lang="zh-CHS"><b>7. </b> <b>适时重建索引</b></p>
<p><span lang="zh-CHS">当在数据表中删除一笔数据时，</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">必须由索引页中移除该笔数据的索引数据，而这就会导致在索引页中留下空白，由于填补新值的成本太大，所以</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">也不会去填补该空白，若在数据表中更新一笔数据时，则</span><span lang="zh-CHS">SQL Server</span><span lang="zh-CHS">必须在索引页中搜寻适当的位置并加入，而这也有可能会造成另一段空白。</span><span lang="zh-CHS">当索引页已满且必须进行分割时，就会产生更多的索引碎片，当碎片过多就会影响查询的效能</span><span lang="zh-CHS"> (因为跨多个索引页，所以增加 IO 读取)</span>，所以当数据表数据异动频繁时，时间一久，就会造成索引不断破碎<span lang="zh-CHS"> (空白太多)</span>，这时候建立要执行重建索引操作。<span></span></p>
<p>索引碎片又分两种类型，内部碎片和外部碎片。</p>
<p>外部碎片:</p>
<p><span lang="zh-CHS">由于索引数据都是经过排序的，如果你的分叶层页面</span><span lang="zh-CHS">(index leaf page)</span><span lang="zh-CHS">实体排序和查询所要求的逻辑排序不相同时，就会导致</span><span lang="zh-CHS">SQL Server</span>有额外的工作来返回正确的排序结果，但在大多数的查询情况下，内部碎片并不会太大，但在设计索引上还是得注意排序的需求。<span></span></p>
<p>内部碎片:</p>
<p><span lang="zh-CHS">一般来说索引页都会预留一定的空间来存放新增</span><span lang="zh-CHS">(insert)</span><span lang="zh-CHS">的数据，因为这可以减少页面分割发生的频率，所以当你在建立或重建索引时，你可以指定填满因子</span><span lang="zh-CHS">(Fill Factor)</span><span lang="zh-CHS">来决定一张索引页面可存放多少百分比数据，如果索引页面过于分散，将会拉长查询时间</span><span lang="zh-CHS"> (跨多索引页面，并增加额外的 IO 读取)</span><span lang="zh-CHS">，而且也会造成你的索引过于肥大</span><span lang="zh-CHS"> (浪费硬盘空间)</span>，请务必减少页面分割发生的频率，因为页面分割这样的动作相当耗费系统资源。<span></span></p>
<p>&nbsp;</p>
<p id="e"><b>进阶推荐</b></p>
<p><span lang="zh-CHS">若您有兴趣进阶学习，可参考</span><span lang="zh-CHS">MVP James Fu</span>录制的数据库例行管理系列教学之索引维护篇，除了教学影片，亦提供了简报档下载，都是完全免费的，欢迎多多运用。<span></span></p>
<p><span><a href="http://www.microsoftvirtualacademy.com/training-courses/sql-database-managemant?m=10111"><img width="580" height="228" style="width:504px;height:196px;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/qwer.jpg" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/qwer.jpg" border="0" /></a></span></p>
<p>希望以上内容对您的学习有所帮助。</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows 10：全新一代的 Windows</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/windows-10-windows</link>
      <pubDate>Thu, 22 Jan 2015 19:02:38 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/01/22/windows-10-windows/</guid>
      <description><![CDATA[微软宣布 Windows 10 将提供免费升级
揭开群组运算与全像摄影 Windows 10 装置神秘面纱
经过前一晚 Windows 10发表倒数计时，跨平台Windows即将登场...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">微软宣布 Windows 10 将提供免费升级</span></span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">揭开群组运算与全像摄影 Windows 10 装置神秘面纱</span></span></p>
<p><span style="font-size:small;">经过前一晚 <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fblogs.technet.com%2Fb%2Fmicrosoft_taiwan%2Farchive%2F2015%2F01%2F21%2Fwindows-10-countdown.aspx" target="_top">Windows 10发表倒数计时，跨平台Windows即将登场 </a> ，微软公司于今日发布了结合各类不同体验的新一代 Windows 系统，开启了更为个人化运算的新纪元，除此之外，微软也发布了两款全新装置，拓展从大屏幕到无屏幕等各类装置上的 Windows 体验。 Windows 10 将在装置上，提供一个更安全、创新与最新的体验。</span></p>
<p><span style="font-size:small;">Windows 10发表会在线影片回放： <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fnews.microsoft.com%2Fwindows10story%2F" target="_top">http://news.microsoft.com/windows10story/</a> </span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows-10_Product-Family.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows_2D00_10_5F00_Product_2D00_Family.jpg"><img width="640" style="border-color:currentColor;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows-10_Product-Family.jpg" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows_2D00_10_5F00_Product_2D00_Family.jpg" /></a></span></p>
<p><span style="font-size:small;">Windows 10免费升级服务(附注1)将提供给目前使用Windows 7、Windows 8.1以及Windows Phone 8.1的消费者在第一年可以享受免费升级的服务。</span></p>
<p><span style="font-size:small;">「Windows 10的推出象征我们将进入以行动优先，云端至上(Mobile First, Cloud First)的世界，开启更加个人化运算的新世代」微软全球执行长Satya Nadella表示。「我们的目标是让目前正在使用 Windows 的 15 亿用户爱上 Windows 10，并让更多用户决定将 Windows 带回家。」</span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">全新 Windows 10 体验：</span></span></p>
<p><span style="font-size:small;">[View:~/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-91-73/Windows-10_5F00_-A-New-Generation-of-Windows.mp4:0:0]</span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">Windows 10：让计算机运算更加个人化</span> </span></p>
<p><span style="font-size:small;">Windows 10的推出象征着我们将迎来更为个人化运算的新世代，这意味着以人为中心的理念将逐渐代替技术。 在这个新世代中，比起单纯让装置具有行动力，让使用经验具有行动力更重要、而且要无缝的让相同的体验跨到不同装置上。</span></p>
<p><span style="font-size:small;">用户应能够像与他人互动一样，用语音、手势和目光自然地与科技互动，在这样的情况下如果要提供一个值得信任的使用体验，隐私权保护就扮演着举足轻重的角色。</span></p>
<p><span style="font-size:small;">在活动上微软展示了Windows 10提供的多种新体验，具体包括：</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-2C-500x285.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_2C_2D00_500x285.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-2C-500x285.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_2C_2D00_500x285.png" border="0" /></a> </span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">Cortana 进驻 PC 和平板计算机</span></span></p>
<p><span style="font-size:small;">去年针对Windows Phone推出的Cortana个人数字助理现在也将可以在Windows 10的PC和平板计算机上使用，帮助用户完成事务(附注2)。</span></p>
<p><span style="font-size:small;">Cortana是用户的个人小助手，能够了解个人的喜好，进而提供个人化推荐、快速搜寻到信息与提醒重要事项，提供用户最想要关注的信息。</span></p>
<p><span style="font-size:small;">用户可透过交谈或打字自然而轻松与Cortana互动，还可以透过进阶设定来 让 Cortana 更加可靠与同步。</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-3C-500x285.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_3C_2D00_500x285.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-3C-500x285.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_3C_2D00_500x285.png" border="0" /></a><br /></span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">全新浏览器「Project Spartan」让浏览器为你动起来</span></span></p>
<p><span style="font-size:small;">Windows 10未来将推出代号为「Project Spartan」的全新微软浏览器；这款浏览器是以互操作性为设计核心， 该浏览器本身也内建了多项重要功能，提高了可靠性与更佳的搜寻功能。这个浏览器中最先进的功能包括：</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>无论是使用键盘还是触控笔，都能直接在网页上注记并与朋友轻松分享，同时提供不受干扰的阅读方式</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>无论是上线或是脱机状态，让文章呈现更加简化，加上与Cortana整合可更快速地在在线搜寻内容和完成事务，这些最新的创新全部都可以在Windows 10上体验到。</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-4C-500x285.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_4C_2D00_500x285.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-4C-500x285.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_4C_2D00_500x285.png" border="0" /></a></span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">Xbox Live 和全新 Xbox App 为 Windows 10 带来全新游戏体验</span></span></p>
<p><span style="font-size:small;">Windows 10上的Xbox让玩家和开发人员透过Windows 10计算机和Xbox One体验Xbox Live游戏网络的精华。玩家可以使用 Game DVR 节录、编辑和分享他们最精彩的游戏时刻，以及与多台装置上的朋友畅玩新游戏，与世界各地数百万名玩家之间建立联系。</span></p>
<p><span style="font-size:small;">Windows 10透过全新DirectX 12应用程序设计界面开发的游戏，无论是在速度、效能和画面上皆有所提升，玩家还能够将游戏直接从Xbox One游戏机存到Windows 10平板计算机或PC中，在家中畅玩(附注3)。</span></p>
<p><span style="font-size:small;">[View:~/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-91-73/Xbox-on-Windows-10.mp4:0:0]</span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">Windows 10 中的 Office</span> </span></p>
<p><span style="font-size:small;">Windows 10上的Office通用应用程序(Universal Apps)提供了在多台装置上最佳的触控体验。</span></p>
<p><span style="font-size:small;">新版Word、Excel、PowerPoint、OneNote和Outlook都是为了在Windows上使用而设计，提供了客<span style="font-family:&#39;Tahoma&#39;,sans-serif;"></span>熟悉并喜爱的Office体验，透过Office的常见功能，用户可以轻松编辑Word文件。 PowerPoint 中的全新数字笔迹功能可让用户实时为幻灯片添加附注，而藉由 Excel 中针对触控优化的全新控制功能，用户无需使用键盘或鼠标即可轻松建立和更新电子表格。</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/phone_power_point-500x322.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/phone_5F00_power_5F00_point_2D00_500x322.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/phone_power_point-500x322.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/phone_5F00_power_5F00_point_2D00_500x322.png" border="0" /></a></span></p>
<p><span style="font-size:small;">目前新版Office桌面软件也正在开发中，微软将在接下来的几个月中分享更多信息。</span></p>
<p><span style="font-size:small;">今天发布的其他Windows 10功能和创新包括：</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Continuum模式： 在二合一装置上，Windows 10 将可以轻松的感应到转换模式的需求，在键盘和鼠标、触控和平板计算机之间轻松的切换。</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>全新的通用应用程序：Windows 10将针对相片、影片、音乐、地图、联络人和讯息以及邮件和行事历提供全新体验的应用程序（实现跨装置一致性）。 这些内建应用程序更新后的设计，将在外观和体验方面在各个应用程序和各种装置上都保持一致。 内容可以经由 OneDrive 储存和同步，可让用户在不同的装置上继续未完成的事务。</span></p>
<p><span style="font-size:small;">「从Windows 10的各个方面来看，比如体验、作为服务提供以及免费升级，Windows 10并不仅仅是另外一件产品，更是一种持续关系，这种关系能够持续为我们的所有客户创造价值，」微软操作系统部门执行副总裁Terry Myerson说， 「新一代 Windows 代表着我们的承诺，也就是将用户从复杂的技术中解放出来，并帮助他们完成更多重要事情。」</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-1C-500x285.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_1C_2D00_500x285.png"></a><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Continuum-1C-500x299.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Continuum_2D00_1C_2D00_500x299.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Continuum-1C-500x299.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Continuum_2D00_1C_2D00_500x299.png" border="0" /></a> </span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">Windows 10：推动创新，激发全新运算平台</span></span></p>
<p><span style="font-size:small;">Windows 10可让客户以一致、熟悉和可兼容的体验使用各种装置（从Xbox到 计算机和手机，再到平板计算机和小工具）和处理各项事务。 Windows 10 适用的装置非常广泛令人难以置信，从物联网中最微小的传感器到世界级企业数据库中的服务器，无所不包。</span></p>
<p><span style="font-size:small;">有些装置有4吋大小的屏幕、有些到80吋大小的屏幕、还有一些甚至没有屏幕，今日微软公布的两款设备将提供用户难以置信的全新Windows体验。</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/6710.Windows-10_Product-Family.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/6710.Windows_2D00_10_5F00_Product_2D00_Family.jpg"><img width="640" style="border-color:currentColor;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/6710.Windows-10_Product-Family.jpg" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/6710.Windows_2D00_10_5F00_Product_2D00_Family.jpg" /></a><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Continuum-1C-500x299.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Continuum_2D00_1C_2D00_500x299.png"></a> </span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">Windows 10 Microsoft HoloLens 开启全像摄影未来</span></span></p>
<p><span style="font-size:small;">微软利用革命性的例证分享Windows 10如何从以传统装置为中心的运算、转变到更为个人化和人性化的互动。 作为全球首款全像运算平台，Windows 10 包含一系列应用程序开发接口 API，可让开发人员创造现实世界中的全像摄影体验。</span></p>
<p><span style="font-size:small;">有了Windows 10，全像摄影就是Windows共通应用程序，而所有的Windows共通应用程序也可作为全像摄影运用，这样可实现将3D全像图像放入物理世界中，实现更为个人化和人性化的全新沟通、创建和探索方式。</span></p>
<p><span style="font-size:small;">为了实现在Windows 10中使用全像摄影的可能性，微软公布了全球最先进的全像计算机。</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft HoloLens是首款不受约束的全像计算机，无需电线、手机或连接到所需的计算机。</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft HoloLens配备透明的全像高分辨率镜头和空间声音，可让您用眼睛和耳朵了解周围环境中的全像影像。</span></p>
<p style="text-indent:-0.25in;margin-left:0.5in;"><span style="font-size:small;"><span style="font-family:Symbol;">&middot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft HoloLens拥有先进的传感器和新一代片上系统，还配备全新的全像处理单元(HPU)来了解您的行为和周围环境，因此无需电线即可运行，并处理从传感器实时接收的兆字节数据。</span></p>
<p><span style="font-size:small;">透过在您周围的环境中放置3D全像图，Microsoft HoloLens可让您以新的方式观察现实世界，从而分辨出您看到的事物并了解您的手势和语音代表的内容。 透过将用户置于计算体验的中心，Microsoft HoloLens 可让您创造内容、存取信息、享受娱乐以及用全新有趣的方式沟通。</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/MSHoloLens_MixedWorld_LivingRoom_LongBrowser_RGB-500x333.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/MSHoloLens_5F00_MixedWorld_5F00_LivingRoom_5F00_LongBrowser_5F00_RGB_2D00_500x333.png"><img width="640" style="border-color:currentColor;" alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/MSHoloLens_MixedWorld_LivingRoom_LongBrowser_RGB-500x333.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/MSHoloLens_5F00_MixedWorld_5F00_LivingRoom_5F00_LongBrowser_5F00_RGB_2D00_500x333.png" /></a></span></p>
<p><span style="font-size:small;"><span style="color:#3366ff;font-size:x-large;font-family:Microsoft Yahei;">全新的 Microsoft Surface Hub 优化了群组的 Windows 10 体验</span></span></p>
<p><span style="font-size:small;">Windows 10支持全新的大屏幕装置，可帮助团队在工作场所中共同分享、想象和创造。 透过多点触控和数字笔迹方面的硬件创新以及内建相机、传感器和麦克风，Surface Hub 可以透过 Windows 10、Skype for Business 和 Office 365 提供全新体验，让每个人（无论是远程还是现场）都如同身处在同一个工作空间中。</span></p>
<p><span style="font-size:small;">具体来说，Surface Hub的功能包括艺术数字白板、实时远程会议、多人共享笔记本电脑、平板或手机共享和编辑屏幕内容的功能，以及针对大屏幕应用程序的平台。 Surface Hub 提供 55 吋和 84 吋两种尺寸，突破了传统会议室应用情境的限制，让团队实现最佳合作。</span></p>
<p><span style="font-size:small;text-decoration:none;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-1C-500x285.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_1C_2D00_500x285.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/01/86/Windows10_Phone_Laptop-1C-500x285.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-01-86/Windows10_5F00_Phone_5F00_Laptop_2D00_1C_2D00_500x285.png" border="0" /></a></span></p>
<p><span style="font-size:small;">新版Windows 10 Technical Preview的PC版将于下周提供给参加Windows Insider Program计划的用户，而Technical Preview手机版也将于2月推出。更多关于 Windows Insider Program计划和 Technical Preview 的信息，请参考：<a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fpreview.windows.com%2F" target="_top">http://preview.windows.com</a> 。</span></p>
<p><span style="font-size:small;">附注1需符合硬件和软件要求。不同设备可用的功能将有所不同。某些版本不包含在内。更多详情请上： <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.windows.microsoft.com%2F" target="_top">http://www.windows.microsoft.com</a> </span></p>
<p><span style="font-size:small;">附注2 Cortana推出时仅在部分市场可使用。</span></p>
<p><span style="font-size:small;">附注3 Xbox Live功能（包括游戏记录）仅可在Xbox Live支持的国家/ 地区使用于受支持的游戏。详情请参见 <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.xbox.com%2Fen-US%2Flive%2Fcountries" target="_top">http://www.xbox.com/en-US/live/countries</a>。 Direct X12 仅支持部分游戏和图形芯片。 2015 年推出的少数游戏支持跨设备畅玩；其他游戏即将推出该功能。 Xbox One 的多玩家串流技术需要家庭网络连接和 Xbox Live Gold 会员（单独售卖）；Gold 会员也需要在Xbox One 使用多玩家模式畅玩。</span></p>
<p><span style="font-size:small;">关于Windows 10的更多信息，请访问： <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fnews.microsoft.com%2Fwindows10story" target="_top">http://news.microsoft.com/windows10story</a> </span></p>]]></content:encoded>
    </item>
    <item>
      <title>从 Web Server 向 Azure WebSites 迁移的利器（Migration Assistant）</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/web-server-azure-websites-migration-assistant</link>
      <pubDate>Tue, 20 Jan 2015 01:45:57 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chinatechnet/2015/01/20/web-server-azure-websites-migration-assistant/</guid>
      <description><![CDATA[原文地址：http://blogs.technet.com/b/nevin_dongs_blog/archive/2014/12/25/web-server-azure-websites-migrat...]]></description>
      <content:encoded><![CDATA[<p><strong>原文地址：<a href="/b/nevin_dongs_blog/archive/2014/12/25/web-server-azure-websites-migration-assistant.aspx">http://blogs.technet.com/b/nevin_dongs_blog/archive/2014/12/25/web-server-azure-websites-migration-assistant.aspx</a></strong></p>
<p>将Web应用迁移到云端，常见的做法是采用IaaS模式，即创建虚拟机（Virtual Machine，VM）并在上面分别部署Web Server、Database Server、Cache Server、DNS Server等；当访问负荷增大的时候，则增加虚拟机的数量来实现伸缩。</p>
<p>之前曾讨论过，可以将数据库服务器（Database Server）采用Platform as a Server（PaaS）模式来提供，也有相关的<a href="/b/nevin_dongs_blog/archive/2014/12/12/sql-server-microsoft-azure-sql-database.aspx">迁移工具来帮助从SQL Server迁移到Azure SQL Database</a>。</p>
<p>Azure网站（WebSites）是一种完全托管的平台即服务 (PaaS) 产品，便于快速高效地构建、部署并扩展企业级 Web 应用。同时，可以支持按需自动缩放（Auto-scaling），灵活支持不同时间段的并发访问负荷，特别是尖峰负荷。此外，可以显著降低运维工作量，而不必过多关注底层虚拟机、操作系统、网络、负载均衡等细节。</p>
<p>对于Azure网站的更多细节，可以参考：<a href="http://www.windowsazure.cn/home/features/web-site/">http://www.windowsazure.cn/home/features/web-site/</a></p>
<p>可以开发ASP.NET网站并部署到Azure网站，相关步骤可参考：<a href="http://www.windowsazure.cn/zh-cn/develop/net/tutorials/web-site-intro-tutorial/">http://www.windowsazure.cn/zh-cn/develop/net/tutorials/web-site-intro-tutorial/</a></p>
<p>如果将现有Web应用迁移到Azure网站，可以使用一个开源的辅助工具：Azure Websites Migration Assistant，具体可参考：<a href="http://migrate4.azurewebsites.net/">http://migrate4.azurewebsites.net/</a></p>
<p>目前支持从IIS Server迁移到Azure WebSites，其中特别提供了技术兼容性等方面的分析，例如端口绑定（Port Binding）、IIS身份认证、GAC、缓冲池等。如下图，工具将给出分析报告。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image001_0C94A433.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image001_5F00_0C94A433.png"><img width="584" height="353" title="clip_image001" style="border:0px currentColor;display:inline;" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/27/metablogapi/clip_image001_thumb_1CC81E3F.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-27-metablogapi/clip_5F00_image001_5F00_thumb_5F00_1CC81E3F.png" border="0" /></a></p>
<p>目前，这个工具只支持从IIS server到Azure WebSites的迁移辅助，而Azure WebSites还支持Java、PHP、Node.js或Python，后续期待工具能够涵盖对这些技术的支持；当然，也可以考虑参考这个工具的思路，开发适合自己需要的迁移辅助工具。</p>]]></content:encoded>
    </item>
    <item>
      <title>如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine)</title>
      <link>https://docs.microsoft.com/archive/blogs/chinatechnet/tsql-sql-server-relational-engine-sql-2014-in-memory-engine</link>
      <pubDate>Fri, 16 Jan 2015 01:52:06 GMT</pubDate>
      <dc:creator><![CDATA[微软中国TechNet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.cloudplatform.qa.msdn.wdslab.com/chinatechnet/2015/01/16/tsql-sql-server-relational-engine-sql-2014-in-memory-engine/</guid>
      <description><![CDATA[原文地址：http://blogs.technet.com/b/technet_taiwan/archive/2015/01/16/tsql-series-0116.aspx

简介
良好的TS...]]></description>
      <content:encoded><![CDATA[<p><strong>原文地址：<a href="/b/technet_taiwan/archive/2015/01/16/tsql-series-0116.aspx">http://blogs.technet.com/b/technet_taiwan/archive/2015/01/16/tsql-series-0116.aspx</a></strong></p>
<p></p>
<p style="background:white;"><b><span lang="zh-CHS">简介</span></b></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">良好的</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">和正确索引是大幅提高查询效能最快的快捷方式，同时</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">也是使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">的核心，任何应用程序想要和</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">沟通，都无法避免撰写</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">，所以各种效能调校方法中，我们认为查询调校是最省成本、最快能感受到效果的方法</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如下图</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，这一系列文章将为大家介绍如何写出高效能</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">，以及开发人员必须了解</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">相关基本知识和观念，这样才能活用相关技术，并发挥</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS">无限潜能。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><span>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/7206.1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/7206.1.png"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/7206.1.png" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/7206.1.png" border="0" /></a></span></span></p>
<p style="background:white;"><b><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:13.5pt;">&nbsp;</span></b></p>
<p style="background:white;"><span lang="zh-CHS"><b><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:13.5pt;">SQL Server</span> </b></span><span lang="zh-CHS"><b><span lang="ZH-CN">关系型引擎</span></b></span></p>
<p style="background:white;"><span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据库引擎主要有两部分，这我们里不讨论储存引擎</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(storage engine)</span></span><span lang="zh-CHS">架构，而将会着重在关系型引擎。</span><span></span></span><span lang="ZH-CN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> </span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">由于</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">处理查德询过程步骤相当繁琐，当一句</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">送给</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">时，我们须了解关系型引擎是如何工作的，因为每一句</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS">都必须透过关系型引擎分析处理，最后才会透过储存引擎执行并返回用户所需的数据结果集，理解关系型引擎不仅可以帮我们预先避开效能陷阱，同时也有助于我们减少查询调校和除错时间，下面我将说明几个处理关键步骤。</span><span></span></p>
<p style="background:white;"><span style="font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><span><span><span><span><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/A.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/A.jpg"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/A.jpg" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/A.jpg" border="0" /></a></span></span></span></span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">图一：</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">处理查询简单示意</span></span></p>
<p style="background:white;"><span style="font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/B.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/B.jpg"><img alt=" " src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/75/38/B.jpg" original-url="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-75-38/B.jpg" border="0" /></a></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">图二：</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">处理查询关键步骤流程图</span></span></p>
<p style="background:white;"><b><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;">&nbsp;</span></b></p>
<p style="background:white;"><b><span lang="zh-CHS">分析和绑定</span></b></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">一开始查询优化器会先确认语法正确性，如有错误将会立即返回错误讯息给用户，如果没有错误就会建立分析树并进行对象绑定</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如数据表字段是否存在、数据型别是否正确、函式是否异常</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">..</span></span><span lang="zh-CHS"><span lang="ZH-CN">等</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span><span lang="ZH-CN">，主要是因为</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> TSQL </span><span lang="ZH-CN">并非程序性语言，它无法告知数据库应该用什么样正确步骤来撷取数据，所以这阶段会帮你处理基本语法优化、数据型别转换，简单来说就是会改写</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> TSQL</span><span lang="ZH-CN">，如把</span></span><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> between </span><span lang="zh-CHS"><span lang="ZH-CN">转换为</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> &gt;= and &lt;=</span><span lang="ZH-CN">，型别比较不一致时，自动增加转换函数来确保数据正确性</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">这就可能会大大影响查询效能</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span><span lang="ZH-CN">，</span> </span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><span></span><span lang="zh-CHS">group by </span></span><span lang="zh-CHS"><span lang="ZH-CN">位置</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">..</span></span><span lang="zh-CHS"><span lang="ZH-CN">等，最后将输出逻辑</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">操作</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) </span></span><span lang="zh-CHS">查询树，后面将会依照所输出逻辑查询树步骤来一一执行。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><b><span lang="zh-CHS">查询优化</span></b></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">查询优化几乎可说是最复杂且耗时的阶段</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">所以大家要有一点想象力</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，一开始会先确认计划快取区是否有适当的执行计划，如果没有找到适当执行计划，就会进行一般优化</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如果可以的话</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，然后再次从计划快取区寻找是否有适当的一般计划，如果存在就会分配相关内存并执行，这是因为不必为只有一种可能执行方法的</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">进行完整优化，如此一来可以省下编译和建立执行计划时间，因为我们知道查询效能一部分取决于建立执行计划效率</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">执行查询时间是产生执行计划时间</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> + </span><span lang="ZH-CN">本身数据查询时间</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，所以查询优化器并不会寻找最佳执行计划，而是尽可能寻找最低成本</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">以</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> CBO </span><span lang="ZH-CN">为基础的</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> CPU</span><span lang="ZH-CN">、</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">I/O </span><span lang="ZH-CN">成本</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) </span></span><span lang="zh-CHS"><span lang="ZH-CN">及传回结果速度最快的执行计划，如果该</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">有达到一般计划条件的话，那么查询优化器将可不必进行完整优化而浪费不必要时间，下面我简单列出建立一般计划的情况</span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1. </span><span lang="ZH-CN">只有查询单一数据表，且没有任何</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> order by or group by</span></span><span lang="zh-CHS">。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">2. </span><span lang="zh-CHS">只有查询单一数据表，且该数据表没有任何索引。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">3. </span><span lang="ZH-CN">只有查询单一数据表，且符合</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> SARG (</span><b><span lang="EN" style="color:#424242;font-family:&#39;Calibri&#39;,sans-serif;font-size:9.5pt;">search argrment</span></b><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) </span><span lang="ZH-CN">格式及条件比对使用唯一值</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (unique key)</span></span><span lang="zh-CHS">。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">4. </span><span lang="ZH-CN">查询只使用系统默认函示</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> select getdate()..)</span></span><span lang="zh-CHS">。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">5. </span><span lang="ZH-CN">使用</span></span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><span lang="zh-CHS"> insert..</span><span lang="zh-CHS">values </span></span><span lang="zh-CHS">只新增单一数据表数据。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">现在我们知道，如果查询语法符合一般计划的情况，那么</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">在建立计划时将会省下很多时间，但如果不符合的话，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">将针对该查询撷取所有可用统计值数据</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(</span><span lang="ZH-CN">字段和索引</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，并先从计划快取区寻找是否有符合该查询的执行计划，如果有找适当执行计划的话，就在判断是否需要经过完整优化</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如查询使用了</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">recompile </span><span lang="ZH-CN">提示就必须进行完整优化</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，如果没有找到适当执行计划的话，那么就必须进行完整优化，这个时候查询优化器，会以所输出的逻辑查询树为基准，自我设计各种可能执行的方法，虽然这里会产生多种排列组合，但之前有提过，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS">并不会寻找最佳执行计划，因为寻找最佳执行计划所花费时间成本可能还会高出本身查询所需时间成本，所以只会寻找最低成本执行计划。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">为了加速这处理过程，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">将会采取平行处理来建立执行计划，前提是</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">有多核心且</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">cost threshold for parallelism and max degree of parallelism</span></span><span lang="zh-CHS">两个参数设定正确。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">一般会选择非平行执行计划，但如果非平行计划成本超过平行计划成本，那么</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">将会把负载传送给每个可用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">CPU</span></span><span lang="zh-CHS"><span lang="ZH-CN">，这时将会建立平行执行计划，一般来说，在</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">OLTP</span></span><span lang="zh-CHS"><span lang="ZH-CN">环境中需特别注意采用平行执行计划的查询，因为大多数都是不良</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">、不正确索引或索引遗漏</span></span><span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">..</span></span><span lang="zh-CHS"><span lang="ZH-CN">等造成</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">发生高</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> CPU </span><span lang="ZH-CN">情况</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS">。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS">当完整优化后将产生低成本适当的执行计划，这时就会将该计划存放到计划快取区中，并继续下一运行时间。</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><b><span lang="zh-CHS">计划快取和查询执行</span></b></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">取得相关执行计划后，这时就会将该计划送给储存引擎，由储存引擎来执行该查询并且返回使</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Tahoma&#39;,sans-serif;font-size:9.5pt;"></span></span><span lang="zh-CHS"><span lang="ZH-CN">者所需的数据结果集，这里须注意</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">可能会改变当初估计的执行计划，如果有达到以下条件</span></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1. </span><span lang="zh-CHS">所需数据表和字段统计值过时。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">2. </span><span lang="zh-CHS">执行期间所触及数据或统计值异动过大。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">3. </span><span lang="ZH-CN">非平行执行计划运行时间超过</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> cost threshold for parallelism </span></span><span lang="zh-CHS">设定值。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS">如果执行期间数据、统计值异动过大，将会导致发生重新编译，你可以想象在最后一步骤才知道需要重新编译的话，这无疑对效能是一大伤害。</span></p>
<p style="background:white;"><span lang="zh-CHS">再来就是计划快取区只保留最常执行的查询计划，太久没执行的查询计划可能会自动清除，底下有几个情况会自动清除计划快取区，并再次发生完整优化处理</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1. </span><span lang="ZH-CN">当缓冲池</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (buffer pool) </span><span lang="ZH-CN">针对另一对象需要更多内存</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">2. </span><span lang="ZH-CN">当查询计划不被任何联机使用</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">3. </span><span lang="ZH-CN">当查询计划成本因子为</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> 0</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">这里简单说明一下计划成本因子，每个执行计划都有该成本因子，每一次执行该执行计划就会自动累加</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1</span></span><span lang="zh-CHS"><span lang="ZH-CN">，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">并不会自动递减该成本因子，但如果计划快取区大小达到</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">buffer pool</span></span><span lang="zh-CHS"><span lang="ZH-CN">大小</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">50%</span></span><span lang="zh-CHS"><span lang="ZH-CN">时，当下一次计划快取区被存取时，这是就会将快取区所有执行计划的成本因子都减</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1</span></span><span lang="zh-CHS"><span lang="ZH-CN">，这时如有成本因子为</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">0</span></span><span lang="zh-CHS">的就会被清除掉。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">为了要善用计划快取区，所以我们要尽量避免</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">发生内存不足问题，如果你遇到内存压力问题，可以开启</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">optimize for ad hoc workloads (SQL 2008 </span><span lang="ZH-CN">以后才有</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) </span></span><span lang="zh-CHS"><span lang="ZH-CN">来减轻内存压力</span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">-- </span><span><span lang="zh-CHS"><span lang="ZH-CN">开启</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">optimize for ad hoc workloads</span></span></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">sp_CONFIGURE &#39;show advanced options&#39;,1</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">reconfigure</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">go</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">sp_CONFIGURE &#39;optimize for ad hoc workloads&#39;,1</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">reconfigure</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">go</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">select * from master.sys.configurations</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">where name=&#39;optimize for ad hoc workloads&#39;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">go</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">同时我们也要避免在正式环境中手动清除计划快取区</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">使用</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> DBCC FREEPROCCACHE)</span></span><span lang="zh-CHS">，因为这将导致所有查询都需要重新编译且降低查询效能。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">再来就是我们要尽可能提高执行计划重用率并小心误用错误执行计划所造成效能问题，我简单整理以下</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-size:9.5pt;"> </span> <span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">5 </span><span lang="ZH-CN">点可帮助你执行查询时，提高执行计划重用机率</span></span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1. </span><span lang="ZH-CN">避免</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> ad hoc </span><span lang="ZH-CN">查询类型</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">2. </span><span lang="ZH-CN">动态组</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> SQL </span><span lang="ZH-CN">字符串请使用</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> sp_executesql </span><span lang="ZH-CN">取代</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> exec</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">3. </span><span lang="ZH-CN">查询异动值请明确使用参数取代</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">4. </span><span lang="ZH-CN">尽量使用</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> SP </span><span lang="ZH-CN">但须注意参数探测问题</span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">5. </span><span lang="ZH-CN">尽量使用两字节表示</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (dbo.usp_getdate)</span><span lang="ZH-CN">，避免隐式解析</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><b><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;">SQL 2014</span> </b></span><span lang="zh-CHS"><b><span lang="ZH-CN">查询优化器改善</span></b></span><span><b> <span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;">-- </span> </b></span><span lang="zh-CHS"><b><span lang="ZH-CN">新基数估计算法</span></b></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">取得最低成本执行计划虽然对大多数情况来说是好的，但并不表示该计划一定是最佳的，为了取得更好执行计划，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL 2014</span></span><span lang="zh-CHS"><span lang="ZH-CN">采用新基数估计算法来进行改善，简单来说就是查询效能会比以前的版本更好，而以前的</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS"><span lang="ZH-CN">版本都将会遇到旧基数估计演算</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(Plan Regressions)</span></span><span lang="zh-CHS"><span lang="ZH-CN">而造成的效能问题，该问题详细可参考</span></span><span lang="zh-CHS"><span lang="ZH-CN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> </span> <span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fwww.dotblogs.com.tw%2Fricochen%2Farchive%2F2014%2F02%2F09%2F142874.aspx" target="_top"><span style="color:blue;">[SQL SERVER]</span><span lang="ZH-CN">统计值能吃吗</span><span style="color:blue;">? </span> </a> </span></span><span lang="zh-CHS">一文。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><b><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;">SQL 2014 in-memory OLTP</span> </b></span><span lang="zh-CHS"><b><span lang="ZH-CN">引擎</span></b></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL 2014</span></span><span lang="zh-CHS"><span lang="ZH-CN">可以让我们建立</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表来优化</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">OLTP</span></span><span lang="zh-CHS"><span lang="ZH-CN">效能，这意味者过去数据表使用硬盘存放并有高资源竞争问题都将获得改善，最大改变就是</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表将不会有任何</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">latch</span></span><span lang="zh-CHS"><span lang="ZH-CN">和</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">lock</span></span><span lang="zh-CHS"><span lang="ZH-CN">，那你可能会担心交易过程数据一致问题</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(ACID)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，这部分在</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL 2014</span></span><span lang="zh-CHS"><span lang="ZH-CN">则是使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Multiversion Concurrency Control (MVCC)</span></span><span lang="zh-CHS"><span lang="ZH-CN">技术来隔离交易不被干扰，同时也避免</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">lock</span></span><span lang="zh-CHS"><span lang="ZH-CN">问题，也可让任何用户随时存取</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表资源，因为内存中的操作对用户来说都是一闪即逝的过程</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">短暂交易最有利</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS">，用户几乎不会有任何等待的感觉出现。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL 2014</span></span><span lang="zh-CHS"><span lang="ZH-CN">还提供了原生编译的储存程序，透过原生编译的储存程序来存取</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表可将效能提高是以前版本约</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">50%</span></span><span lang="zh-CHS"><span lang="ZH-CN">效益</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(<a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fblogs.technet.com%2Fb%2Ffranmer%2Farchive%2F2014%2F04%2F25%2Fsql-2014-technologie-in-memory.aspx" target="_top"><span lang="ZH-CN">微软官方数据</span></a>)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，主要是因为产生的机器码</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(machine code)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，只针对该查询建立应该要执行处理器指令</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">无须进一步编译或解释</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，可以更有效率执行查询，并且更快速得撷取数据，下面我们会使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory OLTP</span></span><span lang="zh-CHS">引擎来简单测试不同持久性设定并执行新增数据效能差异。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">建立</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory DB</span></span><span lang="zh-CHS"><span lang="ZH-CN">和</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Table (schema_and_data &amp; schema_only)</span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">CREATE DATABASE memoryDB</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> ON PRIMARY (</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> NAME = [E:\SQLDataFile\memoryDB_data]</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> ,FILENAME = &#39;E:\SQLDataFile\memoryDB_data.mdf&#39;</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> ,FILEGROUP [memoryDB_FG] CONTAINS MEMORY_OPTIMIZED_DATA (</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> NAME = [memoryDB_dir]</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> ,FILENAME = &#39;E:\memoryDB_dir&#39;</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> LOG ON (</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> NAME = [memoryDB_log]</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> ,Filename = &#39;E:\SQLDataFile\memoryDB_log.ldf&#39;</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;&nbsp;&nbsp; )</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">GO</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">CREATE TABLE MemorySchemaAndData</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> id int NOT NULL,</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> c1 nchar(1) NOT NULL,</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> CONSTRAINT PK_MemorySchemaAndData PRIMARY KEY NONCLUSTERED HASH (id) WITH (BUCKET_COUNT = 150000)</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">CREATE TABLE MemorySchemaOnly</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> id int NOT NULL,</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> c1 nchar(1) NOT NULL,</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> CONSTRAINT PK_MemorySchemaOnly PRIMARY KEY NONCLUSTERED HASH (id) WITH (BUCKET_COUNT = 150000)</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY)</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">进行测试之前我简单说一下建立</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表注意事项</span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Schema_and_data</span></span><span lang="zh-CHS"><span lang="ZH-CN">：</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">OLAP</span></span><span lang="zh-CHS"><span lang="ZH-CN">系统中，该内存数据表类型最常被使用，透过持久性选项设定，可以确保</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS">发生崩溃后相关数据表结构和数据依然会保留。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Schema_only</span></span><span lang="zh-CHS"><span lang="ZH-CN">：内存中只存放数据表结构</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(metadata)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS">发生崩溃后相关数据会消失。</span><span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">前面我们有提到，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory OLTP</span></span><span lang="zh-CHS"><span lang="ZH-CN">引擎会建立</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">machine code</span></span><span lang="zh-CHS"><span lang="ZH-CN">，所以每一个</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表都有一颗相对应</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">dll (</span><span lang="ZH-CN">如下图</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，当该数据表被加载时，可以避免编译或解释，因此可以更快取得查询数据，同时因为都会被加载到内存中，所以限制每个数据表内存大小也是相当重要的事，微软有提供一个</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> <a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fmsdn.microsoft.com%2Fzh-tw%2Flibrary%2Fdn282389.aspx" target="_top"><span lang="ZH-CN">估算内存大小公式</span></a> </span></span><span lang="zh-CHS"><span lang="ZH-CN">，当你要将数据表移转到</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS">数据表时，还请不要忘记该重要环节。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><b><span lang="ZH-CN">测试新增数据到</span></b></span><span lang="zh-CHS"><b> <span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;">in-memory</span> </b></span><span lang="zh-CHS"><b><span lang="ZH-CN">数据表</span></b></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Schema_and_data</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">DECLARE @step INT</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SET @step = 1</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">WHILE @step &lt;= 120000</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> BEGIN</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><span lang="zh-CHS"> INSERT INTO dbo.</span><span lang="zh-CHS">MemorySchemaAndData</span></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> VALUES (@step, &#39;1&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+1, &#39;2&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+2, &#39;3&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+3, &#39;4&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+4, &#39;5&#39;)</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> SET @step = @step + 5</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> END</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">12</span></span><span lang="zh-CHS"><span lang="ZH-CN">万笔约花</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">8</span></span><span lang="zh-CHS">秒。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Schema_only</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">DECLARE @step INT</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SET @step = 1</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">WHILE @step &lt;= 120000</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> BEGIN</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><span lang="zh-CHS"> INSERT INTO dbo.</span><span lang="zh-CHS">MemorySchemaOnly</span></span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> VALUES (@step, &#39;1&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+1, &#39;2&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+2, &#39;3&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+3, &#39;4&#39;),</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (@step+4, &#39;5&#39;)</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> SET @step = @step + 5</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> END</span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">12</span></span><span lang="zh-CHS"><span lang="ZH-CN">万笔几乎</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">0</span></span><span lang="zh-CHS">秒。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">确认</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表数据</span></span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">当</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">schema_only</span></span><span lang="zh-CHS"><span lang="ZH-CN">选项时，新增数据处理几乎没花费任何时间，但我前面有提到过，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">schema_only</span></span><span lang="zh-CHS"><span lang="ZH-CN">在</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server</span></span><span lang="zh-CHS">发生崩溃后，将不会保留任何数据，所以当你使用该选项时必须要清楚了解该特性，以免发生数据无法复原的惨剧。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">重新启动</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL Server DB (</span><span lang="ZH-CN">仿真</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> SQL Server </span><span lang="ZH-CN">崩溃</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，并确认</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS"><span lang="ZH-CN">数据表数据状况</span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Use Master</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">go</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">ALTER DATABASE memoryDB SET OFFLINE WITH ROLLBACK IMMEDIATE</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">GO</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">ALTER DATABASE memoryDB SET ONLINE</span></p>
<p style="background:white;"><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">GO</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Schema_only</span></span><span lang="zh-CHS"><span lang="ZH-CN">的</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">in-memory</span></span><span lang="zh-CHS">数据表数据都无保留。</span><span></span></p>
<p style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">&nbsp;</span></p>
<p style="background:white;"><b><span lang="zh-CHS" style="color:#424242;font-family:&#39;Noto Sans&#39;;">TSQL on Azure</span></b></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">如有你有使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Azure SQL Database</span></span><span lang="zh-CHS"><span lang="ZH-CN">的话，那么在撰写</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS">时需要留意以下几个重点。</span><span></span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">1. </span><span lang="ZH-CN">善用数据表值参数</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">SQL 2014</span></span><span lang="zh-CHS"><span lang="ZH-CN">有加强数据表值参数</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(SQL Azure </span><span lang="ZH-CN">也一样</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，就是数据表值参数可以使用索引来提高查询效能，以前大家可能比较常用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">temp table</span></span><span lang="zh-CHS"><span lang="ZH-CN">来处理元数据，但在</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Azure</span></span><span lang="zh-CHS"><span lang="ZH-CN">上需要当心使用过多的</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">tempdb</span></span><span lang="zh-CHS"><span lang="ZH-CN">资源，毕竟</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">tempdb</span></span><span lang="zh-CHS"><span lang="ZH-CN">只有一个</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">大家共享</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，所以当使用过多</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">tempdb</span></span><span lang="zh-CHS"><span lang="ZH-CN">资源时，</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Azure</span></span><span lang="zh-CHS"><span lang="ZH-CN">可能会自动切断联机，所以建议使用数据表值参数取代</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">temp</span></span><span lang="zh-CHS">数据表来处理元数据。</span><span></span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">2. </span><span lang="ZH-CN">减少数据网络来回次数</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">由于网络质量我们无法掌握，所以一定要减少数据在</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Azure</span></span><span lang="zh-CHS"><span lang="ZH-CN">和</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Client</span></span><span lang="zh-CHS"><span lang="ZH-CN">之间的往来次数，同时也要建立一套安全</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">retry</span></span><span lang="zh-CHS"><span lang="ZH-CN">机制，基本上都建议采取批处理</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如一次捞所需的数据结果集</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，少用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">row by row</span></span><span lang="zh-CHS"><span lang="ZH-CN">方式</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">这也增加</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> Azure </span><span lang="ZH-CN">费用成本</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">) </span></span><span lang="zh-CHS"><span lang="ZH-CN">来查询数据或进行数据异动</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">c ursor)</span></span><span lang="zh-CHS"><span lang="ZH-CN">，且所有</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">TSQL</span></span><span lang="zh-CHS"><span lang="ZH-CN">请使用</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">try.. catch</span></span><span lang="zh-CHS"><span lang="ZH-CN">包起来，如遇到问题</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> (</span><span lang="ZH-CN">如网络断线</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">..</span></span><span lang="zh-CHS"><span lang="ZH-CN">等</span></span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span><span lang="zh-CHS">才可以有相对应处理方法。</span><span></span></p>
<p lang="zh-CHS" style="background:white;"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">3. </span><span lang="ZH-CN">善用快取</span></p>
<p style="background:white;"><span lang="zh-CHS"><span lang="ZH-CN">可以在数据表中新增</span></span><span lang="zh-CHS"><span lang="ZH-CN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> </span> <span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"><a href="http://www.microsofttranslator.com/bv.aspx?from=zh-CHT&amp;to=zh-CHS&amp;a=http%3A%2F%2Fmsdn.microsoft.com%2Fzh-tw%2Flibrary%2Fms182776.aspx" target="_top"><span style="color:blue;">rowversion</span> </a> </span><span lang="ZH-CN">字段，这样我们就可以轻易使用该字段</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">(</span><span lang="ZH-CN">注意该字段不建议成为索引键值</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">)</span></span><span lang="ZH-CN"><span lang="zh-CHS">来判断上次读取数据列后，数据列中任何值是否有改变，</span><span lang="zh-CHS">如果没有改变的话就读取本地快取数据，否则就读取</span></span><span lang="zh-CHS"><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;">Azure</span><span lang="ZH-CN">上数据，这不仅可以大幅提高效能，同时也可以省下不少</span><span lang="EN" style="color:#424242;font-family:&#39;Noto Sans&#39;;font-size:9.5pt;"> Azure </span></span><span lang="zh-CHS">费用成本。</span></p>]]></content:encoded>
    </item>
  </channel>
</rss>