Forum

SQL 2000 de databas...
 
Bildirimler
Hepsini Temizle

SQL 2000 de database deki gereksiz verileri silerek boyutu düşürmek

7 Yazılar
4 Üyeler
0 Reactions
844 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Arkadaşlar merhaba

SQL 2000 kullanıyorum.Elimde 7 GB lık bir database var.

 databasedeki hangi table ne kadar yer kaplıyor şu an görüyorum.

declare @id    int           
declare @type    character(2)        
declare    @pages    int           
declare @dbname sysname
declare @dbsize dec(15,0)
declare @bytesperpage    dec(15,0)
declare @pagesperMB        dec(15,0)

create table #spt_space
(
    objid        int null,
    rows        int null,
    reserved    dec(15) null,
    data        dec(15) null,
    indexp        dec(15) null,
    unused        dec(15) null
)

set nocount on

-- Create a cursor to loop through the user tables
declare c_tables cursor for
select    id
from    sysobjects
where    xtype = 'U'

open c_tables

fetch next from c_tables
into @id

while @@fetch_status = 0
begin

    /* Code from sp_spaceused */
    insert into #spt_space (objid, reserved)
        select objid = @id, sum(reserved)
            from sysindexes
                where indid in (0, 1, 255)
                    and id = @id

    select @pages = sum(dpages)
            from sysindexes
                where indid < 2
                    and id = @id
    select @pages = @pages + isnull(sum(used), 0)
        from sysindexes
            where indid = 255
                and id = @id
    update #spt_space
        set data = @pages
    where objid = @id

    /* index: sum(used) where indid in (0, 1, 255) - data */
    update #spt_space
        set indexp = (select sum(used)
                from sysindexes
                where indid in (0, 1, 255)
                and id = @id)
                - data
        where objid = @id

    /* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */
    update #spt_space
        set unused = reserved
                - (select sum(used)
                    from sysindexes
                        where indid in (0, 1, 255)
                        and id = @id)
        where objid = @id

    update #spt_space
        set rows = i.rows
            from sysindexes i
                where i.indid < 2
                and i.id = @id
                and objid = @id

    fetch next from c_tables
    into @id
end

select top 25
    Table_Name = (select left(name,25) from sysobjects where id = objid),
    rows = convert(char(11), rows),
    reserved_KB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
    data_KB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
    index_size_KB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
    unused_KB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
       
from     #spt_space, master.dbo.spt_values d
where     d.number = 1
and     d.type = 'E'
order by reserved desc

drop table #spt_space
close c_tables
deallocate c_tables

Sorgu sonuçları şöyle

 

 benim bu databese deki gereksiz işgal edilen alanı boşaltarak database boyutunu düşürmem gerek çünkü program yavaşladı.

Anladığım kadarıyla UNUSED_KB alanı boşaltılabilecek alanı gösteriyor.

Bununla ilgili ne yapabilirim?

Not: Database transaction log dosyasını zaten temizliyorum.Bahsettiğim temizlik mdf dosyasıyla ilgili.

 
Gönderildi : 05/12/2011 14:28

(@sinankahraman)
Gönderiler: 5224
Illustrious Member
 

Silmek yerine shrink işlemi ile küçültebilirsiniz.

 
Gönderildi : 07/12/2011 11:56

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

shrink işlemi  mdf dosyası üzerinde etkilimi?

Ben shrink i log dosyalarında etkili diye biliyorum.

 
Gönderildi : 07/12/2011 12:12

(@muratsoydan)
Gönderiler: 177
Reputable Member
 

evet ancak shrink islemi ile kucultebilirsin  mdf 'in cok kuculdugunu goreceksin.ben sık sık kullanmak zorunda kalıyorum.

 
Gönderildi : 07/12/2011 22:24

(@tolgaasik)
Gönderiler: 383
Illustrious Member
 

Merhaba;

Shrink işlemi mdf dosyası üzerinde kesinlikle etkili ve mdf file 'ını çok küçültecektir. Am bu işlemden önce full backup, sonrasında da transaction log backup alman gerekir. Full Backup şart değil ama yine de alırsanız, iyi olur.

Saygılarımla .

 
Gönderildi : 07/12/2011 23:00

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

hangi komutla yapıyorsunuz örnek verebilirmisiniz.

ben database shrink ediyorum ama pek birşey farketmiyor MDF üzerinde...

 
Gönderildi : 08/12/2011 20:36

(@tolgaasik)
Gönderiler: 383
Illustrious Member
 

Merhaba;

SQL 2005 üzerindeki bir database de TRN log backup aldıktan sonra aşağıdaki komutları uygulayıp ,db'yi inanılmaz küçültmüştük.

Değişkenlerinizi (DB Name, DB TRN File Name) tanımlayıp ,aşağıdaki komutları kullanabilirsiniz.

DBCC SHRINKFILE(@nomlog, 200)

BACKUP LOG @nomdb WITH TRUNCATE_ONLY

DBCC SHRINKFILE(@nomlog, 200)

Ya da MSDN linkini inceleyebilirsiniz, size fikir verebilir.

( http://msdn.microsoft.com/en-us/library/ms190488%28v=SQL.90%29.aspx)

Saygılarımla.

Normal
0

21

false
false
false

TR
X-NONE
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}

 
Gönderildi : 09/12/2011 02:17

Paylaş: