Änderungen
Die Seite wurde neu angelegt: „= Extraction des benutzten Platzes aller Tabellen in allen Datenbanken = Mit diesem Skript kann ich eine Übersicht des Platzverbrauches aller Tabellen in all…“
= Extraction des benutzten Platzes aller Tabellen in allen Datenbanken =
Mit diesem Skript kann ich eine Übersicht des Platzverbrauches aller Tabellen in allen Datenbanken bekommen. Um die Daten für die einzelnen Tabellen zu bekommen wird die Funktion "sp_spaceused" benutzt. Mittels sp_msforeachtable und einem cursor über master..sysdatabases wird über alle Tabellen der [[SQL Server]] Instanz iteriert.
Das Skript selber habe ich in einem Beitrag des Forums [http://www.sqlservercentral.com/Forums/Topic476475-8-1.aspx www.sqlservercentral.com] gefunden.
== Anlegen des Ziels in Form einer Tabelle ==
<source lang="tsql">
CREATE TABLE tblTableData
(vchdatabasename varchar(256) NULL,
vchTableName VARCHAR(100) NOT NULL,
intRows INT NOT NULL,
vchReservedSpace VARCHAR(100) NOT NULL,
vchData VARCHAR(100) NOT NULL,
vchIndexSize VARCHAR(100) NOT NULL,
vchUnusedSpace VARCHAR(100) NOT NULL)
</source>
== Das Skript ==
In dem Skript wird die Tabelle vor jedem neuen Durchlauf gelöscht!
<source lang="tsql">
declare csr_db cursor for
select [name] from master..sysdatabases
where [dbid] >4
declare @cmd varchar(max)
declare @dbs varchar(256)
delete from [master].[dbo].[tblTableData]
open csr_db
fetch next from csr_db into @dbs
while @@fetch_status = 0
BEGIN
set @cmd = @dbs + '..sp_msforeachtable '' insert into master.dbo.tblTableData(vchtablename,introws,vchreservedspace,vchData,vchIndexSize,vchUnusedSpace) exec sp_spaceused ''''?'''' '''
exec(@cmd)
set @cmd = 'update master.dbo.tblTableData set vchdatabasename = ''' + @dbs + ''' where vchdatabasename is null'
exec(@cmd)
fetch next from csr_db into @dbs
END
close csr_db
deallocate csr_db
</source>
Mit diesem Skript kann ich eine Übersicht des Platzverbrauches aller Tabellen in allen Datenbanken bekommen. Um die Daten für die einzelnen Tabellen zu bekommen wird die Funktion "sp_spaceused" benutzt. Mittels sp_msforeachtable und einem cursor über master..sysdatabases wird über alle Tabellen der [[SQL Server]] Instanz iteriert.
Das Skript selber habe ich in einem Beitrag des Forums [http://www.sqlservercentral.com/Forums/Topic476475-8-1.aspx www.sqlservercentral.com] gefunden.
== Anlegen des Ziels in Form einer Tabelle ==
<source lang="tsql">
CREATE TABLE tblTableData
(vchdatabasename varchar(256) NULL,
vchTableName VARCHAR(100) NOT NULL,
intRows INT NOT NULL,
vchReservedSpace VARCHAR(100) NOT NULL,
vchData VARCHAR(100) NOT NULL,
vchIndexSize VARCHAR(100) NOT NULL,
vchUnusedSpace VARCHAR(100) NOT NULL)
</source>
== Das Skript ==
In dem Skript wird die Tabelle vor jedem neuen Durchlauf gelöscht!
<source lang="tsql">
declare csr_db cursor for
select [name] from master..sysdatabases
where [dbid] >4
declare @cmd varchar(max)
declare @dbs varchar(256)
delete from [master].[dbo].[tblTableData]
open csr_db
fetch next from csr_db into @dbs
while @@fetch_status = 0
BEGIN
set @cmd = @dbs + '..sp_msforeachtable '' insert into master.dbo.tblTableData(vchtablename,introws,vchreservedspace,vchData,vchIndexSize,vchUnusedSpace) exec sp_spaceused ''''?'''' '''
exec(@cmd)
set @cmd = 'update master.dbo.tblTableData set vchdatabasename = ''' + @dbs + ''' where vchdatabasename is null'
exec(@cmd)
fetch next from csr_db into @dbs
END
close csr_db
deallocate csr_db
</source>