Exporter (0) Imprimer
Développer tout

Didacticiel : copie des journaux de transaction pour la récupération d'urgence dans un environnement informatique hybride

Mis à jour: avril 2014

Ce didacticiel vous montre comment implémenter de bout en bout la copie des journaux de transaction SQL Server dans un environnement informatique hybride. À la fin du didacticiel, votre solution SQL Server AlwaysOn comprendra les éléments suivants :

  • Un réseau virtuel contenant plusieurs sous-réseaux, notamment un sous-réseau frontal et un sous-réseau principal.

  • Un contrôleur de domaine et un ordinateur SQL Server s'exécutant derrière un périphérique VPN dans votre réseau sur site.

  • Une connexion VPN de site à site entre l'appareil VPN Azure et votre unité VPN sur site.

  • Un ordinateur virtuel SQL Server déployé sur le sous-réseau principal dans Azure et joint à votre domaine AD sur site.

  • L'ordinateur SQL Server sur site configuré comme serveur de base de données primaire

  • L'ordinateur virtuel SQL Server dans Azure configuré comme serveur de base de données secondaire

Ce didacticiel fournir des instructions pour configurer la solution de bout en bout, notamment pour configurer un réseau privé fictif (10.0.0.0/24) et un domaine Active Directory fictif (corp.contoso.com) sur site. Si vous souhaitez utiliser votre réseau et votre Active Directory existants locaux, ignorez les sections pertinentes et passez à la section Create VPN Connection to Azure and SQL Server VM in Azure. Toutefois, il n'est pas garanti que les étapes ultérieures soient compatibles avec les caractéristiques de votre configuration existante sur site.

Ce didacticiel est destiné à vous présenter les étapes nécessaires pour installer la solution décrite ci-dessus sans développer les détails de chaque étape. Par conséquent, au lieu de vous présenter les étapes de configuration dans l'interface utilisateur graphique, il fournit du script PowerShell pour vous guider rapidement dans chaque étape. Il suppose ce qui suit :

  1. Installez Windows Server 2008 R2 sur un ordinateur sur site que vous utiliserez en tant que contrôleur de domaine et serveur DHCP.

  2. Connectez l'ordinateur à Internet et installez toutes les mises à jour.

  3. Déconnectez l'ordinateur d'Internet et connectez-le au même sous-réseau que le l'appareil VPN.

  4. Ouvrez une fenêtre de Windows PowerShell en mode d'administrateur.

  5. Définissez les variables PowerShell suivantes, que vous allez utiliser pour configurer cet ordinateur :

    $dcName = "DC1"
    $dcIP = "10.0.0.1"
    $subnetMask = "255.255.255.0"
    $gatewayIP = "10.0.0.2"
    $password = "Contoso!000"
    
    
  6. Configurez l'adresse IP du contrôleur de domaine sur l'ordinateur comme 10.0.0.1, avec le masque du sous-réseau 255.255.255.0 et l'adresse IP de passerelle 10.0.0.2.

    netsh interface ip set address name="Local Area Connection" static $dcIP $subnetMask $gatewayIP 1
    
  7. Renommez l'ordinateur en DC1.

    netdom renamecomputer $ENV:COMPUTERNAME /newname:$dcName /usero:Administrator /passwordo:$password /force /reboot
    
  8. Une fois que l'ordinateur a redémarré, ouvrez une nouvelle session et définissez les variables PowerShell suivantes, que vous allez utiliser pour configurer cet ordinateur en tant que contrôleur de domaine :

    $domainSuffix = "corp.contoso.com"
    $domainNetBIOS = "CORP"
    $password = "Contoso!000"
    
    
  9. Exécutez DCPROMO.EXE pour créer un domaine Active Directory nommé corp.contoso.com dans une nouvelle forêt de domaines.

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

    Une fois que l'ordinateur redémarre, il devient le contrôleur de domaine du nouveau domaine corp.contoso.com.

  10. Connectez-vous au contrôleur de domaine en tant que CORP\Administrator avec le mot de passe Contoso!000. C'est le même mot de passe que vous allez utiliser pour le reste du didacticiel.

  11. Ouvrez une fenêtre de Windows PowerShell en mode d'administrateur.

  12. Définissez les variables PowerShell suivantes pour vous aider à configurer le domaine.

    $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. Importez le module PowerShell d'Active Directory et créez un certain nombre d'utilisateurs.

    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 et CORP\SQLAgent2 sont utilisés comme comptes de service pour les services SQL Server Agent exécutés sur les deux serveurs SQL Server.

  14. Configurez le service DHCP avec une nouvelle étendue pour votre sous-réseau privé. L'adresse IP de passerelle est définie comme 10.0.0.2, et sera utilisée par l'appareil VPN sur site.

    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 
    

Maintenant que vous avez un réseau TCP/IP fonctionnel sur votre sous-réseau privé avec un domaine Active Directory fonctionnel, vous êtes prêt à configurer votre système SQL Server sur site.

  1. Installez Windows Server 2008 R2 sur un ordinateur supplémentaire sur site que vous utiliserez en tant qu'instance SQL Server sur site.

  2. Connectez l'ordinateur à Internet et installez toutes les mises à jour.

  3. Déconnectez l'ordinateur d'Internet et connectez-le au même sous-réseau que le l'appareil VPN.

  4. Ouvrez une fenêtre de Windows PowerShell en mode d'administrateur.

  5. Joignez les ordinateurs au domaine CORP, que vous avez créé précédemment. Si vous utilisez votre réseau et domaine existants sur site, liés les ordinateurs au domaine respectif de votre entreprise. Modifiez la variable $computerName en SQLOnPrem pour les ordinateurs respectifs.

    $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
    

    Les ordinateurs redémarrent automatiquement après l'exécution de ces commandes.

  6. Une fois les ordinateurs redémarrés, reconnectez-vous en tant qu'administrateur local et ouvrez une fenêtre de Windows PowerShell en mode d'administrateur.

  7. Définissez la variable pour le répertoire d'installation et installez SQL Server 2012 sur 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. Ouvrez le pare-feu pour l'accès à distance de 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. Activez le protocole TCP sur l'instance par défaut et redémarrez le service 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. Ajoutez CORP\Install en tant qu'administrateur local. Vous allez utiliser cet utilisateur pour configurer le cluster WSFC et le groupe de disponibilité.

    net localgroup administrators "$sqlAdmin" /Add
    
  11. Déconnectez-vous des deux ordinateurs.

    Logoff.exe
    

Vous avez maintenant terminé la configuration du sous-réseau privé sur site et de SQL Server. Vous configurerez ensuite la connexion VPN entre votre sous-réseau privé local et un réseau de Azure, puis vous créerez une machine virtuelle SQL Server associée au domaine dans Azure.

  1. Dans une fenêtre PowerShell sur un ordinateur connecté à Internet, importez le module Azure, téléchargez un fichier de paramètres de publication sur votre ordinateur, et connectez votre session de PowerShell à votre abonnement Azure en important les paramètres de publication téléchargés.

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

    La commande Get-AzurePublishgSettingsFile génère automatiquement un certificat de gestion et Azure le télécharge sur votre ordinateur. Une fenêtre de navigateur s'ouvre automatiquement et vous êtes invité à saisir les informations d'identification du compte Microsoft pour votre abonnement Azure. Le fichier .publishsettings téléchargé contient toutes les informations dont vous avez besoin pour gérer votre abonnement Azure. Après avoir enregistré ce fichier dans un répertoire local, importez-le à l'aide de la commande Import-AzurePublishSettingsFile.

    securitySécurité Remarque
    Le fichier publishsettings contient vos informations d'identification (non codées) utilisées pour gérer vos abonnements et services Azure. La meilleure pratique de sécurité pour ce fichier consiste à le stocker temporairement en dehors de vos répertoires sources (par exemple dans le dossier Bibliothèques\Documents), puis à le supprime une fois l'importation est terminée. Un utilisateur malveillant qui accède au fichier publishsettings peut modifier, créer et supprimer vos services Azure.

  2. Définissez une série de variables que vous allez utiliser pour créer votre infrastructure de cloud computing.

    $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
    

    Prêtez attention à ce qui suit pour vous assurer que vos commandes fonctionneront plus tard :

    • Les variables $storageAccountName et $serviceName doivent être uniques car elles sont utilisées pour identifier, respectivement, votre compte de stockage et votre serveur dans le cloud sur Internet.

    • Les noms spécifiés pour les variables $affinityGroupName, $virtualNetworkName et $localNetworkName sont indiqués dans le document de configuration du réseau virtuel que vous allez utiliser ultérieurement.

    • $sqlImageName spécifie le nom mis à jour de l'image d'ordinateur virtuel qui contient l'édition SQL Server 2012 Service Pack 1 Enterprise.

    • Pour simplifier, Contoso!000 est le mot de passe qui sera utilisé pendant tout le didacticiel.

  3. Créez un groupe d'affinité.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Créez un réseau virtuel en important un fichier de configuration nommé NetworkConfig.xml.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Le fichier de configuration contient le document XML suivant. En bref, il spécifie un réseau virtuel appelé ContosoNET dans le groupe d'affinité nommé ContosoAG, avec l'espace d'adressage 10.10.0.0/16. Le sous-réseau CloudBack, ou 10.1.1.0/24, et celui dans lequel vous placerez votre ordinateur virtuel SQL Server. Le sous-réseau GatewaySubnet, ou 10.1.254.0/24, est celui utilisé par Azure pour placer un appareil VPN virtuel. Le nom du sous-réseau GatewaySubnet ne peut pas être modifié. Si vous avez modifié les variables $affinityGroupName, $virtualNetworkName et $localNetworkName précédemment, vous devez également modifier les noms correspondants ci-dessous. En outre, le document configure l'adresse IP de votre serveur DNS sur site, 10.0.0.1, et fait référence à ce serveur DNS dans l'élément 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. Créez la passerelle du réseau virtuel et attendez qu'elle termine la configuration.

    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
    
    

    Cela peut prendre un certain temps. Une fois la configuration terminée, l'adresse IP publique de la passerelle et la clé prépartagée sont affichées dans votre fenêtre PowerShell.

  6. Configurez votre appareil VPN sur site à l'aide de l'adresse IP publique de la passerelle du réseau virtuel et de la clé prépartagée. Pour utiliser le script de configuration spécifique à votre appareil VPN, consultez À propos des appareils VPN pour le réseau virtuel.

    À la fin de cette étape, votre connexion VPN doit être entièrement couplée. Pour plus d'informations, consultez Établir une connexion VPN de site à site..

  7. Toujours dans la fenêtre PowerShell ouverte sur votre ordinateur connecté à Internet, créez un compte de stockage associé au groupe d'affinité que vous avez créé.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  8. Créez l'ordinateur virtuel SQL Server dans un nouveau service de cloud computing.

    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
    

    Cette série de commandes dirigées effectue les opérations suivantes :

    • New-AzureVMConfig crée une configuration d'ordinateur virtuel à l'aide de l'image de l'édition SQL Server 2012 Service Pack 1 Enterprise dans la galerie d'ordinateur virtuel. Il définit également le disque du système d'exploitation pour la mise en cache de lecture uniquement (pas pour la mise en cache d'écriture). Il est recommandé de migrer les fichiers de base de données sur un disque de données distinct que vous allez attacher à l'ordinateur virtuel et que vous allez configurer sans aucune mise en cache de lecture ou d'écriture. Toutefois, puisque les deux serveurs de base de données sur site utilisent le lecteur C pour les fichiers de base de données, vous allez renoncer à déplacer les bases de données. De cette manière, l'ordinateur virtuel Azure sera identique aux serveurs sur site dans la configuration, lorsque tous seront liés à un cluster WSFC par la suite.

    • Add-AzureProvisioningConfig lie l'ordinateur virtuel au domaine Active Directory sur site que vous avez créé.

    • Add-AzureEndpoint ajoute des points de terminaison d'accès de sorte que les applications clientes puissent accéder à l'instance du service SQL Server sur Internet.

    • New-AzureVM crée un nouveau service de cloud computing et crée le nouvel ordinateur virtuel Azure dans le nouveau service de cloud computing.

  9. Attendez que le nouvel ordinateur virtuel soit entièrement configuré, puis téléchargez le fichier Bureau à distance dans votre répertoire de travail. La boucle d'attente continue à interroger le nouvel ordinateur virtuel Azure jusqu'à ce qu'il soit prêt.

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

Ensuite, connectez-vous au nouvel ordinateur virtuel SQL Server, SQLInCloud, et initialisez-le.

Dans cette section, vous devez modifier l'installation par défaut de SQL Server sur le nouvel ordinateur virtuel SQL Server que vous avez créé pour le préparer à l'attachement au groupe de disponibilité. Plus précisément :

  • L'ordinateur virtuel est installé avec tous les services SQL Server (par exemple, le moteur de base de données, SSIS, SSAS, SSRS, etc.). Vous devez désactiver tous les services SQL autres que ceux dont vous avez besoin, à savoir l'instance MSSQLSERVER par défaut et le démon de recherche en texte intégral.

  • Vous devez modifier le compte du service SQL Server Agent en CORP\SQLAgent2.

  • Le protocole TCP est déjà activé sur l'ordinateur virtuel SQL Server. Toutefois, vous devez encore ouvrir le pare-feu pour l'accès à distance de SQL Server.

  1. Connectez-vous à SQLInCloud en lançant les fichiers Bureau à distance. Utilisez le nom d'utilisateur de l'administrateur AzureAdmin et le mot de passe Contoso!000, que vous avez spécifiés lors de la création des machines virtuelles.

  2. Vérifiez que les ordinateurs ont été correctement attachés à corp.contoso.com.

  3. Attendez que l'installation SQL Server termine d'exécuter les tâches automatisées d'initialisation avant de continuer.

  4. Ouvrez une fenêtre PowerShell en mode d'administrateur.

  5. Définissez les variables suivantes.

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

    Pour la variable $desirableServices, SqlServer est le type du service de moteur de base de données, SqlAgent est le type du service SQL Server Agent, et 9 est le type du démon de recherche en texte intégral.

  6. Importez le fournisseur PowerShell SQL Server.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  7. Arrêtez tous les services SQL indésirables (SSIS, SSAS, SSRS, etc.) et définissez leur mode de démarrage sur Disabled.

    $wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $env:COMPUTERNAME
    $wmi.services | where {$desirableServices -notcontains $_.Type} | foreach{$_.StartMode = "Disabled"; $_.Alter(); $_.Stop();}
    
  8. Modifiez le compte du service SQL Server Agent pour l'instance par défaut sur 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. Ouvrez le pare-feu pour l'accès à distance de 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
    

Vous pouvez maintenant configurer la copie des journaux de transaction.

  1. Reconnectez-vous à SQLOnPrem en lançant les fichiers Bureau à distance. Pour ouvrir une session, utilisez le compte d'administrateur prédéfini.

  2. Ouvrez une fenêtre PowerShell en mode d'administrateur. Si vous êtes toujours connecté à SQLOnPrem, vous devez fermer la fenêtre PowerShell et ouvrir une nouvelle fenêtre en mode d'administrateur pour vous assurer que les chemins d'accès SQL Server sont chargées dans les variables d'environnement PowerShell.

  3. Créez le partage réseau que vous utiliserez pour les opérations de copie des journaux de transaction.

    $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. Exécutez le script Transact-SQL ci-dessous pour configurer la copie des journaux de transaction sur SQLOnPrem. Ce script est généré à partir de l'interface utilisateur de SQL Server Management Studio (SSMS), à l'aide des variables suivantes :

    1. Base de données : MyDB1

    2. Répertoire de sauvegarde : C:\LocalBackup

    3. Chemin d'accès au partage du répertoire de sauvegarde : \\SQLOnPrem\backup

    4. Serveur secondaire : SQLInCloud

    5. Répertoire de destination pour les sauvegardes des journaux (sur SQLInCloud) : C:\LocalBackup

    Vous exécuterez la deuxième partie du script généré par SSMS sur SQLInCloud ultérieurement.

    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. Connectez-vous à SQLInCloud en lançant les fichiers Bureau à distance. Pour ouvrir une session, utilisez le compte d'administrateur prédéfini.

  6. Ouvrez une fenêtre PowerShell en mode d'administrateur.

  7. Créez un répertoire local que vous utiliserez pour la copie des journaux de transaction et pour les travaux de restauration.

    $backup = "C:\LocalBackup"
    $acct2 = "CORP\SQLAgent2"
    
    New-Item $backup -ItemType directory
    icacls.exe "$backup" /grant:r ("$acct2" + ":(OI)(CI)F")
    
  8. Exécutez le script Transact-SQL ci-dessous pour configurer la copie des journaux de transaction sur SQLInCloud. Voici la seconde partie du script généré par 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
    

Félicitations ! Vous avez configuré la copie des journaux de transaction dans un environnement informatique hybride, avec le serveur de base de données primaire exécuté sur site, et le serveur de base de données secondaire exécuté dans Azure. Vous pouvez surveiller les opérations de copie des journaux de transaction dans SQL Server Agent pour vérifier que les journaux sont correctement créés sur SQLOnPrem et copiés et restaurés sur SQLInCloud.

Afficher:
© 2014 Microsoft