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.