İçeriğe geç
Türkiye'nin SRO tanıtım & topluluk platformu

vSro Paylaşım vSRO Veritabanı (Database) SQL Query ile Restore Etme

Cevaplar0
Görüntüleme3
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[REHBER] vSRO Veritabanı (Database) SQL Query ile Restore Etme
Bağlantı Çakışmalarını Önleyerek .BAK Yedek Dosyalarını T-SQL ile Geri Yükleme



Merhaba değerli forum sakinleri,

Silkroad Online sunucu kurulumunda veya geri yükleme (rollback) işlemlerinde SQL Server Management Studio (SSMS) arayüzü bazen *"Database is in use"* veya izin hataları verebilir.

Aşağıda paylaşılan optimize edilmiş T-SQL sorgusu; açık kalan tüm modül/kullanıcı bağlantılarını otomatik olarak sonlandırır (SINGLE_USER), yedeği geri yükler ve ardından veritabanını tekrar genel kullanıma açar (MULTI_USER).

Önemli Uyarı' Alıntı:
DİKKAT:
  • Geri yükleme işlemine başlamadan önce Server modüllerini (GlobalManager, ShardManager, GameServer vb.) ve web sitesi/IIS servislerini durdurmanız önerilir.
  • Restore işlemi mevcut veritabanının üzerine yazacağı için, geri döneceğiniz güncel verilerin kaybolmaması adına mevcut durumun yedeğini aldığınızdan emin olun.



1. YÖNTEM: Standart ve Güvenli Restore Sorgusu (Önerilen)

Bu sorgu, veritabanına bağlı olan tüm açık oturumları derhal düşürerek REPLACE parametresiyle sorunsuz bir geri yükleme sağlar:

SQL:
USE master
GO

-- 1. ADIM: Açık olan tüm oturumları kapat ve DB'yi tek kullanıcı moduna al
ALTER DATABASE [SRO_VT_SHARD] 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- 2. ADIM: .BAK dosyasından yedeği geri yükle
RESTORE DATABASE [SRO_VT_SHARD] 
FROM DISK = N'C:\SRO_VT_SHARD201901071238.bak' 
WITH FILE = 1, 
     REPLACE, 
     NOUNLOAD, 
     STATS = 10
GO

-- 3. ADIM: Veritabanını tekrar çoklu kullanıcı moduna aç
ALTER DATABASE [SRO_VT_SHARD] 
SET MULTI_USER
GO



2. YÖNTEM: Farklı Sunucudan Alınan Yedekler İçin (Fiziksel Dosya Yolu Taşıma - MOVE)

Eğer elinizdeki `.bak` dosyası başka bir sunucudan alınmışsa, SQL Server veri dosyalarının (`.mdf` ve `.ldf`) kurulacağı dizinler uyuşmayabilir. Bu durumda `WITH MOVE` parametresi kullanılmalıdır:

Önce Yedek Dosyasının Mantıksal (Logical) İsimlerini Öğrenin:
SQL:
RESTORE FILELISTONLY 
FROM DISK = N'C:\SRO_VT_SHARD201901071238.bak'
Bu sorgu sonucunda LogicalName sütununda genellikle SRO_VT_SHARD ve SRO_VT_SHARD_log isimleri çıkar.

Dosya Konumlarını Belirterek Restore Edin:
SQL:
USE master
GO

ALTER DATABASE [SRO_VT_SHARD] 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

RESTORE DATABASE [SRO_VT_SHARD] 
FROM DISK = N'C:\SRO_VT_SHARD201901071238.bak'
WITH FILE = 1,
     MOVE 'SRO_VT_SHARD' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SRO_VT_SHARD.mdf',
     MOVE 'SRO_VT_SHARD_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SRO_VT_SHARD_log.ldf',
     REPLACE,
     STATS = 10
GO

ALTER DATABASE [SRO_VT_SHARD] 
SET MULTI_USER
GO



Parametrelerin Anlamları

  • STATS = 10 : Geri yükleme ilerlemesini alt kısımdaki Messages sekmesinde %10'luk adımlarla gösterir.
  • REPLACE : Aynı isimde mevcut bir veritabanı varsa onay istemeden üzerine yazar.
  • ROLLBACK IMMEDIATE : Veritabanını meşgul eden tüm arka plan işlemlerini beklemeden iptal edip bağlantıyı anında koparır.



Sık Karşılaşılan Hata ve Çözümü:
Eğer restore işlemi sırasında Exclusive access could not be obtained hatası alırsanız, `ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE` adımını çalıştırdığınızdan emin olun.

Takıldığınız yerleri konu altından belirtebilirsiniz. Herkese iyi forumlar!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Şu anda sitemizde 40,410 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,311
Mesajlar 4,191
Kullanıcılar 1,624
Son üye mrt
Geri
Üst