Продажи: 1-800-867-1389

Учебник. Доставка журналов для аварийного восстановления в Hybrid IT

Обновлено: Ноябрь 2014 г.

В этом учебнике описывается, как полностью реализовать доставку журналов SQL Server в гибридной ИТ-среде. В конце учебника созданное решение SQL Server AlwaysOn будет состоять из следующих элементов:

  • виртуальная сеть, содержащая несколько подсетей, включая начальную и конечную подсети;

  • Контроллер домена и машина SQL Server, работающие за VPN-устройством в локальной сети;

  • VPN-соединение «сеть-сеть» между VPN-устройством Azure и локальным VPN-устройством;

  • виртуальная машина SQL Server, развернутая в конечной подсети в Azure и соединенная с локальным доменом Active Directory;

  • Локальная машина SQL Server, настроенная в качестве основного сервера базы данных-источника

  • Виртуальная машина SQL Server в Azure, настроенная в качестве основного сервера базы данных-получателя

Этот учебник содержит инструкции по настройке комплексного решения, включая настройку фиктивной частной сети (10.0.0.0/24) и фиктивного локального домена Active Directory (corp.contoso.com). Если вы хотите использовать существующую локальную сеть и Active Directory, пропустите соответствующие разделы и перейдите к разделу Create VPN Connection to Azure and SQL Server VM in Azure. Однако нет гарантии, что последующие этапы будут совместимы с пользовательскими характеристиками имеющейся локальной конфигурации.

В данном учебнике будут показаны шаги, необходимые для настройки описанного решения. Подробные сведения каждого этапа не приводятся. Вместо демонстрации элементов графического пользовательского интерфейса на каждом этапе в учебнике используются скрипты PowerShell для быстрого ознакомления с этапами. Для целей учебника предполагается следующее.

  1. Установите Windows Server 2008 R2 на локальном компьютере, который будет использоваться в качестве контроллера домена и DHCP-сервера.

  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. Импортируйте модуль PowerShell Active Directory и создайте несколько пользователей.

    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\SQLAgent1 и CORP\SQLAgent2 используются в качестве учетных записей службы для служб агента SQL Server, работающих на двух серверах экземпляра SQL Server.

  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. Установите Windows Server 2008 R2 на дополнительном локальном компьютере, который будет использоваться для локального экземпляра SQL Server.

  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. Задайте переменную для каталога установки и установите SQL Server 2012 в SQLOnPrem.

    $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. Выйдите из системы на обоих компьютерах.

Настройка локальной частной подсети и SQL Server завершена. Далее нужно настроить VPN-соединение между локальной частной подсетью и сетью Azure, затем создать в Azure виртуальную машину SQL Server, связанную с доменом.

  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. Загруженный файл PUBLISHSETTINGS содержит всю информацию, необходимую для управления подпиской Azure. После сохранения этого файла в локальную папку импортируйте его с помощью команды Import-AzurePublishSettingsFile.

    securityПримечание o безопасности.
    Файл publishsettings содержит конкретные учетные данные (незакодированные), которые используются для управления подписками и службами Azure. Рекомендации по безопасности состоят в том, что этот файл следует временно сохранить за пределами исходных каталогов (например, в папке Libraries\Documents), а затем после завершения импорта его необходимо удалить. Злонамеренный пользователь, получивший доступ к файлу publishsettings, сможет изменять, создавать и удалять применяемые службы Azure.

  2. Определите ряд переменных, которые будут использоваться для создания облачной ИТ-инфраструктуры.

    $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 Enterprise Edition с пакетом обновления 1 (SP1).

    • Для простоты во всем учебнике используется единственный пароль — Contoso!000.

  3. Создайте территориальную группу.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Создайте виртуальную сеть путем импорта файла конфигурации с именем NetworkConfig.xml.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Файл конфигурации содержит следующий XML-документ. Кратко говоря, документ указывает виртуальную сеть ContosoNET в группе сходства ContosoAG, а также адресное пространство 10.10.0.0/16. Подсеть CloudBack, или 10.1.1.0/24, — это хранилище, в которое нужно поместить виртуальную машину SQL Server. Подсеть GatewaySubnet, или 10.1.254.0/24, используется Azure для установки виртуального VPN-устройства. Имя подсети GatewaySubnet нельзя изменить. Если переменные $affinityGroupName, $virtualNetworkNameи $localNetworkName были изменены ранее, соответствующие имена ниже также следует изменить. Кроме того, документ настраивает IP-адрес локального DNS-сервера, 10.0.0.1, и указывает на DNS-сервер в компоненте DnsServersRef.

    <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. Настройте локальное VPN-устройство с помощью открытого IP-адреса шлюза виртуальной сети и общего ключа. Сведения об использовании скрипта конфигурации с 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 в новой облачной службе.

    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 Enterprise Edition с пакетом обновления 1 (SP1) из коллекции виртуальной машины. Также этот набор команд задает режим диска операционной системы на чтение кэша (запрет записи в кэш). Рекомендуется переносить файлы баз данных на отдельный диск с данными, подсоединенный к виртуальной машине, и настроить для него запрет на чтение кэша или запись в кэш. Однако, поскольку оба локальных сервера баз данных используют диск С для файлов баз данных, нет смысла переносить файлы баз данных. Таким образом, виртуальная машина Azure может быть идентичной локальным серверам по конфигурации, когда они все вместе будут сведены в WSFC-кластер.

    • Add-AzureProvisioningConfig объединяет виртуальную машину с созданным локальным доменом Active Directory.

    • Add-AzureEndpoint добавляет конечные точки доступа, чтобы клиентские приложения могли обращаться к экземпляру службы SQL Server через Интернет.

    • New-AzureVM создает новую облачную службу и новую виртуальную машину Azure в новой облачной службе.

  9. Дождитесь полного провизионирования новой виртуальной машины и загрузите файл удаленного рабочего стола в рабочий каталог. Цикл будет обращаться к новой виртуальной машине Azure до тех пор, пока она не будет готова к использованию.

    $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 SQLInCloud и запустите ее.

В этом разделе необходимо изменить установку SQL Server по умолчанию в ранее созданной виртуальной машине SQL Server, чтобы подготовить ее для включения в группу доступности. В частности:

  • ВМ устанавливается со всеми службами SQL Server (например, Database Engine, SSIS, SSAS, SSRS и т. д.). Отключите все службы SQL, кроме необходимых, а именно: экземпляра MSSQLSERVER по умолчанию и программы полнотекстового поиска.

  • Необходимо изменить учетную запись службы агента SQL Server на CORP\SQLAgent2.

  • TCP-протокол уже включен в виртуальной машине SQL Server. Однако все еще требуется открыть брандмауэр для удаленного доступа SQL Server.

  1. Подключитесь к SQLInCloud путем запуска файлов удаленного рабочего стола. Используйте имя входа администратора машины 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, а 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 экземпляра по умолчанию на 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

    Вы запустите вторую часть созданного SSMS скрипта на SQLInCloud позднее.

    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
    

Поздравляем! Вы успешно реализовали доставку журналов в гибридной ИТ-среде, с локальным сервером базы данных-источника и сервером базы данных-получателя, работающем в Azure. Можно отслеживать задания доставки журналов в агенте SQL Server, чтобы контролировать успешное создание журналов в SQLOnPrem, а также их успешное копирование и восстановление в SQLInCloud.

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2015 Microsoft