Espacio utilizado por los ficheros de base de datos

27/01/2005 - 12:05 por Alberto Jimenez | Informe spam
Buenos dias,
Se puede saber como calcula el espacio asignado a los ficheros de una base
de datos que aparece en el Enterprise Manager, tanto el ocupado como el
libre y si es posible en que tablas del sistema los guarda, me imagino que
sera en la master o con algun procedimiento almacenado,
Muchas gracias a todos.

Preguntas similare

Leer las respuestas

#1 Tinoco
27/01/2005 - 13:29 | Informe spam
Alberto,

Para administrar el tamaño de los archivos, SQL Server maneja una estructura
de Extents y paginas, estas ultimas ocupan 8KB[8060 bytes], los datos son
almacenados en esta estructura muy similar a un disco duro, dejando espacio
libre cuando algo es modificado o eliminado.

De manera global se puede decir que el tamaño es definido por la sumatoria
del tamaño de las tablas e indices, y las tablas se definen por la sumatoria
del tamaño de sus columnas multiplicado por la cantidad de registros.

Para ver el tamaño de los archivos puedes utilizar:
* Enterprise manager
* sp_helpdb BD, para ver el tamaño de la BD y sus archivos.
* sp_spaceused, para ver el espacio usado y libre de una BD.

Tinoco
Colombia

"Alberto Jimenez" wrote:

Mostrar la cita
#2 Alberto Jimenez
27/01/2005 - 13:42 | Informe spam
Ticono,
Gracias
Pero lo que quiero sacar es la misma informacion que da el enterprise, esto
es separado por ficheros fisicos, que cantidad esta ocupada y que cantidad
esta libre.
"Tinoco" escribió en el mensaje
news:
Mostrar la cita
estructura
Mostrar la cita
espacio
Mostrar la cita
sumatoria
Mostrar la cita
base
Mostrar la cita
que
Mostrar la cita
#3 Salvador Ramos
27/01/2005 - 14:00 | Informe spam
Mira el procedimiento almacenado sp_spaceused

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Alberto Jimenez" escribió en el mensaje
news:%23c09t$
Mostrar la cita
#4 qwalgrande
27/01/2005 - 14:23 | Informe spam
Hola.

Creo que es la tercera o cuarta vez que respondo a lo mismo en el foro,
ahora que yo encantado de hacerlo las veces que haga falta con tal de echar
un cable.

Te adjunto lo que yo uso, que es una adaptación de algo que encontré ya no
me acuerdo donde. Es un procedimiento almacenado temporal que devuelve lo que
creo que vas buscando. Es un poco largo, así que me despido antes.

qwalgrande

use master
go

if exists (select * from dbo.sysobjects where id object_id(N'[dbo].[#sp_dbspaceall]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_dbspaceall]
GO


CREATE procedure #sp_dbspaceall(@all char(1)='N')
as

set nocount on

declare @cmd varchar(500)
declare @db varchar(128)

create table #results(FileType varchar(4) NOT NULL,
[Name] sysname NOT NULL,
Total numeric(9,2) NOT NULL,
Used numeric(9,2) NOT NULL,
[Free] numeric(9,2) NOT NULL,
dbname sysname NULL)

create table #data(Fileid int NOT NULL,
[FileGroup] int NOT NULL,
TotalExtents int NOT NULL,
UsedExtents int NOT NULL,
[Name] sysname NOT NULL,
[FileName] varchar(300) NOT NULL)

create table #log(dbname sysname NOT NULL,
LogSize numeric(15,7) NOT NULL,
LogUsed numeric(9,5) NOT NULL,
Status int NOT NULL)

If @all='N' /* just the current database */
begin
/* Get data file(s) size */
insert #data
exec('DBCC showfilestats')

/* Get log file(s) size */
insert #log
exec('dbcc sqlperf(logspace)')

insert #results(FileType,[Name],Total,Used,[Free])
select 'Data',
left(right([FileName],charindex('\',reverse([FileName]))-1),
charindex('.',right([FileName],
charindex('\',reverse([FileName]))-1))-1),
CAST(((TotalExtents*64)/1024.00) as numeric(9,2)),
CAST(((UsedExtents*64)/1024.00) as numeric(9,2)),
(CAST(((TotalExtents*64)/1024.00) as numeric(9,2))
-CAST(((UsedExtents*64)/1024.00) as numeric(9,2)))
from #data

union all

select 'Log',dbname+'_log',LogSize,
((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize)
from #log
where dbname = db_name()

select FileType,[Name],Total,Used,[Free]
from #results order by FileType

drop table #data
drop table #log
drop table #results

return
end
else
begin

/* Get data file(s) size */
declare dcur cursor local fast_forward
for
select CATALOG_NAME
from INFORMATION_SCHEMA.SCHEMATA
where has_dbaccess(CATALOG_NAME) = 1

open dcur

fetch next from dcur into @db

while @@fetch_status=0
begin

set @cmd = 'use ' + @db + ' DBCC showfilestats'
insert #data
exec(@cmd)

insert #results(FileType,[Name],Total,Used,[Free],dbname)
select 'Data',

left(right([FileName],charindex('\',reverse([FileName]))-1),
charindex('.',right([FileName],
charindex('\',reverse([FileName]))-1))-1),
CAST(((TotalExtents*64)/1024.00) as numeric(9,2)),
CAST(((UsedExtents*64)/1024.00) as numeric(9,2)),
(CAST(((TotalExtents*64)/1024.00) as numeric(9,2))
-CAST(((UsedExtents*64)/1024.00) as numeric(9,2))),
@db
from #data

delete #data

fetch next from dcur into @db

end
close dcur
deallocate dcur

/* Get log file(s) size */
insert #log
exec('dbcc sqlperf(logspace)')

insert #results(FileType,[Name],Total,Used,[Free],dbname)
select 'Log',dbname+'_log',LogSize,
((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize),
dbname
from #log


select dbname,FileType,[Name],Total,Used,[Free]
from #results order by dbname,FileType

drop table #data
drop table #log
drop table #results

return

end

GO

exec #sp_dbspaceall 'Y'
GO

drop procedure #sp_dbspaceall

GO



"Alberto Jimenez" wrote:

Mostrar la cita
#5 Alberto Jimenez
27/01/2005 - 15:06 | Informe spam
Muchas gracias esto es lo que estaba buscando.
saludos.
alberto
"qwalgrande" <qwalgrande*nospam*@yahoo.es> escribió en el mensaje
news:
Mostrar la cita
echar
Mostrar la cita
que
Mostrar la cita
esto
Mostrar la cita
cantidad
Mostrar la cita
son
Mostrar la cita
sumatoria
Mostrar la cita
una
Mostrar la cita
el
Mostrar la cita
imagino
Mostrar la cita
Ads by Google
Search Busqueda sugerida