匯出 (0) 列印
全部展開

教學課程:混合式 IT 中因應災害復原的記錄傳送

更新日期: 2014年11月

本教學課程示範如何在混合式 IT 環境中實作端對端 SQL Server 記錄傳送。在教學課程結束時,您的 SQL Server AlwaysOn 方案將會包含下列項目:

  • 包含多個子網路的虛擬網路 (包括前端和後端子網路)

  • 在內部部署網路的 VPN 裝置後方執行的網域控制站和一部 SQL Server 電腦

  • Azure VPN 裝置與內部部署 VPN 裝置之間的網站間 VPN 連線

  • 部署至 Azure 後端子網路並加入內部部署 AD 網域的 SQL Server VM

  • 設定為主要資料庫伺服器的內部部署 SQL Server 電腦

  • 設定為次要資料庫伺服器且位於 Azure 中的 SQL Server VM

本教學課程包含如何設定端對端方案的指示,包括設定內部部署虛擬私人網路 (10.0.0.0/24) 和虛擬 Active Directory 網域 (corp.contoso.com)。

本教學課程用意為示範設定上述方案所需的步驟,但不會闡述每個步驟的細節。因此,本教學課程不會顯示 GUI 組態步驟,而是使用 PowerShell 指令碼引導您快速進行每個步驟。指令碼會假設以下程序:

  1. 在要做為網域控制站和 DHCP 伺服器的內部部署電腦上,安裝 Windows Server 2008 R2。

  2. 將電腦連接到網際網路,並安裝所有更新。

  3. 中斷電腦與網際網路的連接,然後將電腦連接到與 VPN 裝置相同的子網路。

  4. 在系統管理員模式下開啟 Windows PowerShell 視窗。

  5. 定義稍後要用來設定此電腦的下列 PowerShell 變數:

    $dcName = "DC1"
    $dcIP = "10.0.0.1"
    $subnetMask = "255.255.255.0"
    $gatewayIP = "10.0.0.2"
    $password = "Contoso!000"
    
    
  6. 將電腦上之網域控制站的 IP 位址設定為 10.0.0.1,並使用子網路遮罩 255.255.255.0 和閘道 IP 位址 10.0.0.2

    netsh interface ip set address name="Local Area Connection" static $dcIP $subnetMask $gatewayIP 1
    
  7. 將電腦重新命名為 DC1

    netdom renamecomputer $ENV:COMPUTERNAME /newname:$dcName /usero:Administrator /passwordo:$password /force /reboot
    
  8. 在電腦重新啟動之後,請重新登入,然後定義下列 PowerShell 變數,以將此電腦設定為網域控制站:

    $domainSuffix = "corp.contoso.com"
    $domainNetBIOS = "CORP"
    $password = "Contoso!000"
    
    
  9. 執行 DCPROMO.EXE,以在新的網域樹系中建立 Active Directory 網域 corp.contoso.com

    dcpromo.exe `
        /unattend `
        /ReplicaOrNewDomain:Domain `
        /NewDomain:Forest `
        /NewDomainDNSName:$domainSuffix `
        /ForestLevel:4 `
        /DomainNetbiosName:$domainNetBIOS `
        /DomainLevel:4 `
        /InstallDNS:Yes `
        /ConfirmGc:Yes `
        /CreateDNSDelegation:No `
        /SafeModeAdminPassword:"$password" 
    

    一旦電腦重新啟動,即會成為新建立之 corp.contoso.com 網域的網域控制站。

  10. 以 CORP\Administrator 及密碼Contoso!000 登入網域控制站。此密碼與您在本教學課程其餘部分所使用的密碼相同。

  11. 在系統管理員模式下開啟 Windows PowerShell 視窗。

  12. 定義下列 PowerShell 變數,以協助您設定網域。

    $dcName = "DC1"
    $dcIP = "10.0.0.1"
    $gatewayIP = "10.0.0.2"
    $scopeIP = "10.0.0.0"
    $scopeName = "Corpnet"
    $scopeStart = "10.0.0.100"
    $scopeEnd = "10.0.0.150"
    $domainSuffix = "corp.contoso.com"
    $pwd = ConvertTo-SecureString "Contoso!000" -AsPlainText -Force
    
  13. 匯入 Active Directory PowerShell 模組,並建立大量使用者。

    Import-Module ActiveDirectory
    
    New-ADUser -Name 'Install' -AccountPassword $pwd -PasswordNeverExpires $true -ChangePasswordAtLogon $false -Enabled $true
    New-ADUser -Name 'SQLAgent1' -AccountPassword $pwd -PasswordNeverExpires $true -ChangePasswordAtLogon $false -Enabled $true
    New-ADUser -Name 'SQLAgent2' -AccountPassword $pwd -PasswordNeverExpires $true -ChangePasswordAtLogon $false -Enabled $true
    

    CORP\SQLAgent1CORP\SQLAgent2 是做為兩部 SQL Server 執行個體伺服器上執行之 SQL Server Agent 服務的服務帳戶。

  14. 以私人子網路的新範圍設定 DHCP 服務。閘道 IP 位址會設定為 10.0.0.2,您將設定內部部署 VPN 裝置使用此位址。

    Import-Module ServerManager
    Add-WindowsFeature DHCP
    Set-Service dhcpserver -StartupType automatic
    Start-service dhcpserver
    netsh dhcp server add scope $scopeIP 255.255.255.0 $scopeName $scopeName
    netsh dhcp server scope $scopeIP set state 0
    netsh dhcp server scope $scopeIP add iprange $scopeStart $scopeEnd
    netsh dhcp server scope $scopeIP set optionvalue 003 IPADDRESS $gatewayIP
    netsh dhcp server scope $scopeIP set optionvalue 006 IPADDRESS $dcIP
    netsh dhcp server scope $scopeIP set optionvalue 015 STRING $domainSuffix
    netsh dhcp server scope $scopeIP set state 1
    netsh dhcp add server $dcName.$domainSuffix $dcIP 
    

現在您具有執行於私人子網路上之運作正常的 TCP/IP 網路,以及運作正常的 Active Directory 網域。您可以接著設定內部部署 SQL Server 系統。

  1. 在要做為內部部署 SQL Server 執行個體的另一部內部部署電腦上,安裝 Windows Server 2008 R2。

  2. 將電腦連接到網際網路,並安裝所有更新。

  3. 中斷電腦與網際網路的連接,然後將電腦連接到與 VPN 裝置相同的子網路。

  4. 在系統管理員模式下開啟 Windows PowerShell 視窗。

  5. 將電腦加入您先前建立的 CORP 網域。如果您使用現有的內部部署網路和網域,請將電腦加入組織的對應網域。將個別電腦的 $computerName 變數變更為 SQLOnPrem

    $domain = "CORP"
    $domainAdmin = "CORP\Administrator"
    $password = "Contoso!000"
    
    $computerName = SQLOnPrem
    netdom join $env:COMPUTERNAME /domain:$domain /userd:$domainAdmin /passwordd:$password 
    netdom renamecomputer $env:COMPUTERNAME /newname:$computerName /userd:$domainAdmin /passwordd:$password /force /reboot
    

    執行這些命令之後,電腦會自動重新啟動。

  6. 當電腦完成重新啟動之後,請以本機系統管理員身分重新登入,然後在系��管理員模式下開啟 Windows PowerShell 視窗。

  7. 設定代表安裝目錄的變數,並在 SQLOnPrem 上安裝 SQL Server 2012。

    $installDir = "<Directory of SQL Server Setup.exe>"
    $agtsvcacct = "CORP\SQLAgent1"
    $sqlAdmin = "CORP\Install"
    $password = "Contoso!000"
    
    cd $installDir
    .\Setup.exe `
        /q `
        /ACTION=Install `
        /FEATURES=SQL,SSMS `
        /INSTANCENAME=MSSQLSERVER `
        /AGTSVCACCOUNT="$agtsvcacct" `
        /AGTSVCPASSWORD="$password" `
        /SQLSYSADMINACCOUNTS="$sqlAdmin" `
        /IACCEPTSQLSERVERLICENSETERMS
    
    
  8. 開啟防火牆,允許 SQL Server 的遠端存取。

    netsh advfirewall firewall add rule `
        name='SQL Server (TCP-In)' `
        program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' `
        dir=in `
        action=allow `
        protocol=TCP
    
    
  9. 啟用預設執行個體上的 TCP 通訊協定,並重新啟動 SQL Server 服務。

    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
    $wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $env:COMPUTERNAME
    $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp'].IsEnabled = "True"
    $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp'].Alter()
    $svc = Get-Service -Name 'MSSQLSERVER'
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $svc.Stop(); 
    $svc.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc.Start(); 
    $svc.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout) 
    
  10. CORP\Install 加入成為本機系統管理員。您將使用此使用者設定 WSFC 叢集和可用性群組。

    net localgroup administrators "$sqlAdmin" /Add
    
  11. 登出這兩部電腦。

    Logoff.exe
    

