Forzar el crecimiento de la BBDD

13/12/2004 - 12:55 por Angel Mateos | Informe spam
¿Hay alguna manera de controlar y forzar el crecimiento de la BBDD de manera
que no se ejecute automáticamente? ¿Alguna Stored procedure?

Gracias por adelantado
 

Leer las respuestas

#1 qwalgrande
13/12/2004 - 13:39 | Informe spam
Hola.

Puedes consultar qué hueco te queda en el fichero para decidir luego si lo
incrementas o no. Por ejemplo, si te quedan menos de 50 Mb, entonces lo
incrementas. Todo ello metido dentro de un job que se ejecute a diario en
horas de poco trabajo y así te evitas que a un pobre usuario le toque esperar
a que crezca la base de datos en mitad de su sencilla transacción.

Para ampliar el tamaño de una base de datos:
ALTER DATABASE Test1
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)

Para consultar el tamaño, te paso un script que usando un procedimiento
almacenado temporal y DBCC showfilestats, comprueba el tamaño de cada base de
datos y te lo devuelve en un recordset. Adáptalo para tus necesidades.

Me despido aquí, el script es algo largo.

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

"Angel Mateos" wrote:

¿Hay alguna manera de controlar y forzar el crecimiento de la BBDD de manera
que no se ejecute automáticamente? ¿Alguna Stored procedure?

Gracias por adelantado



Preguntas similares