Bagikan melalui


Pencadangan SQL Server ke URL

Topik ini memperkenalkan konsep, persyaratan, dan komponen yang diperlukan untuk menggunakan layanan penyimpanan Azure Blob sebagai tujuan pencadangan. Fungsionalitas pencadangan dan pemulihan sama atau mirip dengan saat menggunakan DISK atau TAPE, dengan beberapa perbedaan. Perbedaan dan pengecualian penting, serta beberapa contoh kode, disertakan dalam topik ini.

Persyaratan, Komponen, dan Konsep

Di bagian ini:

Keamanan

Berikut ini adalah pertimbangan dan persyaratan keamanan saat mencadangkan atau memulihkan dari layanan penyimpanan Azure Blob.

  • Saat membuat kontainer untuk layanan penyimpanan Azure Blob, kami sarankan Anda mengatur akses ke privat. Mengatur akses ke privat membatasi akses ke pengguna atau akun yang dapat memberikan informasi yang diperlukan untuk mengautentikasi ke akun Azure.

    Penting

    SQL Server memerlukan nama akun Azure dan autentikasi kunci akses untuk disimpan dalam Kredensial SQL Server. Informasi ini digunakan untuk mengautentikasi ke akun Azure saat melakukan operasi pencadangan atau pemulihan.

  • Akun pengguna yang digunakan untuk mengeluarkan perintah BACKUP atau RESTORE harus berada dalam peran database operator db_backup dengan Mengubah izin kredensial apa pun .

Pengantar Komponen dan Konsep Utama

Dua bagian berikut memperkenalkan layanan penyimpanan Azure Blob, dan komponen SQL Server yang digunakan saat mencadangkan atau memulihkan dari layanan penyimpanan Azure Blob. Penting untuk memahami komponen dan interaksi di antara mereka untuk melakukan pencadangan ke atau memulihkan dari layanan penyimpanan Azure Blob.

Membuat akun Azure adalah langkah pertama untuk proses ini. SQL Server menggunakan nama akun penyimpanan Azure dan nilai kunci aksesnya untuk mengautentikasi dan menulis dan membaca blob ke layanan penyimpanan. Informasi masuk SQL Server akan menyimpan informasi autentikasi ini dan digunakan selama operasi pencadangan atau pemulihan. Untuk panduan lengkap membuat akun penyimpanan dan melakukan pemulihan sederhana, lihat Tutorial Menggunakan Layanan Azure Storage untuk Pencadangan dan Pemulihan SQL Server.

memetakan akun penyimpanan ke kredensial SQL

Azure Blob Storage Service

Akun Penyimpanan: Akun penyimpanan adalah titik awal untuk semua layanan penyimpanan. Untuk mengakses layanan Azure Blob Storage, pertama-tama buat akun penyimpanan Azure. Nama akun penyimpanan dan properti kunci aksesnya diperlukan untuk mengautentikasi ke layanan Azure Blob Storage dan komponennya.

Wadah: Wadah menyediakan pengelompokan sekumpulan Blob, dan dapat menyimpan jumlah Blob yang tak terbatas. Untuk menulis cadangan SQL Server ke layanan Azure Blob, Anda harus memiliki setidaknya kontainer akar yang dibuat.

Gumpalan: Sebuah file dengan jenis dan ukuran apa saja. Ada dua jenis blob yang dapat disimpan di layanan penyimpanan Azure Blob: blob blok dan halaman. Pencadangan SQL Server menggunakan blob halaman sebagai jenis Blob. Blob dapat diatasi menggunakan format URL berikut: https://< storage account.blob.core.windows.net/>< container>/<blob>

Azure Blob Storage

Untuk informasi selengkapnya tentang layanan penyimpanan Azure Blob, lihat Cara menggunakan Azure Blob Storage Service

Untuk informasi selengkapnya tentang halaman Blob, lihat Memahami Blok dan Halaman Blob

Komponen SQL Server

URL: URL menentukan Pengidentifikasi Sumber Daya Seragam (URI) ke file cadangan unik. URL digunakan untuk menyediakan lokasi dan nama file cadangan SQL Server. Dalam implementasi ini, satu-satunya URL yang valid adalah URL yang menunjuk ke Blob halaman di akun penyimpanan Azure. URL harus menunjuk ke Blob yang sebenarnya, bukan hanya kontainer. Jika Blob tidak ada, blob akan dibuat. Jika Blob yang ada ditentukan, BACKUP gagal, kecuali opsi "WITH FORMAT" ditentukan.

Peringatan

Jika Anda memilih untuk menyalin dan mengunggah file cadangan ke layanan penyimpanan Azure Blob, gunakan blob halaman sebagai opsi penyimpanan Anda. Pemulihan dari Blok Blob tidak didukung. PEMULIHAN dari jenis blok blob gagal dengan kesalahan.

Berikut adalah nilai URL sampel: http[s]://ACCOUNTNAME.Blob.core.windows.net/< CONTAINER>/<FILENAME.bak>. HTTPS tidak diperlukan, tetapi disarankan.

Credential: Kredensial SQL Server adalah objek yang digunakan untuk menyimpan informasi autentikasi yang diperlukan untuk terhubung ke sumber daya di luar SQL Server. Di sini, proses pencadangan dan pemulihan SQL Server menggunakan kredensial untuk mengautentikasi ke layanan penyimpanan Azure Blob. Kredensial menyimpan nama akun penyimpanan dan nilai kunci akses akun penyimpanan. Setelah kredensial dibuat, kredensial harus ditentukan dalam opsi WITH CREDENTIAL saat mengeluarkan pernyataan BACKUP/RESTORE. Untuk informasi selengkapnya tentang cara melihat, menyalin, atau meregenerasi kunci akses akun penyimpanan, lihat Kunci Akses Akun Penyimpanan.

Untuk instruksi langkah demi langkah tentang cara membuat Kredensial SQL Server, lihat Membuat contoh Kredensial nanti dalam topik ini.

Untuk informasi umum tentang kredensial, lihat Kredensial

Untuk informasi, pada contoh lain tempat kredensial digunakan, lihat Membuat Proksi Agen SQL Server.

Keterbatasan

  • Pencadangan ke penyimpanan premium tidak didukung.

  • Ukuran cadangan maksimum yang didukung adalah 1 TB.

  • Anda dapat mengeluarkan pernyataan pencadangan atau pemulihan dengan menggunakan cmdlet TSQL, SMO, atau PowerShell. Pencadangan ke atau pemulihan dari layanan penyimpanan Azure Blob dengan menggunakan wizard Pencadangan atau Pemulihan SQL Server Management Studio saat ini tidak diaktifkan.

  • Pembuatan nama perangkat logis tidak memungkinkan. Jadi menambahkan URL sebagai perangkat cadangan menggunakan sp_dumpdevice atau melalui SQL Server Management Studio tidak didukung.

  • Penambahan ke dalam blob cadangan yang sudah ada tidak didukung. Cadangan ke Blob yang sudah ada hanya dapat ditimpa dengan menggunakan opsi "WITH FORMAT".

  • Pencadangan ke beberapa blob dalam satu operasi pencadangan tidak didukung. Misalnya, berikut ini menghasilkan kesalahan:

    BACKUP DATABASE AdventureWorks2012
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_1.bak'
       URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_2.bak'
          WITH CREDENTIAL = 'mycredential'
         ,STATS = 5;  
    GO
    
  • Menentukan ukuran blok dengan BACKUP tidak didukung.

  • Menentukan MAXTRANSFERSIZE tidak didukung.

  • Menentukan opsi cadangan - RETAINDAYS dan EXPIREDATE tidak didukung.

  • SQL Server memiliki batas maksimum 259 karakter untuk nama perangkat cadangan. BACKUP TO URL mengkonsumsi 36 karakter untuk elemen yang diperlukan yang digunakan untuk menentukan URL - 'https://.blob.core.windows.net//.bak', menyisakan 223 karakter total untuk nama akun, kontainer, dan blob.

Dukungan untuk Pernyataan Pencadangan/Pemulihan

Pernyataan Pencadangan/Pemulihan Didukung Pengecualian Komentar
CADANGAN BLOCKSIZE, dan MAXTRANSFERSIZE tidak didukung. Memerlukan parameter WITH CREDENTIAL yang ditentukan
KEMBALIKAN Memerlukan WITH CREDENTIAL yang ditentukan
KEMBALIKAN FILELISTONLY Memerlukan KREDENSIAL YANG DITENTUKAN
PULIHKAN HEADERONLY Memerlukan kata kunci WITH CREDENTIAL yang ditentukan
PULIHKAN LABELONLY Memerlukan kata sandi yang telah ditentukan
PULIHKAN VERIFIKASI HANYA Memerlukan pengaturan WITH CREDENTIAL yang spesifik
PULIHKAN PUTAR BALIK SAJA

Untuk sintaksis dan informasi umum tentang pernyataan cadangan, lihat BACKUP (Transact-SQL).

Untuk sintaksis dan informasi umum tentang pernyataan pemulihan, lihat RESTORE (Transact-SQL).

Dukungan untuk Argumen Cadangan

Argumen Didukung Pengecualian Komentar
BASIS DATA
catatan
KE (URL) Tidak seperti DISK dan TAPE, URL tidak mendukung penentuan atau pembuatan nama logis. Argumen ini digunakan untuk menentukan jalur URL untuk file cadangan.
CERMIN KE SESUATU
DENGAN OPSI:
bukti sah WITH CREDENTIAL hanya didukung saat menggunakan opsi BACKUP TO URL untuk mencadangkan ke layanan penyimpanan Azure Blob.
DIFERENSIAL
SALIN_SAJA
PEMADATAN|TANPA PEMADATAN
DESKRIPSI
NAMA
TANGGAL KADALUARSA | HARI PENYIMPANAN
NOINIT | INIT Opsi ini diabaikan jika digunakan.

Menambahkan ke objek data tidak dimungkinkan. Untuk menimpa cadangan, gunakan argumen FORMAT.
NOSKIP | Lewati
NOFORMAT | FORMAT Opsi ini diabaikan jika digunakan.

Cadangan yang diambil ke blob yang ada akan gagal kecuali jika WITH FORMAT ditentukan. Blob yang ada akan ditimpa ketika WITH FORMAT ditetapkan.
Deskripsi Media
NAMA MEDIA
BLOCKSIZE
BUFFERCOUNT
MAXTRANSFERSIZE
NO_CHECKSUM | CHECKSUM
BERHENTI_SAAT_ERROR | LANJUTKAN_SETELAH_ERROR
STATISTIK
REWIND | NOREWIND
UNLOAD (Kosongkan) | NOUNLOAD (Jangan Kosongkan)
NORECOVERY | SIAGA
NO_TRUNCATE

Untuk informasi selengkapnya tentang argumen cadangan, lihat BACKUP (Transact-SQL).

Dukungan untuk Argumen Restorasi

Argumen Didukung Pengecualian Komentar
BASIS DATA
catatan
DARI (URL) Argumen URL FROM digunakan untuk menentukan jalur URL untuk file cadangan.
DENGAN Opsi:
bukti sah WITH CREDENTIAL hanya didukung saat menggunakan opsi PULIHKAN DARI URL untuk memulihkan dari layanan Azure Blob Storage.
SEBAGIAN
PEMULIHAN | TIDAK ADA PEMULIHAN | SIAGA
Muat Riwayat
PINDAH
Mengganti
HIDUPKAN ULANG
Pengguna_Dibatasi
ARSIP
KATA SANDI
NAMA MEDIA
MEDIAPASSWORD
BLOCKSIZE
BUFFERCOUNT
MAXTRANSFERSIZE
CHECKSUM (pengecekan) | NO_CHECKSUM (tanpa pengecekan)
BERHENTI_SAAT_KESALAHAN | LANJUTKAN_SETELAH_KESALAHAN
ALIRAN FILE
STATISTIK
REWIND | NOREWIND
UNLOAD | NOUNLOAD
PERTAHANKAN_REPLIKASI
KEEP_CDC
AKTIFKAN_PERANTARA | KESALAHAN_PEMBICARAAN_PERANTARA | PERANTARA_BARU
STOPAT | STOPATMARK | STOPBEFOREMARK

Untuk informasi selengkapnya tentang Pulihkan argumen, lihat PULIHKAN Argumen (Transact-SQL).

Menggunakan Tugas Pencadangan di SQL Server Management Studio

Tugas Pencadangan di SQL Server Management Studio telah ditingkatkan untuk menyertakan URL sebagai salah satu opsi tujuan, dan objek pendukung lainnya yang diperlukan untuk mencadangkan ke penyimpanan Azure seperti Kredensial SQL.

Langkah-langkah berikut menjelaskan perubahan yang dibuat pada tugas Database Cadangan untuk memungkinkan pencadangan ke penyimpanan Azure.:

  1. Mulai SQL Server Management Studio dan sambungkan ke instans SQL Server. Pilih database yang ingin Anda cadangkan, dan klik kanan pada Tugas, dan pilih Cadangkan... Ini membuka kotak dialog Cadangkan Database.

  2. Pada halaman umum, opsi URL digunakan untuk membuat cadangan ke penyimpanan Azure. Saat Anda memilih opsi ini, Anda akan melihat opsi lain yang diaktifkan di halaman ini:

    1. Nama File: Nama file cadangan.

    2. Kredensial SQL: Anda dapat menentukan Kredensial SQL Server yang sudah ada, atau bisa membuat yang baru dengan mengklik kotak Buat di samping Kredensial SQL.

      Penting

      Dialog yang terbuka saat Anda mengklik Buat memerlukan sertifikat manajemen atau profil penerbitan untuk langganan. SQL Server saat ini mendukung profil penerbitan versi 2.0. Untuk mengunduh versi profil penerbitan yang didukung, lihat Mengunduh Profil Penerbitan 2.0.

      Jika Anda tidak memiliki akses ke sertifikat manajemen atau profil penerbitan, Anda dapat membuat Kredensial SQL dengan menentukan nama akun penyimpanan dan mengakses informasi kunci menggunakan Transact-SQL atau SQL Server Management Studio. Lihat kode sampel di bagian Buat Kredensial untuk membuat kredensial menggunakan Transact-SQL. Atau, menggunakan SQL Server Management Studio, dari instans mesin database, klik kanan Keamanan, pilih Baru, dan pilih Kredensial. Tentukan nama akun penyimpanan untuk Identitas dan kunci akses di bidang Kata Sandi .

    3. Kontainer penyimpanan Azure: Nama kontainer penyimpanan Azure untuk menyimpan file cadangan.

    4. Awalan URL: Ini dibuat secara otomatis menggunakan informasi yang ditentukan dalam bidang yang dijelaskan dalam langkah-langkah sebelumnya. Jika Anda mengedit nilai ini secara manual, pastikan nilai tersebut cocok dengan informasi lain yang Anda berikan sebelumnya. Misalnya jika Anda mengubah URL penyimpanan, pastikan Info Masuk SQL diatur untuk mengautentikasi ke akun penyimpanan yang sama.

Saat Anda memilih URL sebagai tujuan, opsi tertentu di halaman Opsi Media dinonaktifkan. Topik berikut ini memiliki informasi selengkapnya tentang dialog Cadangkan Database:

Mencadangkan Database (Halaman Umum)

Mencadangkan Database (Halaman Opsi Media)

Pencadangan Basis Data (Halaman Opsi Cadangan)

Buat Kredensial - Autentikasi ke Azure Storage

Pencadangan SQL Server ke URL Menggunakan Wizard Rencana Pemeliharaan

Mirip dengan tugas pencadangan yang dijelaskan sebelumnya, Wizard Rencana Pemeliharaan di SQL Server Management Studio telah ditingkatkan untuk menyertakan URL sebagai salah satu opsi tujuan, dan objek pendukung lainnya yang diperlukan untuk mencadangkan ke penyimpanan Azure seperti Kredensial SQL. Untuk informasi selengkapnya, lihat bagian Tentukan Tugas Pencadangan di Menggunakan Wizard Rencana Pemeliharaan.

Memulihkan dari penyimpanan Azure Menggunakan SQL Server Management Studio

Jika Anda memulihkan database, URL disertakan sebagai perangkat untuk dipulihkan dari. Langkah-langkah berikut menjelaskan perubahan dalam tugas Pulihkan untuk memungkinkan pemulihan dari penyimpanan Azure:

  1. Saat Anda memilih Perangkat di halaman Umum tugas Pulihkan di SQL Server Management Studio, ini akan membawa Anda ke kotak dialog Pilih perangkat cadangan yang menyertakan URL sebagai jenis media cadangan.

  2. Saat Anda memilih URL dan mengklik Tambahkan, ini akan membuka dialog Sambungkan ke penyimpanan Azure . Tentukan informasi Kredensial SQL untuk diautentikasi ke penyimpanan Azure.

  3. SQL Server kemudian tersambung ke penyimpanan Azure menggunakan informasi Kredensial SQL yang Anda berikan dan membuka dialog Temukan File Cadangan di Azure . File cadangan yang berada di penyimpanan ditampilkan di halaman ini. Pilih file yang ingin Anda gunakan untuk memulihkan dan klik OK. Ini akan membawa Anda kembali ke dialog Pilih Perangkat Cadangan , dan Mengklik OK pada dialog ini akan membawa Anda kembali ke dialog Pemulihan utama tempat Anda akan dapat menyelesaikan pemulihan. Untuk informasi selengkapnya lihat, topik berikut ini:

    Pulihkan Database (Halaman Umum)

    Pulihkan Database (Halaman File)

    Pulihkan Database (Halaman Opsi)

Contoh Kode

Bagian ini berisi contoh berikut.

Membuat Kredensial

Contoh berikut membuat kredensial yang menyimpan informasi autentikasi Azure Storage.

IF NOT EXISTS  
(SELECT * FROM sys.credentials   
WHERE credential_identity = 'mycredential')  
CREATE CREDENTIAL mycredential WITH IDENTITY = 'mystorageaccount'  
,SECRET = '<storage access key>' ;  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  
string secret = "<storage access key>";  

// Create a Credential  
string credentialName = "mycredential";  
Credential credential = new Credential(server, credentialName);  
credential.Create(identity, secret);  
# create variables  
$storageAccount = "mystorageaccount"  
$storageKey = "<storage access key>"  
$secureString = ConvertTo-SecureString $storageKey  -asplaintext -force  
$credentialName = "mycredential"  

$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# Create a credential  
New-SqlCredential -Name $credentialName -Path $srvpath -Identity $storageAccount -Secret $secureString

Mencadangkan database lengkap

Contoh berikut mencadangkan database AdventureWorks2012 ke layanan penyimpanan berbasis cloud Azure Blob.

BACKUP DATABASE AdventureWorks2012   
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'   
      WITH CREDENTIAL = 'mycredential'   
      ,COMPRESSION  
      ,STATS = 5;  
GO
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.CompressionOption = BackupCompressionOptions.On;  
backup.Devices.AddDevice(url, DeviceType.Url);  
backup.SqlBackup(server);  
# create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"   
# for default instance, the $srvpath varilable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to SQL Server Instance  
CD $srvPath   
$backupFile = $backupUrlContainer + "AdventureWorks2012" +  ".bak"  
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On

Mencadangkan basis data dan log

Contoh berikut melakukan pencadangan pada database sampel AdventureWorks2012, yang menggunakan model pemulihan sederhana secara bawaan. Untuk mendukung pencadangan log, database AdventureWorks2012 dimodifikasi untuk menggunakan model pemulihan penuh. Contoh kemudian membuat cadangan database lengkap ke Azure Blob, dan setelah periode aktivitas pembaruan, mencadangkan log. Contoh ini membuat nama file cadangan dengan stempel tanggalwaktu.

-- To permit log backups, before the full database backup, modify the database   
-- to use the full recovery model.  
USE master;  
GO  
ALTER DATABASE AdventureWorks2012  
   SET RECOVERY FULL;  
GO  

-- Back up the full AdventureWorks2012 database.  
       -- First create a file name for the backup file with DateTime stamp  

DECLARE @Full_Filename AS VARCHAR (300);  
SET @Full_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Full_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.bak';   
--Back up Adventureworks2012 database  

BACKUP DATABASE AdventureWorks2012  
TO URL =  @Full_Filename  
WITH CREDENTIAL = 'mycredential';  
,COMPRESSION  
GO  
-- Back up the AdventureWorks2012 log.  
DECLARE @Log_Filename AS VARCHAR (300);  
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2012  
 TO URL = @Log_Filename  
 WITH CREDENTIAL = 'mycredential'  
 ,COMPRESSION;  
GO  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url for data backup  
string urlDataBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Data-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Database to Url  
Backup backupData = new Backup();  
backupData.CredentialName = credentialName;  
backupData.Database = dbName;  
backup.CompressionOption = BackupCompressionOptions.On;  
backupData.Devices.AddDevice(urlDataBackup, DeviceType.Url);  
backupData.SqlBackup(server);  

// Generate Unique Url for data backup  
string urlLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}_Log-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Database Log to Url  
Backup backupLog = new Backup();  
backupLog.CredentialName = credentialName;  
backupLog.Database = dbName;  
backup.CompressionOption = BackupCompressionOptions.On;  
backupLog.Devices.AddDevice(urlLogBackup, DeviceType.Url);  
backupLog.Action = BackupActionType.Log;  
backupLog.SqlBackup(server);  
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to theSQL Server Instance
CD $srvPath   
#Create a unique file name for the full database backup  
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

#Backup Database to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Database    

#Create a unique file name for log backup  

$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".trn"  

#Backup Log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Log

Membuat cadangan file lengkap dari grup file utama

Contoh berikut membuat cadangan file lengkap dari grup file utama.

--Back up the files in Primary:  
BACKUP DATABASE AdventureWorks2012  
    FILEGROUP = 'Primary'  
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012files.bck'  
    WITH CREDENTIAL = 'mycredential'  
    ,COMPRESSION;  
GO  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bck",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Action = BackupActionType.Files;  
backup.DatabaseFileGroups.Add("PRIMARY");  
backup.CompressionOption = BackupCompressionOptions.On;  
backup.Devices.AddDevice(url, DeviceType.Url);  
backup.SqlBackup(server);
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to the SQL Server Instance  

CD $srvPath   
#Create a unique file name for the file backup  
$backupFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bck"  

#Backup Primary File Group to URL  

Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary

Membuat cadangan file diferensial dari grup file utama

Contoh berikut membuat cadangan file diferensial dari grup file utama.

--Back up the files in Primary:  
BACKUP DATABASE AdventureWorks2012  
    FILEGROUP = 'Primary'  
    TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012filesdiff.bck'  
    WITH   
       CREDENTIAL = 'mycredential'  
       ,COMPRESSION  
   ,DIFFERENTIAL;  
GO
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string url = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Action = BackupActionType.Files;  
backup.DatabaseFileGroups.Add("PRIMARY");  
backup.Incremental = true;  
backup.CompressionOption = BackupCompressionOptions.On;  
backup.Devices.AddDevice(url, DeviceType.Url);  
backup.SqlBackup(server); 
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to SQL Server Instance
CD $srvPath   

#create a unique file name for the full backup  
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

#Create a differential backup of the primary filegroup
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName -CompressionOption On -BackupAction Files -DatabaseFileGroup Primary -Incremental

Memulihkan database dan memindahkan file

Untuk memulihkan cadangan database lengkap dan memindahkan database yang dipulihkan ke C:\Program Files\Microsoft SQL Server\MSSQL12. Direktori MSSQLSERVER\MSSQL\Data, gunakan langkah-langkah berikut.

-- Backup the tail of the log first
DECLARE @Log_Filename AS VARCHAR (300);  
SET @Log_Filename = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012_Log_'+   
REPLACE (REPLACE (REPLACE (CONVERT (VARCHAR (40), GETDATE (), 120), '-','_'),':', '_'),' ', '_') + '.trn';  
BACKUP LOG AdventureWorks2012  
 TO URL = @Log_Filename  
 WITH CREDENTIAL = 'mycredential'  
 ,NORECOVERY;  
GO  

RESTORE DATABASE AdventureWorks2012 FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'  
WITH CREDENTIAL = 'mycredential'  
 ,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'  
 ,MOVE 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'  
 ,STATS = 5
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);  
backup.SqlBackup(server);  

// Generate Unique Url for tail log backup  
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Tail Log to Url  
Backup backupTailLog = new Backup();  
backupTailLog.CredentialName = credentialName;  
backupTailLog.Database = dbName;  
backupTailLog.Action = BackupActionType.Log;  
backupTailLog.NoRecovery = true;  
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);  
backupTailLog.SqlBackup(server);  

// Restore a database and move files  
string newDataFilePath = server.MasterDBLogPath  + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";  
string newLogFilePath = server.MasterDBLogPath  + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";  

Restore restore = new Restore();  
restore.CredentialName = credentialName;  
restore.Database = dbName;  
restore.ReplaceDatabase = true;  
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);  
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));  
restore.RelocateFiles.Add(new RelocateFile(dbName+ "_Log", newLogFilePath));  
restore.SqlRestore(server);
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTNACENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# navigate to SQL Server Instance
CD $srvPath   

#create a unique file name for the full backup  
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

# Full database backup to URL  
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile  -SqlCredential $credentialName -CompressionOption On      

#Create a unique file name for the tail log backup  
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".trn"  

#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName  -BackupAction Log -NoRecovery    

# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")  
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")  

Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath)

Memulihkan ke titik waktu menggunakan STOPAT

Contoh berikut memulihkan database ke statusnya ke titik waktu tertentu, dan memperlihatkan operasi pemulihan.

RESTORE DATABASE AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'   
WITH   
  CREDENTIAL = 'mycredential'  
 ,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'  
 ,Move 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'  
 ,NORECOVERY  
 --,REPLACE  
 ,STATS = 5;  
GO   

RESTORE LOG AdventureWorks FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.trn'   
WITH CREDENTIAL = 'mycredential'  
 ,RECOVERY   
 ,STOPAT = 'Oct 23, 2012 5:00 PM'   
GO  
// Connect to default sql server instance on local machine  
Server server = new Server(".");  
string identity = "mystorageaccount";  

string credentialName = "mycredential";  
string dbName = "AdventureWorks2012";  
string blobContainerName = "mycontainer";  

// Generate Unique Url  
string urlBackupData = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-Data{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup to Url  
Backup backup = new Backup();  
backup.CredentialName = credentialName;  
backup.Database = dbName;  
backup.Devices.AddDevice(urlBackupData, DeviceType.Url);  
backup.SqlBackup(server);  

// Generate Unique Url for Tail Log backup  
string urlTailLogBackup = String.Format(@"https://{0}.blob.core.windows.net/{1}/{2}-TailLog{3}.bak",  
         identity,  
         blobContainerName,  
         dbName,  
         DateTime.Now.ToString("s").Replace(":", "-"));  

// Backup Tail Log to Url  
Backup backupTailLog = new Backup();  
backupTailLog.CredentialName = credentialName;  
backupTailLog.Database = dbName;  
backupTailLog.Action = BackupActionType.Log;  
backupTailLog.NoRecovery = true;  
backupTailLog.Devices.AddDevice(urlTailLogBackup, DeviceType.Url);  
backupTailLog.SqlBackup(server);  

// Restore a database and move files  
string newDataFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".mdf";  
string newLogFilePath = server.MasterDBLogPath + @"\" + dbName + DateTime.Now.ToString("s").Replace(":", "-") + ".ldf";  

Restore restore = new Restore();  
restore.CredentialName = credentialName;  
restore.Database = dbName;  
restore.ReplaceDatabase = true;  
restore.NoRecovery = true;  
restore.Devices.AddDevice(urlBackupData, DeviceType.Url);  
restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));  
restore.RelocateFiles.Add(new RelocateFile(dbName + "_Log", newLogFilePath));  
restore.SqlRestore(server);  
   
// Restore transaction Log with stop at   
Restore restoreLog = new Restore();  
restoreLog.CredentialName = credentialName;  
restoreLog.Database = dbName;  
restoreLog.Action = RestoreActionType.Log;  
restoreLog.Devices.AddDevice(urlBackupData, DeviceType.Url);  
restoreLog.ToPointInTime = DateTime.Now.ToString();   
restoreLog.SqlRestore(server);
#create variables  
$backupUrlContainer = "https://mystorageaccount.blob.core.windows.net/mycontainer/"  
$credentialName = "mycredential"  
$srvPath = "SQLSERVER:\SQL\COMPUTERNAME\INSTANCENAME"  
# for default instance, the $srvpath variable would be "SQLSERVER:\SQL\COMPUTERNAME\DEFAULT"  

# Navigate to SQL Server Instance Directory
CD $srvPath   

#create a unique file name for the full backup  
$backupdbFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".bak"  

# Full database backup to URL  
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupdbFile  -SqlCredential $credentialName -CompressionOption On     

#Create a unique file name for the tail log backup  
$backuplogFile = $backupUrlContainer + "AdventureWorks2012_" + (Get-Date).ToString("s").Replace("-","_").Replace(":", "_").Replace(" ","_").Replace("/", "_") +  ".trn"  

#Backup tail log to URL
Backup-SqlDatabase -Database AdventureWorks2012 -backupFile $backupFile  -SqlCredential $credentialName  -BackupAction Log -NoRecovery     

# Restore Database and move files
$newDataFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("AdventureWorks_Data","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf")  
$newLogFilePath = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("AdventureWorks_Log","C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf")  

Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backupdbFile -RelocateFile @($newDataFilePath,$newLogFilePath) -NoRecovery    

# Restore Transaction log with Stop At:  
Restore-SqlDatabase -Database AdventureWorks2012 -SqlCredential $credentialName -BackupFile $backuplogFile  -ToPointInTime (Get-Date).ToString()

Lihat Juga

Praktik Terbaik dan Pemecahan Masalah Pencadangan SQL Server ke URL
Pencadangan dan Pemulihan Database Sistem (SQL Server)