T-SQL inzibatçılıqda. Verilənlər bazasının ehtiyat nüsxələrinin yaradılması

Salam Dostlar.

Bugünkü məqalədə çox aktual bir məsələni araşdırmağa və aydınlıq gətirməyə çalışacağam. Bildiyiniz kimi, şirkətlərdə ən çox istifadə olunan Verilənlər Bazası İdarəetmə Sistemlərindən biri Microsoft SQL Serverdir. Formal olaraq verilənlər bazaları sahəsində iki istiqamət vardır: İnzibatçılıq və Proqramlaşdırma. Bu iki istiqamət SQL Serverin 2012-ci versiyasına qədər ayrılırdı, hətta üç istiqamətdə imtahanlar var idi, sonuncu istiqamət biznes analitika və hesabatlar üzrə idi:

  1. Database Administrator
  2. Database Developer
  3. Business Intelligence Developer

Lakin təcrübə göstərdi ki, verilənlər bazası sahəsində inzibatçılıq və proqramlaşdırmanı bir birindən ayırmaq o qədər də səmərəli deyildir. Buna görə də SQL Serverin 2012 versiyasından başlayaraq inzibatçılıq və proqramlaşdırma birləşdirildi və hal-hazırda iki istiqamət üzrə ixtisaslaşma vardır:

  1. Data Platform
  2. Business Intelligence

Xüsusi məqalələr seriyasında, inzibatçılıq və proqramlaşdırmanın birləşdirilməsi səbəblərindən biri olan T-SQL sorğu dilinin inzibatçılıqda istifadəsi barədə nümunələr gətirmək istəyirəm. Beləliklə, verilənlər bazası inzibatçısının (DBA) T-SQL sorğu dilinin bilməsinin nə qədər vacib olduğuna aydınlıq gətirməyə çalışacağam.

Problem

Bəzi serverlərdə bir SQL Server nüsxəsinin (instans) üzərində çoxlu bazalarının olması mümkündür. Elə vəziyyət yaranır ki, bütün bazaların ehtiyat nüsxələri (backup) hər gün yaradılmalıdır. Düzdür biz SQL Server Management Studio imkanlarından istifadə edib  Maintenance Plans qura bilərik. Burada bir neçə problem yarana bilər: bazaların sayı çox olduqda bir neçəsini buraxa bilərik, bu üsulla ehtiyat nüsxəsi yaradıldıqda serverin artıq resurslarından istifadə olunur və s. Bunu  T-SQL  scriptindən istifadə etməklə daha asan və sadə yolla həll etmək olar.

Çıxış yolu

T-SQL dilindən istifadə etməklə serverdə olan bütün bazaların ehtiyat nüsxələrini yaratmaq üçün cəmi bir ədəd skript (T-SQL kodu) bəs edir. Burada uzlaşdığımız əsas çətinlik gündəlik ehtiyat nüsxələrinin adının sonuna onların yarandığı tarix və saatın əlavə edilməsidir. Bunu əldə etmək üçün aşağıdaki skripdən istifadə edə bilərik. Burada ehtiyat nüsxələrinin yerləşdiyi yerini bizə uyğun olanla əvəz etməliyik. Yolun sonunda mütləq əyri xətt (slash \)  qoyulur.

Fayl adlarının formatı DBname_YYYYDDMM_HHMMSS.bak yəni

Verilənlər bazasının adı_il_gün_ay_saat_dəqiqə_saniyə

DECLARE @name VARCHAR(50) -- verilenler bazasinin adi 
DECLARE @path VARCHAR(256) -- backup fayllarin yerlesdiyi qovlugun yolu
DECLARE @fileName VARCHAR(256) -- backup fayllarinin adi
DECLARE @fileDate VARCHAR(20) -- fayl adlarina tarixin elave edilmesi

-- verilenler bazasinin yerlesdyi qovlugu (directory) teyin edirik
SET @path = 'D:\Backup\'

-- fayl adlarinin formatini teyin edirik 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + '_' + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','')
DECLARE db_cursor CURSOR FOR 
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb') -- sistem bazalarini istisna edirik
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.bak'
BACKUP DATABASE @name TO DISK = @fileName
WITH COMPRESSION

FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor

Qeyd

Göstərilən skriptdə biz sistem bazalarının istisna etdik. İstənilən halda sistem bazalarını əlavə etmək olar və yaxud:

WHERE name NOT IN ('master','model','msdb','tempdb')

sətrini

WHERE name NOT IN ('tempdb')

sətri ilə əvəz etməklə sistem bazalarını da daxil olmaqla serverdə olan bütün bazaların ehtiyat nüsxələrini yarada  bilərik. Qeyd: Tempdb sistem bazasının ehtiyat nüsxəsinin yaradılması mümkün deyil.

WITH COMPRESSION

Ehtiyat nüsxələrini sıxmaq üçün bir operatordur. Bu imkan yalnız SQL Server 2008 Enterprise versiyasında təqdim olundu və SQL Server 2008 R2 dən başlayaraq ehtiyat nüsxələrinin sıxılması SQL Server 2008 R2 Standard və daha yuxarı versiyalar dəstəkləyir. Məsələn: skripti SQL Server Express edition üzərində istifadə etsəniz belə bir səhv mesaji çıxacaq:

Msg 1844, Level 16, State 1, Line 28
BACKUP DATABASE WITH COMPRESSION is not supported on Express Edition (64-bit).

Skript tam işləkdir. Bəzi dəyişiklər (ehtiyat nüsxələrinin yerləşdiyi qovluğun yeri) etməklə serverlərinizdə istifadə edə bilərsiniz. Əvvəlcə test mühitində yoxlamağınız tövsiyə olunur.

Beləliklə, bugünkü məqalənin də sonuna gəlib çatdıq. T-SQL sorğu dilinin inzibatçılar tərəfindən istifadə olunan bir nümunəsi ilə tanış olduq.

Diqqətinizə görə təşəkkür edirəm.

Səs: +20. Bəyənilsin Zəifdir

Müəllif: Rauf Khalafov

Şərh yazın