Forum
Arkadaşlar merhaba;
Elimde SQL 2000 e ait bir database var.Database deki tüm tabloların içini boşattım, ancak database in mdf dosyası sanki hiçbirşey silmemişim gibi hala eski boyutunda.log dosyasını zaten temizlemiştim.
Bu mdf dosyasının boyutunu nasıl düşürebilirim acaba?
Mrb..
Datayı Shrınk yapman lazım
BACKUP LOG DATABASEADI WITH TRUNCATE_ONLY .
Dbcc shrinkfile(Logo_Log, 50)
cyberanger tşk ama bahsettiğin işlem log dosyasını küçültür yani ldf dosyasını.
ben mdf dosyasından bahsediyorum dikkat edersen...
USE [DATABASE]
GO
DBCC SHRINKFILE (N'DATABASE_Data' , 0, TRUNCATEONLY)
GO
bununla mdfyi shrink edebilirsin.
Webeffect tşk ederim
bahsettiğiniz şekilde query analyzer dan çalıştırdım komutu ancak boyutta bir değişme olmadı.
ekstra birşey daha mı yapmamız gerekiyor acaba
sp_spaceused çalıştırıp sonucunu gönderir misin
Evet 2.5GB boş alan var gözüküyor. Bir de shrinkdatabase deneyelim shrinkfile yerine
DBCC SHRINKDATABASE (database_adi, 10)
işe yaramadı Turgay hocam.
ilginize tşk.
oke durum büyük ihtimal şundan kaynaklanıyor.
Extent'ler(8 page=1 extent = 64KB) reserve edilmiş ama çok az bir kısmı(1 page dahi kullanılsa) kullanıldığı için release edemiyoruz.
Bu da fragmentation dan kaynaklanıyor.
2 işlem deneyeceğiz. Önce tüm table'lar için Index'leri DBCC DBREINDEX ile defrag yapmaya çalışacağız. Eğer olmazsa clustered index'siz tabloları belirleyip bunlara cluster index tanımlayıp daha sonra sileceğiz.
Önce 1.yöntemi deneyelim.
Başlamadan önce database backup'ı alalım.
daha sonra aşağıdaki komutu çalıştır.
declare
@str varchar(max)select
@str=''select
@str=@str + 'DBCC DBREINDEX ('''+name+''','''',100) ' +char(10) + 'GO' + char(10) from sys.tablesSorgu sonucu çıkan sorguyu DB de çalıştıralım
daha sonra sp_spaceused u çalıştırdığında unused ın azalıp unallocated space in artmış olması lazım.
eğer böyle olursa database shrink i tekrar yap, eğer olmazsa 2.yönteme geçeceğiz.
Turgay hocam yazdığınız scripti nerede çalıştıracaz?
SQL Query analyzer da çalıştırdım ama hata verdi.Sonuç şöyle :
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'max'.
Server: Msg 137, Level 15, State 1, Line 5
Must declare the variable '@str'.
Server: Msg 137, Level 15, State 1, Line 5
Must declare the variable '@str'.
Server: Msg 137, Level 15, State 1, Line 7
Must declare the variable '@str'.
Tablonun içinde çalıştırdım gene hata verdi.
2008 alışkanlığı varchar(max) yapmışım ondan hata verdi.
select
'DBCC DBREINDEX ('''+name+''','''',100) ' from sys.tablesşu sorgu sonucunda gelen kolonun tamamını seçip yeni bir query analyzer kısmında çalıştır. Bu index lerinin tamamını organize edcektir.
İşlemlere başlamadan önce backup almayı unutma
Bu sorguyu query analyzer da çalıştırdım.Sonuç şöyle ;
Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'sys.tables'.
Bu sorguyu query analyzer da çalıştırdım.Sonuç şöyle ;
Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'sys.tables'.
2000de bu tablonun adı farklı. o yüzden bu hatayı veriyor.
sys.tables yerine şunu yazıp denermisin; dbo.sysobjects
2000 den iyice kopmuşuz artık 🙂
sys.tables yerine şunu kullanır mısın
sysobjects where type='U'
arkadaşlar konu günceldir.
yardımlarınızı bekliyorum.