Esporta (0) Stampa
Espandi tutto

Esercitazione: log shipping per il ripristino di emergenza nell'ambiente IT ibrido

Aggiornamento: aprile 2014

In questa esercitazione viene illustrato come implementare il log shipping SQL Server end-to-end in un ambiente IT ibrido. Al termine dell'esercitazione, la soluzione SQL Server AlwaysOn sarà composta dagli elementi seguenti:

  • Una rete virtuale contenente più subnet, tra cui una subnet front-end e una back-end

  • Un controller di dominio e un computer SQL Server in esecuzione attraverso un dispositivo VPN nella rete locale

  • Una connessione VPN da sito a sito tra il dispositivo VPN di Azure e il dispositivo VPN locale

  • Una VM SQL Server distribuita nella subnet back-end in Azure e aggiunta al dominio AD locale

  • Il computer SQL Server locale configurato come server di database primario

  • La VM SQL Server in Azure configurata come server di database secondario

Nell'esercitazione sono incluse istruzioni relative alla configurazione della soluzione end-to-end, tra cui l'installazione di una rete privata fittizia (10.0.0.0/24) e di un dominio Active Directory fittizio (corp.contoso.com) locale. Se si desidera utilizzare la rete locale esistente e Active Directory, ignorare le sezioni pertinenti e passare a Create VPN Connection to Azure and SQL Server VM in Azure. Tenere presente, tuttavia, che gli ultimi passaggi potrebbero non funzionare con le specifiche personalizzate della configurazione locale esistente.

Questa esercitazione ha lo scopo di illustrare i passaggi necessari per configurare la soluzione descritta in precedenza senza approfondire i dettagli di ogni passaggio. Pertanto, anziché illustrare i passaggi di configurazione a livello dell'interfaccia utente grafica, vengono utilizzati gli script di PowerShell per eseguire rapidamente ogni passaggio. Si presuppone quanto segue:

  • Si dispone già di un account Azure con la sottoscrizione macchina virtuale.

  • È presente un dispositivo VPN supportato con un indirizzo IP pubblico a livello di perimetro della rete locale. Per ulteriori informazioni, vedere l'articolo relativo ai dispositivi VPN per la rete virtuale.

  • Sono stati installati i cmdlet di Azure PowerShell.

  • Si conosce già la modalità di provisioning di una macchina virtuale SQL Server dalla raccolta di macchine virtuali tramite l'interfaccia utente grafica. Per ulteriori informazioni, vedere la pagina relativa al provisioning di una macchina virtuale SQL Server in Azure.

  • Si conosce già la procedura di configurazione del log shipping per le soluzioni locali. Per ulteriori informazioni, vedere Informazioni sul log shipping (SQL Server).

  • Per semplicità, Contoso!000 corrisponde alla stessa password utilizzata nel corso dell'esercitazione.

  1. Installare Windows Server 2008 R2 in un computer locale che verrà utilizzato come controller di dominio e server DHCP.

  2. Connettere il computer a Internet e installare tutti gli aggiornamenti.

  3. Disconnettere il computer da Internet e connetterlo alla stessa subnet del dispositivo VPN.

  4. Aprire una finestra di Windows PowerShell in modalità amministratore.

  5. Definire le variabili di PowerShell seguenti che verranno utilizzate per configurare il computer:

    $dcName = "DC1"
    $dcIP = "10.0.0.1"
    $subnetMask = "255.255.255.0"
    $gatewayIP = "10.0.0.2"
    $password = "Contoso!000"
    
    
  6. Configurare l'indirizzo IP del controller di dominio nel computer come 10.0.0.1, con la subnet mask 255.255.255.0 e l'indirizzo IP del gateway 10.0.0.2.

    netsh interface ip set address name="Local Area Connection" static $dcIP $subnetMask $gatewayIP 1
    
  7. Rinominare il computer come DC1.

    netdom renamecomputer $ENV:COMPUTERNAME /newname:$dcName /usero:Administrator /passwordo:$password /force /reboot
    
  8. Dopo il riavvio del computer, effettuare nuovamente l'accesso e definire le variabili di PowerShell seguenti con cui si configurerà il computer come controller di dominio:

    $domainSuffix = "corp.contoso.com"
    $domainNetBIOS = "CORP"
    $password = "Contoso!000"
    
    
  9. Eseguire DCPROMO.EXE per creare un dominio Active Directory denominato corp.contoso.com in una nuova foresta di domini.

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

    Dopo il riavvio, il computer sarà il controller di dominio del dominio corp.contoso.com appena creato.

  10. Effettuare l'accesso al controller di dominio come CORP\Administrator con la passwordContoso!000. Si tratta della stessa password che verrà utilizzata nella parte restante dell'esercitazione.

  11. Aprire una finestra di Windows PowerShell in modalità amministratore.

  12. Definire le variabili PowerShell seguenti con cui si configurerà il dominio.

    $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. Importare il modulo Active Directory PowerShell e creare una serie di utenti.

    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 e CORP\SQLAgent2 vengono utilizzati con account di servizio per i servizi SQL Server Agent in esecuzione nei due server di istanze di SQL Server.

  14. Configurare il servizio DHCP con un nuovo ambito per la subnet privata. L'indirizzo IP del gateway è impostato su 10.0.0.2 che in base alla configurazione verrà utilizzato dal dispositivo VPN locale.

    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 
    

Ora che si dispone di una rete TCP/IP funzionale in esecuzione sulla subnet privata con un dominio Active Directory funzionale, è possibile configurare il sistema SQL Server locale.

  1. Installare Windows Server 2008 R2 in un computer locale aggiuntivo che verrà utilizzato per l'istanza di SQL Server locale.

  2. Connettere il computer a Internet e installare tutti gli aggiornamenti.

  3. Disconnettere il computer da Internet e connetterlo alla stessa subnet del dispositivo VPN.

  4. Aprire una finestra di Windows PowerShell in modalità amministratore.

  5. Aggiungere i computer al dominio CORP creato in precedenza. Se si utilizzano il dominio e la rete locale esistenti, aggiungere i computer al rispettivo dominio dell'organizzazione. Impostare la variabile $computerName su SQLOnPrem per i rispettivi computer.

    $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
    

    I computer vengono riavviati automaticamente dopo l'esecuzione di questi comandi.

  6. Al termine del riavvio dei computer, eseguire nuovamente l'accesso come amministratore locale e aprire una finestra di Windows PowerShell in modalità amministratore.

  7. Impostare la variabile per la directory di installazione e installare SQL Server 2012 in 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. Aprire il firewall per l'accesso remoto di 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. Abilitare il protocollo TCP nell'istanza predefinita e riavviare il servizio 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. Aggiungere CORP\Install come amministratore locale. Questo utente verrà utilizzato per configurare il cluster WSFC e il gruppo di disponibilità.

    net localgroup administrators "$sqlAdmin" /Add
    
  11. Disconnettersi da entrambi i computer.

    Logoff.exe
    

La configurazione di SQL Server e della subnet privata locale è terminata. A questo punto, sarà necessario configurare la connessione VPN tra la subnet privata locale e una rete di Azure, quindi creare una macchina virtuale SQL Server aggiunta al dominio in Azure.

  1. In una finestra di PowerShell in un computer connesso a Internet, importare il modulo Azure, scaricare un file di impostazioni di pubblicazione nel computer e connettere la sessione di PowerShell alla sottoscrizione di Azure importando le impostazioni di pubblicazione scaricate.

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

    Il comando Get-AzurePublishgSettingsFile genera automaticamente un certificato di gestione con Azure e lo scarica nel computer. Verrà aperto un browser e verrà richiesto di immettere le credenziali dell'account Microsoft per la sottoscrizione di Azure. Il file con estensione publishsettings scaricato contiene tutte le informazioni necessarie per gestire la sottoscrizione di Azure. Dopo aver salvato il file in una directory locale, importarlo utilizzando il comando Import-AzurePublishSettingsFile.

    securitySicurezza - Nota
    Nel file publishsettings sono incluse le credenziali (non codificate) utilizzate per amministrare i servizi e le sottoscrizioni di Azure. La procedura di sicurezza consigliata per questo file consiste nell'archiviarlo temporaneamente all'esterno delle directory di origine, ad esempio nella cartella Raccolte\Documenti e, successivamente, eliminarlo una volta completata l'importazione. Un utente malintenzionato che accede al file publishsettings può modificare, creare ed eliminare i servizi di Azure.

  2. Definire una serie di variabili con cui si creerà l'infrastruttura IT cloud.

    $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
    

    Prestare attenzione a quanto segue per assicurarsi che i comandi funzionino correttamente in un secondo momento:

    • Le variabili $storageAccountName e $serviceName devono essere univoche perché vengono utilizzate per identificare rispettivamente l'account di archiviazione cloud e il server cloud su Internet.

    • I nomi specificati per le variabili $affinityGroupName, $virtualNetworkName e $localNetworkName sono configurati nel documento di configurazione della rete virtuale che verrà utilizzato in seguito.

    • Tramite $sqlImageName viene specificato il nome aggiornato dell'immagine della macchina virtuale in cui è contenuto SQL Server 2012 Service Pack 1 Enterprise Edition.

    • Per semplicità, Contoso!000 è la stessa password utilizzata in tutta l'esercitazione.

  3. Creare un gruppo di affinità.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Creare una rete virtuale importando un file di configurazione denominato NetworkConfig.xml.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Il file di configurazione contiene il documento XML seguente. In breve, viene specificata una rete virtuale denominata ContosoNET nel gruppo di affinità denominato ContosoAGcon lo spazio di indirizzi 10.10.0.0/16. La VM SQL Server verrà posizionata nella subnet CloudBack o 10.1.1.0/24. La subnet GatewaySubnet, o 10.1.254.0/24, verrà utilizzata da Azure per posizionare un dispositivo VPN virtuale. Il nome della subnet GatewaySubnet non può essere modificato. Se si modificano le variabili $affinityGroupName, $virtualNetworkName e $localNetworkName, è necessario modificare anche i nomi corrispondenti. Il documento consente di configurare l'indirizzo IP del server DNS locale, 10.0.0.1, e fa riferimento a questo server DNS nell'elemento 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. Creare il gateway della rete virtuale e attendere il completamento del provisioning del gateway.

    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
    
    

    Il provisioning del gateway della rete virtuale richiede del tempo. Al termine del provisioning, l'indirizzo IP pubblico del gateway e la chiave già condivisa vengono visualizzati nella finestra di PowerShell.

  6. Configurare il dispositivo VPN locale utilizzando l'indirizzo IP pubblico del gateway della rete virtuale e la chiave già condivisa. Per utilizzare lo script di configurazione specifico del dispositivo VPN, vedere l'articolo relativo ai dispositivi VPN per la rete virtuale.

    Al termine del passaggio, la connessione VPN dovrebbe essere completamente attiva. Per ulteriori informazioni, vedere l'articolo relativo alla creazione di una connessione VPN da sito a sito.

  7. Sempre nella finestra di PowerShell nel computer connesso a Internet creare un account di archiviazione associato al gruppo di affinità creato.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  8. Creare la VM SQL Server in un nuovo servizio cloud.

    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
    

    Questa serie di comandi inoltrati tramite pipe consente di eseguire le operazioni seguenti:

    • Tramite New-AzureVMConfig viene creata una configurazione della macchina virtuale utilizzando l'immagine di SQL Server 2012 Service Pack 1 Enterprise Edition nella raccolta di macchine virtuali. Consente inoltre di impostare il disco del sistema operativo sulla modalità sola lettura della cache (scrittura non consentita). È consigliabile eseguire la migrazione dei file di database in un disco dati separato collegato alla macchina virtuale e configurarlo senza lettura né scrittura nella cache. Tuttavia, poiché entrambi i server di database locali utilizzano l'unità C per i file di database, si anticiperà lo spostamento dei file di database. In questo modo, la macchina virtuale di Azure potrà essere identica ai server locali in termini di configurazione quando verranno tutti aggiunti a un cluster WSFC.

    • Add-AzureProvisioningConfig aggiunge la macchina virtuale al dominio Active Directory locale creato.

    • Add-AzureEndpoint aggiunge endpoint di accesso in modo da consentire alle applicazioni client di accedere all'istanza del servizio SQL Server su Internet.

    • New-AzureVM consente di creare un nuovo servizio cloud e la nuova macchina virtuale di Azure nel nuovo servizio cloud.

  9. Al termine del provisioning della nuova macchina virtuale, scaricare il file del desktop remoto nella directory di lavoro. Il ciclo while continuerà il polling della nuova macchina virtuale di Azure finché non sarà pronta per l'utilizzo.

    $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"
    

A questo punto, verrà effettuata la connessione alla nuova VM SQL Server, SQLInCloud, e verrà inizializzata.

In questa sezione è necessario modificare l'installazione predefinita di SQL Server nella nuova VM SQL Server creata per prepararla all'aggiunta al gruppo di disponibilità. In particolare:

  • La VM viene installata con tutti i servizi di SQL Server, ad esempio motore di database, SSIS, SSAS, SSRS e così via. È necessario disabilitare tutti i servizi SQL non necessari, ovvero l'istanza MSSQLSERVER predefinita e il daemon di ricerca full-text.

  • È necessario modificare SQL Server Agent dell'account di servizio in CORP\SQLAgent2.

  • Il protocollo TCP è già abilitato nella VM SQL Server. Sarà tuttavia necessario aprire il firewall per l'accesso remoto di SQL Server.

  1. Connettersi a SQLInCloud avviando i file del desktop remoto. Utilizzare il nome utente dell'amministratore del computer >AzureAdmin e la password Contoso!000 specificata durante la creazione delle VM.

  2. Verificare che i computer siano stati aggiunti correttamente a corp.contoso.com.

  3. Prima di procedere, attendere la fine dell'esecuzione delle attività di inizializzazione automatiche nell'ambito dell'installazione di SQL Server.

  4. Aprire una finestra di PowerShell in modalità amministratore.

  5. Definire le variabili seguenti.

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

    Per la variabile $desirableServices, SqlServer è il tipo del servizio motore di database, SqlAgent è il tipo del servizio SQL Server Agent e 9 è il tipo di servizio del daemon di ricerca full-text.

  6. Importare il provider SQL Server PowerShell.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  7. Arrestare tutti i servizi SQL non necessari (SSIS, SSAS, SSRS e così via) e impostare la relativa modalità di avvio su Disabled.

    $wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $env:COMPUTERNAME
    $wmi.services | where {$desirableServices -notcontains $_.Type} | foreach{$_.StartMode = "Disabled"; $_.Alter(); $_.Stop();}
    
  8. Modificare l'account del servizio SQL Server Agent per l'istanza predefinita in 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. Aprire il firewall per l'accesso remoto di 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
    

A questo punto, è possibile procedere con la configurazione del log shipping.

  1. Connettersi nuovamente a SQLOnPrem avviando i file desktop remoto. Per effettuare l'accesso, utilizzare l'account amministratore predefinito.

  2. Aprire una finestra di PowerShell in modalità amministratore. Se non si è ancora effettuata la connessione da SQLOnPrem, è necessario chiudere la finestra di PowerShell esistente e aprirne una nuova in modalità amministratore per assicurarsi che i percorsi di SQL Server siano caricati nelle variabili di ambiente di PowerShell.

  3. Creare la condivisione di rete che verrà utilizzata per i processi per il log shipping.

    $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. Eseguire lo script Transact-SQL seguente per impostare il log shipping in SQLOnPrem. Questo script viene generato dall'interfaccia utente di SQL Server Management Studio (SSMS) utilizzando le variabili seguenti:

    1. Database: MyDB1

    2. Directory di backup: C:\LocalBackup

    3. Percorso di condivisione della directory di backup: \\SQLOnPrem\backup

    4. Server secondario: SQLInCloud

    5. Directory di destinazione per i backup di log (in SQLInCloud): C:\LocalBackup

    Verrà eseguita la seconda parte dello script generato da SSMS in 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. Connettersi nuovamente a SQLInCloud avviando i file desktop remoto. Per effettuare l'accesso, utilizzare l'account amministratore predefinito.

  6. Aprire una finestra di PowerShell in modalità amministratore.

  7. Creare la directory locale che verrà utilizzata per i processi di copia e ripristino del log shipping.

    $backup = "C:\LocalBackup"
    $acct2 = "CORP\SQLAgent2"
    
    New-Item $backup -ItemType directory
    icacls.exe "$backup" /grant:r ("$acct2" + ":(OI)(CI)F")
    
  8. Eseguire lo script Transact-SQL seguente per impostare il log shipping in SQLInCloud. Si tratta della seconda parte dello script generato da 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
    

È stato implementato correttamente il log shipping in un ambiente IT ibrido, con il server di database primario eseguito localmente e il server di database secondario eseguito in Azure. È possibile monitorare i processi per il log shipping in SQL Server Agent per assicurarsi che i log vengano creati correttamente in SQLOnPrem e copiati e ripristinati correttamente in SQLInCloud.

Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft