Səhifələr

Blogroll

15 August 2014

SQL SERVER - HOW TO CREATE LINKED SERVER

Bəzən elə hallar yaranır ki, yazılmış proqramın tələblərinə əsasən məlumatları bir neçə serverdən almaq lazım gəlir. Bu database-lər müxtəlif fiziki serverlərdə və ya eyni fiziki serverə yüklənmiş müxtəlif SQL instance - lar da ola bilər. Bu halda SQL Server - də Linked Server - dən istifadə etmək olar. Linked server quraşdırmanın iki üsulu var. Birinci üsulda Linked Server adı kimi SQL Server - in real adını yazmalı olursunuz. Bu proqramçı üçün o qədər də əlverişli deyildir. Çünki əgər Linked Server adı dəyişərsə proqramçı da həmçinin öz kodunda eyni dəyişikliyi etməlidir. Digər üsulda isə Linked Server üçün istədiyiniz adı seçirsiniz və əgər Linked Server adı dəyişərsə yalnız Linked Server - in parametrləri dəyişəcək.

Bizim Test serverimizə iki SQL Server instance yüklənib. MSSQL-PC\MSSQLSUPPORT və MSSQL-PC\MSSQL2. Yaratdığımız Linked server bu iki İnstance arasında olacaq.

linked-servers

Linked Server əlavə etmək üçün SSMS (SQL Server Management Studio) Object Explorer - də Server Objects altında Linked Servers üzərində sağ klik edib New Linked Server deyin.

new-linked-serversAşağıda gördüyünüz pəncərə açılacaq.

new-linked-server-windows

 

 

Bu pəncərədə Liked Server xanasında yaradacağınız Linked Server-ə vermək istədiyiniz adı yazın. Other Data source seçin. Provider bölməsində Microsoft OLE DB Provider for SQL Server. Product Name hissəsində SQLSERVER olduğu kimi boşluq buraxmadan yazın. Data Source hissəsində isə bağlanmaq istədiyiniz SQL Server Host adı\SQL Server instance adı.

new-linked-detailsSecurity bölməsinə keçin və Be made using this security context bölməsində bağlandığınız serverdə mövcud olan SQL Login məlumatlarını daxil edin. Linked Serverlə edəcəyiniz əməliyyatlar bu loginin yetkilərindən asılı olacaq.

linked-server-securityServer Options bölməsinə keçsəniz Linked Server-lə bağlı müxtəlif parametrləri düzənləyə bilərsiniz. Bizim nümunədə yazlnız RPC Out parametrini True edəcəyik. Bununla da bağlantı qurduğumuz serverdə Stored Procedure execute etmək imkanı əldə edirik.

linked-server-options-rpcoutOK düyməsinə vurduqdan sonra Linked Server yaradılmış oldu. Yoxlamaq üçün sadəcə olara aşağıdakı sorğunu özünüzə uyğun dəyişib işə salın.

new-linked-server-created

 


[code language="sql"]SELECT * FROM [NEWLINKED].[AdventureWorks2012].[Person].[EmailAddress] [/code]


Sorğudan gördüyünüz kimi FROM sözündən sonra Lİnked Server adı-Linked Serverdə olan baza adı-Schema adı-Table adı formatından istifadə edilir.

 

Database Administrator

Yusif Yusifov

 

 

 

 

 

 

 

12 August 2014

SQL SERVER - Move user databases

SQL Server - də database fayllarının yerinin dəyişdirilməsi səbəbləri müxtəlif ola bilər. Database yerləşdiyi diskin dolması, disklə bağlı problem, faylları paylaşdıraraq İO sürətinin artırılması və s. Bu əməliyyatı etmək üçün müxtəlif üsullar var. Aşağıda bunlardan ikisi ilə sizi tanış etməyə çalışacam.

1 - ci üsul - SSMS vasitəsi ilə faylların  köçürülməsi. 

Bu üsulda SSMS - dan istifadə edildiyinə görə SQL dili ilə tanışlığı olmayanlar da asanlıqla bu əməliyyatı edə bilərlər. Köçerməyə başlamazdan qabaq ik növbədə köçürüləcək database fayllarının yerini və adını dəqiqləşdirmək lazımdır. Bunun üçün database üzərində sağ klik edib Properties menyusunu seçin və açılan pəncərənin soltərəfindəki menyudan Files bölməsinə keçin.

database-properties

 

database-files-path

 

Yuxarıdakı şəkildə göstərilmiş qovluğa keçdikdə həmin faylların orda olduğunu görə bilərsiniz. Nəzərə alın ki, bir database-ə aid olan faylları müxtəlif qovluqlarda, disklərdə də yerləşə bilər.

database-datafiles

 

Database SQL Server - də istifadə də olduğu halda onlar üzərində heç bir dəyişiklik etmək olmaz. Bu səbəbdən ilk növbədə database SQL Serverdən ayıraq. Bunun üçün aşağıdakı şəkildə göstərildiyi kimi Database üzərində sağ klik edib, Tasks bölməsindən Detach seçməklə etmək olar. Detach seçdikdən sonr açılan pəncərədə heç bir dəyişiklik etmədən OK düyməsini klikləyin. Pəncərə bağlandıqdan sonra həmin database Object Explorer pəncərəsindən itdiyini görəcəksiniz.

detach-database

 

detach-database-2

 

object-explorer-databaseDatabase detach edildikdən sonra faylların olduğu qovluğa qayıdıb orda olan faylların hamısını və ya yalnız köçürmək istədiklərinizi seçib yeni diskə və ya direktoriyaya köçürün. Bizim nümunədə mən DATA folderindən yeni yaradılmış olan DATA2 folderinə 3 fayl köçürəcəm. Digər 2 fayl öz əvvəlki yerində qalacaq.

old-and-new-folders

sql-datafiles-old

 

 

sql-datafiles-new

 

Fayllar kopyalandıqdan sonra Object Explorer - də Databases üzərində sağ klik edib açılan menyudan Attach seçin.

attach-databaseAçılan pəncərədə Add düyməsini klikləyin və Attach etmək istədiyiniz Database-ə aid olan MDF faylı seçin.

add-datafile-for-attach

 

 

database-mdf-file

 

MDF fayl seçildikdən sonra həmin database faylları barədə məlumatı görəcəksiniz. Message hissəsində Not Found yazılan fayllar köçürdüyümüz fayllarıdır. Həmin faylların bərpa olunmas üçün qırmızı ilə işarələnmiş düyməni vurub köçürdüyünüz qovluqdan adına uyğun olaraq faylı seçin.

notfound-datafiles

 

find-file-buttonselect-notfound-fileBütün faylları seçdikdən sonra Not Found yazısının itdiyini görəcəksiniz.

not-found-disappearBundan sonra sadəcə olaraq OK düyməsini vurmaq qalır. Əməliyyat yerinə yetirildikdən sonra Object Explorer-də Attach etdiyimiz database görsənəcək. Həmin database  fayllarının yerinə baxdıqda isə yeni qovluq barədə məlumatı da görəcksiniz.

database-files-new-path

2 - ci üsul - SQL sorğu ilə fayl adlarının database səviyyəsində dəyişdirilməsi və falların ƏS səviyysində kopyalanması. 

Birinci üsulda olduğu kimi bu dəfə də ilk növbədə faylların yerləşdiyi qovluqları (diskləri) müəyyənləşdirmək lazımdır. Bunun üçün aşağıdakı sorğudan istifadə edək.

[code language="sql"]SELECT name AS LogicalName, physical_name AS FileDir
FROM sys.master_files
WHERE database_id= DB_ID('MSSQLSUPPORT'); [/code]

 

 

Sorğu nəticəsi aşağıdakı kimi olacaq.

database-file-path

 

Faylların yerini öyrəndikdən sonra aşağıdakı sorğu ilə database - i offline moduna keçiririk. Database online olarsa onun əməliyyat sistem fayllarının yerini dəyişə bilmərik.

[code language="sql"] USE master
GO
ALTER DATABASE MSSQLSUPPORT SET OFFLINE WITH ROLLBACK IMMEDIATE
GO[/code]

database-offline
Database offline olduqdan sonra Əməliyyat sistemi tərəfdə nəzərdə tutulan dəyişikliyi edin, yəni faylların yerini dəyişin. Bizim halda DATA2 qovluğunda olan fayllar DATA qovluğuna köçürüldü.

