AlTER DATABASE (Transact-SQL) Pencerminan Database

Berlaku untuk:SQL Server

Catatan

Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Gunakan grup ketersediaan AlwaysOn sebagai gantinya.

Mengontrol pencerminan database untuk database. Nilai yang ditentukan dengan opsi pencerminan database berlaku untuk salinan database dan ke sesi pencerminan database secara keseluruhan. Hanya satu <database_mirroring_option> yang diizinkan per pernyataan ALTER DATABASE.

Catatan

Kami menyarankan agar Anda mengonfigurasi pencerminan database selama jam sibuk karena konfigurasi dapat memengaruhi performa.

Untuk opsi UBAH DATABASE, lihat MENGUBAH DATABASE. Untuk opsi UBAH KUMPULAN DATABASE, lihat OPSI UBAH KUMPULAN DATABASE.

Konvensi sintaks transact-SQL

Sintaksis


ALTER DATABASE database_name
SET { <partner_option> | <witness_option> }
  <partner_option> ::=
    PARTNER { = 'partner_server'
            | FAILOVER
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME
            | SAFETY { FULL | OFF }
            | SUSPEND
            | TIMEOUT integer
            }
  <witness_option> ::=
    WITNESS { = 'witness_server'
            | OFF
            }
  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

Penting

Perintah SET PARTNER atau SET WITNESS dapat berhasil diselesaikan saat dimasukkan, tetapi gagal nanti.

Catatan

Opsi pencerminan database ALTER DATABASE tidak tersedia untuk database mandiri.

database_name Adalah nama database yang akan dimodifikasi.

PARTNER <partner_option> Mengontrol properti database yang menentukan mitra failover dari sesi pencerminan database dan perilakunya. Beberapa opsi SET PARTNER dapat diatur pada salah satu mitra; lainnya dibatasi untuk server utama atau ke server cermin. Untuk informasi selengkapnya, lihat opsi MITRA individual yang mengikutinya. Klausa MITRA SET memengaruhi kedua salinan database, terlepas dari mitra yang ditentukan.

Untuk menjalankan pernyataan SET PARTNER, STATUS titik akhir kedua mitra harus diatur ke STARTED. Perhatikan juga, bahwa PERAN titik akhir pencerminan database dari setiap instans server mitra harus diatur ke MITRA atau SEMUA. Untuk informasi tentang cara menentukan titik akhir, lihat Membuat Titik Akhir Pencerminan Database untuk Autentikasi Windows. Untuk mempelajari peran dan status titik akhir pencerminan database instans server, pada instans tersebut, gunakan pernyataan Transact-SQL berikut:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<> partner_option ::=

Catatan

Hanya satu <partner_option> yang diizinkan per klausul MITRA SET.

'partner_server' Menentukan alamat jaringan server instans SQL Server untuk bertindak sebagai mitra failover dalam sesi pencerminan database baru. Setiap sesi memerlukan dua mitra: satu dimulai sebagai server utama, dan yang lain dimulai sebagai server cermin. Kami menyarankan agar mitra ini berada di komputer yang berbeda.

Opsi ini ditentukan satu kali per sesi pada setiap mitra. Memulai sesi pencerminan database memerlukan dua pernyataan ALTER DATABASE SET PARTNER ='partner_server'. Pesanan mereka signifikan. Pertama, sambungkan ke server cermin, dan tentukan instans server utama sebagai partner_server (SET PARTNER ='principal_server'). Kedua, sambungkan ke server utama, dan tentukan instans server cermin sebagai partner_server (SET PARTNER ='mirror_server'); ini memulai sesi pencerminan database antara kedua mitra ini. Untuk informasi selengkapnya, lihat Menyiapkan Pencerminan Database.

Nilai partner_server adalah alamat jaringan server. Ini memiliki sintaks berikut:

TCP**://<system-address>:**port<>

lokasi

  • <alamat> sistem adalah string, seperti nama sistem, nama domain yang sepenuhnya memenuhi syarat, atau alamat IP, yang secara tidak ambigu mengidentifikasi sistem komputer tujuan.
  • <port> adalah nomor port yang terkait dengan titik akhir pencerminan instans server mitra.

Untuk informasi selengkapnya, lihat Menentukan Alamat Jaringan Server - Pencerminan Database.

Contoh berikut mengilustrasikan klausul SET PARTNER ='partner_server' :

'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'

Penting

Jika sesi disiapkan dengan menggunakan pernyataan ALTER DATABASE alih-alih SQL Server Management Studio, sesi diatur ke keamanan transaksi penuh secara default (SAFETY diatur ke PENUH) dan berjalan dalam mode keselamatan tinggi tanpa failover otomatis. Untuk mengizinkan failover otomatis, konfigurasikan saksi; untuk berjalan dalam mode performa tinggi, matikan keselamatan transaksi (SAFETY OFF).

