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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
13/12/2004 - 13:39 | Informe spam
"Angel Mateos" wrote in message news::
¿Hay alguna manera de controlar y forzar el crecimiento de la BBDD de
manera
que no se ejecute automáticamente? ¿Alguna Stored procedure?




ALTER DATABASE ... MODIFY FILE y opciones FILENAME, SIZE, FILEGROWTH, y
MAXSIZE

Gustavo Larriera, MVP SQL
http://sqljunkies.com/weblog/gux

Este mensaje se proporciona "como está" sin garantías de ninguna clase,
y no otorga ningún derecho / This message is provided "AS IS" with no
warranties expressed or implied, and confers no rights.
Respuesta Responder a este mensaje
#3 Maxi
13/12/2004 - 13:40 | Informe spam
Hola, si quieres hacerlo de forma manual deberias aplicar un job con el
ALTER DATABASE. De todas maneras es una tecnica que no te la recomiendo
mucho, porque puede ser peligrosa :(

Porque no quieres que Sql lo haga de forma automatica?


Salu2
Maxi


"Angel Mateos" escribió en el mensaje
news:
¿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


Respuesta Responder a este mensaje
#4 Angel Mateos
13/12/2004 - 13:57 | Informe spam
Gracias, es lo que buscaba.


"qwalgrande" <qwalgrande*nospam*@yahoo.es> escribió en el mensaje
news:
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
>
>
>
Respuesta Responder a este mensaje
#5 Maxi
13/12/2004 - 14:03 | Informe spam
Aja, y porque no empezamos por ver ese error ;)


Salu2
Maxi


"Angel Mateos" escribió en el mensaje
news:
Por que me da un error en el servidor al parecer justo después de crecer
la
BBDD.

A ver si lo puedo publicar.

Saludos


"Maxi" escribió en el mensaje
news:
Hola, si quieres hacerlo de forma manual deberias aplicar un job con el
ALTER DATABASE. De todas maneras es una tecnica que no te la recomiendo
mucho, porque puede ser peligrosa :(

Porque no quieres que Sql lo haga de forma automatica?


Salu2
Maxi


"Angel Mateos" escribió en el mensaje
news:
> ¿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
>
>






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida