Belirtiler
Aşağıdaki senaryoyu inceleyin:
-
Microsoft SQL Server 2005, Microsoft SQL Server 2008 veya Microsoft SQL Server 2008 R2'nin bir örneğini yüklersiniz.
-
SQL Server örneği INST1 olarak adlandırılır ve Test_RO_FG_DB adlı bir veritabanını barındırıyor.
-
Veritabanı aşağıdaki dosya gruplarını içerir:
-
Birincil
-
RO_FG
-
RW_FG
-
-
RO_FG adlı dosya grubu READ_ONLY olarak işaretlenir.
-
Microsoft SQL Server 2012'nin yeni bir örneğini yüklersiniz. SQL Server 2012'nin bu örneği INST2 olarak adlandırılmıştır.
-
Test_RO_FG_DB veritabanını INST1'den ayırırsınız.
-
Test_RO_FG_DB veritabanını INST2'ye eklemeyi deneyin.
-
Aşağıdakine benzer bir hata iletisi alırsınız:
Msg 3415, Düzey 16, Durum 2, Satır 1Veritabanı 'Test_RO_FG_DB' salt okunur olduğundan, salt okunur dosyaları olduğundan veya kullanıcının bazı dosyaları değiştirme izni olmadığından yükseltilemez. Veritabanını veya dosyaları yazılabilir hale getirin ve kurtarmayı yeniden çalıştırın.
-
Test_RO_FG_DB veritabanını INST1'e yeniden bağlamayı deneyin.
Bu senaryoda, veritabanını INST1'e yeniden bağlayamazsınız. Ayrıca, SQL Server hata günlüğünde aşağıdaki hata iletisini alırsınız:
Not Bu sorun yalnızca READ_ONLY olarak işaretlenmiş bir dosya grubu içeren bir veritabanı eklemeyi denediğinizde oluşur. Tüm verilerin READ_ONLY işaretlendiği bir READ_ONLY veritabanını taşımaya çalıştığınızda bu sorun oluşmaz.
Neden
Bu sorun, SQL Server 2012 veritabanını yükseltmeye başlamadan önce salt okunur dosya grubunu algılamadığından oluşur. Yükseltme başlatıldıktan sonra, SQL Server 2012 işlem günlüğüne girdiler yazar. Önceki sürümler yeni işlem günlüğü girdilerini okuyamıyor.
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Çözüm
Toplu güncelleştirme bilgileri
SQL Server 2012
Bu sorunun düzeltmesi ilk olarak SQL Server 2012 toplu güncelleştirmesinde yayımlandı. Bu toplu güncelleştirme paketi hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2703275 SQL Server 2012 için toplu güncelleştirme paketi 2Not Derlemeler toplu olduğundan, her yeni düzeltme sürümü önceki SQL Server 2012 düzeltme sürümüne dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Microsoft, bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünmenizi önerir. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
2692828 SQL Server 2012 yayımlandıktan sonra yayımlanan SQL Server 2012 derlemeleri SQL Server 2012 yüklemesine SQL Server 2012 düzeltmesi uygulamanız gerekir.
Geçici Çözüm
Bu sorunu geçici olarak çözmek için aşağıdaki yöntemlerden birini kullanın.Yöntem 1INST2'de veritabanının yedeğini INST1'den geri yükleyin.Not "Belirtiler" bölümünde açıklanan sorun, SQL Server 2012'de önceki bir sürümden bir yedeklemeyi geri yüklerken oluşmuyor.Yöntem 2SQL Server önceki sürümünün SQL Server 2012'ye yerinde yükseltmesini gerçekleştirin.Yöntem 3Salt okunur dosya grubu içeren bir veritabanını SQL Server 2012 örneğine taşıyın. Bunu yapmak için şu adımları uygulayın.Not 4 ile 11. adımları SQL Server 2012 çalıştıran sunucuda gerçekleştirin. Örneğin, INST2'de 4 ile 11 arasında adımları gerçekleştirin.
-
INST1'de veritabanını ayırın. Örneğin, Test_RO_FG_DB veritabanını ayırma.
-
Veritabanı dosyalarını INST2 örneğini barındıran sunucuya taşıyın.
-
Veritabanını INST2'ye eklemeyi deneyin. Aşağıdaki örnek kod bunun nasıl yapılacağını gösterir:
CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACH;GO
Not "Belirtiler" bölümünde belirtilen 3425 hata iletisini alırsınız.
-
Komut isteminde veritabanı dosyalarını yeniden adlandırın. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
-
SQL Server Management Studio içinde, eklemek istediğiniz veritabanıyla aynı ada ve fiziksel yapıya sahip bir veritabanı oluşturun. Aşağıdaki örnek kod bunun nasıl yapılacağını gösterir:
CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
-
Veritabanını çevrimdışı olarak ayarlayın. Bunu yapmak için aşağıdaki komutu çalıştırın:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
Komut isteminde, yeni veritabanındaki dosyaları yeniden adlandırın. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
-
Komut isteminde, 2. adımda taşıdığınız veritabanındaki dosyaları yeniden adlandırın. 4. adımda oluşturduğunuz veritabanıyla eşleşecek şekilde dosyaları yeniden adlandırın. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
-
Veritabanını ÇEVRİmİÇİ olarak ayarlayın. Bunu yapmak için aşağıdaki komutu çalıştırın:
ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO
-
Veritabanının çevrimiçi olduğunu doğrulayın ve Hizmet Aracısı işlevselliğini yeniden oluşturun.
-
Gerekli olmayan veritabanı dosyalarını silin. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf
Yöntem 4Salt okunur dosya grubu içeren bir veritabanını önceki SQL Server örneğine yeniden ekleyin. Bunu yapmak için şu adımları uygulayın.Notlar
-
Veritabanı, başarısız yükseltmeden gelen yeni işlem günlüğü girdilerini de içerir.
-
önceki bir SQL Server sürümünü çalıştıran sunucuda 3 ile 10 arasında adımları gerçekleştirin. Örneğin, INST1'de 3 ile 10 arasında adımları gerçekleştirin.
-
Veritabanı dosyalarını INST1'i barındıran SQL Server örneğine taşıyın.
-
Veritabanını INST1'e eklemeyi deneyin. Aşağıdaki örnek kod bunun nasıl yapılacağını gösterir:
CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACHGO
Not "Belirtiler" bölümünde belirtilen 3624 hata iletisini alırsınız. Ayrıca bir 1813 hata iletisi alırsınız.
-
Komut isteminde, INST1'deki veritabanı dosyalarını yeniden adlandırın. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
-
SQL Server Management Studio içinde, eklemek istediğiniz veritabanıyla aynı ada ve fiziksel yapıya sahip bir veritabanı oluşturun. Aşağıdaki örnek kod bunun nasıl yapılacağını gösterir:
CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
-
Veritabanını çevrimdışı olarak ayarlayın. Bunu yapmak için aşağıdaki komutu çalıştırın:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
Komut isteminde, yeni veritabanındaki dosyaları yeniden adlandırın. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
-
Komut isteminde, 2. adımda taşıdığınız veritabanındaki dosyaları yeniden adlandırın. 4. adımda oluşturduğunuz veritabanıyla eşleşecek şekilde dosyaları yeniden adlandırın. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
-
Veritabanını ACİl DURUM moduna ayarlayın ve bir onarım gerçekleştirin. Bunu yapmak için aşağıdaki komutu çalıştırın.Not Bu adım sırasında veritabanı işlem günlükleri yeniden oluşturulur. Bu veri kaybına neden olabilir. Bu nedenle, bu adımı gerçekleştirmeden önce veritabanını yedeklemenizi öneririz.
ALTER DATABASE Test_RO_FG_DB SET EMERGENCYGOALTER DATABASE Test_RO_FG_DB SET SINGLE_USERGODBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGSGOALTER DATABASE Test_RO_FG_DB SET MULTI_USERGO
-
Veritabanının çevrimiçi olduğunu doğrulayın ve Hizmet Aracısı işlevselliğini yeniden oluşturun.
-
Gerekli olmayan veritabanı dosyalarını silin. Aşağıdaki örnek komut bunun nasıl yapılacağını gösterir:
del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf
Ek Bilgi
Bir veritabanı bir SQL Server örneğine eklendiğinde gerçekleşen birkaç adım vardır. Bu adımlar veritabanını kurtarmayı ve dosyaları SQL Server önceki sürümlerinden yükseltmeyi içerir. "Belirtiler" bölümünde açıklanan sorunda, SQL Server 2012 veritabanındaki salt okunur dosyalar algılanana kadar yükseltme işlemini başlatır. Yükseltme adımları, veritabanının önyükleme sayfasındaki "temiz bir şekilde kapat" bitini temizlemek için bir işlem başlatmayı içerir. SQL Server'ın önceki sürümleri başlangıç işlemi kaydını okuyamıyor. Bu nedenle, veritabanı SQL Server önceki sürümlerinde kullanılamaz ve SQL Server 3624 hatasını oluşturur.Veritabanı saltokunur olarak işaretlendiğinde yerinde yükseltmeler Test_RO_DB adlı bir salt okunur veritabanı içeren SQL Server örneğinin yerinde yükseltmesini 2012 SQL Server gerçekleştirdiğinizde, SQL Server hata günlüğünde aşağıdakine benzer hata iletileri alabilirsiniz:
Yükseltme işleminin sonunda Test_RO_DB veritabanı RECOVERY_PENDING durumda olur. Veritabanını READ_WRITE olarak ayarlamak için ALTER DATABASE komutunu kullanmanız gerekir. Ardından veritabanını READ_ONLY olarak ayarlamak için ALTER DATABASE komutunu kullanın. Bu, SQL Server altyapısının veritabanını doğru sürüme yükseltmesine olanak tanır.Okuma/yazma veritabanı saltokunur olarak işaretlenmiş dosya grupları içerdiğinde yerinde yükseltmeler SQL Server 2012'ye yerinde yükseltme yaptığınızda, SQL Server hata günlüğünde aşağıdakine benzer iletiler alabilirsiniz. Bu sorun, önceki SQL Server örneği bir okuma/yazma veritabanı barındırdığında ve READ_ONLY olarak işaretlenmiş dosya gruplarını içerdiğinde oluşur. Ancak, yükseltme işlemi beklendiği gibi tamamlar ve veritabanı çevrimiçi olarak başlar.Not Aşağıdaki hata iletisinde, veritabanı Test_RO_FG olarak adlandırılır: