Bagikan melalui


Menyebarkan Proyek Database

oleh Jason Lee

Catatan

Dalam banyak skenario penyebaran perusahaan, Anda memerlukan kemampuan untuk menerbitkan pembaruan bertahap ke database yang disebarkan. Alternatifnya adalah membuat ulang database pada setiap penyebaran, yang berarti Anda kehilangan data apa pun di database yang ada. Saat Anda bekerja dengan Visual Studio 2010, menggunakan VSDBCMD adalah pendekatan yang direkomendasikan untuk penerbitan database inkremental. Namun, versi Visual Studio berikutnya dan Web Publishing Pipeline (WPP) akan menyertakan alat yang mendukung penerbitan bertahap secara langsung.

Jika Anda membuka solusi sampel Contact Manager di Visual Studio 2010, Anda akan melihat bahwa proyek database menyertakan folder Properti yang berisi empat file.

Jika Anda membuka solusi sampel Contact Manager di Visual Studio 2010, Anda akan melihat bahwa proyek database menyertakan folder Properti yang berisi empat file.

Bersama dengan file proyek (ContactManager.Database.dbproj dalam hal ini), file-file ini mengontrol berbagai aspek proses build dan penyebaran:

  • File Database.sqlcmdvars menyediakan nilai untuk variabel SQLCMD apa pun yang Anda gunakan saat menyebarkan proyek. Setiap konfigurasi solusi (misalnya, debug dan rilis) dapat menentukan file .sqlcmdvars yang berbeda.
  • File Database.sqldeployment menyediakan pengaturan khusus penyebaran , seperti apakah akan menggunakan kolase yang ditentukan dalam proyek Anda atau kolase server tujuan, apakah akan membuat ulang database tujuan setiap kali atau hanya mengubah database yang ada untuk memperbaruinya, dan sebagainya. Setiap konfigurasi solusi dapat menentukan file .sqldeployment yang berbeda.
  • File Database.sqlpermissions adalah dokumen XML yang bisa Anda gunakan untuk menentukan izin apa pun yang ingin Anda tambahkan ke database target. Semua konfigurasi solusi berbagi file .sqlpermissions yang sama.
  • File Database.sqlsettings menentukan properti tingkat database yang akan digunakan saat membuat database, seperti kolase yang akan digunakan, perilaku operator perbandingan, dan sebagainya. Semua konfigurasi solusi berbagi file .sqlsettings yang sama.

Perlu meluangkan waktu sejenak untuk membuka file-file ini di Visual Studio dan membiasakan diri dengan konten.

Saat Anda membangun proyek database, proses build membuat dua file:

  • Skema database (file.dbschema). Ini menjelaskan skema database yang ingin Anda buat dalam format XML.
  • Manifes penyebaran (.deploymanifest file). Ini berisi semua informasi yang diperlukan untuk membuat dan menyebarkan database Anda. Ini mereferensikan file .dbschema bersama dengan sumber daya lain, seperti instruksi penyebaran (file .sqldeployment) dan skrip SQL pra-penyebaran atau pasca-penyebaran.

Ini menunjukkan hubungan antara sumber daya ini:

Hubungan antara sumber daya di atas

Seperti yang Anda lihat, file .sqlsettings dan file .sqlpermissions adalah input ke proses build. Bersama dengan file proyek database, file-file ini digunakan untuk membuat file skema database. File .sqldeployment dan file .sqlcmdvars melewati proses build yang tidak berubah. Manifes penyebaran menunjukkan lokasi skema database, file .sqldeployment, file .sqlcmdvars, dan skrip SQL pra-penyebaran atau pasca-penyebaran.

Mengapa Menggunakan VSDBCMD untuk Menyebarkan Proyek Database?

