Publi: envíosCertificados: ahorra más del 60 % en tu partida de envíos. 100% legal
Facebook Twitter Google +1     Admin

Se muestran los artículos pertenecientes al tema Casos diarios.

Procedemiento para matar todas las sesiones de un usuario

Este script lo encontre en internet, lo probe en un ambiente controlado y sirve muy bien, si lo corres sin parametro (login name) te mata todas las sesiones de un servidor, esto puede ser util para cuando vas a re-iniciar el servidor y no lo quieres hacer de la forma "ruda" (shutdown with no_wait) o si le pones el parametro del nombre del login mata todas las sesiones de ese usuario en particular.

Nota: No aparece todo el codigo, porque? no lo se, si te interesa mandame un correo y te lo envio o busca los SP de Rob Verschoor

create procedure sp__kill_users
 @login varchar(30)

as
 begin
  declare @p int, @cmd varchar(12), @suid int
  if proc_role(’sa_role’) = 0  --We must have sa_role to exec this SP
  begin
   print ’You need ’sa_role’ to run this procedure’
   return 0
  end
  select @suid = NULL
  if @login != ’kill_m_all’
 begin
  select @suid = suser_id(@login) --check if this login exist
  if @suid = NULL
  begin
   print "’%1’ is not a valid login name", @login
   return 0
  end
 end
select spid, suid --select the victim’s spid
 into #killer
 from master..sysprocesses
 where suid = isnull (@suid, suid)
 and suid != 0
 and spid != @@spid

print "Found %1! spids for login ’%2!’", @@rowcount, @login

while 1 = 1 --process the selected
 begin
 select rowcount 1
 select @p  = spid, @login = suser_name(suid)
 from #killer
 if @@rowcount = 0 break  --exit loop when ready

Matar un proceso en paralelo

Muchas veces se corren procesos en paralelo dentro de nuestro servidor, identificando cual es el proceso padre puedes matar todos los procesos hijos identificados por el cmd 'WORKER PROCESS', algunas veces (no es muy comun) matan el proceso padre pero los hijos siguen ejecutandose, a estos procesos se les llama "zombies", la unica forma de eleiminarlos es re-iniciando el servidor. Para evitar que esto pase, mi recomendacion es matar todos los procesos que esten en paralelo, estos los puedes identificar en sp_who o sysprocesses en el campo 'fid'

La siguiente consulta te va a mostrar todos los procesos que este corriendo en paralelo.

select
 fid 'FAMILY ID', spid 'SPID',  substring(suser_name(suid), 1, 15) LOGIN,
 cmd 'COMMAND', physical_io,
 convert(char(8), loggedindatetime, 108) 'LOGGED ID'
from master..sysprocesses
where fid > 0
order by fid, spid
go


¿Y esta publicidad? Puedes eliminarla si quieres

Tunning con las Tablas MDA

La mejor herramienta de ASE para checar el performances de un servidor es el procedimiento de sp_sysmon aunque su salida es muy grande y muchas veces dificil de entender para alguien nuevo, por lo que puedes utilizar de igual manera las tablas MDA dependiendo de que es lo que quiere hacer.

Has tus queries y busca la mejor forma de optimizar tu servidor

ACCESS METHOD
monOpenObjectActivity

PROCESS TUNNING
monProcess, monProcessActivity, monSysStatement, monProcesssStatement, monSysSQLText, monProcessSQLtext

SERVER TUNNING
monEngine, monDataCache, monCachePool, monDevicIO, monState, monProcessWaits, monWaitEventIO

DATABASE TUNNING
monOpenDatabases, monCacheObject, monSysWorkerThread

Como encontar el archivo de arranque?

Muchas veces es muy dificil identificar en donde se encuentra almacenado nuestro archivo de arranque, aunque la gran mayoria de las veces lo encontramos en $SYBASE/$SYBASE_ASE/install pero este archivo lo puedes encontrar en cualquier otro path por lo que antes de tirar el servidor mejor encuentra el archivo correcto

ps -ef | grep RUN
ps auwwx | grep RUN
Esto depende del tipo de servidor en el que este instalado ASE

En caso de que hallas perdido el password de SA no te asustes o te desesperes, cuando re-inicies el servidor haslo con el trace 3605 (-T3605) este te va a escribir el password en el error log

Como saber el espacio en LOG por base de datos?

