Sepetiniz

SQL Server/Instance ismini değiştirmek

Bazen sunucunun ismi değişir ve SQL Server instance isminin de buna bağlı olarak değişmesin gerekir.

 

Örneğin Sunucu isminiz deneme olsun ve deneme sunucunuzda test isminde bir instance’ınız olduğunu varsayalım.

 

Test instance’ınıza normalde deneme\test şeklinde bağlanabilirsiniz. Deneme sunucusunun ismininde prod olarak değiştirildiğini düşünelim. Select @@SERVERNAME ile Instance’ın ismini select ettiğinizde hala deneme\test olarak geldiğini göreceksiniz. Bunu aşağıdaki kod yardımıyla düzeltebiliriz.

sp_dropserver 'deneme\test';
GO
sp_addserver 'prod\test', local;
GO

 

SQL Server’a gelen anlık sorguları çeşitli filtrelerle listelemek

Aşağıdaki sorgu yardımıyla aşağıda listelediğim soruların cevaplarına erişebilirsiniz.

 

Command eklenmiş ve şu an aktif olmayan yerlerden istediğinizi açarak sorguyu istediğiniz şekilde filtreleyebilirsiniz.

 

  • Veritabanına şu anda hangi sorgular geliyor?
  • Hangi sorgu ne kadar sürüyor?(total_elapsed_s)
  • Hangi sorgu hangi sorguyu locklıyor?(blocking_session_id)
  • Backup’ın tamamlanma yüzdesi nedir?(percent_complete)
  • Sorgular en son hangi bekleme tipi yüzünden beklemiş?(last_wait_type)
  • Hangi sorgu running modda hangi sorgu suspend modda bekliyor?(status)
  • Hangi sorgu hangi programdan gönderilmiş?(program_name)
  • Hangi sorgu hangi sunucudan gönderilmiş?(host_name)
  • Hangi sorgu ne zaman başlamış?(start_time)
  • Hangi sorgu ne kadar memory kullanıyor?(memory_mb)
select r.total_elapsed_time / 1000.0 as total_elapsed_s,percent_complete,r.blocking_session_id,
r.last_wait_type,
s.login_name,'MySessionID= ' + cast(r.session_id as varchar) as MySessionID,DB_NAME(r.database_id) as DatabaseName,command
,SUBSTRING(t.text, (r.statement_start_offset/2) + 1,
    ((CASE statement_end_offset 
        WHEN -1 THEN DATALENGTH(t.text)
        ELSE r.statement_end_offset END 
            - r.statement_start_offset)/2) + 1) AS statement_text
,r.status,wait_time
,wait_type,wait_resource,text,start_time,s.program_name
,r.last_wait_type,s.host_name,r.granted_query_memory * 8 / 1024 as memory_mb
from sys.dm_exec_requests r
inner join sys.dm_exec_sessions s on r.session_id = s.session_id
cross apply sys.dm_exec_sql_text(r.sql_handle) t
where r.session_id <> @@SPID 
--and r.database_id =DB_ID('Hangi DB'ye gelen sorguları listelemek istiyorsanız')
--and t.text like  '%text bazlı sorgulama yapmak için text içeriği%' 
--and r.session_id = sessionid
--and s.Login_Name like '%Login bazlı filtreleme%'  
--and s.program_name LIKE '%Program bazlı filtreleme örneğin Management%'
--and r.wait_type !='bekleme tipine göre filtreleme'
--and r.blocking_session_id<>0"

order by start_time asc

 

Bazı durumlarda sorgular lock’a düşer ve blocking session id kısmında hangi sorgunun lock’ladığını görebilirsiniz. Fakat bu locklayan sorgu sleeping mode’da ise yukardaki sorgu sonucunda gelmez. Aşağıdaki sorgu yardımıyla bu sorgunun text’ini alabilirsiniz.

 

select t.text,s.status from sys.dm_exec_connections c
INNER JOIN sys.dm_exec_sessions s ON s.session_id=c.session_id
CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) t
where s.session_id=526--bloklayan sorgunun session id'sini yazmalısınız.

 

SQL Server’dan Oracle’a bağlanacak bir Linked Server tanımlamak

Bazı durumlarda SQL Server üzerinde bulunan bir veritabanının Oracle veritabanından veri çekme ihtiyacı ortaya çıkabilir.

 

İlk olarak oracle tarafında ilgili bir kullanıcının oluşturulur. Eğer SQL Server’ınızın bulunduğu sunucuda Oracle Client yüklü değilse gerekli kurulum yapılır. Oracle tarafında oluşturulan kullanıcının kullanacağı tns bilgisi client’ın yüklü olduğu path’te (genellikle bu şekilde olur -> C:\app\product\11.2.0\client_1\network\admin) tnsnames.ora dosyasına kaydedilir. Tnsnames.ora dosyasına kaydetmenize izin vermezse notepad’i run as admintrator ile açtıktan sonra  File->Open ile yukarıda path’ini belirttiğim  tnsnames.ora dosyasını açmanız gerekir.

 

Daha sonra aşağıdaki script yardımıyla bu işlemi yapabilirsiniz.

 

myUser SQL Server tarafında linked server’ı kullanacak sql login
Xsource Tnsnames.ora dosyasına kaydettiğiniz tns’e verdiğiniz isim
XServer Linked server’ın ismi
oracleuser Oracle tarafında oluşturulan kullanıcı
oracleuserşifre Oracle tarafında oluşturulan kullanıcının şifresi
serverName\InstanceName SQLIntance’a nasıl bağlanıyorsanız bu kısma onu yazmalısınız.
EXEC master.dbo.sp_addlinkedserver @server = 'XServer', @srvproduct = 'Oracle', @provider = 'OraOLEDB.Oracle',
@datasrc = 'Xsource' ,@provstr=N'SERVER=serverName\InstanceName;User ID=myUser'

 

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'XServer', @locallogin = 'myUser' , 
@useself = N'False', @rmtuser = N'oracleuser', @rmtpassword = N'oracleuserşifre'

Yukardaki script’in “addlinkedsrvlogin” ile ilgili olan kısmını çalıştırmak için oracle tarafında yetkisi olan kullanıcıyı ve şifresini bilmeniz gerekir. MS SQL veritabanı uzmanının oracle üzerinde tanımlı bir kullanıcı şifresini bilmesi çok uygun değildir. Bu yüzden bu şifreyi siz hiç öğrenmeden bu işlemi bu linked server’ı kullanacak uygulamacıya yaptırabilirsiniz. Bu işlemi nasıl yaptıracağınızın detaylarını “Oracle’a Bağlanan Linked Server’ın Remote Login Şifresini Uygulamacıya Değiştirtmek ya da Remote Login Oluşturtmak” isimli makalede bulabilirsiniz.

USE MASTER
GO
GRANT EXECUTE ON sys.xp_prop_oledb_provider TO myLogin

 

Oracle Client’ı kurduktan sonra bazı durumlarda linked server da sıkıntı yaşayabilirsiniz.

 

SQL Server Instance’ında ServerObjects->LinkedServers->Providers altında OraOLEDB.Oracle sekmesine sağ tıklayarak aşağıdaki ayarları yaparsanız sıkıntı düzelecektir.

Bütün bu işlemlerden sonra linked server’ı aşağıdaki şekilde kullanabilirsiniz.

SELECT * FROM OPENQUERY([XServer], 'Select * FROM OracleŞema…')