copy-datafiles-to-data-folder
Fayllar fiziki olaraq köçürüldükdən sonra isə database səviyyəsində də aşağıdakı dəyişiklikləri edin. Eyni anda yalnız bir fayl adı dəyişmək olar.

[code language="sql"]USE master
GO
ALTER DATABASE MSSQLSUPPORT
MODIFY FILE
( NAME = MSSQLSUPPORT_log,
FILENAME = 'D:\DATA\MSSQLSUPPORT_log.ldf');

USE master
GO
ALTER DATABASE MSSQLSUPPORT
MODIFY FILE
( NAME = MSSQLSUPPORT2,
FILENAME = 'D:\DATA\MSSQLSUPPORT2.ndf');

USE master
GO
ALTER DATABASE MSSQLSUPPORT
MODIFY FILE
( NAME = MSSQLSUPPORT2_log,
FILENAME = 'D:\DATA\MSSQLSUPPORT2_log.ldf'); [/code]

Sorğu uğurla yerinə yetirilərsə aşağıdakı mesaj alınacaq.

move-datafile-message
Köçürmə işi bitdikdən sonra aşağıdakı soröu ilə database-i online edə bilərsiniz.

[code language="sql"]USE master
GO
ALTER DATABASE MSSQLSUPPORT SET ONLINE
GO [/code]

Ilk sorğunu yenidən versəniz faylların yerdəyişməsini görə bilərsiniz.

[code language="sql"]SELECT name AS LogicalName, physical_name AS FileDir
FROM sys.master_files
WHERE database_id= DB_ID('MSSQLSUPPORT'); [/code]

new-file-location
Database Administrator
Yusif Yusifov

 

 

 

 

05 August 2014

SQL SERVER - RELOCATE TEMPDB DATAFILES

SQL Server tempdb - istifadəçilər tərəfindən yaradılmış müvəqqəti obyektlərin saxlanıldığı database-dir. SQL Server yükləndiyi zaman əgər parametrlərdə dəyişiklik edilməzsə digər sistem database-lərinin (master, model, msdb) yerləşdiyi qovluqda yerləşir. SQL Server hər start edildikdə tempdb - də olan bütün obyektlər silinir. Tempdb data fayllarının yerini dəyişmək üçün əsasən iki səbəb var - Yerləşdiyi diskdə olan yer azlığı və həmin diskə düşən yükü azaltmaq.

Tempdb data fayllarının yerini dəyişmək çox sadə prosesdir və SQL Server servisinin yenidən başladılmasını tələb edir.

Faylların yerini dəyişməzdən öncə həmin faylların fiziki adını tapmaq lazımdır. Bunun üçün aşağıdakı sorğudan istifadə edə bilərsiniz.

[code language="sql"]USE [tempdb];
SELECT physical_name FROM sys.database_files; [/code]

tempdb-physical-files

TEMPDB database-nin fiziki adlarını əldə etdikdən sonra aşağıdakı sorğu ilə data faylların yerini dəyişə bilərsiniz. Nəzərə alın ki, sorğuda qeyd etdiyiniz qovluq artıq mövcud olmalıdır.

[code language="sql"]

USE [master]
GO

ALTER DATABASE tempdb MODIFY FILE (name = tempdev, FILENAME = 'D:\TEMPDB\tempdb.mdf')
GO

ALTER DATABASE tempdb MODIFY FILE (name = templog, FILENAME = 'D:\TEMPDB\templog.ldf')
GO[/code]

Əgər qovluqlar əvvəlcədən yaradılmayıbsa  aşağıdakı xətanı alacaqsınız.

tempdb-invalid-pathHər şey qaydasındadırsa isə aşağıdakı kimi mesaj alacaqsınız.

tempdb-valid-pathMesajda da qeyd edildiyi kimi yeni fayllar yalnız database restart edildikdən sonra işə düşəcək. Bunun üçün SQL Server servisini restart edin. Restart-dan sonra həmin qovluqda yeni fayllar yaranacaq.

tempdb-new-path

 

Database Administrator

Yusif Yusifov

 

01 August 2014

SQL SERVER - How to obtain administrative privileges in SQL SERVER

SQL Server 2005 versiyası qurulduğu zaman lokal administrator qrupu avtomatik olaraq sysadmin roluna əlavə edilirdi. SQL Server 2008 - dən başlayaraq qurulum zamanı əgər aşağıdakı şəkilgə göstərilmiş Add Current User düyməsi vurulmazsa və SA şifrəsi təyin edilməzsə yüklənmiş serverdə heç bir istifadəçinin admin yetkisi olmyacaq. Siz ancaq SQL serverin servislərini dayandırıb - işə sala biləcəksiniz.

local-admin-group




Bu halda aşağıdakı addımları etməklə lokal administrator yetkisi olan hər hansı istifadəçini SQL Server sysadmin roluna əlavə edə bilərsiniz.  Aşağıdakı şəkildə gördüyünüz kimi MSSQL istifadəçisinin MSSQLSUPPORT instance-na qoşulmaq üçün yetkisi yoxdur.

cannot-connect-sql




CMD (Command Line) proqramını Start menyusunda axtarıb, üzərində sağ klik edib Run as Administrator seçərək Administrator kimi açırıq.

run-cmd-as-administrator
SQL Server servisinin adını öyrənmək üçün Start menyusunda services yazıb göstərilən addımları edin.

services


sql-server-service-name
Service Name qarşısında qırmızı ilə işarələnən Sql Server service adıdır. Bu adı kopyalayın və ya yadda saxlayın. Növbəti addımda CMD-yə qayıdın və aşağıdakı şəkildəki komandaları ardıcıl RUN edin.

Bu komanda ilə SQL Server servisini stop edirik.

net stop [SQL Server service name]

Bu komanda ilə isə SINGLE USER modunda açırıq. Bu modda serverə yalnız bir qoşulma ola bilər.

net start [SQL Server service name] /m

stop-sql-server-service








Növbəti addımda aşağıdakı komandanı öz məlumatlarınızla dəyişərək CMD-də run edin.

osql -E -S .\InstanceName -Q "EXEC sp_addsrvrolemember 'Domain\User', 'sysadmin' "

add-user-sysadmin




Sonra isə SQL Server servisini söndürüb yenidən normal modda açarq.

Bu komanda ilə SQL Server servisini stop edirik.

net stop [SQL Server service name]

Bu komanda ilə isə normal modda açırıq.

net start [SQL Server service name]

start-sql-server-service
Bu əməliyyatlardan sonra SQL Serverə yuxarıda əlavə etdiyiniz lokal Administrator istifadəçisi ilə login ola bilərsiniz.


31 July 2014

SQL SERVER - TRANSACTIONAL REPLICATION

Aşağıdakı addımları ardıcıl keçməklə iki SQL Server INSTANCE arasında TRANSACTIONAL REPLICATION  qura bilərsiniz.

1. Replikasiya etmək istədiyiniz database yerləşən SQL Server - də Replication bölməsində olan Local Publications altbölməsinin üzərində sağ klik edib New Publication deyin.

publication2. Açılan pəncərədə Next deyin. Bu serverdə ilk dəfə Replication qurulduğundan ilk növbədə Distribution database yaradılacaq. Bu database - də replikasiya barədə məlumat toplanır.

pub-wizard

distributor

3.  Next dedikdən sonra açılan pəncərədə Subscriber tərəfin dail olabiləcəyi qovluq qeyd edilir. Bu qovluqda Replikasiya olunan database-in snapshot-ları yerləşəcək

 

snap-folder

 

4. Növbəti pəncərədə replikasiya etmək istədiyiniz Database seçin. Bu serverdə yalnız bir database var. replication-database5. Bu pəncərədə replikasiya növünü təyin edirik. Mövzumuz Transactional Replication olduğuna görə Transactional Publication seçirik.

transactional-publication


6. Açılan pəncərədə Article list - yəni replika etmək istədiyimiz obyektləri seçirik. Bu obyektlər Table, View, Functions, Stored Procedures  ola bilər. Bizim Database test database olduğuna görə yalnız bir neçə table var.


