it-swarm.asia

Bagaimana cara memindahkan file database SQL Server?

Saya memiliki database dan ingin memindahkan .mdf dan .ldf file ke lokasi lain. Tetapi saya tidak ingin menghentikan layanan MSSQLSERVER, dan saya tidak ingin mengekspor ke server lain.

Bagaimana saya bisa melakukan ini?

116
user2645263

Anda tidak harus menghentikan layanan SQL Server untuk memindahkan file database, tetapi Anda harus membuat database tertentu offline. Ini karena Anda tidak dapat memindahkan file saat sedang diakses dan membuat database offline menghentikan file dari digunakan oleh aplikasi SQL Server.

Proses untuk memindahkannya cukup sederhana. Lepaskan/Lampirkan sudah dijelaskan, tetapi tidak hampir kompleks ini.

Ubah lokasi file dengan ALTER DATABASE perintah:

USE master; --do this all from the master
ALTER DATABASE foo
MODIFY FILE (name='DB_Data1'
             ,filename='X:\NewDBFile\DB_Data1.mdf'); --Filename is new location

Catatan, Anda tidak perlu mendeklarasikan lokasi lama dalam perintah ini. Mengubah jalur ini tidak langsung berlaku, tetapi akan digunakan saat berikutnya database dimulai.

Setel offline database

(Saya menggunakan WITH ROLLBACK IMMEDIATE untuk mengusir semua orang dan mengembalikan semua transaksi yang saat ini terbuka)

ALTER DATABASE foo SET OFFLINE WITH ROLLBACK IMMEDIATE;

Pindahkan/Salin file ke lokasi baru

Cukup salin file menggunakan metode favorit Anda (Klik 'n Seret, XCopy, Salin-Item, Robocopy)

Bawalah database secara online

ALTER DATABASE foo SET ONLINE;

Anda dapat melihat ini dijelaskan lebih detail di sini .

168
Mike Fal

File MDF dan LDF dilindungi dan tidak dapat dipindahkan saat database online.

Jika Anda tidak keberatan menghentikan basis data dari bekerja, maka Anda dapat DETACH itu, pindahkan file dan kemudian ATTACH itu.

  • Klik kanan pada nama database
  • Pilih Properties
  • Buka tab Files
  • Catat Path dan FileName dari MDF dan file LDF Langkah ini penting jika Anda tidak ingin mencari file yang hilang ...
  • Klik kanan pada nama basis data
  • Pilih Tasks -> Detach
  • Pindahkan file ke tempat yang Anda inginkan
  • Klik kanan pada simpul Databases dari server Anda
  • Pilih Attach
  • Klik pada tombol Add
  • Tunjuk ke lokasi baru
  • Klik OK

Anda seharusnya baik-baik saja sekarang. Info tentang proses DETACH - ATTACH dapat ditemukan di sini .

Di tautan tentang DETACH - ATTACH ada rekomendasi untuk menggunakan ALTER DATABASE pernyataan jika menyimpan database pada contoh yang sama dari SQL Server. Lebih banyak referensi di Pindahkan Database Pengguna .

Jika Anda ingin tetap menjalankannya sambil bergerak, maka lakukan BACKUP - RESTORE. Dalam proses pemulihan Anda dapat menentukan lokasi baru dari file database.

Untuk Memindahkan file basis data sistem, ikuti langkah-langkah ini:

  1. Masuk sebagai pengguna di SSMS

  2. Ambil cadangan dari database yang dibuat pengguna untuk keamanan.

  3. Bunuh semua sesi yang terhubung ke Server dari SSMS.

  4. Jalankan perintah berikut untuk memeriksa lokasi file saat ini dari basis data sistem:

    USE master;
    SELECT * FROM sys.master_files;

Identifikasi jalur dan catat jalur saat ini dari file.

  1. Gunakan TSQL untuk mengubah jalur file untuk semua basis data kecuali master:

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )

Misalnya:

ALTER DATABASE tempdb
MODIFY FILE ( NAME = tempdev
, FILENAME = "DestinationPath\tempdb.mdf");

ALTER DATABASE tempdb
MODIFY FILE ( NAME = templog
, FILENAME = "DestinationPath\templog.ldf");

ALTER DATABASE model
MODIFY FILE ( NAME = modeldev
, FILENAME = "DestinationPath\model.mdf");

ALTER DATABASE model
MODIFY FILE ( NAME = modellog
, FILENAME = "DestinationPath\modellog.ldf");

ALTER DATABASE msdb
    MODIFY FILE ( NAME = MSDBData
, FILENAME = "DestinationPath\msdbdata.mdf");

ALTER DATABASE msdb
    MODIFY FILE ( NAME = MSDBLog
, FILENAME = "DestinationPath\msdblog.ldf");

Sekarang lokasi file telah diubah.

Pastikan untuk memindahkan file ldf dan mdf

  1. Dalam SSMS klik kanan Server dan pilih properti. Properti di dalam pergi ke Pengaturan Database. Ubah lokasi default database untuk Data dan Log ke jalur tujuan. Logout dari server.

    Misalnya: ubah C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\ Ke E:\projects\DataBaseFiles\MSSQL\DATA\

  2. Hentikan instance dari SQL Server.

  3. Salin file atau file ke lokasi baru. Gunakan Robocopy untuk memindahkan file untuk menyalin izin akses ke folder tujuan. Buka cmd dan jalankan sebagai administrator dan gunakan perintah berikut:

    robocopy/sec sourceFolder destinationFolder

Lebih baik pergi ke lokasi sumber untuk menjalankan perintah. Hapus file lain selain file basis data sistem yang disalin. Misalnya:

 robocopy /sec .\DATA E:\projects\DataBaseFiles\MSSQL\DATA\

(Di sini kami memindahkan semua file database sistem ke lokasi baru.)

  1. Dari menu Mulai, arahkan ke Semua Program, arahkan ke Microsoft SQL Server, arahkan ke Alat Konfigurasi, lalu klik Manajer Konfigurasi Server SQL.

Lakukan langkah-langkah berikut di SQL Server Configuration Manager:

Di node SQL Server Services, klik kanan instance SQL Server (misalnya, SQL Server (MSSQLSERVER)) dan pilih Properties .. Di kotak dialog Properties SQL Server (instance_name), klik tab Parameter Startup. Di kotak Parameter yang ada, pilih –d parameter untuk memindahkan file data master. Klik Perbarui untuk menyimpan perubahan. Di kotak Tentukan parameter startup, ubah parameter ke jalur baru dari database master. Di kotak Parameter yang ada, pilih –l parameter untuk memindahkan file master log. Klik Perbarui untuk menyimpan perubahan. Di kotak Tentukan parameter startup, ubah parameter ke jalur baru dari database master.

Nilai parameter untuk file data harus mengikuti parameter -d dan nilai untuk file log harus mengikuti parameter -l. Contoh berikut menunjukkan nilai parameter untuk lokasi default file data master.

-dC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\mastlog.ldf

Jika relokasi yang direncanakan untuk file data master adalah E:\SQLData, nilai parameter akan berubah sebagai berikut:

-dE:\projects\DataBaseFiles\MSSQL\DATA\master.mdf
-lE:\projects\DataBaseFiles\MSSQL\DATA\mastlog.ldf

Hentikan instance dari SQL Server dengan mengklik kanan nama instance dan memilih Stop. Mulai ulang contoh SQL Server.

  1. Masuk sebagai sa pengguna di SSMS dan verifikasi lokasi file basis data dengan menjalankan kueri berikut:

    USE master;
    SELECT * FROM sys.master_files;

Semua selesai.

6
abhay sreekumar

Anda melakukan langkah demi langkah:

  1. tutup semua koneksi
    ALTER DATABASE MyDB SET SINGLE_USER DENGAN ROLLBACK SEGERA

  2. mengatur basis data dengan status offline
    ALTER DATABASE MyDB SET OFFLINE

  3. Ke jalur baru
    ALTER DATABASE FILE MODIFIKASI MyDB (Nama = MyDB, Nama file = 'N:\DATA\MyDB.MDF')

  4. mengatur basis data dengan status online
    ALTER DATABASE MyDB SET ONLINE

  5. atur multi-pengguna
    ALTER DATABASE MyDB SET MULTI_USER

3

Ada cara untuk memindahkan file data database (belum yakin apakah ada cara untuk melakukan ini untuk file log) tanpa membuat database offline.

Dejan Nakarada-Kordic memiliki penjelasan + skrip untuk metode ini di sini: https://www.itprotoday.com/sql-server/ move-database-files-without-take-database-offline

Versi singkatnya adalah Anda menambahkan file database lain di lokasi baru, dan kemudian menggunakan DBCC Shrinkfile, dengan opsi EMPTYFILE untuk memindahkan data dari file lama ke file baru. Ketika ini selesai, Anda dapat menghapus file data lama.

Bukan solusi saya, saya sendiri yang mencari solusi ini dan menemukannya sangat berguna untuk lingkungan produksi kami.

Thorfinn

3

Ikuti 4 langkah sederhana ini:

  1. Buka SSMS dan pilih opsi Permintaan Baru dari atas jendela. Kemudian Salin dan jalankan Query Berikut untuk menemukan jalur Database yang ingin kami pindah ke jalur baru dan catat jalur yang Anda tunjukkan di kolom CurrentLocation.

SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID('DATABASE_NAME');

  1. Sekarang pergi ke jalur itu dan catat nama Database_Name.mdf & Database_Name_log.ldf file. Kemudian jalankan dua Pertanyaan berikut untuk memindahkan Database ke Lokasi Tertentu.

ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME , FILENAME = 'NEW_PATH\DATABASE_NAME.mdf');

ALTER DATABASE DATABASE_NAME MODIFY FILE ( NAME = DATABASE_FILE_NAME_log , FILENAME = 'NEW_PATH\DATABASE_FILE_NAME_log.ldf');

  1. Sekarang, Hentikan Server Dengan Klik Kanan pada Server_Name yang dapat Anda lihat di Object Explorer (Sisi Kiri).

    enter image description here

  2. Kemudian Pindahkan kedua file dari Lintasan Lama ke Jalur Baru dan mulai lagi server dengan Klik-kanan pada Server_Name. Konfirmasikan Jalur Baru Basis Data dengan kembali menjalankan kueri langkah 1.

1
Karan Raiyani

Untuk melengkapi jawaban yang ada: Berikut ini skrip untuk membuat pernyataan ALTER DATABASE ... MOVE ... Untuk semua basis data:

SELECT 'ALTER DATABASE ' + QUOTENAME(d.name) + 
       ' MODIFY FILE (name=' + QUOTENAME(f.name, '''') +
       ', filename=' + QUOTENAME(REPLACE(f.physical_name, 'C:\', 'D:\'), '''') +
       ');'
  FROM sys.master_files AS f 
       INNER JOIN sys.databases AS d ON f.database_id = d.database_id
 WHERE d.name <> 'master';

Catatan:

  • Ganti REPLACE(f.physical_name, 'C:\', 'D:\') dengan transformasi apa pun yang ingin Anda buat ke jalur file.

  • master dikecualikan, karena jalurnya ditentukan oleh opsi startup SQL Server (lihat, misalnya, jawaban ini untuk detail).

1
Heinzi

Saya tidak yakin bahwa ini adalah cara terbaik (saya akan menyambut setiap komentar untuk memberi tahu saya bagaimana tidak), tetapi sangat sederhana (dan cepat jika Anda memiliki database kecil):

Pertama, buat cadangan database ke file .bak. Kemudian, pulihkan database dari file .bak yang sama, pilih lokasi file .mdf dan .ldf baru di bawah opsi file untuk tugas pemulihan.

Saya tidak akan melakukannya di lingkungan produksi di luar jendela pemeliharaan, karena Anda tidak dapat mengakses database selama pemulihan. Metode lain yang saya lihat di atas akan memiliki kelemahan serupa. Setelah tugas pemulihan selesai, Anda tidak perlu menghapus file lama. Ini dilakukan secara otomatis.

0
Ali