Aşağıdaki scriptle tüm user databaselerini yedek alıp, kopyalacağınız sunucuda istediğiniz dizine restore etmek için script oluşturabilirsiniz. Kaynak sunucuda backup scripti, hedef sunucuda restore scripti çalıştırılmalı, eğer aynı sunucu üzerinde backup restore yapıyorsanız her iki outputda aynı sunucuda çalıştırılır. Prod ortamdan alınan backupları test ortamına restore etmek için işinize yarayabilir. Okumaya devam et
Yazar arşivleri: Ömer ACAR
Databaselerin Compatibility level ini değiştirmek
SQL Upgrade sonrası eski compatibility_level ı yeni versiyonun compatible level ına yükseltilir. Aşağıdaki tablodan uyumluluk modlarını görebilirsiniz, upgrade sonrası sp lerin, fonksiyonların vb yeni versiyonda düzgün çalıştığından emin olduktan sonra compatibility_level ı yeni sürüme yükseltin.
Hangi level ın hangi versiyona denk geldiğini, ve hangi versiyonun hangi düşük versiyonlara kadar destek verdiği aşağıdaki tabloda görebilirsiniz.
Mssql AlwaysOn Sistemlerde Job Tanımlamak
Alwayson 2 node lu sistem üzerinde 1 primary replikanız ve 1 secondary(daha fazla da olabilir) replikanız olur, primary replika açık ve yazılabilir durumdadır, eğer bu sistem üzerinde job tanımlamak istersek primary node değişebileceğinden jobı her iki instanceda da oluşturup sql ile primary olup olmadığını kontrol etmeliyiz. Çalıştırmak istediğimiz iş sadece primary de çalışmalı.
Jobı hem primaryde hem de secondaryde oluşturacağız hangi sunucu primary ise orada execute edilecek, secondarylerde sadece job çalışıp bir şey yapmadan tamamlanacaktır, failover yaptığınızda da yeni primary üzerinden çalışmaya devam edecektir. Job ın içeriğine aşağıdaki sql i ekliyoruz, Çalışmasını istediğiniz sqli aşağıdaki begin end arasına tanımlayabilirsiniz.
---- Job içeriğine konulacak içerik... DECLARE @RoleDesc NVARCHAR(60) SELECT @RoleDesc = a.role_desc FROM sys.dm_hadr_availability_replica_states AS a JOIN sys.availability_replicas AS b ON b.replica_id = a.replica_id WHERE b.replica_server_name = @@SERVERNAME IF @RoleDesc = 'PRIMARY' BEGIN Print 'Aktif Node üzerindesiniz, burası çalışacak.' ---- Çalışacak işleri bu bloğa yazın.. END ELSE Print 'Pasif node üzerindesiniz içerik çalışmayacak..'
Sp nin son çalışma zamanını bulmak
Bir sp nin en son ne zaman çalıştığını bulmak için aşağıdaki sorgu kullanılabilir. He çalıştığında buradaki tarih güncellenecektir, geçmişe yönelik history tutmaz sadece son çalıştığı zamanı verir.
SELECT o.name, ps.last_execution_time FROM sys.dm_exec_procedure_stats ps INNER JOIN sys.objects o ON ps.object_id = o.object_id WHERE DB_NAME(ps.database_id) = 'db_adi' ORDER BY ps.last_execution_time DESC
SQL Ayın-Haftanın ilk iş gününü bulmak
Ayın ilk iş günü bir çok kontrol noktasında karşımıza çıkar, aşağıdaki fonksiyon ile ayın ilk iş gününün hangi güne denk geldiğini bularak kontrollerimizde kullanabiliriz. Fonksiyon resmi tatilleri göz önünde bulundurmuyor, resmi tatilleri de dahil etmek istiyorsanız resmi tatil tablosu oluşturup resmi tatilleri bu tabloya girerek fonksiyonda bu tarihleri exclude edebilirsiniz. İhtiyaca göre aynı mantıkla yılın – haftanın ilk iş gününü de bulabilirsiniz.
Ayın İlk iş gününü bulan sql fonksiyon.
---- Ayın ilk iş gününü bulan sql fonksiyon CREATE function [dbo].[fnFirstWorkDayOfMonth](@Year int,@Month int) returns datetime as begin declare @FirstDayOfMonth datetime set @FirstDayOfMonth = convert(datetime, convert(varchar,@Year)+'-'+convert(varchar,@month)+'-01') IF DATENAME(dw, @FirstDayOfMonth) IN ('Saturday') set @FirstDayOfMonth = dateadd(day,2,@FirstDayOfMonth) ELSE IF DATENAME(dw, @FirstDayOfMonth) ='Sunday' set @FirstDayOfMonth = dateadd(day,1,@FirstDayOfMonth) ELSE set @FirstDayOfMonth = dateadd(day,0,@FirstDayOfMonth) return @FirstDayOfMonth end ---- Ayın ilk iş gününü bulan sql fonksiyon
Fonksiyonu aşağıdaki gibi kullanabiliriz;
select [dbo].[fnFirstWorkDayOfMonth](2021,4) as SQL_Ayin_ilk_is_gunu
MSSQL Database Bilgilerini Sorgulamak
Databaselerin online olup olmamaları, ne zaman oluşturulduğu,recovery modelin ne olduğu, db_ownerın kim olduğu vb kritik bilgilere aşağıdaki sorguyla bakabilirsiniz.
select database_id,name,compatibility_level,user_access_desc,suser_sname(owner_sid) ownerrr, is_read_only,state_desc,recovery_model_desc,collation_name,create_date,is_broker_enabled, target_recovery_time_in_seconds from sys.databases ----where database_id > 4
Tüm db lerden erişip sorgu çekmek isterseniz.
-- tüm db lerden select çekmek, ayaktamı kontrolü yapmak.. declare @command1 varchar (max) EXEC sp_MSforeachdb @command1='use ?; select db_name(),* from sys.database_files;' print @command1
MSSQL Backup Restore Sorgulama
Aşağıdaki scriptlerle sql databaseleriniz ne zaman backuplanmış, ne zaman restore edilmiş, tüm geçmişe ulaşabilirsiniz. type kolonu backupın tipini gösteriyor, D full backup, L log backup, I diff backup olduğunu belirtir. Bu sorguları job yaparak backupı alınmayan db leri mailde attırabilirsiniz.
--------Full Backup History ------------------- select top 1000 database_name,user_name,backup_start_date,backup_finish_date,type,* from msdb.dbo.backupset where type='D' order by 4 desc --------Diff Backup History ------------------- select top 1000 database_name,user_name,backup_start_date,backup_finish_date,type,* from msdb.dbo.backupset where type='I' order by 4 desc --------Log Backup History ------------------- select top 1000 database_name,user_name,backup_start_date,backup_finish_date,type,* from msdb.dbo.backupset where type='L' order by 4 desc --------En Son Full Backup Ne Zaman Alinmış------------------ select database_name,max(backup_finish_date) from msdb.dbo.backupset where type='D' group by database_name order by 2 desc --------Database Restore History ------------------ SELECT [rs].[destination_database_name], [rs].[restore_date], [bs].[backup_start_date], [bs].[backup_finish_date], [bs].[database_name] as [source_database_name], [bmf].[physical_device_name] as [backup_file_used_for_restore] FROM msdb..restorehistory rs INNER JOIN msdb..backupset bs ON [rs].[backup_set_id] = [bs].[backup_set_id] INNER JOIN msdb..backupmediafamily bmf ON [bs].[media_set_id] = [bmf].[media_set_id] ORDER BY [rs].[restore_date] DESC --------------- EN son restore ne zaman yapilmis------------------------- select ab.name as DBName, ISNULL(aa.last_restore_date,'19000101') as LastRestoreDate, ISNULL(aa.GECEN_SURE,-1) as DateDiffFromLastRestore from ( select *,DATEDIFF(HH,last_restore_date,GETDATE()) as GECEN_SURE from (select DB_ID(destination_database_name) as DestDBID,destination_database_name,MAX(restore_date) as last_restore_date from msdb.dbo.restorehistory group by destination_database_name) a ) aa right join sys.databases ab on aa.DestDBID=ab.database_id order by 3
Tüm SQL Databaselerde object aramak
Bir objenin(tablo,view,sp,fonksiyon vs) hangi database de olduğunu bulmak için sp_MSforeachdb ile tüm sql databaselerde arayalım.
sp_MSforeachdb ' USE [?] select db_name() as dbname,type,crdate,* From ?..sysobjects where name LIKE N''%trigger%''' -- Type kolonu objenin tipini verir, tablo mu viewmi,sp mi vs? -- U = Table (user-defined), V = View,P = SQL Stored Procedure, SN = Synonym, F = FOREIGN KEY
Ayrıca sadece seçilen database içinde arama yapmak isterseniz aşağıdaki sorgularda işinize yarayabilir.
----(Sadece seçilen databasede arar) SELECT sys.objects.name, sys.schemas.name AS schema_name FROM sys.objects INNER JOIN sys.schemas ON sys.objects.schema_id = sys.schemas.schema_id select * from sys.tables select * from sys.views select * from sys.procedures