use sybsystemprocs go print 'Creando procedimiento almacenado ''sp_truncate_errorlog''...' go if exists( select * from sysobjects where name='sp_truncate_errorlog' ) drop proc sp_truncate_errorlog go /* ** sp_truncate_errorlog ** ** Descripcion: ** Trunca el log de errores de ASE y opcionalmente crea una copia de respaldo. ** ** Uso: ** [ exec ] sp_truncate_errorlog '' [, 'backup' ] ** Sin parémtros muestra la ayuda. ** ** Retorna: ** 0: Ejecucion exitosa ** -1: Errores de ejecucion ** ** Versión de ASE: ** 15.0 en Adelante ** ** Historia: ** Version Fecha Notas ** ======= =========== ========================================================= ** 0.1 May/10/2007 Version inicial ** ** Autor: ** Juan C. Avila, e-mail: javila@sybasease.info ** ** Legal: ** Antes de instalar y usar este software, por favor lea detenidamente ** el aviso sobre aspectos legales en http://www.sybasease.info/legal */ create procedure sp_truncate_errorlog @errorlog varchar(16384) = NULL, @opt varchar(15) = NULL as /* Variables locales */ declare @errorlog_bak varchar(16384), @sql varchar(16384), @ret_status int, @records int set @ret_status = 0 /* Si la opción es 'help' muestre la ayuda */ if @errorlog is NULL goto Usage /* Verifica que la opción especificada sea válida */ if lower( @opt ) not in ( NULL, 'backup' ) begin print 'Error: ''%1!'' is not a valid usage option.', @opt set @ret_status = -1 goto Usage end /* Se requiere rol 'sa_role' para ejecutar éste procedimiento */ if proc_role('sa_role') != 1 begin set @ret_status = -1 goto End_Proc end /* Opciones para la sesión */ if @@trancount > 0 begin /* 17260, "Can't run %1! from within a transaction." */ raiserror 17260, "sp_truncate_errorlog" return (1) end else set chained off set transaction isolation level 1 set nocount on /* Si las tablas proxy existen, eliminelas antes de continuar */ if exists( select * from sysobjects where name='ase_errorlog') drop table ase_errorlog if exists( select * from sysobjects where name='ase_errorlog_bak') drop table ase_errorlog_bak /* Crea la tabla proxy asociada el log de errores actual de ASE */ /* Nota: Se debe usar exec() ya que CREATE PROXY_TABLE no se permite dentro de un SP */ set @sql = 'create proxy_table ase_errorlog external file at '''+@errorlog+'''' exec( @sql ) if not exists( select * from sysobjects where name='ase_errorlog' ) begin print 'Error: Proxy table ''ase_errorlog'' was not created.' set @ret_status = -1 goto End_Proc end /* Si la opción es 'backup' ... */ if lower( @opt ) = 'backup' begin /* Define el nombre del archivo de respaldo con formato 'errorlog.AAAA.MM.DD' */ set @errorlog_bak = @errorlog + "." + convert( varchar(10), getdate(), 102 ) /* Crea la tabla proxy asociada a la copia del log de errores de ASE */ set @sql = 'create proxy_table ase_errorlog_bak external file at '''+@errorlog_bak+'''' exec( @sql ) if not exists( select * from sysobjects where name='ase_errorlog_bak' ) begin print 'Error: Proxy table ''ase_errorlog_bak'' was not created.' set @ret_status = -1 goto End_Proc end /* Copia el contenido del log de errores actual al archivo de respaldo */ set @sql = 'insert into ase_errorlog_bak select * from ase_errorlog set @records = @@rowcount' exec( @sql ) /* Elimina la tabla proxy asociada a la copia del log de errores de ASE. */ if exists( select * from sysobjects where name='ase_errorlog_bak' ) drop table ase_errorlog_bak print 'Sucessfuly copied %1! records from ASE errorlog to file ''%2!''.', @records, @errorlog_bak end /* Trunca el log de errores actual (asumiendo que se pudo crear...) */ set @sql = 'truncate table ase_errorlog' exec( @sql ) set @sql = 'select @records = count(*) from ase_errorlog' exec( @sql ) if @records = 0 print 'Successfuly truncated ASE errorlog ''%1!''.', @errorlog else begin print 'Error: ASE errorlog was not successfuly truncated.' set @ret_status = -1 goto End_Proc end goto End_Proc Usage: print 'Usage:' print '[ exec ] sp_truncate_errorlog '''' [, ''backup'' ]' print 'With no parameters shows this help.' End_Proc: /* Borra las tablas proxy */ if exists( select * from sysobjects where name='ase_errorlog' ) drop table ase_errorlog if exists( select * from sysobjects where name='ase_errorlog_bak' ) drop table ase_errorlog_bak return @ret_status go if @@error = 0 print 'Procedimiento almacenado ''sp_truncate_errorlog'' creado.' grant exec on sp_truncate_errorlog to sa_role go