您現在已完成內部部署私人子網路和 SQL Server 組態。接下來,您將設定內部部署私人子網路與 Azure 網路之間的 VPN 連線,然後在 Azure 中建立加入網域的 SQL Server VM。

  1. 在連接到網際網路之電腦的 PowerShell 視窗中,匯入 Azure 模組、將發行設定檔案下載至您的電腦,然後匯入已下載的發行設定,以便將您的 PowerShell 工作階段連接到您的 Azure 訂用帳戶。

    Import-Module `
        "C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\Azure\Azure.psd1"
    Get-AzurePublishSettingsFile
    Import-AzurePublishSettingsFile <publishsettingsfilepath> 
    

    Get-AzurePublishgSettingsFile 命令會自動產生管理憑證,使您的電腦可以下載 Azure。系統會自動開啟瀏覽器,並提示您輸入 Azure 訂閱的 Microsoft 帳戶認證。下載的 .publishsettings 檔案包含了所有管理 Azure 訂閱所需的資訊。將此檔案儲存至本機目錄之後,請使用 Import-AzurePublishSettingsFile 命令予以匯入。

    security安全性 附註
    publishsettings 檔案包含用來管理 Azure 訂用帳戶和服務的認證 (未編碼)。這個檔案的安全性最佳作法是暫時儲存在來源目錄之外 (例如在 Libraries\Documents 資料夾),然後在匯入完成後予以刪除。如果惡意使用者獲得 publishsettings 檔案的存取權,就可以編輯、建立和刪除您的 Azure 服務。

  2. 將您用來建立雲端 IT 基礎結構的一系列變數加以定義。

    $workingDir = "C:\workingDirectory\"
    $location = "West US"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $virtualNetworkName = "ContosoNET" 
    $localNetworkName = "ContosoNETLocal"
    $networkConfigPath = $workingDir + "NetworkConfig.xml"
    $storageAccountName = "<uniquestorageaccountname>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://$storageAccountName.blob.core.windows.net/vhds/"
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $serviceName = "<uniqueservicename>"
    $sqlServerName = "SQLInCloud"
    $vmAdminUser = "AzureAdmin" 
    $vmAdminPassword = "Contoso!000"
    $dnsSettings = New-AzureDns -Name "LocalDC" -IPAddress "10.0.0.1"
    $domainName= "corp"
    $domainSuffix = "corp.contoso.com"
    $subnetName = "CloudBack"
    $domainUser = "Administrator"
    $dataDiskSize = 100
    

    請注意下列事項,如此才可確保命令稍後不會失敗:

    • 由於變數 $storageAccountName$serviceName 分別用於分辨網際網路上的雲端儲存體帳戶和雲端伺服器,因此必須是唯一的變數。

    • 您會在稍後使用的虛擬網路組態文件中,設定變數 $affinityGroupName$virtualNetworkName$localNetworkName 的指定名稱。

    • $sqlImageName 指定包含 SQL Server 2012 Service Pack 1 Enterprise Edition 之 VM 映像的更新名稱。

    • 為了簡化過程,本教學課程全程使用相同的密碼 Contoso!000

  3. 建立同質群組。

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. 透過匯入組態檔 NetworkConfig.xml,來建立虛擬網路。

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    此組態檔包含了下列 XML 文件。簡而言之,此檔案會在同質群組 ContosoAG 中指定虛擬網路 ContosoNET,並具有位址空間 10.10.0.0/16CloudBack 子網路或 10.1.1.0/24 是您放置 SQL Server VM 的位置。Azure 會使用 GatewaySubnet 子網路或 10.1.254.0/24 來放置虛擬 VPN 裝置。您無法變更子網路名稱 GatewaySubnet。如果您變更上述 $affinityGroupName$virtualNetworkName$localNetworkName 變數,也必須變更下列對應名稱。此外,本文將內部部署 DNS 伺服器的 IP 位址設定為 10.0.0.1,並參照 DnsServersRef 項目中的此 DNS 伺服器。

    <NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns>
          <DnsServers>
            <DnsServer name="LocalDC" IPAddress="10.0.0.1" />
          </DnsServers>
        </Dns>
        <LocalNetworkSites>
          <LocalNetworkSite name="ContosoNETLocal">
            <AddressSpace>
              <AddressPrefix>10.0.0.0/24</AddressPrefix>
            </AddressSpace>
            <VPNGatewayAddress>24.12.228.169</VPNGatewayAddress>
          </LocalNetworkSite>
        </LocalNetworkSites>
        <VirtualNetworkSites>
          <VirtualNetworkSite name="ContosoNET" AffinityGroup="ContosoAG">
            <AddressSpace>
              <AddressPrefix>10.1.0.0/16</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="CloudBack">
                <AddressPrefix>10.1.1.0/24</AddressPrefix>
              </Subnet>
              <Subnet name="GatewaySubnet">
                <AddressPrefix>10.1.254.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
            <DnsServersRef>
              <DnsServerRef name="LocalDC" />
            </DnsServersRef>
            <Gateway profile="Small">
              <ConnectionsToLocalNetwork>
                <LocalNetworkSiteRef name="ContosoNETLocal" />
              </ConnectionsToLocalNetwork>
            </Gateway>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>
    
  5. 建立虛擬網路閘道,並等候閘道完成佈建。

    New-AzureVNetGateway -VNetName $virtualNetworkName
    
    $gateway = Get-AzureVNetGateway -VNetName $virtualNetworkName
    While ($gateway.State -ne "Provisioned")
    {
        write-host "Waiting...Current State = " $gateway.Status
        Start-Sleep -Seconds 15
        $gateway = Get-AzureVNetGateway -VNetName $virtualNetworkName
    }
    
    "IP Address   : " + $gateway.VIPAddress
    "Preshared Key: " + (Get-AzureVNetGatewayKey -VNetName $virtualNetworkName -LocalNetworkSiteName $localNetworkName).Value
    
    

    虛擬網路閘道需要一些時間佈建。佈建後,閘道的公用 IP 位址和預先共用金鑰會顯示在 PowerShell 視窗中。

  6. 使用虛擬網路閘道的公用 IP 位址和預先共用金鑰,來設定您的內部部署 VPN 裝置。若要使用 VPN 裝置特定的組態指令碼,請參閱關於虛擬網路的 VPN 裝置

    在這個步驟結束時,您的 VPN 連線應該完全連接。如需詳細資訊,請參閱建立網站間的 VPN 連線

  7. 繼續連接網際網路之電腦上的 PowerShell 視窗,並建立與您所建立之同質群組相關聯的儲存體帳戶。

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  8. 在新的雲端服務中建立 SQL Server VM。

    New-AzureVMConfig `
        -Name $sqlServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sqlServerName.vhd" `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $domainSuffix `
            -DomainUserName $domainUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1 `
                    -LocalPort 1433 | 
                    New-AzureVM `
                        -ServiceName $serviceName `
                        -AffinityGroup $affinityGroupName `
                        -VNetName $virtualNetworkName `
                        -DnsSettings $dnsSettings
    

    此一連串的管道命令會執行下列動作:

    • New-AzureVMConfig 使用虛擬機器映像庫中的 SQL Server 2012 Service Pack 1 Enterprise Edition 映像建立 VM 組態,它也會將作業系統磁碟設定為唯讀快取 (無寫入快取)。建議您將資料庫檔案移轉至您連接至 VM 的個別資料磁碟,並設定為無讀取或寫入快取。不過,由於兩部內部部署資料庫伺服器均使用 C 磁碟機來存放資料庫檔案,因此您將放棄移動資料庫檔案。如此一來,當稍後全部加入 WSFC 叢集時,Azure VM 可能會與組態中的所有內部部署伺服器相同。

    • Add-AzureProvisioningConfig 會將 VM 加入您建立的內部部署 Active Directory 網域。

    • Add-AzureEndpoint 會加入存取端點,以便用戶端應用程式存取網際網路上的 SQL Server 服務執行個體。

    • New-AzureVM 建立新的雲端服務,並在此服務中建立新的 Azure VM。

  9. 等候新的 VM 完整佈建,並將遠端桌面檔案下載至您的工作目錄。等候迴圈會持續輪詢新的 Azure VM,直到已備妥可供使用為止。

    $VMStatus = Get-AzureVM -ServiceName $serviceName -Name $sqlServerName
    
    While ($VMStatus.Status -ne "ReadyRole")
    {
        write-host "Waiting...Current Status = " $VMStatus.InstanceStatus
        Start-Sleep -Seconds 15
        $VMStatus = Get-AzureVM -ServiceName $serviceName -Name $sqlServerName
    } 
    Get-AzureRemoteDesktopFile `
        -ServiceName $serviceName `
        -Name $sqlServerName `
        -LocalPath "$workingDir$sqlServerName.rdp"
    