Ada berbagai pendekatan berbeda untuk menyebarkan proyek database. Namun, tidak semuanya cocok untuk menyebarkan proyek database ke server jarak jauh di lingkungan perusahaan. Pertimbangkan apa yang Anda inginkan dari penyebaran proyek database. Dalam skenario penyebaran perusahaan, Anda mungkin ingin:

  • Kemampuan untuk menyebarkan proyek database dari lokasi jarak jauh.
  • Kemampuan untuk membuat pembaruan inkremental ke database yang sudah ada.
  • Kemampuan untuk menyertakan skrip pra-penyebaran atau skrip pasca-penyebaran.
  • Kemampuan untuk menyesuaikan penyebaran dengan beberapa lingkungan tujuan.
  • Kemampuan untuk menyebarkan proyek database sebagai bagian dari penyebaran solusi satu langkah yang lebih besar, biasanya berskrip.

Ada tiga pendekatan utama yang dapat Anda gunakan untuk menyebarkan proyek database:

  • Anda dapat menggunakan fungsi penyebaran dengan jenis proyek database di Visual Studio 2010. Saat Anda membangun dan menyebarkan proyek database di Visual Studio 2010, proses penyebaran menggunakan manifes penyebaran untuk menghasilkan file penyebaran berbasis SQL khusus untuk konfigurasi build. Ini akan membuat database jika belum ada atau membuat perubahan yang diperlukan pada database jika sudah ada. Anda dapat menggunakan SQLCMD.exe untuk menjalankan file ini di server tujuan, atau Anda dapat mengatur Visual Studio untuk membuat dan menjalankan file. Kerugian dari pendekatan ini adalah Anda hanya memiliki kontrol terbatas atas pengaturan penyebaran. Anda mungkin sering juga perlu memodifikasi file penyebaran SQL untuk menyediakan nilai variabel khusus lingkungan. Anda hanya dapat menggunakan pendekatan ini dari komputer dengan Visual Studio 2010 terinstal, dan pengembang perlu mengetahui dan memberikan string koneksi dan kredensial untuk semua lingkungan tujuan.
  • Anda dapat menggunakan Alat Penyebaran Web (Web Deployment Tool) Layanan Informasi Internet (IIS) untuk menyebarkan database sebagai bagian dari proyek aplikasi web. Namun, pendekatan ini jauh lebih kompleks jika Anda ingin menyebarkan proyek database daripada hanya mereplikasi database lokal yang ada di server tujuan. Anda dapat mengonfigurasi Web Deploy untuk menjalankan skrip penyebaran SQL yang dihasilkan proyek database, tetapi untuk melakukan ini, Anda perlu membuat file target WPP kustom untuk proyek aplikasi web Anda. Ini menambahkan sejumlah besar kompleksitas ke proses penyebaran. Selain itu, Web Deploy tidak secara langsung mendukung pembaruan bertahap ke database yang ada. Untuk informasi selengkapnya tentang pendekatan ini, lihat Memperluas Alur Penerbitan Web untuk mengemas proyek database yang disebarkan file SQL.
  • Anda dapat menggunakan utilitas VSDBCMD untuk menyebarkan database, menggunakan skema database atau manifes penyebaran. Anda dapat memanggil VSDBCMD.exe dari target MSBuild, yang memungkinkan Anda menerbitkan database sebagai bagian dari proses penyebaran yang lebih besar dan berskrip. Anda dapat mengambil alih variabel dalam file .sqlcmdvars dan banyak properti database lainnya dari perintah VSDBCMD, yang memungkinkan Anda menyesuaikan penyebaran untuk lingkungan yang berbeda tanpa membuat beberapa konfigurasi build. VSDBCMD menyediakan fungsionalitas diferensiasi, yang berarti hanya akan membuat perubahan yang diperlukan untuk menyelaraskan database tujuan dengan skema database Anda. VSDBCMD juga menawarkan berbagai opsi baris perintah, yang memberi Anda kontrol halus atas proses penyebaran.

Dari gambaran umum ini, Anda dapat melihat bahwa menggunakan VSDBCMD dengan MSBuild adalah pendekatan yang paling cocok untuk skenario penyebaran perusahaan yang khas:

Mendukung Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Mendukung penyebaran jarak jauh? Ya Ya Ya
Mendukung pembaruan inkremental? Ya No Ya
Mendukung skrip pra/pasca-penyebaran? Ya Ya Ya
Mendukung penyebaran multi-lingkungan? Terbatas Terbatas Ya
Mendukung penyebaran skrip? Terbatas Ya Ya

Sisa topik ini menjelaskan penggunaan VSDBCMD dengan MSBuild untuk menyebarkan proyek database.

Memahami Proses Penyebaran

Utilitas VSDBCMD memungkinkan Anda menyebarkan database menggunakan skema database (file .dbschema) atau manifes penyebaran (file .deploymanifest). Dalam praktiknya, Anda hampir selalu menggunakan manifes penyebaran, karena manifes penyebaran memungkinkan Anda menyediakan nilai default untuk berbagai properti penyebaran dan mengidentifikasi skrip SQL pra-penyebaran atau pasca-penyebaran yang ingin Anda jalankan. Misalnya, perintah VSDBCMD ini digunakan untuk menyebarkan database ContactManager ke server database di lingkungan pengujian:

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

Dalam hal ini:

  • Sakelar /a (atau /Action) menentukan apa yang Anda inginkan untuk dilakukan VSDBCMD. Anda dapat mengatur ini ke Impor atau Sebarkan. Opsi Impor digunakan untuk menghasilkan file .dbschema dari database yang ada, dan opsi Sebarkan digunakan untuk menyebarkan file .dbschema ke database target.
  • Sakelar /manifest (atau /ManifestFile) mengidentifikasi file .deploymanifest yang ingin Anda sebarkan. Jika Anda ingin menggunakan file .dbschema sebagai gantinya, Anda akan menggunakan sakelar /model (atau /ModelFile).
  • Sakelar /cs (atau /ConnectionString) menyediakan string koneksi untuk server database target. Perhatikan bahwa ini tidak menyertakan nama database—VSDBCMD perlu tersambung ke server untuk membuat database; tidak perlu menyambungkan ke database individual. Jika file .deploymanifest Menyertakan string koneksi, Anda dapat menghilangkan sakelar ini. Jika Anda tetap menggunakan sakelar, nilai pengalihan akan menimpa nilai .deploymanifest.
  • Properti /p:TargetDatabase menyediakan nama yang ingin Anda tetapkan ke database target saat pembuatan. Ini mengambil alih nilai properti TargetDatabase dalam file .deploymanifest. Anda dapat menggunakan sintaks /p: [nama properti]untuk mengatur berbagai properti penyebaran dan untuk mengambil alih variabel SQLCMD yang dideklarasikan dalam file .sqlcmdvars Anda.
  • Sakelar /dd+ (atau /DeployToDatabase+) menunjukkan bahwa Anda ingin membuat penyebaran dan menyebarkannya ke lingkungan target. Jika Anda menentukan /dd-, atau menghilangkan sakelar, VSDBCMD akan menghasilkan skrip penyebaran tetapi tidak akan menyebarkannya ke lingkungan target. Sakelar ini sering menjadi sumber kebingungan dan dijelaskan secara lebih rinci di bagian berikutnya.
  • Sakelar /script (atau /DeploymentScriptFile) menentukan tempat Anda ingin membuat skrip penyebaran. Nilai ini tidak memengaruhi proses penyebaran.

Untuk informasi selengkapnya tentang VSDBCMD, lihat Referensi Baris Perintah untuk VSDBCMD.EXE (Penyebaran dan Impor Skema) dan Cara: Menyiapkan Database untuk Penyebaran Dari Prompt Perintah dengan Menggunakan VSDBCMD.EXE.

Untuk contoh bagaimana Anda dapat menggunakan VSDBCMD dari file proyek MSBuild, lihat Memahami Proses Build. Untuk contoh cara mengonfigurasi pengaturan penyebaran database untuk beberapa lingkungan, lihat Menyesuaikan Penyebaran Database untuk Beberapa Lingkungan.

