Veritabanı Collation Değiştirme

Bazı durumlarda veritabanı Collation durumunu değiştirmemiz gerekmektedir. Bu yazıda sizlere Alwayson Availabilty group’a dahil edilmiş olan bir veritabanının collation bilgisini nasıl değiştirirz, neleri kontrol etmemiz gerekir hepsine tek tek değinip, uygulamalı olarak göstereceğim

Uygulamalı göstermek adına TEST isminde bir veritabanı oluşturdum ve işlemleri ilgili veritabanı üzerinde gerçekleştireceğim, sizin Collation’ını değiştirmek istediğiniz veritabanı ismi ile güncellemeniz yeterli olacaktır.

  • Öncelikle TEST veritabanımızın şuanki Collation bilgisine bakalım:
SELECT name, collation_name 
FROM sys.databases 
WHERE name = N'TEST'; 
GO

İŞLEM ADIMLARI:

  1. İlgili veritabanı AG de olduğundan dolayı öncelikle AG den çıkartılmalıdır. Availability group dan veritabanı çıkartma işlem adımları için buradan hazırlamış olduğum yazıyı inceleyebilirsiniz.

NOT: Eğer AG den çıkartmadan işlemleri yapmaya çalışırsanız “The operation cannot be performed on database “TEST” because it is involved in a database mirroring session or an availability group. Some operations are not allowed on a database that is participating in a database mirroring session or in an availability group.” hatası verecektir.

2. İlgili veritabanı üzerinde hiçbir connection olmaması gerekmekte, bundan dolayı aşağıdaki sorgu ile ilgili veritabanında bağlantı var mı kontrol edebilirsiniz.

DECLARE @Table TABLE(
        SPID INT,
        Status VARCHAR(MAX),
        LOGIN VARCHAR(MAX),
        HostName VARCHAR(MAX),
        BlkBy VARCHAR(MAX),
        DBName VARCHAR(MAX),
        Command VARCHAR(MAX),
        CPUTime INT,
        DiskIO INT,
        LastBatch VARCHAR(MAX),
        ProgramName VARCHAR(MAX),
        SPID_1 INT,
        REQUESTID INT
)
INSERT INTO @Table EXEC sp_who2
SELECT  *
FROM    @Table
where DBName='TEST'


Yukarıda görüldüğü gibi ilgili veritabanında bağlı connectionlar mevcut ilgili işlemleri killemeyi unutmayın. Eğer veritabanına sürekli connection gelen bir uygulama kullanıcısı mevcut ise disable duruma getirmenizi öneririm 🙂

3. Veritabanı single moda alınır, böylece ilgili veritabanı üzerinde tek bir işleme izin verilir.

use master

ALTER DATABASE TEST SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 

NOT: Eğer ilgili veritabanında bağlı connection varsa collation, sibgle moda aldıktan sonra collation değiştirme işlemini gerçekleştiremeyiz ve “Database ‘TEST’ is already open and can only have one user at a time” hatası almamıza sebep olacaktır.

4. Veritabanı Collation bilgisi değiştirilir:

use master
ALTER DATABASE TEST COLLATE  SQL_Latin1_General_CP1_CI_AS;
GO

5. Veritabanı geri çoklu kullanıma açılır:

use master

ALTER DATABASE TEST SET MULTI_USER;
GO 

6. TEST veritabanı Collation bilgisini kontrol ettiğimizde ” SQL_Latin1_General_CP1_CI_AS ” şeklinde güncellenmiş olduğunu göreceğiz.

use master

SELECT name, collation_name 
FROM sys.databases 
WHERE name = N'TEST'; 
GO



7. İlgili veritabanı geri Availability Gruba dahil edilir. Buradan veritabanı AG ye dahil etme işlemi için hazırlamış olduğum yazıya erişebilirisiniz.

Eveet veritabanı Collation değiştirme işlemini başarılı şekilde tamamlamış olduk. Burada unutmamamız gereken değişiklikten sonraki veriler için izin verilecektir, önceki kayıtlarda collation ile ilgili bir düzelme olmayacaktır. Örneğin eğer veritabanı collation bilgisi İncilizce olan bir veritabanında türkçe karakter girilirse farklı semboller olacaktır daha sonra biz Collation türkçe dahi yapsak önceki veriler güncellenmeyecek, ssadece bundan sonrası için Türkçe karakter kullanabiliyor olacağız.

Kişisel Web sayfama hoş geldiniz..