Books Online for SQL Server 2014 (BOL). T-SQL sintaksisinin oxunuş qaydası

Salam Dostlar.

Keçən dərsimizdə sorğularla işləmək üçün Verilənlər Bazalarının İdarəetmə Sistemini (gələcəkdə mətndə VBİS) qurduq və ilk bazamızı yaratdıq. Bugünkü dərsimizdə CREATE DATABASE mürəkkəb operatoru ilə daha ətraflı tanış olacağıq və yazılış sintaksisini təhlil edəcəyik.

ANSI standartında CREATE DATABASE mürəkkəb operatorunun təsviri yoxdur. Lakin praktik olaraq bütün platformalar bu operatoru dəstəkləyirlər. Məsələ bundadır ki, həmin standart “Database” (İng. – verilənlər bazası) terminini müəyyənləşdirmir. VBİS-də olan struktur fərqlərinə görə müxtəlif Verilənlər Bazalarının İdarəetmə Sistemlərində “Database” termini müxtəlif cür qəbul olunur. Mələsən: Microsoft SQL Server – də “Database” müxtəlif obyektlərin: cədvəllərin, prosedurların, funksiyaların və s. saxlanılıdığı yer, fiziki baxımından isə verilənlər bazası faylar qrupu başa düşülür. Serverin bir nüsxəsində (instance) bir neçə ədəd verilənlər bazası yaratmaq olar. Oracle Database Server – də isə bu funksiyaları “Schema” (İng. – Sxem) yerinə yetirir. Demək olar ki, Microsoft SQL Server – dəki “Database” anlamı Oracle Database Server – dəki “Schema” anlamı ilə eynidir. MySQL VBİS-də CREATE DATABASE operatoru icrası nəticəsində yeni kataloq yaranır. Həmin VBİS-də “Database” və “Schema” eyni anlamdadır. Yəni CREATE DATABASE və CREATE SCHEMA eyni komandadır. Verilənlər bazasında cədvəllər hələ olmadığı üçün yeni boş kataloq və db.opt faylı yaranır. Həmin kataloqda gələcəkdə yaranacaq cədvəllərin faylları yerləşəcək.

Gördüyünüz kimi müxtəliflik mövcuddur və hər hansı bir VBİS-də CREATE DATABASE icra etdikdə həmin VBİS-ə aid rəsmi təsvir ədəbiyyatına müraciət etmək lazımdır. Bizim iş lövhəmiz Microsoft SQL Server 2014 VBİS və Management Studio proqram təminatıdır. Buna görə də biz sizinlə BOL (Books Online for SQL Server 2014) resursundan istifadə edəcəyik. Həmin resurs internetdə online: Books Online for SQL Server 2014 və lokal, yəni Management Studio proqramına inteqrasiya olunmuş formada mövcuddur. BOL ikinci forması barədə gələcək məqalələrdə ətraflı izah veriləcək. İndi isə internetdə olan resursu açaq və bizə lazım olan hissəni, yəni CREATE DATABASE (SQL Server Transact-SQL) tapaq.

Keçən dərsimizdə CREATE DATABASE operatorun minimal sintaksisi (yazılış qaydası) ilə tanış olduq:

CREATE DATABASE database_name

Bu minimal sintaksis vasitəsilə yeni verilənlər bazasını yaratmaq olar. Həmin komanda icra edildikdə bütün ilkin məlumatlar: bazanın minimal həcmi, bərpa olunma modeli (Recovery model), ilkin obyektlər, ilkin istifadəçilər və digər vacib ayarlar Microsoft SQL Server VBİS-nin “model” sistem bazasından götürülür. Həmin sistem bazaları VBİS qurulan zaman yaranır (sistem bazaları barədə növbəti məqalələrdə ətraflı izah veriləcək). “Model” sistem bazası yeni yaradılan verilənlər bazası üçün bir nümunədir, başqa sözlə, hər bir yeni bazanın modeli “model” sistem bazasından götürülür. “Model” sistem bazasının ayarlarında dəyişiklik etmək olar və həmin dəyişiklər yeni yaradılacaq bazalarda avtomatik tətbiq olunacaq. “Model” sistem bazasının ayarlarında dəyişik yalnız təcrübəli mütəxəssislər tərəfindən edilməlidir. Digər ilkin məlumat: bazanın yerləşdiyi qovluq VBİS-in ayarlarından götürülür. Biz VBİS quraşdırdığımız zaman verilənlər bazalarının yerləşdiyi yeri D diskindəki SQLBASA qovluğunu göstərdik. Deməli yeni baza yaradılan zaman onun faylları avtomatik olaraq həmin qovluqda yerləşəcək. Lakin əksər hallarda “model” sistem bazasında olan nümunəvi ayarlar kifayət etmir. Belə ayarlardan ən asası: bazanın minimal həcmi və yerləşdiyi yerdir. Əksər hallarda yaradılan bazanın ilkin həcminin müəyyənləşdirilməsi tövsiyə olunur. Həmçinin digər ayarlar da vardır ki, onlara baza yaradılan zaman nəzarət etmək lazım olur. Books Online -da CREATE DATABASE mürəkkəb operatorunun (və ya komandasının) sintaksisinə nəzər yetirək:

CREATE DATABASE database_name 
[ CONTAINMENT = { NONE | PARTIAL } ]
[ ON 
      [ PRIMARY ] <filespec> [ ,...n ] 
      [ , <filegroup> [ ,...n ] ] 
      [ LOG ON <filespec> [ ,...n ] ] 
] 
[ COLLATE collation_name ]
[ WITH  <option> [,...n ] ]
[;]

<option> ::=
{
      FILESTREAM ( <filestream_option> [,...n ] )
    | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias }
    | DEFAULT_LANGUAGE = { lcid | language_name | language_alias }
    | NESTED_TRIGGERS = { OFF | ON }
    | TRANSFORM_NOISE_WORDS = { OFF | ON}
    | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> 
    | DB_CHAINING { OFF | ON }
    | TRUSTWORTHY { OFF | ON }
}

<filestream_option> ::=
{
      NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }
    | DIRECTORY_NAME = 'directory_name' 
}

<filespec> ::= 
{
(
    NAME = logical_file_name ,
    FILENAME = { 'os_file_name' | 'filestream_path' } 
    [ , SIZE = size [ KB | MB | GB | TB ] ] 
    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
)
}

<filegroup> ::= 
{
FILEGROUP filegroup name [ [ CONTAINS FILESTREAM ] [ DEFAULT ] | CONTAINS MEMORY_OPTIMIZED_DATA ]
    <filespec> [ ,...n ]
}

<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}

Qəliz yazıdır, elə deyilmi? Books Online-da kodlarla bağlı belə yazılarla tez-tez rast gəlinir. Bəs bu qəliz yazıları necə oxuyaq? Bu yazıları gələcəkdə oxuya bilməmiz üçün gəlin bu sintaksisə ətraflı baxaq. İlk baxışdan çətin görsənsə də, əslində oxunuşu asandır. Kvadrat mötərizələr [  ] gördünüzmü? Bu mötərizələr arasında nə varsa təyin olunması mütləq deyildir. Yəni biz onları yazmaya da bilərik. Onları yazmasaq elə minimal sintaksis alınır:

CREATE DATABASE database_name

Burada “database_name” yerinə yeni bazamızın adını yazmalıyıq. Bazanın adının uzunluğu standartla tənzimlənir, yəni ANSİ standartında bazanın adının uzunluğu 128 simvol nəzərdə tutulub. Lakin bildiyiniz kimi Oracle VBİS standartlardan öncə yarandığı üçün  standartın bəzi tələblərinə cavab vermir. Oracle VBİS-də verilənlər bazasının adının uzunluğu 8 simvol digər obyektlərin uzunluğu isə 30 simvol (daha doğrusu bayt) müəyyənləşdirilib. Microsoft SQL Server standartın bu tələbinə cavab verir, yəni T-SQL-də verilənlər bazasının adının maksimal uzunluğu 128 simvoldur. Adlandırma və digər parametrlər barədə digər dərslərimizdə ətraflı danışacağıq.

Həmçinin bəzi yerlədə fiqurlu mötərizə də görürük { }. Fiqurlu mötərizələrin arasında nə varsa mütləqdir, yəni biz buranı boş qoya bilmərik, mütləq nə isə yazmalıyıq. Sintaksisin ikinci sətrinə baxaq:

[ CONTAINMENT = { NONE | PARTIAL } ]
  • CONTAINMENT

CONTAİNMENT parametri SQL Server 2012 versiyasında təqdim olunmuş bir yenilikdir. Verilənlər bazasına giriş hüququ olan istifadəçilər (loqinlər) və digər vacib olan parametrlər verilənlər bazasında deyil VBİS-da yerləşir. Bəzən bir serverdə olan verilənlər bazasını digər serverə köçürmək lazım olur. Bu zaman giriş hüququ olan istifadəçilər (loqinlər) köhnə serverdə qalır və köçürülən serverdə yenidən yaradılmalıdır. Bu isə miqrasiya zamanı çoxlu problemlər yaradır. Bu problemləri aradan qaldırmaq üçün CONTAİNMENT (İng. “Muxtariyyət”) parametri yaradılmışdır. Bu parametri təyin etməklə bazanı serverdən ayırmaq olur, başqa sözlə bazaya “muxtariyyat” vermək olur. Belə bazada giriş hüququ olan istifadəçilər (loqinlər) bazanın özündə saxlanılır. Lakin hal-hazırda bazanı serverdən tam ayırmaq olmur, yalnız qismən ayırmaq mümkündür və buna PARTİAL CONTAİNMENT deyilir. CONTAİNMENT  parametrinin digər üstünlükləri də vardır və onlar növbəti məqalələrdə ətraflı izah ediləcək.