Muchas veces tenemos alarmas de que el log de transacciones de una base de datos esta casi lleno pero no nos muestra mas informacion el correo el ticket, en ese escenario es bueno ejecutar el siguiente query el cual nos va a mostrar el espacio disponible en paginas en el LOG SEGMENT

select name 'DATABASE NAME',
 lct_admin('num_logpages', dbid) 'USED PAGES',
 lct_admin('logsegment_freepages', dbid) 'AVAILABLE PAGES',
 str(lct_admin('num_logpages', dbid) * 100.0 /  lct_admin('logsegment_freepages', dbid), 5, 1) 'CURRENT % OF LOG TRANSACTION'
from master..sysdatabases
go

Como reiniciar SOLO una base de datos

Hay un comando DBCC que no esta documentado que puede ser ejecutado en las versiones ASE 12.5.4 y de la 15.0.2 en adelante. Este DBCC puede ejecutarse cuando tengamos un proceso zombie o que el log de esa base de datos esta lleno.

1> dbcc help(dbreboot)
2> go
dbreboot (report | reboot | reboot_norecovery | shutdown | shutdown_load | restart | restart_norecovery, dbname1 [, dbname2 ...])
Reboot the specified DATABASES.
1> dbcc dbreboot(reboot,tb2)
2> go
----------Shutting Down Database ’tb2’ ----------
----------Re-starting Database ’tb2’ With Recovery ----------
Recovering database ’tb2’.
Started estimating recovery log boundaries for database ’tb2’.
Database ’tb2’, checkpoint=(1051, 9), first=(1051, 8), last=(1051, 9).
Completed estimating recovery log boundaries for database ’tb2’.
Started ANALYSIS pass for database ’tb2’.
Completed ANALYSIS pass for database ’tb2’.
Started REDO pass for database ’tb2’. The total number of log records to process is 2.
Completed REDO pass for database ’tb2’.
Recovery of database ’tb2’ will undo incomplete nested top actions.
Started UNDO pass for database ’tb2’. The total number of log records to process is 2.
Undo pass of recovery has processed 1 incomplete transactions.
Completed UNDO pass for database ’tb2’.
Started filling free space info for database ’tb2’.
Completed filling free space info for database ’tb2’.
Started cleaning up the default data cache for database ’tb2’.
Completed cleaning up the default data cache for database ’tb2’.
Recovery complete.
Database ’tb2’ is now online.
----------Operation on Database ’tb2’ Completed Successfully ----------



Como correr procesos en background

Muchas veces tienes que hacer varios procesos que por motivos de seguridad tienen que ejecutarse pero corres riesgo de que se valla la luz o algun problema en la red, la siguiente forma ejecutara tus tareas en background y no tendras problema alguno, para checar este proceso solo corre jobs en UNIX y te mostrara las tareas

nohup isql -U sa -S dataserver -P my_password -i inputfile -o outputfile  &

Parametros Dinamicos que SI es necesario RE-INICIAR el servidor

En algunas ocaciones vas a estar recibiendo muchas alertas de los parametros de "open indexes" y "open objects" y aunque estos parametros son dinamicos TIENES que re-iniciar el servidor para evitar spinlocks en el DS

PRINT ’===============================================================================’
go
PRINT ’ Open Indexes Status ’
go
PRINT ’===============================================================================’
go
sp_countmetadata "open indexes"
go
sp_monitorconfig "open indexes"
go
sp_configure "number of open indexes"
go
PRINT ’===============================================================================’
go
PRINT ’ Open Object Status ’
go
PRINT ’===============================================================================’
go
sp_countmetadata "open objects"
go
sp_monitorconfig "open objects"
go
sp_configure "number of open objects"
go

Como saber cuando fue la ultima vez que se re-inicio el servidor

Tenemos diferentes formas de saber cuando fue la ultima vez que se re-inicio el servidor.

La primera de ellas es con:

select @@boottime

La segunda es haciendo un sp_helpdb a tempdb (tempdb siempre se re-crea cuando sube el DS)

1> sp_helpdb tempdb

2> go

name                     db_size       owner                    dbid   created            status                                            

 ------------------------ ------------- ------------------------ ------ ------------------ ------------------------------------------------------------------------------------------------------

tempdb                       5003.0 MB sa                            2 Nov 20, 2010       select into/bulkcopy/pllsort, trunc log on chkpt, abort tran on log full

La tercera es checar en el error log

more errorlog_name | grep "Warning: There is no valid license for ASE server product"

00:00000:00000:2010/11/20 01:23:40.15 kernel  Warning: There is no valid license for ASE server product. Server is booting with all the option features disabled.

Trace 3604,302,310,317

Los siguientes comandos o bandares DBCC te ayudan a extraer mas informacion sobre un proceso en particular

3604 - Te imprime la informacion en la pantalla

302   - Te imprime la informacion sobre la seleccion de indices

310   - Te checa el I/O aunque su salida es muy confusa de entender

317   - Te muestra el "Plan de Trabajo" de un proceso

dbcc traceon(3604,302,310,317)

Porque usar las tablas MDA?

Las tablas de monitoreo (MDA tables) te ayudan a extraer mas informacion de los procesos que se estan ejecutando, igual puedes extraer informacion de la forma tradicional trace on, dbcc, sp_showplan, sp_sysmon, etc. Pero las tablas de monitoreo impactan menos al servidor

sp_mda_help cach
select * from master..monProcessActivity --Es paresido a sysprocesses pero con mas info
select * from master..monProcessObject  --Te muestra la informacion de que objeto esta siendo usado por cada proceso
select * from master..monProcessProcedures --Te muestra que procedimientos o triggers esta ejecutando un proceso
select * from master..monWaitEventInfo  --Te muestra informacion de porque evento esta esperando terminar
select * from master..monWaitClassInfo  --Te muestra informacion de porque esta esperando
select * from master..monProcess  --Te muestra que tipo de sentencia ejecuta un proceso
select * from master..monProcessStatement --Te complementa la informacion de proceso
select * from master..monProcessSQLText  --Te muestra el codigo SQL que se esta ejecutando
select * from master..monSysSQLText  --Te muestra el codigo SQL que se halla ejecutado pero no se halla completado
select * from master..monSysPlanText  --Te muestra el show plan
select * from master..monErrorLog  --Te muestra los mensages recientes en el error log


select ps.SPID, ps.CpuTime, pst.LineNumber, pst.SQLText  --Que proceso esta actualmente usando CPU y que esta haciendo
 from master..monProcessSQLText pst, master..monProcessStatement ps
 where ps.SPID = pst.SPID
 and ps.CpuTime = ( select max(CpuTime) from master..monProcessStatement)
order by SPID, LineNumber
go

select object_name(ObjectID, DBID), Operations   --Muestra las tablas y procedimientos mas utilizados
 from master..monOpenObjectActivity
 where IndexID = 0
order by 2 desc
go

Como configurar las tablas MDA

Sybase cuenta con algunas tablas de monitoreo que te ayudan a checar el performances de tu servidor.

El primer paso es configurar el parámetro ‘enable cis’ a 1

sp_configure ’enable cis’, 1
go

Añade un alias a ’loopback’

use master
go
sp_addserver loopback, null, @@servername
go

Segundo paso instalar las tablas

isql -U sa -P pachito -S myserv  -i $SYBASE/$SYBASE_ASE/scripts/installmontables

Realiza una prueba de las tablas de monitoreo

select * from master..monState
go

Por ultimo activa todos los parametros de configuracion

sp_configure "enable monitoring", 1
go
sp_configure "sql text pipe active", 1
go
sp_configure "sql text pipe max messages", 100
go
sp_configure "plan text pipe active", 1
go
sp_configure "plan text pipe max messages", 100
go
sp_configure "statement pipe active", 1
go
sp_configure "statement pipe max messages", 100
go
sp_configure "errorlog pipe active", 1
go
sp_configure "errorlog pipe max messages", 100
go
sp_configure "deadlock pipe active", 1
go
sp_configure "deadlock pipe max messages", 100
go
sp_configure "wait event timing", 1
go
sp_configure "process wait events", 1
go
sp_configure "object lockwait timing", 1
go
sp_configure "SQL batch capture", 1
go
sp_configure "estatement statistics active", 1
go
sp_configure "per objects statistics active", 1
go
sp_configure "max SQL text monitored", 2048
go

En que plataforma esta Instalado ASE

Con un simple query podras conocer en que plataforma esta instalado tu servidor ASE.

select name from master..spt_values where type = ’E’ and number = 1
go

Como saber que tipo de esquema de bloqueo estas usando?

Las siguientes consultas te van a dar una lista de las tablas y el tipo de esquema, el primero te muestra los que esten por datapage y datarow, el segundo te muestra las que que tengan el esquema de allpages.

select name, sysstat2 from sysobjects where type = ’U’ and (sysstat2 & 16384 = 16384 or sysstat2 & 32768 = 32768 )
go

select name, sysstat2 from sysobjects where type = ’U’ and sysstat2 & 8192 = 8192
go

Como saber a que hora se ejecuto el ultimo full backup?

Para saber a que hora se ejecuto el ultimo full backup puedes verlo en el error log del backup server, pero si no quieres hacerlo asi pues checalo directamente en el servidor.

dbcc traceon(3604)
go
dbcc dbtable("model")
go

select name,dbid,dumptrdate from sysdatabases
go

Backup de objetos

Si quieres hacer un backup de un objeto puedes utilizar el ddlgen, se encuentra dentro de los binarios de Sybase..Para ejecutarlo tienes que setear una variable en UNIX setenv SYBROOT $HOME/sql_server as echo $SYBASE.  Esto es necesario para cuando necesitas hacer copia de los objetos

ddlgen -Usa -Pmypassword -Sservidor -TP -N Object_name -D Database -O output_file

U is the user
P the password
T the object type , you have:

Object type Description
C cache
D default
DB database
DBD database device
DPD dump device
EC execution class
EG engine group
GRP group
I index
L login
P stored procedure
R rule
RO role
RS remote server
SGM segment
TR trigger
U table
UDD user-defined datatype
USR user
V view
XP extended stored procedure


-N the name of the object to extract
-D database name
-O output file



Como saber si un proceso en SLEEPING sigue ejecutandose

Es muy comun encontrarnos con procesos en estado "SLEEPING" pero que pasa cuando uno de ellos pertenece a un SA? Primero es preferible preguntarle a alguno de nuestros compañeros si esta ejecutando algo, en caso de lo contrario hay que revizar que hace mediante varios comandos diferentes (SQL text, show plan, MDA tables, etc) pero el siguiente query va a mostrar si el proceso sigue ejecutandose de forma satisfactoria. Mientras el physical_io este cambiando quiere decir que se sigue ejecutando

select db_name(dbid) ’DataBase’,spid,cmd,physical_io from master..sysprocesses where spid=SPID --see if SLEEPING processes are working or not
go

Como alterar un tipo de columna en la version ASE 11.9

Hay un bug en esta version por lo que no puedes hacer uso del "alter table modify". Pero hay muchas formas de hacerlo, si la tabla es pequeña crea una tabla con la misma estructura pero con el nuevo tipo de columna y cargar la informacion (select * into testable2 from dbmike..testable). Si la tabla es muy grande has un BCP out/in. Ten MUCHO cuidado con los campos de tipo text e image

Como revizar el Backup Server

Muchas veces nos llegan warnings o alarmas del backup server al conectarte al servidor el primer paso seria ejecutar en SYB_BACKUP...sp_who para verificar los procesos del BS, si este comando no te muestra un resultado entonces conectate al host donde se encuentra el servidor de sybase y ejecuta el shell de showserver este te muestra todos los procesos que esta ejecutando Sybase, en caso de que tampoco te muestre al BS entonces conectate al servidor y has un backup de la BD de menor espacio (dump database model to "compress::/tmp/model.dmp") si te permite ejecutar el dump quiere decir que el BS trabaja de forma correcta.

En caso de que te muestre un mensaje de error sal del servidor y ve a UNIX cd $SYBASE/version/install y encuentra su archivo de arranque y prende el backup server startserver -f BackupServer

Best Practice

Mantener una copia periodica (preferiblemente fuera de linea) de estas tablas de systema: sysusages, sysdatabases, sysdevices, sysloginsroles y syslogins. Esto te va ayudar a que caso de desastre o corrupcion estas tablas te ayudaran mucho.

select * from master..sysusages order by vstart
go
select * from master..sysdatabases
go
select * from master..sysdevices
go
select * from master..sysloginroles
go
select * from master..syslogins
go

Cuando ejecutes un script del desarrollador y te arroje un mensaje de error que no has visto o no conoces consulta la tabla de sysmessages, en esta tabla encontraras la ayuda necesaria para conocer todos los mensajes de error que tiene Sybase

Nota:Todos los mensajes de error con nivel entre 19 y 24 son de gravedad.

1> select error, severity, description from master..sysmessages where error >=number and langid is null
2> go

