Saya memiliki database dan ingin memindahkan .mdf
dan .ldf
file ke lokasi lain. Tetapi saya tidak ingin menghentikan MSSQLSERVER
layanan, dan saya tidak ingin mengekspor ke server lain.
Bagaimana saya bisa melakukan ini?
sumber
Saya memiliki database dan ingin memindahkan .mdf
dan .ldf
file ke lokasi lain. Tetapi saya tidak ingin menghentikan MSSQLSERVER
layanan, dan saya tidak ingin mengekspor ke server lain.
Bagaimana saya bisa melakukan ini?
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 basis data offline
(Saya gunakan 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 terinci di sini .
USE master; --do this all from the master ALTER DATABASE foo MODIFY FILE (name='DB_Data1_log' ,filename='X:\NewDBFile\DB_Data1_log.ldf'); --Filename is new location
MODIFY FILE
pesanan kasus saya dapat diubah. Jika Anda menjalankan MODIFY FILE terlebih dahulu, itu akan memberi tahu Anda perintah berhasil dijalankan dan lokasi akan berubah setelah operasi offline-online (kata-kata berbeda tetapi Anda mendapatkan ide). Offline-> Pindahkan file-> Pesanan online memang penting, karena alasan yang jelas. Juga tandai catatan Demonslay335. Izin file penting.File MDF dan LDF dilindungi dan tidak dapat dipindahkan saat database online.
Jika Anda tidak keberatan menghentikan basis data dari bekerja, maka Anda bisa
DETACH
, pindahkan file dan kemudianATTACH
.Properties
Files
tabPath
danFileName
MDF dan file LDF . Langkah ini penting jika Anda tidak ingin mencari file yang hilang ...Tasks -> Detach
Databases
node server AndaAttach
Add
tombolOK
Anda seharusnya baik-baik saja sekarang. Info tentang
DETACH
-ATTACH
proses dapat ditemukan di sini .Di tautan tentang
DETACH
-ATTACH
ada rekomendasi untuk menggunakanALTER DATABASE
pernyataan jika menyimpan database pada instance SQL Server yang sama. Referensi lainnya di Pindahkan Basis Data Pengguna .Jika Anda ingin tetap menjalankannya sambil bergerak, maka lakukan a
BACKUP
-RESTORE
. Dalam proses pemulihan, Anda dapat menentukan lokasi baru file database.sumber
Untuk Memindahkan file basis data sistem, ikuti langkah-langkah ini:
Masuk sebagai pengguna di SSMS
Ambil cadangan dari database yang dibuat pengguna untuk keamanan.
Bunuh semua sesi yang terhubung ke Server dari SSMS.
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.
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:
Sekarang lokasi file telah diubah.
Pastikan untuk memindahkan file ldf dan mdf
Di 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\
keE:\projects\DataBaseFiles\MSSQL\DATA\
Hentikan contoh SQL Server.
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:
(Di sini kami memindahkan semua file database sistem ke lokasi baru.)
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 log master. 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.
Jika relokasi yang direncanakan untuk file data master adalah E: \ SQLData, nilai parameter akan diubah sebagai berikut:
Hentikan instance dari SQL Server dengan mengklik kanan nama instance dan memilih Stop. Mulai ulang contoh SQL Server.
Masuk sebagai
sa
pengguna di SSMS dan verifikasi lokasi file database dengan mengeksekusi permintaan berikut:USE master;
SELECT * FROM sys.master_files;
Semua selesai.
sumber
Anda melakukan langkah demi langkah:
tutup semua koneksi
ALTER DATABASE MyDB SET SINGLE_USER DENGAN ROLLBACK SEGERA
atur database dengan status offline
ALTER DATABASE MyDB SET OFFLINE
Ke jalur baru
ALTER DATABASE FILE MODIFIKASI MyDB (Nama = MyDB, Nama file = 'N: \ DATA \ MyDB.MDF')
set database dengan status online
ALTER DATABASE MyDB SET ONLINE
atur
DATABASE ALTER multi-pengguna MyDB SET MULTI_USER
sumber
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-taking-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 merasa sangat berguna untuk lingkungan produksi kami.
Thorfinn
sumber
Ikuti 4 langkah sederhana ini:
CurrentLocation
kolom.Sekarang, Hentikan Server Dengan Klik Kanan
Server_Name
yang dapat Anda lihat di Object Explorer (Sisi Kiri).Kemudian Pindahkan kedua file dari Lintasan Lama ke Lintasan Baru dan mulai lagi server dengan Klik Kanan pada Server_Name. Konfirmasikan Jalur Baru Basis Data dengan kembali menjalankan kueri langkah 1.
sumber
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 yang 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.
sumber
Untuk melengkapi jawaban yang ada: Berikut ini skrip untuk membuat
ALTER DATABASE ... MOVE ...
pernyataan untuk semua database: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).sumber