Forum
Merhabalar,
Uzak bir ülkede 200 gblik veri tabanı var. içindeki katalogların, tablaoların ,viewlerin hangilerinin kullanıldığını bilmiyorum. bir sürü tablo var ve çoğu kullanılmıyor dediler . kesin bilgi yok. Veri tabaını içinde kullanılan viewlerin veya taboların hangilerinin kullanıldığını öğrenmenin bir yolu var mı?
Ona göre sadece kullanılanveriyi çekerek süreyi, kısaltmak istiyorum.
Aşağıda örnek bir kod hazırladım buna benzer bir şey var mıdır?
Teşekkür ederim
Sinan
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
--MAX(lu.[last_user_lookup]) as [last_user_lookup], MAX(lu.[last_user_scan]) as [last_user_scan], MAX(lu.[last_user_seek]) as [last_user_seek]
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.object_id = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
--LEFT OUTER JOIN sys.dm_db_index_usage_stats as lu on t.name = (OBJECT_NAME(lu.[object_id], lu.[database_id]))
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.object_id > 255
GROUP BY
t.Name, s.Name, p.Rows--, lu.[database_id], lu.[object_id]
ORDER BY
t.Name
Selam,
amaç nedir, sadece uzak db yi başka lokasyona backup almak mı, yoksa kullanılmayan tabloları silip alan yaratmak mı. ona göre çözüm yazalım.
Merhaba Cwvabınız için teşekkür ederim. Amacım oradaki kullanılan tabloları backup alıp, onları inceleyerek hatalarını giderip yeni bir veritabanı ,rapolarlama sisstemi yapısı oluşturmak. aradaki bağlantı çokyavaş olduğu için 221 gb nin gelmesi haftalar alacak . Doğu ülkesi
teşekkür ederim
Selam,
siz eğer oradaki db üzerinden bir data mart oluşuturacaksanız, tabloların son kullanım son data dolum tarihi gibi bilgilere bakıpta verilere öncelik, önemlilik kazandırmanız daha zor olabilir. kısaca bi örnek vereyim, satış tablonu var, hergün kayıt giriliyor fakat satış tablosunun bir çok lookup tablosu olabilir, örnek olarak "satış türü" tablonuz vardır, burada satışın türü vb gibi kritik parametreler içeriyordur fakat baktığımızda bu tablo hem çok ufaktır hemde sık sık dml işlemi görmez.
dolayısıyla bir data mart oluşturulacaksa, objelerin son kullanım tarihine bakarak, objelere öncelik verilip işleme alınması doğru olmayabilir. benim önreim şöyle olur;
db nin full yedeğini alıp bir kerelik kendi ortamınıza taşıyın, sonrasında kaynak db yi archive log moduna alıp, incremental backup ile günlük olarak offline db yi güncelleyebilirsiniz. bu yöntemle hem tüm verileri bir kerede almış olursunuz, incremental backup ilede hergün sadece db de olan değişiklikleri hızlı bir şekilde offline db ye implement etmiş olursunuz. incemental backup günde 200 mb olsun diyelim, sadece günlük 200 mb download ile tüm veriyi alırsınız.
sonrasında bu verilerden data mart yapıp kendi işlemlerinizi yapabilirsiniz.
ayrıca objelerin de son dml vs görmek isterseniz aşağıdaki gibi bi sorgular var veya sizde tüm tabloları gezip datetime alanının max ını alarakta kendiniz bi yapı oluşturabilirsiniz.
tablo_adı , max(datetime) as son kayit tarihi
sales bugün
purchase dun
vs gibi.
https://sqlandme.com/2014/03/11/sql-server-how-to-get-last-accessupdate-time-for-a-table/
Merhabalar ,
Cevabınız için çok teşekkür ederim. Önerilerinizi değerlendirip uygulamayı deneyeceğim.
Teşekkür ederim.
Saygılarımla
Sinan
Selam,
kolay gelsin.