Sybase’de işletim sistemi komutlarını çalıştırmak - xp_cmdshell

20 September 2007 – 16:22

Sybase’de kurulum yaparken 3 adet sunucu kurulur. Birincisi verilerin tutulacağı sunucu, yedekleme işlerini yapan sunucu ve ‘xp_server’ sunucusu. İşte bu son yazdığım sunucu işletim sisteminde komut çalıştırmak için çalışır.

Bu sunucu başlangıçta genellikle başlatılmaz. ‘xp_cmdshell’ komutu ilk çağırıldığında bu sunucu çalışarak sonucu döndürür. Gayet de başarılı çalışıyor.

Notasyon:
xp_cmdshell command [, no_output ] [ return_status | no_wait ]

Örnek :

xp_cmdshell 'ls -l'
xp_cmdshell 'ls -l', no_output
xp_cmdshell 'ls -l', return_status
@ret = exec xp_cmdshell 'ls -l', return_status

EkleBunu Sosyal Paylaşım Butonu

MSSQL de DOS komutu Nasıl çalıştırılır?

20 September 2007 – 11:12

Merhaba bugün çok basit ama bir o kadar kullanışlı olabilecek, bir o kadar tehlikeli bir procedureden bahsedeceğiz.

xp_cmdshell

Kullanımı
exec xp_cmdshell 'dir c:\windows\'
bu komut sqlin yüklü olduğu makinaya remote olarak directory almanızı sağladı.

Bu komut neden tehlikeli? SQL e erişim sağlamış bir kişi resmen o makinayı ele geçirmiş demektir.
Saldırgan bu komutla dosya yükleyebilir onları çalıştırabilir. Dosya silebilir.

Bu komut ile anlık çalışan programlar çağırmak mümkün fakat uzun süreli çalışması gereken programlar pek mantıklı değil çünkü
query çalıştırılınca sonucu bekliyor yane o connection asılı kalıyor gibi düşünebiliriz.

EkleBunu Sosyal Paylaşım Butonu

Tüm tablolara update statistics ve sp_recompile geçmek

20 September 2007 – 0:36

Bir veritabanındaki tüm tablolara update statistics ve sp_recompile yapmak istiyorsanız aşağıdaki sql kodunu çalıştırarak ilgili kodu üreterek çalıştırabilirsiniz:

select 'update statistics ' + db_name() + '..' + name + ' go exec ' + db_name() + '..sp_recompile ' + name + ' go ' from sysobjects where type='U'

EkleBunu Sosyal Paylaşım Butonu

Sybase Veritabanı Yedekten Dönme - load database

12 September 2007 – 19:03

Daha önce “dump database” ile dosyaya/teybe alınan yedekten veritabanına dönme yöntemleri şunlardır:

1. Dosya veya teypten dönmenin genel yöntemi:
load database <vt_adi> from "<dosya_yeri_ve_adi>"
go

Örnek:
load database manyaklari from “C:\hede\manyak.bck”
go

2. Stripe ile alınmış bir yedeği yönmek:
load database <vt_adi> from "<dosya_yeri_ve_adi>"
[stripe on "<dosya_yeri_ve_adi>"]….
go

Örnek:
load database manyaklari from "C:\hede\manyak_1_2.bck"
stripe on "C:\hede\manyak_2_2.bck"
go

3. Sıkıştırılarak yedek alınmış bir veritabanını dönmek:
load database <vt_adi> from "compress::[1-9]::<dosya_yeri_ve_adi>”
go

Örnek:
load database manyaklari from "compress::5::C:\hede\manyak.bck"
go

EkleBunu Sosyal Paylaşım Butonu

Sybase Veritabanı Yedekleme - dump database

12 September 2007 – 18:56

Veritabanı yedeklemek istenildiğinde “dump database” komutu kullanılır. Çeşitli kullanım şekilleri şöyledir:

1. Bir veritabanını teybe veya dosyaya yedekleme:
dump database <vt_adi> to "<dosya_yeri_ve_adi>"
go

Örnek:
dump database manyaklari to "C:\hede\manyak.bck"
go

2. Bir veritabanını birden fazla dosyaya alarak paralel yedekleme yapılabilir. Yedekleme daha kısa sürer:
dump database <vt_adi> to "<dosya_yeri_ve_adi>"
[stripe on "<dosya_yeri_ve_adi>"]….
go

Örnek:
dump database manyaklari to "C:\hede\manyak_1_2.bck"
stripe on "C:\hede\manyak_2_2.bck"
go

3. Bir veritabanını sıkıştırma kullanarak yedekleme:
dump database <vt_adi> to "compress::[1-9]::<dosya_yeri_ve_adi>”
go

Örnek:
dump database manyaklari to "compress::5::C:\hede\manyak.bck"
go

EkleBunu Sosyal Paylaşım Butonu

sp_recompile

12 September 2007 – 18:33

Nedir?
Her prosedür ve trigger derlendikleri zaman beraberinde sorgu planları(query plan) da derlenir. Bu planlar o anki tablo ve veri yapısına göre oluşturulur. Bazen bu planların tekrar oluşturulmasına gerek duyarız (Örneğin yeni indeks ekledik ve prosedür hala bu indeksi kullanmıyor…). Bunun için ya prosedürü/triggerı tekrar derlemeliyiz veya sp_recompile komutunu kullanırız.