CONTAİNMENT parametri məcburi deyildir. Lakin həmin parametri təyin etmək istəsək bir neçə məqama diqqət yetirməliyik. NONE və PARTIAL parametrlərin arasında şaquli xətt görürük |. Bu xətt “və ya” mənasını daşıyır. Yəni biz burada NONE və ya PARTIAL yaza bilərik. İkisini də yaza bilmərik və fiqurlu mötərizənin arasında olduğu üçün ikisindən birini mütləq qeyd etməliyik. Bütün köməkçi işarələri yığışdırıb parametri yazsaq aşağıdakı şəkildə olacaq:

CONTAINMENT = NONE

və ya

CONTAINMENT = PARTIAL

Yavaş-yavaş irəliləyirik. Biz artıq yuxarıdakı qəliz yazının iki sətrini oxuya bilirik:

CREATE DATABASE bazamiz 
CONTAINMENT = NONE

və ya

CREATE DATABASE bazamiz 
CONTAINMENT = PARTIAL

Növbəti kvadrat mötərizəyə baxaq:

[ ON 
      [ PRIMARY ] <filespec> [ ,...n ] 
      [ , <filegroup> [ ,...n ] ] 
      [ LOG ON <filespec> [ ,...n ] ] 
]

Biz burada yeni bir işarə görürük – üçkünc mötərizələr: <  >. Üçkünc mötərizələr  arasında bölmələrin adları göstərilir. İki cür bölmə var <filespec> – verilənlər bazasının fayllarını elementlərini təsvir edən bölmə  və <filegroup> – fayllar qrupunu təsvir edən bölmə. Həmin bölmələr yalnız ON və LOG ON parametrlərindən sonra gəlir və ON və LOG ON parametrləri <filespec>- siz heç vaxt yazılmır. Burada biz bir ümumi kvadrat mötərizə və onun arasında daha bir neçə kvadrat mötərizə görürük. Yəni bu parametrlərin təyin olunması mütləq deyildir. Lakin təyin etmək istəsək, başqa sözlə, verilənlər bazasının faylların adlarını və yerləşdiyi yeri özümüz təyin etmək istəsək bir neçə məqama diqqət yetirməliyik.

  • PRİMARY

Əsas fayl qrupunu təyin edən parametrdir. Bu parametr <filespec> bölməsində olan faylların arasında əsas faylı müəyyən edir. <filespec> bölməsində olan ilk fayl əsas fayl qrupuna daxil olan əsas fayl hesab olunur. Başqa sözlə, bu parametr əsas fayl qrupunda faylı göstərir. Bu fayl qrupu bütün sistem verilənlər bazalarını özündə saxlayır. Verilənlər bazasında yalnız bir əsas fayl ola bilər. Əsas fayl  verilənlər bazasının başlanğıc nöqtəsidir və onun yerləşdiyi yeri göstərir. Əsas faylın məsləhət görülən fayl genişlənməsi mdf – dir. Daha sonrakı faylların fayl genişlənməsi ndf – dir. Bu parametr təyin olunmursa <filespec> bölməsində olan ilk fayl avtomatik olaraq əsas fayl kimi təyin olunur. Fayl qrupları barədə növbəti məqalələrdə məlumat veriləcək.

  • <filespec> [ ,…n ]

Kvadrat mötərizənin içində olan vergül və ondan sonra gələn üç nöqtə və n hərfi bildirir ki, bir neçə fayl ola bilər. Belə bir işarə <filegroup> bölməsindən sonra da var və bildirir ki, bir neçə fayl qrupu ola bilər. Qeyd etmək lazımdır ki, verilənlər bazası bir neçə fayldan ibarət ola bilər, yəni bazanı bir neçə fayla bölmək olar. Bəs bölmələrin içindəki parametrlər haradadır? Yuxarıdakı qəliz yazının bir qədər aşağısına baxaq:

<filespec> ::= 
{
(
    NAME = logical_file_name ,
    FILENAME = { 'os_file_name' | 'filestream_path' } 
    [ , SIZE = size [ KB | MB | GB | TB ] ] 
    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
)
}