FAILOVER Secara manual mengalihkan server utama ke server cermin. Anda hanya dapat menentukan FAILOVER di server utama. Opsi ini hanya valid ketika pengaturan SAFETY PENUH (default).

Opsi FAILOVER memerlukan master sebagai konteks database.

FORCE_SERVICE_ALLOW_DATA_LOSS Memaksa layanan database ke database cermin setelah server utama gagal dengan database dalam status tidak disinkronkan atau dalam keadaan disinkronkan ketika failover otomatis tidak terjadi.

Kami sangat menyarankan Agar Anda memaksa layanan hanya jika server utama tidak lagi berjalan. Jika tidak, beberapa klien mungkin terus mengakses database utama asli alih-alih database utama baru. FORCE_SERVICE_ALLOW_DATA_LOSS hanya tersedia di server cermin dan hanya dalam semua kondisi berikut:

  • Server utama tidak berfungsi.
  • SAKSI diatur ke NONAKTIF atau saksi terhubung ke server cermin.

Paksa layanan hanya jika Anda bersedia mengambil risiko kehilangan beberapa data untuk segera memulihkan layanan ke database.

Memaksa layanan menangguhkan sesi, untuk sementara mempertahankan semua data dalam database utama asli. Setelah perwakilan asli dalam layanan dan dapat berkomunikasi dengan server utama baru, administrator database dapat melanjutkan layanan. Saat sesi dilanjutkan, setiap rekaman log yang tidak dikirim dan pembaruan yang sesuai akan hilang.

OFF Menghapus sesi pencerminan database dan menghapus pencerminan dari database. Anda dapat menentukan OFF pada salah satu mitra. Untuk informasi, lihat tentang dampak menghapus pencerminan, lihat Menghapus Pencerminan Database.

RESUME Melanjutkan sesi pencerminan database yang ditangguhkan. Anda hanya dapat menentukan RESUME di server utama.

KESELAMATAN { PENUH | OFF } Mengatur tingkat keamanan transaksi. Anda hanya dapat menentukan SAFETY di server utama.

Defaultnya adalah FULL. Dengan keamanan penuh, sesi pencerminan database berjalan secara sinkron (dalam mode keamanan tinggi). Jika SAFETY diatur ke NONAKTIF, sesi pencerminan database berjalan secara asinkron (dalam mode performa tinggi).

Perilaku mode keselamatan tinggi sebagian tergantung pada saksi, sebagai berikut:

  • Ketika keamanan diatur ke PENUH dan bukti diatur untuk sesi, sesi berjalan dalam mode keamanan tinggi dengan failover otomatis. Ketika server utama hilang, sesi secara otomatis gagal jika database disinkronkan dan instans server cermin dan bukti masih terhubung satu sama lain (yaitu, mereka memiliki kuorum). Untuk informasi selengkapnya, lihat Kuorum: Bagaimana Bukti Memengaruhi Ketersediaan Database - Pencerminan Database.

    Jika saksi diatur untuk sesi tetapi saat ini terputus, hilangnya server cermin menyebabkan server utama tidak berfungsi.

  • Ketika keamanan diatur ke PENUH dan bukti diatur ke NONAKTIF, sesi berjalan dalam mode keamanan tinggi tanpa failover otomatis. Jika instans server cermin tidak berfungsi, instans server utama tidak terpengaruh. Jika instans server utama tidak berfungsi, Anda dapat memaksa layanan (dengan kemungkinan kehilangan data) ke instans server cermin.

  • Jika SAFETY diatur ke OFF, sesi berjalan dalam mode performa tinggi, dan failover otomatis dan failover manual tidak didukung. Namun, masalah pada cermin tidak memengaruhi prinsipal, dan jika instans server utama tidak berfungsi, Anda dapat, jika perlu, memaksa layanan (dengan kemungkinan kehilangan data) ke instans server cermin-jika WITNESS diatur ke NONAKTIF atau saksi saat ini terhubung ke cermin. Untuk informasi selengkapnya tentang memaksa layanan, lihat "FORCE_SERVICE_ALLOW_DATA_LOSS" sebelumnya di bagian ini.

Penting

Mode berkinerja tinggi tidak dimaksudkan untuk menggunakan saksi. Namun, setiap kali Anda mengatur SAFETY ke OFF, kami sangat menyarankan Anda memastikan bahwa WITNESS diatur ke NONAKTIF.

SUSPEND Menjeda sesi pencerminan database.

Anda dapat menentukan SUSPEND pada salah satu mitra.

Bilangan bulat TIMEOUT Menentukan periode waktu habis dalam hitungan detik. Periode waktu habis adalah waktu maksimum instans server menunggu untuk menerima pesan PING dari instans lain dalam sesi pencerminan sebelum mempertimbangkan bahwa instans lain terputus.

Anda dapat menentukan opsi TIMEOUT hanya di server utama. Jika Anda tidak menentukan opsi ini, secara default, periode waktunya adalah 10 detik. Jika Anda menentukan 5 atau lebih besar, periode waktu habis diatur ke jumlah detik yang ditentukan. Jika Anda menentukan nilai batas waktu 0 hingga 4 detik, periode waktu habis secara otomatis diatur ke 5 detik.

Penting

Kami menyarankan agar Anda menjaga periode waktu habis pada 10 detik atau lebih besar. Mengatur nilai menjadi kurang dari 10 detik menciptakan kemungkinan SISTEM yang sangat dimuat kehilangan PING dan menyatakan kegagalan palsu.

Untuk informasi selengkapnya, lihat Kemungkinan Kegagalan Selama Pencerminan Database.

WITNESS <witness_option> Mengontrol properti database yang menentukan bukti pencerminan database. Klausul SET WITNESS memengaruhi kedua salinan database, tetapi Anda dapat menentukan SET WITNESS hanya di server utama. Jika saksi ditetapkan untuk sesi, kuorum diperlukan untuk melayani database, terlepas dari pengaturan KESELAMATAN; untuk informasi selengkapnya, lihat Kuorum: Bagaimana Bukti Memengaruhi Ketersediaan Database - Pencerminan Database.

Kami menyarankan agar mitra saksi dan failover berada di komputer terpisah. Untuk informasi tentang saksi, lihat Bukti Pencerminan Database.

Untuk menjalankan pernyataan SET WITNESS, STATUS titik akhir instans server utama dan saksi harus diatur ke STARTED. Perhatikan juga, bahwa PERAN titik akhir pencerminan database dari instans server saksi harus diatur ke WITNESS atau ALL. Untuk informasi tentang menentukan titik akhir, lihat Titik Akhir Pencerminan Database.

Untuk mempelajari peran dan status titik akhir pencerminan database instans server, pada instans tersebut, gunakan pernyataan Transact-SQL berikut:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

Catatan

Properti database tidak dapat diatur pada bukti.

<> witness_option ::=

Catatan

Hanya satu <witness_option> yang diizinkan per klausul SET WITNESS.

'witness_server' Menentukan instans Mesin Database untuk bertindak sebagai server saksi untuk sesi pencerminan database. Anda dapat menentukan pernyataan SET WITNESS hanya di server utama.

Dalam pernyataan SET WITNESS ='witness_server', sintaks witness_server sama dengan sintaks partner_server.

OFF Menghapus saksi dari sesi pencerminan database. Mengatur saksi ke NONAKTIF menonaktifkan failover otomatis. Jika database diatur ke FULL SAFETY dan bukti diatur ke NONAKTIF, kegagalan pada server cermin menyebabkan server utama membuat database tidak tersedia.

Keterangan

Contoh

J. Membuat sesi pencerminan database dengan saksi

Menyiapkan pencerminan database dengan saksi memerlukan konfigurasi keamanan dan menyiapkan database cermin, dan juga menggunakan ALTER DATABASE untuk mengatur mitra. Untuk contoh proses penyiapan lengkap, lihat Menyiapkan Pencerminan Database.

B. Mengalihkan sesi pencerminan database secara manual

Failover manual dapat dimulai dari salah satu mitra pencerminan database. Sebelum failover, Anda harus memverifikasi bahwa server yang Anda yakini sebagai server utama saat ini sebenarnya adalah server utama. Misalnya, untuk AdventureWorks2022 database, pada instans server yang menurut Anda adalah server utama saat ini, jalankan kueri berikut:

SELECT db.name, m.mirroring_role_desc
FROM sys.database_mirroring m
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks2022';
GO

Jika instans server sebenarnya adalah prinsipal, nilainya mirroring_role_desc adalah Principal. Jika instans server ini adalah server cermin, SELECT pernyataan akan mengembalikan Mirror.

Contoh berikut mengasumsikan bahwa server adalah prinsipal saat ini.

  1. Failover secara manual ke mitra pencerminan database:

    ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER;
    GO
    
  2. Untuk memverifikasi hasil failover pada cermin baru, jalankan kueri berikut:

    SELECT db.name, m.mirroring_role_desc
    FROM sys.database_mirroring m
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks2022';
    GO
    

Nilai mirroring_role_desc saat ini adalah sekarang Mirror.

Lihat Juga