replication-article-list7. Növbəti pəncərədə table fileter-lər təklif olunur. Əgər replika etdiyiniz məlumatı hər - hansı kriteriya üzrə filterləmək istəyirsinizsə əlavə edə bilərsiniz.


filtered-table-rows




 

8. Next dedikdən sonra çılan pəncərədə Snapshot alınması zamanı qurulur. Biz birinci seçimi seçib qurulum bitən kimi snapshot alınmasını qeyd edirik.

snapshot-agent

 

9. Bu pəncərədə istifadəçi adı və şifrələri qeyd edirik. Security Settings düyməsini vurun və birinci bölmədə Snapshot Agent çalışacağı istifadəçi məlumatlarını ikinci bölmədə isə Serverə bağlanacaq istifadəçinin məlumatlarını daxil edin.

agent-security

snapshot-agent-security

 

agent-security210. Bu adddımdan sonrakı pəncərədə Replikasiyanı yarada bilərik və ya onun scriptini götürə bilərik.

wizard-actions

 

 

11. Next deyib keçirik və açılan pəncərədə Replikasiyaya ad veririk. Finish deyib replikasiyanı yaradırıq. Əgər bir problem görsənməzsə demək replikasiya uğurla yaradılmışdır.

publication-name

 

creating-publication

 

publication-ready12. Subsciber olacaq serverdə Replication bölməsinin Local Subscriptions altbölməsində sağ klik edib New Subscriptions seçirik.

new-subscription13. Sehirbazın köməkçi pəncərəsini keçib Publisher serverimizi seçirik. Əgər siyahıda yoxdursa Find Sql Server Publisher deyib həmin serverə bağlanırıq.

subscription-wizard


publisher-server


select-publisher


connect-publisher


14. Serverə bağlandıqdan sonra həmin serverdə hal - hazırda mövcud olan Publications siyahısını görəcəksiniz. Abunə olmaq istədyiniz replikasiyanı seçib Next deyin.


select-publication15. Növbəti pəncərədə Distribution Agent-in hansı serverdə olmasını seçirik. Pull Subscriptions seçsək hər Subscriber Agent-i öz severində işləyəcək. Əks halda bütün Agnet-lər Distributor severdə. Pull Subscriptions seçib Next deyirik.


pull-subscription




 

 

16. Burada Publisher tərəfdən gələn məlumatların hansl database üzərinə yazılacağını seçirik. Əgər belə bir database yoxdursa New Database deyib yenisini yaradırıq. Database adını və digər məlumatları daxil edib həmin database seçirik.

subscription-database

create-subsciber-database

 

subsciber-database17. Növbəti pəncərədə Distributor və Subsciber serverlərin istifadəçi məlumatları daxil edilir.

distribution-agent-security

 

distribution-agent-security2

 

distribution-agent-security318. Next dedikdən sonra açılan pəncərədə Subsciber ilə Publisher arasındakı sinxronizasiya zamanı qeyd olunur. Bizim seçimdə Run continuously seçilib, yəni davamlı sinxronizasiya.

synchronization-schedule

 

 

19. Next deyib növbəti pəncərəyə keçirik və Create the Subsciption seçib yenə Next düyməsini vururuq.

create-subscription

 

20. Açılan pəncərədə Finish deyib Subsciption yaradırıq. Əgər daxil etdiyiniz məlumatlar düzgündürsə aşağıdakı kimi nəticə alacaqsınız.

subscription-summary

 

subscription-done

 

subscriptions21. Replikasiyanın necə işlədiyinə nəzarət etmək üçün Sql Serverin Replication Monitor proqramından istifadə etmək olar. Proqramı açmaq üçün Publisher tərəfdə istənilən Replication - Local Publications altında olan yaratdığınız Publication üzərində sağ klik eib Launch Replication Monitor seçin.

replication-monitor22. Yeni açılan pəncərədə My Publishers altında monitor etmək istədiyiniz Publication seçin. Sağ tərəfdə həmin Publication - a uyğun məlumatlar görsənəcək. Status (Replikasiya işləyir ya yox), Performance (Replikasiyanın vəziyyəti), Latency (İki server arasındakı gecikmə) kimi məlumatları ala bilərsiniz.

replication-status2

 

 

 

Database Administrator

Yusif Yusifov