接下來,您將連接到新的 SQL Server VM SQLInCloud,並初始化此 VM。

在本節中,您必須在所建立並準備加入可用性群組之新的 SQL Server VM 上,修改預設 SQL Server 安裝。具體來說:

  • VM 安裝時會隨附所有 SQL Server 服務 (如 Database Engine、SSIS、SSAS、SSRS 等)。除了 MSSQLSERVER 預設執行個體和全文檢索搜尋背景程式是必備項目外,您將需要停用其餘的任何 SQL 服務。

  • 您必須將 SQL Server Agent 的服務帳戶變更為 CORP\SQLAgent2

  • 已啟用 SQL Server VM 上的 TCP 通訊協定。不過,您仍必須開啟防火牆允許 SQL Server 的遠端存取。

  1. 透過啟動遠端桌面檔案連接到 SQLInCloud。使用您在建立 VM 時所指定的電腦系統管理員使用者名稱 AzureAdmin 及密碼 Contoso!000

  2. 確認電腦已成功加入 corp.contoso.com

  3. 等候 SQL Server 安裝完成執行自動初始化工作,再繼續進行。

  4. 在系統管理員模式下開啟 PowerShell 視窗。

  5. 定義下列變數。

    $desirableServices = @("SqlServer","SqlAgent","9")
    $svcaccount = "CORP\SQLAgent2"
    $password = "Contoso!000"
    

    $desirableServices 變數該行內,SqlServer 是 Database Engine 服務的服務類型、SqlAgent 是 SQL Server Agent 服務的服務類型,而 9 是全文檢索搜尋背景程式的服務類型。

  6. 匯入 SQL Server PowerShell 提供者。

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  7. 停止所有不必要的 SQL 服務 (SSIS、SSAS、SSRS 等) 並將其啟動模式設定為 Disabled

    $wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $env:COMPUTERNAME
    $wmi.services | where {$desirableServices -notcontains $_.Type} | foreach{$_.StartMode = "Disabled"; $_.Alter(); $_.Stop();}
    
  8. 將預設執行個體的 SQL Server Agent 服務帳戶變更為 CORP\SQLAgent2

    $wmi.services | where {$_.Type -eq 'SqlAgent'} | foreach{$_.SetServiceAccount($svcaccount,$password)}
    $svc = Get-Service -Name 'SQLSERVERAGENT'
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $svc.Stop(); 
    $svc.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    # Start the SQL Server service and wait for the service to be fully started
    $svc.Start(); 
    $svc.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  9. 開啟防火牆,允許 SQL Server 的遠端存取。

    netsh advfirewall firewall add rule name='SQL Server (TCP-In)' program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' dir=in action=allow protocol=TCP
    