<filegroup> ::= 
{
FILEGROUP filegroup name [ [ CONTAINS FILESTREAM ] [ DEFAULT ] | CONTAINS MEMORY_OPTIMIZED_DATA ]
    <filespec> [ ,...n ]
}

Burada daha bir yeni işarə görürük: yumru mötərizələr ( ). Yumru mötərizələrin arasında olanlar qrup təşkil edir. Yəni müəyyən parametrlər qrupu. <filespec> sonra fiqurlu mötərizə açılır və sonda bağlanır. Bu o deməkdir ki, bu mötərizənin arasında olan qrupun bəzi parametrlərin göstərilməsi mütləqdir, yəni biz mütləq NAME və FİLENAME parametrlərini təyin etməliyik. Digər parametrlər kvadrat mötərizələrin arasında olduğu üçün onların təyin olunması mütləq deyildir.

  • NAME = logical_file_name.

Burada verilənlər bazasının məntiqi adı təyin olunur. Bu ad  SQL Serverdə verilənlər bazası fayllarına istinad olunan zaman tələb olunur. Qeyd etmək lazımdır ki, verilənlər bazasının fiziki faylları ikiqat adlandırılır: əməliyyat sistemi adı və məntiqi adı. Məntiqi adlar SQL server tərəfindən istifadə olunur və siz onları Transact-SQL operatorlarının yazılması zamanı istifadə edə bilərsiniz.

Məsələn: NAME = bazamız1.

Həmin ad unikal yəni təkrar olunmaz olmalıdır.

  • FILENAME = { ‘os_file_name’ | ‘filestream_path’ }

Burada verilənlər bazası faylının yaradılması vaxtı əməliyyat sistemi tərəfindən istifadə edilən yol və faylın adı təyin olunur. Verilənlər bazası faylları müəyyən qurğularda yerləşməlidir: serverin lokal diskləri, verilənlərin saxlanılması üçün şəbəkə (SAN), iSCSI əsasında şəbəkə və s.. Göstərilən qovluq və yol CREATE DATABASE komandasının icrasından öncə  mövcud olmalıdır.

  • ‘filestream_path’

FILESTREAM fayl qrupu üçün FILESTREAM verilənləri saxlanılacaq qovluğun yolunu göstərir. Son qovluğa (kataloqa) qədər yol mövcud olmalıdır, amma son qovluq özü mövcud olmamalıdır. Məsələn, əgər “D:\SQLBASA\MyFilestreamData” yolunu göstərsək, “D:\SQLBASA” qovluğu CREATE DATABASE operatorunun işə salınmasına qədər mövcud olmalıdır, amma “MyFilestreamData” qovluğu mövcud olmamalıdır.

FILESTREAM fayl qrupunda SIZE və FILEGROWTH xüsusiyyətləri göstərilmir.

FILESTREAM – müəyyən obyektlərin (şəkillərin, xəritələrin, mətnlərin və s.) verilənlər bazasında saxlanılması üçün nəzərdə tutulmuş parametrdir.

  • SIZE

Bu parametrlə verilənlər və ya jurnal faylının ölçüsünü təyin edilir. Ölçünü meqabaytla (MB), kilobaytla (KB), qiqabaytla (GB) və terabaytla (TB) təyin etmək olar. İlkin olaraq meqabayt vahidi götürülür. Faylların minimal ölçüsü 512 KB olmalıdır. Model bazası da elə bu ölçüdədir. Faylin minimal ölçüsü model bazasının ölçüsündən az ola bilməz. Bu parametr göstərilməsə ilk faylların ilkin ölçüsü 512 KB götürülür və baza bir neçə  fayldan ibarətdirsə sonrakı faylları ölçüsü 1 MB təyin olunur.

  • MAXSIZE

Bu parametrlə faylın böyüyə biləcək maksimal ölçüsü təyin edilir. Bu ölçünü meqabaytla (MB), kilobaytla (KB), qiqabaytla (GB) və terabaytla (TB) təyin etmək olar.  Bu parametr göstərilməsə disk tamamilə dolana qədər fayl böyüyəcək. Beləliklə, verilənlər bazası yaradılanda bəzi parametrlərin göstərilməsi nə qədər vacib olduğunu görürük.

  • FILEGROW

Bu parametr verilənlər bazası faylının artım ölçüsünü göstərir. Bu ölçü sıfırdırsa artımın qadağasını göstərir. Artımı meqabaytla, kilobaytla  və ya faizlə (ilkin olaraq) təyin etmək olar. İlkin olaraq, əgər bu parametr göstərilməyibsə – 10%, və minimal ölçü – 64kb təşkil edir.

Yenə də qəliz oldu? Bu bölmənin də bütün köməkçi işarələri yığışdırsaq və bizə lazım olan parametrləri qeyd edərək sorğumuzu yazsaq aşağıdakı şəkildə olacaq:

Verilənlər bazası bir verilən faylından (DATA) və jurnal (LOG) faylından ibarətdirsə:

ON
(
 NAME = bazamiz_dat,
 FILENAME = 'D:\SQLDATA\bazamizdat.mdf',
 SIZE = 100MB, 
 MAXSIZE = 500MB,
 FILEGROWTH = 15MB
)
LOG ON 
(
 NAME = bazamiz_log,
 FILENAME = 'D:\SQLDATA\bazamizlog.ldf',
 SIZE = 25MB, 
 MAXSIZE = 200MB,
 FILEGROWTH = 5MB
)
  • COLLATE collation_name

Bu parametr dil və əlifbada simvolların istifadəni nəzarət etməyə imkan verir.  Verilənlər bazası üçün ilkin çeşidləmə parametrlərini təyin edir. Əgər parametr göstərilməsə, verilənlər bazasına çeşidləmə parametrləri SQL Server nüsxəsi üçün təyin olunmuş ilkin parametrdən götürülür. COLLATİON adını öncədən bilmək lazımdır. Məsələn:

COLLATE Cyrillic_General_CI_AS

Bu parametrə qədər verilənlər bazasının yaradılması zamanı əksər hallarda kifayət edir.

Biz artıq yuxarıdakı qəliz yazının daha bir neçə sətrini oxuya bilirik və yeni baza üçün kifayət qədər parametr təyin edə bilərik:

CREATE DATABASE bazamiz
CONTAINMENT = NONE 
ON
PRIMARY
(
 NAME = bazamiz_dat,
 FILENAME = 'D:\SQLDATA\bazamizdat.mdf',
 SIZE = 100MB, 
 MAXSIZE = 500MB,
 FILEGROWTH = 15MB
)
LOG ON 
(
 NAME = bazamiz_log,
 FILENAME = 'D:\SQLDATA\bazamizlog.ldf',
 SIZE = 25MB, 
 MAXSIZE = 200MB,
 FILEGROWTH = 5MB
)
COLLATE Cyrillic_General_CI_AS

Biz əslində yuxarıdakı qəliz yazının bəzi işarələrini yığışdırdıq və lazım olan parametrləri göstərilən yerlərə əlavə etdik. Beləliklə, Books Online for SQL Server 2014 resursunda və digər ədəbiyyatda tez-tez rast gəlinən qəliz yazıları və kod nümunələrini asanlıqla oxuya və istifadə edə bilərik.

Yerdə qalan digər parametrlər barədə növbəti məqalələrdə məlumat verməyə çalışacağam. Onların əksəriyyəti SQL Serverin inzibatçılığı zamanı istifadə olunur.

Beləliklə, bugünkü məqalənin də sonuna gəlib çatdıq. Books Online for SQL Server 2014 resursunda bizə təqdim olunan CREATE DATABASE sintaksisi ilə tanış olduq və kod nümunələrini oxuduq. Kodlardan istifadə edərək yeni baza yaratdıq.

Növbəti məqalədə biz artıq verilənlər bazamızda cədvəllər qurmağa başlayacayıq. CREATE TABLE operatoru ilə tanış olacağıq, yazılış qaydası (sintaksisi) təfərrüatı ilə təhlil edəcəyik, oxunulması və yazılması qaydalarını öyrənəcəyik.

Tapşırıqlar:

  1. Kompüterin diskində SQLDATA qovluğunu yaradın;
  2. SQL Server 2014 Managemant Studio işə salın və New Query düyməsini sıxmaqla yeni sorğu yaradın;
  3. Yuxarıda göstərilən qaydada Books Online for SQL Server 2014 kod nümunəsini açın və yaratdığınız qovluqda iki fayldan (mdf və ndf) ibarət olan verilənlər bazasını yaradın.
  4. Daha bir yeni CONTAINMENT (Muxtar) verilənlər bazası yaradın.

Növbəti məqalələrdə görüşənədək.

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

Dərsliyin əvvəlki hissələrini aşağıdakı keçidlərdən tapa bilərsiniz:

Transact-SQL və CREATE DATABASE operatoru nümunələrlə

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

Müəllif: Rauf Khalafov

Şərhlər ( Books Online for SQL Server 2014 (BOL). T-SQL sintaksisinin oxunuş qaydası )

  1. Təşəkkür edirem

Şərh yazın