Nasıl Kullanılır?
Bu komuta bir tablo adı vermeniz gerekiyor. Böylece bu tabloyu kullanan her prosedür veya trigger ilk kullanıldığı zaman tekrar derlenirler.

Kullanım şekli:
sp_recomplie <tablo_adi>
go

Dikkat!
Sistem tablolarında sp_recompile kullanılamaz (sys*) .

Kim kullanabilir?
Her kullanıcı bu komutu çalıştırabilir.

EkleBunu Sosyal Paylaşım Butonu

update statistics

12 September 2007 – 15:23

İstatistik nedir?
İndeks yapısının dağılımı bilgisi ASE üzerinde tutulur. Buna “statistics” deniyor.

Neden önemlidir?
Bir sorgu çalıştırılmadan önce hangi indeksin kullanılacağına bu istatistikler sayesinde karar verilir. Tablolara yeni kolonlar eklenmesi veya tablonun aşırı büyümesi vs. sebeplerden sözkonusu istatistikler zamanla anlamsız kalabilir. Bu da performans problemi oluşturur.

Ne yapmak gerekiyor?
Performans sorunu yaşamamak için düzenli aralıklarla önemli, yapısı değişen ve hızlı büyüyen tablolara “update statistics” komutunu uygulayın:

use <vt adi>go
update statistics <tablo_adi>{, <index_adi>}
go

Kim yapabilir?
sa_role” rolüne sahip olan her kullanıcı.

EkleBunu Sosyal Paylaşım Butonu

MSSQL de Linked Server Transact-SQL olarak Nasıl yapılır?

12 September 2007 – 10:03

Query Analyzer ile bağlandıkdan sonra bir serverdan diğer bir servera ulaşmak için kullanılan kod.

ilk stored procedure linki kurmamızı sağlar.

EXEC sp_addlinkedserver
@server = '195.33.33.xxx',
@srvproduct = 'SQLServer OLEDB Provider',
@provider = 'SQLOLEDB',
@datasrc = 'CEPSERVER2',
@catalog = 'database_name_buraya'

Bu satır rowset açıp karşı database i sorgulamaya yarar.

SELECT * FROM OPENROWSET('SQLOLEDB',
 '195.33.33.xxx' ; 'username' ; 'password',
'select * from database_name_buraya.dbo.tablo_name_buraya' )

–Eğer yukardaki queryde SQL Server bulunamadı gibi bir hata çıkıyorsa linked serverlarınız linked olmamış bir connection hatası olmuştur.

İşlemler bitince linked serverı kapamayı UNUTMAYINIZ.

sp_dropserver '195.33.33.xxx', 'droplogins'
EkleBunu Sosyal Paylaşım Butonu

Sybase ve MsSQL veritabanlarında cursor kullanımı

11 September 2007 – 20:09

Merhaba,

Cursorlar satır satır işleme yapacağımız durumlarda en pratik çözümdür. Sybase ve MsSQL aynı kökten gelmelerine rağmen yazımında bazı küçük farklar vardır. Sybase cursorları prosedürler içinde kullanılmalıdır. Aşağıda önce Sybase sonra MsSQL için cursor kullanımlarını bulabilirsiniz.

declare @id int, @name varchar(30)
declare my_cursor cursor for
  select id, name from users
open my_cursor
fetch my_cursor into @id, @name
while @@sqlstatus != 2
begin
	-- @id ve @name ile bişey yap
	select @id, @name
	fetch my_cursor into @id, @name
end
close my_cursor
deallocate cursor my_cursor
declare @id int, @name varchar(30)
declare my_cursor cursor for
  select id, name from users
open my_cursor
fetch my_cursor into @id, @name
while @@fetch_status = 0
begin
	-- @id, @name ile bişey yap
	select @id, @name
	fetch my_cursor into @id, @name
end
close my_cursor
deallocate my_cursor
EkleBunu Sosyal Paylaşım Butonu

truncate table ve delete arasındaki fark nedir?

6 September 2007 – 16:43

Bu kafa karıştıran bir mevzudur truncate ile delete arasındaki fark… Genel olarak bu farkları şöyle açıklamak mümkün:

1. truncate komutu transaction loguna dahil edilmeyen(non-logged) bir operasyon iken delete ile silinen tüm kayıtlar transaction loglarına yazılır.

2. truncate çok hızlı gerçekleşirken delete daha yavaş gerçekleşir.
ipucu: İçinde aşırı fazla veri olan bir tabloyu boşaltmak için truncate kullanmak mantıklı olabilir.

3. truncate ile veri silindiğinde tablo üzerinde tanımlı trigger’lar çalışmaz. Ama “delete” komutu verildiğinde tabloda delete triggerı varsa çalışır.
ipucu: trigger’ları devre dışı bırakıp silme için truncate uygun olur.

4. truncate işleminden sonra “transaction yedeği” alınamaz. O sebeple transaction yedeğine güvenerek çalışıyorsanız öncetam yedek (full backup) almak gerekmektedir.

5. truncate ile başarıyla silinen kayıtlara ulaşmak bir daha mümkün değilken, delete ile silinen verilere ulaşmanın en azından bazı yolları mevcuttur.

EkleBunu Sosyal Paylaşım Butonu