最後,您要準備設定記錄傳送。

  1. 透過啟動遠端桌面檔案再次連接到 SQLOnPrem。請使用內建的系統管理員帳戶登入。

  2. 在系統管理員模式下開啟 PowerShell 視窗。如果您先前未曾登出 SQLOnPrem,就必須關閉現有的 PowerShell 視窗,然後在系統管理員模式下開啟新視窗,以確保將 SQL Server 路徑載入至 PowerShell 環境變數。

  3. 建立網路共用以供記錄傳送作業使用。

    $backup = "C:\LocalBackup"
    $acct1 = "CORP\SQLAgent1"
    $acct2 = "CORP\SQLAgent2"
    
    New-Item $backup -ItemType directory
    net share backup=$backup "/grant:$acct1,FULL" "/grant:$acct2,FULL"
    icacls.exe "$backup" /grant:r ("$acct1" + ":(OI)(CI)F") ("$acct2" + ":(OI)(CI)F")
    
  4. 執行下列 Transact-SQL 指令碼,在 SQLOnPrem 上設定記錄傳送。這段指令碼是從 SQL Server Management Studio (SSMS) 使用者介面產生,所用的變數如下:

    1. 資料庫:MyDB1

    2. 備份目錄:C:\LocalBackup

    3. 備份目錄共用路徑:\\SQLOnPrem\backup

    4. 次要伺服器:SQLInCloud

    5. 記錄備份的目的地目錄 (在 SQLInCloud 上):C:\LocalBackup

    稍後您將在 SQLInCloud 上執行 SSMS 產生之指令碼的第二部分。

    SQLCMD -S SQLOnPrem
    
    DECLARE @LS_BackupJobIdAS uniqueidentifier 
    DECLARE @LS_PrimaryIdAS uniqueidentifier 
    DECLARE @SP_Add_RetCodeAs int 
    
    
    EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database 
    @database = N'MyDB1' 
    ,@backup_directory = N'C:\LocalBackup' 
    ,@backup_share = N'\\SQLOnPrem\backup' 
    ,@backup_job_name = N'LSBackup_MyDB1' 
    ,@backup_retention_period = 4320
    ,@backup_compression = 2
    ,@backup_threshold = 60 
    ,@threshold_alert_enabled = 1
    ,@history_retention_period = 5760 
    ,@backup_job_id = @LS_BackupJobId OUTPUT 
    ,@primary_id = @LS_PrimaryId OUTPUT 
    ,@overwrite = 1 
    
    
    IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) 
    BEGIN 
    
    DECLARE @LS_BackUpScheduleUIDAs uniqueidentifier 
    DECLARE @LS_BackUpScheduleIDAS int 
    
    
    EXEC msdb.dbo.sp_add_schedule 
    @schedule_name =N'LSBackupSchedule_SQL11' 
    ,@enabled = 1 
    ,@freq_type = 4 
    ,@freq_interval = 1 
    ,@freq_subday_type = 4 
    ,@freq_subday_interval = 15 
    ,@freq_recurrence_factor = 0 
    ,@active_start_date = 20121127 
    ,@active_end_date = 99991231 
    ,@active_start_time = 0 
    ,@active_end_time = 235900 
    ,@schedule_uid = @LS_BackUpScheduleUID OUTPUT 
    ,@schedule_id = @LS_BackUpScheduleID OUTPUT 
    
    EXEC msdb.dbo.sp_attach_schedule 
    @job_id = @LS_BackupJobId 
    ,@schedule_id = @LS_BackUpScheduleID  
    
    EXEC msdb.dbo.sp_update_job 
    @job_id = @LS_BackupJobId 
    ,@enabled = 1 
    
    
    END 
    
    
    EXEC master.dbo.sp_add_log_shipping_alert_job 
    
    EXEC master.dbo.sp_add_log_shipping_primary_secondary 
    @primary_database = N'MyDB1' 
    ,@secondary_server = N'SQLInCloud' 
    ,@secondary_database = N'MyDB1' 
    ,@overwrite = 1 
    
    Exit
    
  5. 透過啟動遠端桌面檔案再次連接到 SQLInCloud。請使用內建的系統管理員帳戶登入。

  6. 在系統管理員模式下開啟 PowerShell 視窗。

  7. 建立本機目錄以供記錄傳送複製及還原作業使用。

    $backup = "C:\LocalBackup"
    $acct2 = "CORP\SQLAgent2"
    
    New-Item $backup -ItemType directory
    icacls.exe "$backup" /grant:r ("$acct2" + ":(OI)(CI)F")
    
  8. 執行下列 Transact-SQL 指令碼,在 SQLInCloud 上設定記錄傳送。這是由 SSMS 產生之指令碼的第二部分。

    SQLCMD -S SQLInCloud
    
    DECLARE @LS_Secondary__CopyJobIdAS uniqueidentifier 
    DECLARE @LS_Secondary__RestoreJobIdAS uniqueidentifier 
    DECLARE @LS_Secondary__SecondaryIdAS uniqueidentifier 
    DECLARE @LS_Add_RetCodeAs int 
    
    
    EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary 
    @primary_server = N'SQLOnPrem' 
    ,@primary_database = N'MyDB1' 
    ,@backup_source_directory = N'\\SQLOnPrem\backup' 
    ,@backup_destination_directory = N'C:\LocalBackup' 
    ,@copy_job_name = N'LSCopy_SQLOnPrem_MyDB1' 
    ,@restore_job_name = N'LSRestore_SQLOnPrem_MyDB1' 
    ,@file_retention_period = 4320 
    ,@overwrite = 1 
    ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT 
    ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT 
    ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT 
    
    IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) 
    BEGIN 
    
    DECLARE @LS_SecondaryCopyJobScheduleUIDAs uniqueidentifier 
    DECLARE @LS_SecondaryCopyJobScheduleIDAS int 
    
    
    EXEC msdb.dbo.sp_add_schedule 
    @schedule_name =N'DefaultCopyJobSchedule' 
    ,@enabled = 1 
    ,@freq_type = 4 
    ,@freq_interval = 1 
    ,@freq_subday_type = 4 
    ,@freq_subday_interval = 15 
    ,@freq_recurrence_factor = 0 
    ,@active_start_date = 20121127 
    ,@active_end_date = 99991231 
    ,@active_start_time = 0 
    ,@active_end_time = 235900 
    ,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT 
    ,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT 
    
    EXEC msdb.dbo.sp_attach_schedule 
    @job_id = @LS_Secondary__CopyJobId 
    ,@schedule_id = @LS_SecondaryCopyJobScheduleID  
    
    DECLARE @LS_SecondaryRestoreJobScheduleUIDAs uniqueidentifier 
    DECLARE @LS_SecondaryRestoreJobScheduleIDAS int 
    
    
    EXEC msdb.dbo.sp_add_schedule 
    @schedule_name =N'DefaultRestoreJobSchedule' 
    ,@enabled = 1 
    ,@freq_type = 4 
    ,@freq_interval = 1 
    ,@freq_subday_type = 4 
    ,@freq_subday_interval = 15 
    ,@freq_recurrence_factor = 0 
    ,@active_start_date = 20121127 
    ,@active_end_date = 99991231 
    ,@active_start_time = 0 
    ,@active_end_time = 235900 
    ,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT 
    ,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT 
    
    EXEC msdb.dbo.sp_attach_schedule 
    @job_id = @LS_Secondary__RestoreJobId 
    ,@schedule_id = @LS_SecondaryRestoreJobScheduleID  
    
    
    END 
    
    
    DECLARE @LS_Add_RetCode2As int 
    
    
    IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) 
    BEGIN 
    
    EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database 
    @secondary_database = N'MyDB1' 
    ,@primary_server = N'SQLOnPrem' 
    ,@primary_database = N'MyDB1' 
    ,@restore_delay = 0 
    ,@restore_mode = 0 
    ,@disconnect_users= 0 
    ,@restore_threshold = 45   
    ,@threshold_alert_enabled = 1 
    ,@history_retention_period= 5760 
    ,@overwrite = 1 
    
    END 
    
    
    IF (@@error = 0 AND @LS_Add_RetCode = 0) 
    BEGIN 
    
    EXEC msdb.dbo.sp_update_job 
    @job_id = @LS_Secondary__CopyJobId 
    ,@enabled = 1 
    
    EXEC msdb.dbo.sp_update_job 
    @job_id = @LS_Secondary__RestoreJobId 
    ,@enabled = 1 
    
    END 
    
    Exit
    

恭喜!您已順利在混合式 IT 環境中實作記錄傳送,由內部部署執行主要資料庫伺服器,並於 Azure 中執行次要資料庫伺服器。您將可透過 SQL Server Agent 監視記錄傳送作業,以確保 SQLOnPrem 能成功建立記錄且 SQLInCloud 能成功複製及還原記錄。

顯示:
© 2015 Microsoft