Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Memigrasi Pekerjaan SQL Server Dari Satu Instance SQL Server Ke Yang Lain

Pengantar

Dalam artikel sebelumnya, kami menyoroti bahwa database msdb menyimpan hampir semua objek yang terkait dengan otomatisasi. Dalam artikel ini, kami akan meninjau kasus pemindahan pekerjaan dan objek di antara instance SQL Server.

Mari kita mulai dengan daftar objek yang disimpan di msdb pada contoh SQL Server ini.

Kami memiliki beberapa pekerjaan yang dibuat dengan rencana pemeliharaan (lihat artikel Membuat Rencana Pemeliharaan di SQL Server). Kami juga memiliki dua peringatan dan satu operator. Msdb menyimpan peringatan dan operator juga (lihat Gambar 1). Kami akan menghapus objek ini, lalu memulihkannya dengan memulihkan cadangan database msdb.

Melihat Objek yang Disimpan di msdb

Jika kami menanyakan objek sistem yang relevan, kami juga melihat objek ini dikembalikan sebagai kumpulan hasil. (Lihat Daftar 1, Gambar 2). Msdb juga menyimpan katalog sistem dengan catatan pekerjaan, log cadangan, operator, tempat pemeliharaan, surat database, dan item lain yang terkait dengan otomatisasi.

-- Listing 1: Check List of Jobs in the Instance
use msdb
go
select @@SERVERNAME as ServerName
select name from sysjobs;

Msdb cadangan

Untuk mengilustrasikan konsep untuk satu contoh SQL Server, kami mengambil cadangan database msdb terlebih dahulu. Dalam skenario produksi, pencadangan reguler database sistem Anda harus menjadi bagian dari strategi Anda. Mereka biasanya cukup kecil untuk dimasukkan ke dalam jadwal full backup harian dengan nyaman.

Tentu saja, ketika saya merujuk ke database sistem, ini tidak termasuk tempdb yang diperlukan. Selain itu, pencadangan harian untuk basis data model mungkin juga tidak diperlukan – pencadangan mingguan sudah cukup. Untuk cadangan harian lengkap, pertimbangkan master dan msdb.

Menggunakan kode sederhana di Listing 2, kami mengambil cadangan dari database msdb.

-- Listing 2: Backup msdb Database 
backup database msdb to disk = 'E:\DriveF\msdb_18072020.bak';

Menghentikan Pekerjaan

Setelah cadangan siap, kami menjatuhkan pekerjaan pada instans. Perhatikan bahwa menghapus pekerjaan yang dibuat oleh rencana pemeliharaan memerlukan penghapusan rencana pemeliharaan yang membuatnya (Lihat Gambar 3).

Pekerjaan biasa dapat dihapus dengan menghapusnya dengan GUI. Cara lain adalah menjalankan kode dari Listing 3, diikuti dengan kode dari Listing 4.

Listing 3 menghasilkan set skrip yang diperlukan untuk membatalkan pekerjaan. Kemudian, di Listing 4, kami menjalankan skrip yang dihasilkan di Listing 3.

Anda dapat menggunakan pendekatan ini meskipun nama pekerjaan di instance Anda mungkin berbeda dengan milik saya.

-- Listing 3: Generate Script to Drop Jobs
USE [msdb]
GO
select 'EXEC msdb.dbo.sp_delete_job @job_name=N''' + [name] + ''', @delete_unused_schedule=1' from sysjobs;
GO
-- Listing 4: Drop SQL Agent Jobs
EXEC msdb.dbo.sp_delete_job @job_name=N'DB1_BackupTransactionLog', @delete_unused_schedule=1
EXEC msdb.dbo.sp_delete_job @job_name=N'syspolicy_purge_history', @delete_unused_schedule=1

Setelah melepaskan pekerjaan, kami dapat memverifikasi bahwa tidak ada pekerjaan yang tersisa. Gunakan skrip yang sama, seperti yang ditunjukkan pada Daftar 1. Kami mempertimbangkan dua cara untuk skenario:

  1. Seseorang secara tidak sengaja menghapus pekerjaan dan objek serupa dalam sebuah instance.
  2. Kami ingin mengimpor tugas dari satu instance ke instance lainnya.

Memulihkan msdb

Kami memulai operasi pemulihan menggunakan skrip dari Listing 5. Dalam skrip itu, kami mulai dengan mengatur database ke mode single_user. Karena seseorang atau sesuatu (akun Agen SQL?) mungkin masuk ke database ini, itu perlu.

Kemudian, kami mengeluarkan perintah "restore" dan mengatur database msdb baru ke multi_user. Perhatikan bahwa kami menggunakan opsi REPLACE dalam pernyataan pemulihan. Jika Anda memigrasi msdb ke instance baru, klausa REPLACE akan diperlukan. Tanpa itu, SQL Server dapat mengembalikan kesalahan tentang set cadangan yang bukan milik database msdb pada instance.

-- Listing 5: Restore msdb database
use master
go
alter database msdb set single_user with rollback immediate;
GO
restore database msdb from disk = 'E:\DriveG\msdb_18072020.bak'
with replace;
GO
alter database msdb set multi_user;
GO

Setelah operasi pemulihan selesai, pekerjaan yang hilang dan objek lain akan kembali. Mereka datang lengkap dengan riwayat pekerjaan masing-masing. Semua hubungan antara pekerjaan dengan database dan objek lainnya utuh. Pekerjaan bekerja seolah-olah tidak ada seorang pun dan tidak ada yang pernah menghapusnya.

Kesimpulan

Kami dapat dengan mudah memigrasikan pekerjaan dan objek serupa dari satu contoh SQL Server ke contoh lainnya. Untuk itu diperlukan proses backup dan restore msdb. Demikian pula, kami dapat memulihkan objek ini pada instance SQL Server jika hilang karena alasan tertentu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Suka Operator di Entity Framework?

  2. Apakah ada cara untuk tidak menggunakan tanda kurung siku di SQL Server?

  3. Cara Membuat Database di SQL Server

  4. Kapan kita harus menggunakan NVARCHAR/NCHAR daripada VARCHAR/CHAR di SQL Server?

  5. Bagaimana menjalankan beberapa perintah SQL dalam satu koneksi SQL?