SQL Server'da bir veritabanını nasıl eklerim?


32

SQL Server'da veritabanlarının eklenmesi ile ilgili bazı yaygın sorular:

  • Veritabanını eklemek veya çıkarmak ne anlama gelir?
  • Bir veritabanını nasıl sökebilirim?
  • Veritabanını nasıl eklerim?
    • Günlüğü eklemek ve yeniden oluşturmak ne demektir?
  • SQL Server Express'te nasıl yaparım?
  • Ayırmayı ve takmayı ne zaman düşünebilirim?
  • Herhangi bir risk veya uyarı var mı?
  • SQL Server'ın sürümleri ve sürümleri arasına eklemeye ne dersiniz? (Standart Kurumsal? 2000 ila 2008? 2012 ila 2008?)

Yanıtlar:


33

Ayırma veya Ekleme Nedir ve Nasıl Çalışır?

Ayırmayla başlayacağız. SQL Server'da bir veritabanını çıkardığınızda, veritabanını çevrimdışına alıyor ve onu ayırdığınız SQL Server örneğinden kaldırıyorsunuz. Veritabanları verileri ve günlük dosyaları aynı kalır ve tutarlı bir durumda kalırlar, böylece veritabanını daha sonra veya başka bir SQL Server örneğine ekleyebilirsiniz. Ekleme , verileri ve günlük dosyalarını düzgün bir şekilde ayrılmış (ya da düzgün bir şekilde kapatılmış bir SQL Server örneğinden kopyalanmış) bir veritabanından bir SQL Server örneğine bağlar ve veritabanını çevrimiçi duruma getirir.

Veritabanını Nasıl Ayırırım?

Bunu T-SQL'de veya SQL Server Management Studio GUI'den yapabilirsiniz.

GUI'de, ayırmak istediğiniz veritabanına sağ tıklayın, seçin All Tasksve tıklayın Detach. Oradan kopma iletişim kutusu alırsınız. Aktif bağlantıların zorla bağlantısını kesmek ve yürütmenin ortasındaki geri alma işini önce bağlantıları kesmeyi seçebilirsiniz. Ayırmadan önce istatistikleri güncellemeyi de seçebilirsiniz. Ayırmadan - Ayır'ı seçin ...

T-SQL'de:

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

Sp_detach_db sistem saklı yordamı için isteğe bağlı olarak geçebileceğiniz iki paramater vardır:

  • @skipchecks- Kabul edilebilir bir giriş 'True'veya 'False'eğer 'True', SQL Server ayrılmadan önce istatistikleri günceller. Eğer False'öyleyse, olmaz. Burada hiçbir şey belirtmezseniz, istatistikler SQL Server 2005 veya sonraki sürümlerinde güncellenecektir.
    • @keepfulltextindexfile- Buradaki varsayılan 'True'ayar şudur - eğer bu değer true olarak ayarlanırsa, tam metin dizini meta verileri ayrılma sırasında bırakılmaz.

Kopmakta ve aşağıda vurgulamak riskleri biraz daha ayrıntı hakkında çok daha fazla görmek için çevrimiçi kitapları makaleyi için sp_detach_dbbaşlamak için iyi bir yerdir.

Bir Veritabanını Nasıl Eklerim?

Bunu T-SQL'de veya SQL Server Management Studio GUI'den de yapabilirsiniz.

( NOT: Veri ve günlük dosyalarınızı düzgün bir şekilde ayrılmış olmayan bir veritabanından alıyorsanız, ekiniz çalışmayabilir. Ayırma gerçekleştiğinde, veritabanı çevrimdışı duruma getirilir ve günlük ve veri dosyaları tutarlı bir duruma getirilir. bir servis temiz bir şekilde kapatıldığında olur. )

GUI'de, Databasesörneğiniz için en üstteki klasörü sağ tıklayın ve öğesini seçin Attach. Bir sonraki iletişim kutusunda, eklemek istediğiniz veritabanının birincil veri dosyasını (.MDF) seçer ve diğer dosyaların seçildiğinden ve uygun konumlarının belirtildiğinden emin olun ve Tamam'ı tıklatarak veritabanını ekleyin.