Memahami Switch DeployToDatabase

Perilaku sakelar /dd atau /DeployToDatabase bergantung pada apakah Anda menggunakan VSDBCMD dengan file .dbschema atau file .deploymanifest. Jika Anda menggunakan file .dbschema, perilakunya cukup mudah:

  • Jika Anda menentukan /dd+ atau /dd, VSDBCMD akan menghasilkan skrip penyebaran dan menyebarkan database.
  • Jika Anda menentukan /dd- atau menghilangkan sakelar, VSDBCMD hanya akan menghasilkan skrip penyebaran.

Jika Anda menggunakan file .deploymanifest, perilakunya jauh lebih rumit. Ini karena file .deploymanifest berisi nama properti DeployToDatabase yang juga menentukan apakah database disebarkan.

<DeployToDatabase>False</DeployToDatabase>

Nilai properti ini diatur sesuai dengan properti proyek database. Jika Anda mengatur tindakan Sebarkan ke Membuat skrip penyebaran (.sql), nilainya adalah False. Jika Anda mengatur tindakan Sebarkan ke Membuat skrip penyebaran (.sql) dan menyebarkan ke database, nilainya adalah True.

Catatan

Pengaturan ini dikaitkan dengan konfigurasi dan platform build tertentu. Misalnya, jika Anda mengonfigurasi pengaturan untuk konfigurasi Debug lalu menerbitkan menggunakan konfigurasi Rilis , pengaturan Anda tidak akan digunakan.

Misalnya, jika Anda mengonfigurasi pengaturan untuk konfigurasi Debug lalu menerbitkan menggunakan konfigurasi Rilis, pengaturan Anda tidak akan digunakan.

Catatan

Dalam skenario ini, tindakan Sebarkan harus selalu diatur ke Membuat skrip penyebaran (.sql), karena Anda tidak ingin Visual Studio 2010 menyebarkan database Anda. Dengan kata lain, properti DeployToDatabase harus selalu False.

Ketika properti DeployToDatabase ditentukan, sakelar /dd hanya akan mengambil alih properti jika nilai properti salah:

  • Jika properti DeployToDatabase adalah False, dan Anda menentukan /dd+ atau /dd, VSDBCMD akan mengambil alih properti DeployToDatabase dan menyebarkan database.
  • Jika properti DeployToDatabase adalah False, dan Anda menentukan /dd- atau menghilangkan sakelar, VSDBCMD tidak akan menyebarkan database.
  • Jika properti DeployToDatabase True, VSDBCMD akan mengabaikan sakelar dan menyebarkan database.
  • Skrip penyebaran dihasilkan dalam setiap kasus, terlepas dari apakah Anda juga menyebarkan database.

Kesimpulan

Topik ini memberikan gambaran umum tentang proses build dan penyebaran untuk proyek database di Visual Studio 2010. Ini juga menjelaskan bagaimana Anda dapat menggunakan VSDBCMD.exe dengan MSBuild untuk mendukung penyebaran database skala perusahaan.

Untuk informasi selengkapnya tentang cara kerjanya dalam praktiknya, lihat Menyesuaikan Penyebaran Database untuk Beberapa Lingkungan.

Bacaan lebih lanjut

Untuk informasi tentang cara menyesuaikan penyebaran database dengan membuat file konfigurasi penyebaran terpisah untuk setiap lingkungan, lihat Menyesuaikan Penyebaran Database untuk Beberapa Lingkungan. Untuk panduan tentang cara mengonfigurasi keanggotaan peran database dengan menjalankan skrip pasca-penyebaran, lihat Menyebarkan Keanggotaan Peran Database ke Lingkungan Pengujian. Untuk panduan tentang mengelola beberapa tantangan unik yang diberlakukan database keanggotaan, lihat Menyebarkan Database Keanggotaan ke Lingkungan Perusahaan.

Topik-topik tentang MSDN ini memberikan panduan yang lebih luas dan informasi latar belakang tentang proyek database Visual Studio dan proses penyebaran database: