Beberapa waktu lalu, ketika di acara MUGI Bandung bertempat di MIC ITB, saya memperoleh MS SQL Server 2008 versi evaluasi. Begitu dapet, belum sempat dipakai, baru sekarang ini setelah ada waktu senggang, saya mencoba menginstal edisi developer di atas Vista Ultimate. Langsung saya instal 2 instance, biar bias ngoprek seputaran infrastruktur database yang bisa dicoba-coba pada laptop saya yang hanya bermemori 2 GB saja.
Percobaan pertama adalah membuat database snapshot, untuk sekedar ingin mengetahui bagaimana implementasi database snapshot pada MS SQL Server 2008, yang sama sekali belum saya ketahui kecuali pada MS SQL Server 2005 saja.
Pada dasarnya yang dimaksud dengan database snapshot, ya sesuai dengan namanya, snapshot (jepretan kamera), yaitu database yang merupakan snapshot dari database yang riil, dengan tujuan menyediakan high availability, karena apabila diinginkan original database kembali pada kondisi tertentu yang diinginkan sesuai dengan waktu pembuatan database snapshotnya. Misalkan saya membuat database snapshot pada waktu dua hari yang lalu tepat jam 12.00 siang. Dan original database terus menerus mengalami perubahan hingga saat ini, ternyata karena satu dan lain hal, diharuskan content dari database dikembalikan kondisinya seperti saat dua hari yang lalu persis sama dengan database snapshotnya, maka saya bisa melakukan revert back to a specific time dengan modal punya database snapshotnya. Tentu saja teknik-teknik lainnya selain database snapshot juga tersedia.
Database snapshot bersifat read-only, point-in-time dan static view dari database kita. Snapshot bekerja pada level data-page, ini berarti bahwa ketika terjadi perubahan data page, original page di-copykan ke snapshot. Jika kemudian data page dimodifikasi lagi di saat yang berbeda, snapshotnya tidak mengalami perubahan, tidak aware lagi terhadap perubahan pada data page yang baru.
Gambar Database Snapshot.
Contoh manfaat database snapshot lainnya misalkan ketika kita diharuskan menyediakan database untuk diakses publik/anonymous user, dan bersifat read-only, kita bisa menyediakan database snapshot, kemudian publik mengakses database snapshot ini, tentu saja hal ini bermanfaat dalam meningkatkan aspek keamanan, karena original database-nya tidak pernah diekspos untuk publik, yang diakses hanyalah snapshotnya saja, dan itu pun readonly database.
Membangun Database Snapshot
Saya melakukan koneksi ke Default Instance, dengan autentikasi Windows, seperti gambar berikut:
Lalu saya buat database baru, saya menggunakan MS SQL Management Studio aja, lalu database ini saya beri nama Healthcare.
Database baru telah jadi, seperti pada gambar berikut:
Kemudian saya buat table baru, table yang sangat sederhana aja, terdiri atas dua kolom, dan saya beri nama ‘doctors’.
Lalu saya buat table, dengan kolom-kolomnya: docID dan Full Name, seperti pada gambar berikut:
Dan saya simpan sebagai table doctors, seperti tampak pada gambar berikut:
Kemudian agar ada isinya, table doctors ini saya isikan sejumlah data baru dengan menggunakan query dari SQL Server Management Studio.
Setelah selesai, saatnya kita membuat database snapshot dari database Healthcare ini.
Kembali pada query di SQL Server Management Studio kita bisa menggunakan sintak berikut:
CREATE DATABASE Healthcare_Snapshot
ON
(
Name = Healthcare,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_Snapshot.mdf'
)
AS SNAPSHOT OF Healthcare
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Hasilnya, bisa langsung kita lihat pada container Database Snapshots berikut.
Untuk memastikan apakah benar database snaphot Healthcare_Snaphot ini ReadOnly, mari kita lakukan langkah-langkah pengisian entri baru ke table doctors pada riil databasenya, yaitu database Healthcare.
Kembali pada Query di SQL Server Management Studio kita eksekusi perintah SQL berikut:
USE Healthcare
Insert into doctors values(4, 'Ananias')
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Dan cek pada database Healthcare_Snapshot
Use Healthcare_Snapshot
GO
Select * from doctors
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Untuk lengkapnya dapat dilihat pada gambar berikut:
Entri yang barusan kita isikan ke table doctors pada database Healthcare tidak ditemukan pada database Healthcare_Snapshot.
Reverting From A Database Snapshot
Untuk mengembalikan original database ke kondisi yang sama dengan snapshotnya, kita cukup jalankan perintah berikut:
USE Master
GO
RESTORE DATABASE Healthcare
FROM DATABASE_SNAPSHOT = 'Healthcare_Snapshot'
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Setelah selesai mengeksekusi perintah di atas, kita bisa cek kembali dengan menjalankan perintah berikut (lihat pada gambar di bawah ini) untuk memastikan bahwa original database telah kembali ke kondisi semula, sama dengan database snapshotnya:
Dropping Database Snapshot
Dropping cukup dilakukan dengan perintah DROP DATABASE nama_database_snaphot
Dalam hal ini, cukup diketikkan perintah berikut:
USE master
GO
DROP DATABASE Healthcare_Snapshot
GO
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Keterbatasan Dari Database Snapshot
Pertama, Database snapshot hanya bisa diimplementasikan pada Edisi Enterprise dan Developer saja dari sejumlah edisi yang ada pada SQL Server 2008.
Kedua, original database dan snapshotnya harus berada pada satu instance, jadi tidak bisa kita membuat snapshot database pada instance yang berbeda dari original databasenya. Juga kita tidak dapat membuat database snapshot untuk database master, tempdb ataupun database model.
Ketiga, kita tidak bisa melakukan drop, detach atau restore original database. Harus dilakukan penghapusan snapshot database terlebih dahulu baru dapat dilakukan sejumlah operasi tersebut.
Keempat, untuk snapshot database itu sendiri perlu diingat lagi bahwa database ini bersifat read-only, dengan isinya yang merefleksikan kondisi dari original database pada saat snapshotnya dibuat. Permission yang di-inherits dari original database ke snapshot sama sekali tidak dapat diubah, jadi jika kita melakukan perubahan permission pada original database, perubahan tersebut tidak terjadi pada database snapshotnya.
Kelima, snapshot database tidak dapat dibackup atau direstore, juga tidak dapat di-attach atau di-detach. Kita juga tidak dapat membuat snapshot database pada partisi FAT32.
Ke-enam, snaphot database tidak mendukung Full-Text Indexing, dan berbagai full-text catalog yang ada pada original database tidak akan ada pada database snapshotnya.
--------Semoga Bermanfaat--------