Cuando tienes un proceso en estado de LOG SUSPEND y te este llenando tu log de transacciones y ya hayas informado al grupo de la aplicacion y no has recivido ningun correo y la base de datos es critica, el siguiente comando te va a servir a abortar esta transaccion ya que el comando KILL no funciona en este estado

select lct_admin ("abort", SPID)
go

Antes de hacer un refresh en una BD procura sacar una copia de las siguientes tablas ya que muchas veces despues de un refresh los usuarios no hacen match con los logins debido a que tienen diferente SUID. Despues de terminar la carga de datos verifica si tienes permitido actualizar tablas de sistemas (sp_configure), en caso de que te este negado cambia este parametro es dinamico. Despues trunca las mismas tablas y ejecuta un BCP in para que los usuarios tengan los mismos privilegios que tenian antes pero con los nuevos datos

bcp mike.sysusers out "/tmp/mike.22012011.sysusers.sql" -Usa -Sservidor -Ppassword
bcp mike.sysalternates out "/tmp/mike.22012011.sysalternates.sql" -Usa -Sservidor -Ppassword
bcp mike.sysprotects out "/tmp/mike.22012011.sysprotects.sql" -Usa -Sservidor -Ppassword

bcp mike.sysusers in "/tmp/mike.22012011.sysusers.sql" -Usa -Sservidor -Ppassword
bcp mike.sysalternates in "/tmp/mike.22012011.sysalternates.sql" -Usa -Sservidor -Ppassword
bcp mike.sysprotects in "/tmp/mike.22012011.sysprotects.sql" -Usa -Sservidor -Ppassword

Muchas veces tienes que hacer un cambio o un release en una base de datos y el equipo de esa aplicacion te proporciona los archivos y te dice en donde estan almacenados. En el mejor de los escenarios podras ejecutarlos sin ningun inconveniente, pero algunas veces vas a tener que revizar algunas cosas. Primero si es posible pideles que te den todos los privilegios en el folder y los archivos para que puedas leer, escribir y ejecutar (chmod), segundo es importante revizar en que formato se encuentran, no es conveniente usar el comando more ya que este no te va a mostrar como estan utiliza vi. En caso de que esten en formato de Windowns (sabras que estan en formato de windows por esto ^M), no te preocupes ya que si tienes los privilegios solo vuelve a crear los archivos en UNIX formato con el comando dos2unix.

Ejemplo:

sybase@s-apps21-d(283)% vi tests.dbo.uvo_master_asset.sql

use Mike^M
go^M
^M
CREATE TABLE dbo.uvo_master_asset^M
(^M
    asset_id        int         NOT NULL,^M
    asset_name      varchar(50) NOT NULL,^M
...

sybase@s-apps21-d(283)% dos2unix tests.dbo.uvo_master_asset.sql tests.dbo.uvo_master_asset.sql.1
sybase@s-apps21-d(283)% vi tests.dbo.uvo_master_asset.sql

use Mike
go

CREATE TABLE dbo.uvo_master_asset
(
    asset_id        int         NOT NULL,

 ...

Algunas veces nos piden que actualisemos algun archivo de interfas pero  no sabemos el puerto por el cual nuestro servidor resive la informacion, en ese caso podemos ejecutar los siguientes queries y nos mostraran el puerto y la IP en donde se encuentra.

select * from master..syslisteners

select
 substring(address_info, charindex(’/x’, address_info), 99) a
into #interface
 select
  convert(varchar(3), hextoint(substring(a, 11, 2))) + ’.’ +
  convert(varchar(3), hextoint(substring(a, 13, 2))) + ’.’ +
  convert(varchar(3), hextoint(substring(a, 15, 2))) + ’.’ +
  convert(varchar(3), hextoint(substring(a, 17, 2))) IP_ADRRESS
  convert(varchar, hextoint(substring(a, 7, 4))) PortNR
 from #interfaces
go
 

Checkpoint en todas las Bases de Datos

Todas las empresas tienen sus scripts en UNIX para hacer ya sea full o incremental backups. Mi recomendacion es siempre que alteres una base de datos o que hagas un backup antes ejecuta un checkpoint en ella. Si tu servidor tiene muchas bases de datos no te preocupes crea un archivo en UNIX dale privilegios de ejecucion y ejecutaras los siguientes comandos

select char(10)+’use ’+name+char(10)+’go’+char(10)+’checkpoint’+char(10)+’go’ from sysdatabases order by name
go

Y lo ejecutas en el servidor que desees 

isql -Usa -Sservidor -Pxxxxxx < checkpoint.sql > checkpoint.sql.out

Que hacer cuando el log segment de master esta casi lleno?

master es nuestra BD mas importante por la que hay que tener multiples cuidados en ella. Nunca trabajes o crees cosas en ella. Cuando te llegue una alarma de que el log segment de master esta casi lleno no te asustes. Si buscas en internet muchas paginas te dicen que crees un nuevo disposito (device) de master con mayor tamaño...si se puede hacer pero si no trabajas en master NO deberias de tener este problema asi que partiendo de la premisa de que nadie debe de trabajar en master puedes seguir los siguientes pasos

1. Verifica que transacciones estan corriendo por BD

1> select db_name(dbid) from master..syslogshold
2> go
 
 ------------------------------
 Mike1
 Mike2
 
2. Ejecuta un sp_who para conocer que usuarios hay

3. Ejecuta un sp_dbspace para que cheques el estado actual de master

4. Reviza como se encuentra su log de transacciones

1> exec master..sp_spaceused syslogs
2> go
 name            total_pages     free_pages      used_pages      reserved_pages
 --------------- --------------- --------------- --------------- ---------------
 syslogs         256000          24657           227280          0
 
(1 row affected)
(return status = 0)

5. Has un dump del log de transacciones

1> dump tran master with truncate_only
2> go

6. Por ultimo reviza como se encuentra el log de transacciones de master

1> exec master..sp_spaceused syslogs
2> go
 name            total_pages     free_pages      used_pages      reserved_pages
 --------------- --------------- --------------- --------------- ---------------
 syslogs         256000          250914          1023            0
 
(1 row affected)
(return status = 0)

Consultas utiles

A continuacion voy a compartir con ustedes algunas de las consultas mas utiles que puedes ejecutar para chechar procesos o el sistema.

Como checar los procesos en LOG SUSPEND status

select *from monProcess where Command like ’LOG%’ 
go

Como checar las transacciones que estan corriendo

select db_name(dbid) ’DataBase’, * from master..syslogshold 
go


Como conocer que conexiones hay por usuario

Select suser_name(suid), count(*) from master..sysprocesses group by  suser_name(suid)
go
Select ipaddr, count(*) from master..sysprocesses group by ipaddr
go
Select hostname, count(*) from master..sysprocesses group by hostname
go

igual puedes hacerlo con el siguiente SP de sistema

sp_client_addr

Conocer que tablas no cuentan con Indices

select name from sysobjects where id not in( select o.id
 from sysobjects o, sysindexes i, master..spt_values v
 where i.status & v.number = v.number and v.type = "I"
 and v.number = 2 and i.id = o.id and o.type=’U’ ) and type=’U’
go

Como saber que si el login hace match con el usuario en DB (es muy util muchas veces despues de un refresh los usuarios no hacen match con el login ya que cuentan con diferente SUID por eso este query te ayuda a saber cuales estan mal creados)

select ’user:’ ’Type’, t1.suid, t1.name ’dbuser’, t2.name
from sysusers t1, master..syslogins t2
where t2.suid=*t1.suid
union
select ’alias:’ ’Type’, t1.suid, ’ ’ ’dbuser’, t2.name
from sysalternates t1, master..syslogins t2
where t2.suid=*t1.suid
order by 2
go

Los siguientes solo parametros informativos (ejecuta las consultas de preferencia en master)

@@servername --nombre del servidor
@@boottime --cuando fue levantado por ultima vez
getdate() --dia y hora actual
sysengines --cuantos y en que estado estan los discos
@@errorlog --donde encuentras el errorlog

En las versiones anteriores a las 12.5 (creo) la varibale @@errorlog no existia por lo que para encontrar donde se encuentra el erroro log tenias que ejecutar un comando dbcc

dbcc traceon(3604)
go
dbcc resource
go
dbcc traceoff(3604)
go

Este query es muy util para decirle al APP team el tamaño de sus tablas asi ellos pueden hacer un purge si lo desean

select name = substring(o.name,1,30), trows = sum(rowcnt(i.doampg)),
reserved = sum(reserved_pgs(i.id, i.doampg)*2) + sum(reserved_pgs(i.id, i.ioampg)*2),
data =  sum(data_pgs(i.id, i.doampg)*2),index_size = sum(data_pgs(i.id, i.ioampg)*2)
from sysobjects o, sysindexes i, master.dbo.spt_values d
where i.id = o.id
and o.type like "U%"
and d.number = 1
and d.type = "E"
group by o.name
order by 2 desc
compute sum(sum(rowcnt(i.doampg))),
        sum(sum(reserved_pgs(i.id, i.doampg)*2) + sum(reserved_pgs(i.id, i.ioampg)*2)),
        sum(sum(data_pgs(i.id, i.doampg)*2)),
        sum(sum(data_pgs(i.id, i.ioampg)*2))
go

Como ejecutar un archivo sin el GO

Por alguna razon algunos comandos de UNIX aparecen cortados...dejen su comentario y yo les envio ya sea los shell o los scripts por correo.

Algunas veces tenemos que ejecutar archivos donde viene los privilegios de los objetos de la base de datos...

... Imagina que son mas de 2000 tablas en tu Base de datos ademas de que tienes varios grupos y cada uno con diferentes privilegios, esto hace que el codigo llegue algunas veces a unos cuantos miles de lineas, y el desarrollador no le puso el "go" a cada una de ellas (siempre es recomdable hacerlo)

 Al ejecutar el siguiente script te va a poner un "go" despues de cada linea y eso te facilitara el ejecutarlo

awk ’{ printf("%s n",

Mi servidor esta LENTO

Muchas veces los usuarios nos contactan para decirnos que su servidor "se encuentra lento" o que un query que tardaba "algunos segundos" el dia de hoy esta tomando "mucho tiempo", Muchas veces el query tarda mucho tiempo ya que las tablas donde extraen la informacion los desarrolladores no cuentan con Indexes necesarios, o correctos, o esta sobre indexada y practicamente estas haciendo un FULL SCAN o el query esta mal programado---Esto es tarea del desarrollador o del analista a menos de que seas el DBA de la aplicacion

Crea un archivo en UNIX con los siguientes comandos SQL y analisa su salida:

sp_sysmon "00:00:30", 'kernel',noclear
go
sp_monitor
go
PRINT '==============================================================================='
go
PRINT '         Sybase ASE CPU Users Report '
go
PRINT '==============================================================================='
go
sp_monitor 'connection', 'cpu'
go
PRINT '==============================================================================='
go
PRINT '         Sybase ASE Top I/O Performers Report '
go
PRINT '==============================================================================='
go
sp_monitor 'connection', 'diskio'
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Long Running Queries Report '
go
PRINT '==============================================================================='
go
sp_monitor 'connection', 'elapsed time'
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Current Transactions In The Server '
go
PRINT '==============================================================================='
go
select db_name(dbid) 'DataBase', * from master..syslogshold
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Processes in Log Suspend Status '
go
PRINT '==============================================================================='
go
select *from monProcess where Command like 'LOG%'
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Users by Database Report '
go
PRINT '==============================================================================='
go
select "LOGIN"=suser_name(suid),"DATABASE NAME"=db_name(dbid),"LOGIN CONNECTIONS"=count(*)
from master..sysprocesses group by suser_name(suid),db_name(dbid)
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Current Users Report '
go
PRINT '==============================================================================='
go
sp_who
go
sp__spidinfo4blocked
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Current Blocked Processes '
go
PRINT '==============================================================================='
go
select p.spid 'SPID', l.name 'USER', p.status 'STATUS', p.cmd 'COMMAND', p.blocked 'CULPRID SPID'
from master..sysprocesses p, master..syslogins l
        where p.suid = l.suid
        and p.blocked >= 1
go
PRINT '==============================================================================='
go
PRINT '          Sybase ASE Current Status Log Segment Per Database '
go
PRINT '==============================================================================='
go
select name 'DATABASE NAME',
 lct_admin('num_logpages', dbid) 'USED PAGES',
 lct_admin('logsegment_freepages', dbid) 'AVAILABLE PAGES',
 str(lct_admin('num_logpages', dbid) * 100.0 /  lct_admin('logsegment_freepages', dbid), 5, 1) 'CURRENT % OF LOG TRANSACTION'
from master..sysdatabases
go
EXIT





Sybase en Español

En este sitio vamos a poder encontrar algunas formas de solucionar problematicas que suceden el las tareas diarias de un DBA de Sybase

Temas

Archivos

Enlaces


Blog creado con Blogia.
Blogia apoya a la Fundación Josep Carreras.

Contrato Coloriuris