T-SQL'de bunu SQL Server 2005'te ve ileride yapmanın en iyi yolu CREATE DATABASEkomuttan geçer. Bu, SQL Server 2012'nin ötesinde desteklenen yöntemdir. Nasıl kullanılacağını sp_attach_dbgörmek istiyorsanız, çevrimiçi kitaplarda [sp_attach_db][3]ya da[sp_attach_single_file_db][4]

Günlük dosyanız ve veri dosyalarınız varsa ve bunlar tutarlı olduğunda, bu T-SQL yaklaşımıdır:

- Create Database ve FOR ATTACH deyimini eklemek için kullanma

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
    (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
     (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO 

Çevrimiçi kitaplarda Veritabanı Oluştur deyimi hakkında daha fazla bilgi bulabilirsiniz .

SQL Server Express'te Nasıl Ayırırım / Eklerim?

Aslında aynı. SQL Server Management Studio Express kullanıyorsanız, yukarıda açıklanan GUI'deki çıkarma / bağlantı iletişim kutusunu veya yukarıda açıklanan SSMS Express aracılığıyla T-SQL adımlarını kullanabilirsiniz. Ekspres orada fark yok.

SSMS Express'iniz yoksa indirebilirsiniz. ( İşte SQL Server 2012 Express sürümü).

Bir SQLCMDoturuma girebilir ve yukarıda açıklanan aynı T-SQL yapılarını kullanabilirsiniz.

Ayırmayı veya Takmayı Ne Zaman Düşünmeliyim?

Öncelikle, takma ve takma işleminin ne için kullanılacağına dair bir kelime yoktur: Yedekleme ve Kurtarma Ayırma ve Ekleme, veritabanınızı rutin kurtarma amacıyla yedeklemenin bir yolu değildir. Bu şekilde işlem günlüğü yedeklemesi yoktur, veritabanınızı yanlışlıkla silinebilecek bir duruma getirir ve bu amaçla hiç iyi bir yol değildir.

Bununla birlikte, sökme ve takma birkaç kullanım durumu için iyidir (ayrıntılı değildir, daha fazla yeni bir cevap eklemek veya oluşturmak için düzenleme yapmaktan çekinmeyin):

  • Bazen göçler için (ben yedekleme tercih rağmen cevabım tartışıldığı gibi / kişiler için geri burada )
  • Artık aktif olarak kullanılmayan ancak gerektiğinde daha sonra ekleme yeteneğine sahip bir veritabanını kaldırmak istediğinizde.
  • Bazı sorun giderme durumlarında buna çağrılabilir
  • Hem verileri hem de günlük dosyalarını başka bir ortama yedekleyecek veya geri yükleyecek alanınız yok (hiç burada olmamalısınız, ancak zaman zaman dev veritabanlarını ortamların etrafında hareket ettirmek için kullandım. kütük, kütük dosyasını ekler / yeniden oluşturur.)

Riskler ve Uyarılar

Yine, çevrimiçi kitap burada iyi bir kaynaktır , ancak bir veritabanı ayırma veya eklerken akılda bulundurulması gereken bazı özel hususları açıklayacağım -

Ayır

  • Veritabanınızı çevrimdışına alıyorsunuz. Artık erişilebilir değil. Bu açık olmalı ama çağrılmaya değer. Bu yüzden mükemmel bir yedekleme seçeneği değil.
  • Veritabanınız çevrimiçi olduğunda, SQL Server dosyaları kilitler. Bunu yanlış yaptığımı kanıtlamayı denemeyi tavsiye etmem, çünkü oyunda başka bir durum olabilir, ancak SQL Server çevrimiçi durumdayken bir veritabanı dosyasını (veri, ikincil veriler veya günlük dosyası) silemezsiniz. Bu iyi birşey. Ayırdığınızda, böyle bir korumanız yoktur - bu kötü bir şey olabilir.
  • Veritabanının bozulmasıyla uğraşıyorsanız ve Çıkarma'nın ilk basamağı olan bir yerde bir makale bulursanız - yanlış - bozuk bir veritabanını çıkarırsanız, bu olabilir. Bu veritabanını tekrar ekleyemeyebilirsiniz.
  • Üretim veritabanı dosyalarınızı ağınıza kesip yapıştırmak, dosya düzeyinde bozulma olasılığı ortaya çıkarmanın bir yoludur. Geçiş yaparken yedeklemeyi / geri yüklemeyi tercih etmemin bir diğer nedeni.
  • Bir bakım planının başarısız olmasına neden olabilir. Durum, benim yaptığım gibi, en iyi uygulamayı kontrol etmeden tüm veritabanlarının düzenli olarak yedeklenmesini sağlamak için bir bakım planı oluşturmuş olmanızdır. Bu işe yarıyor, bu yüzden düşünmeyi bırak. Başka biri daha sonra çevrimdışı kullanmadıkları bir veritabanını almaya karar verir. "Plan (lar)" iletişim kutusundaki "Durumu çevrimiçi olmayan veritabanlarını yoksay" seçeneğini işaretleyerek bakım planını değiştirinceye kadar bakım planı bu noktadan itibaren başarısız olur. Çevrimdışı veritabanı için başarısız olmayacağını unutmayın; bakım planı çevrimdışı veritabanını yedeklemeye çalıştığında bir hatayla başarısız olur; bu nedenle bazı çevrimiçi veritabanları yedeklenmeyebilir. (bu nokta için farklı yazar bu yüzden şüphe ile davranın)

Ekleme - Tıpkı internetten komut dosyaları çalıştırmamanız veya havaalanındaki yabancılardan gelen paketleri kabul etmemeniz gibi, doğrulamak için bazı adımlar atmadan bir başkasından aldığınız bir veritabanını eklememelisiniz. Bu veritabanı içinde, ortamınızı tehlikeye sokabilecek tetikleyicilerde, saklı yordamlarda vb. Kodlar olabilir. Eklemek istediğiniz veritabanını, üretim sisteminizi değil, güvenli ve güvenlik duvarı olan bir ortamda incelemelisiniz.

SQL Server'ın Farklı Sürümleri veya Sürümleri Hakkında Ne?

Bunlar, sürümler arasındaki veritabanlarını geri yükleme ile ilgili kurallardan farklı değildir. Genel olarak 3 sürüm için bir sonraki sürüme geri yükleyebilirsiniz (örneğin, SQL Server 2008'den SQL Server 2012'ye, örneğin çalışacaktır. SQL Server 2000'den SQL Server 2012'ye çalışmayacak). Yedekleme / geri yükleme veya sökme / takma işlemleriyle geriye doğru hiç geriye gidemezsiniz - nesneleri ve ekleri kodlamak ve elle veya bunu yapan bir araçla yapmak zorunda kalırsınız. Sürümler için, genellikle SQL Server'ın ana SKU'ları arasında geçiş yapabilirsiniz; örneğin, bir veritabanını Standart'tan Enterprise'a, fazladan bir çalışma yapmadan taşıyabilirsiniz. Kurumsal özellikleri kullanıyorsanız (Say, sıkıştırma veya bölümleme), hareketi yapmadan önce bu özellikleri devre dışı bırakmanız gerekir. Sen özellikleri hakkında bir fikir edinebilirsiniz


@Mike - veritabanlarının düzenli olarak çıkarılması ve eklenmesi nedeniyle performans etkileri var mı? Tampon önbelleğinin, ayrık (herhangi bir şekilde) ayrılmış herhangi bir veritabanı için geçersiz olduğunu, ancak diğer etkilerin farkında mısınız?
Max Vernon

SQL Server örneğini durdurduğumda ve 3 dosyayı kopyaladığımda ve bunları başka bir örneğe eklediğimde, DB Kurtarma işlemine giriyor (aynı DB'de iki kez başıma geldi). Açıklamanızdan bu olmamalıydı, peki DB'm hakkında şüpheliyim? Bir şekilde bozuk mu? Yedeklemeler oluşturmak ve geri yüklemek için çok fazla zaman alabilir ve bu özellik hayat kurtarıcıdır! En azından geliştirici DB paylaşım amaçları için ...
NoOne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.