Tagged: Query RSS

  • Juanjinio 11:57 on 29/08/2008 Permalink | Reply
    Tags: , Query,   

    Restaurar BD MSSQL en modo “SUSPECT” 

    En estos simples pasos detallo como se puede corregir una base de datos en SQL Server que se encuentra en modo “SUSPECT” y por lo tanto no podemos acceder a ella.-

    1.- Desde el SQL Query Analyzer, debemos ejecutar la query:

    EXEC sp_detach_db 'BD_CON_PROBLEMAS', 'true'

    Con esto “sacamos” la BD con problemas del entorno de administracion del SQL Server Enterprise manager.-

    Sacar la BD del Enterprise manager de SQL Server

    2.- Antes de ejecutar este paso, debemos saber cual es la ruta exacta de la BD y luego ejecutamos, con esto vamos a registrar la BD pero ahora estará OK

    EXEC sp_attach_db @dbname = N'BD_CON_PROBLEMAS',
    @filename1 = N'[UNIDAD]:[PATH]BD_CON_PROBLEMAS_data.mdf', --data
    @filename2 = N'[UNIDAD]:[PATH]BD_CON_PROBLEMAS_log.ldf' --log

    Registrar la BD que estaba con problemas

    3.- Actualizamos la vista de las BD del Enterprise Manager y listo.-

    BD ya corregida

     
  • Juanjinio 10:16 on 12/08/2008 Permalink | Reply
    Tags: , , Query   

    Resumen de Objetos por Esquemas 

    Este script te permite saber la cantidad de objetos que tiene un esquema determinado en una instancia


    select owner, object_type, count(*) TABLAS
    from dba_objects
    where owner='NOMBRE_ESQUEMA'
    group by owner, object_type
    order by 3 desc;

    Cantidad de objetos que tiene un esquema determinado en una instancia

    Este script te permite saber el tamaño de las tablas e indices que tiene un esquema determinado

    select owner, segment_type, count(*) CANT, sum(bytes/1024/1024) MB from dba_segments
    where owner='NOMBRE_ESQUEMA'
    group by owner, segment_type
    order by 4 desc;

    Tamaño de las tablas e indices que tiene un esquema determinado

    Este script te permite la cantidad de objetos por esquema que estan en diferentes tablespaces, esto es útil para hacer mantención de espacios en una instancia.-

    select owner, tablespace_name,segment_type, count(segment_type)
    from dba_segments
    group by tablespace_name,owner,segment_type
    order by 1 asc

    Cantidad de obejtos por esquemas en diferentes tablespaces

     
  • Juanjinio 18:21 on 11/08/2008 Permalink | Reply
    Tags: , , Query   

    Detectar sesiones bloqueadas 

    Un problema común que siempre se encuentra en la administracion de BD, son los problemas de performance en donde por lo general se encuentran sesiones bloqueadas, desde Oracle-Base podemos utilizar este script para poder detectar este tipo de problemas


    -- File Name : http://www.oracle-base.com/dba/monitoring/locked_objects.sql
    -- Author : DR Timothy S Hall
    -- Description : Lists all locked objects for whole RAC.
    -- Requirements : Access to the V$ views.
    -- Call Syntax : @locked_objects
    -- Last Modified: 15/07/2000


    SET LINESIZE 500
    SET PAGESIZE 1000
    SET VERIFY OFF
    COLUMN owner FORMAT A15
    COLUMN username FORMAT A20
    COLUMN object_owner FORMAT A15
    COLUMN object_name FORMAT A25
    COLUMN locked_mode FORMAT A15
    SELECT b.inst_id AS id,
    b.session_id AS sid,
    NVL(b.oracle_username, '(oracle)') AS username,
    a.owner AS object_owner,
    a.object_name,
    Decode(b.locked_mode, 0, 'None',
    1, 'Null (NULL)',
    2, 'Row-S (SS)',
    3, 'Row-X (SX)',
    4, 'Share (S)',
    5, 'S/Row-X (SSX)',
    6, 'Exclusive (X)',
    b.locked_mode) locked_mode,
    b.os_user_name
    FROM dba_objects a,
    gv$locked_object b
    WHERE a.object_id = b.object_id
    ORDER BY 1, 2, 3, 4;
    SET PAGESIZE 14
    SET VERIFY ON

     
  • Juanjinio 11:01 on 11/08/2008 Permalink | Reply
    Tags: , , Query   

    Datos de la PGA 

    Aca dejo un script bastante bueno para ver informacion de la PGA, los creditos a Database Journal

    set lines 160 pages 60 echo off
    col value format 999,999,999,999,999

    SELECT NAME, VALUE FROM v$pgastat;

    SELECT
    low_optimal_size/1024 "Low (K)",
    (high_optimal_size + 1)/1024 "High (K)",
    optimal_executions "Optimal",
    onepass_executions "1-Pass",
    multipasses_executions ">1 Pass"
    FROM v$sql_workarea_histogram
    WHERE total_executions <> 0;

    SELECT
    optimal_count "Optimal",
    round(optimal_count * 100 / total,2) "Optimal %",
    onepass_count "OnePass",
    round(onepass_count * 100 / total,2) "Onepass %",
    multipass_count "MultiPass",
    round(multipass_count * 100 / total,2) "Multipass %"
    FROM (
    SELECT
    DECODE (SUM(total_executions), 0, 1, SUM(total_executions)) total,
    SUM(optimal_executions) optimal_count,
    SUM(onepass_executions) onepass_count,
    SUM(multipasses_executions) multipass_count
    FROM v$sql_workarea_histogram
    -- Limits consideration of queries with LOW_OPTIMAL_SIZE limit <64K
    WHERE low_optimal_size > 64*1024);

    SELECT
    ROUND(pga_target_for_estimate /(1024*1024)) "Target (M)",
    estd_pga_cache_hit_percentage "Est. Cache Hit %",
    estd_overalloc_count "Est. Over-Alloc"
    FROM V$PGA_TARGET_ADVICE;

     
  • Juanjinio 10:28 on 11/08/2008 Permalink | Reply
    Tags: , , Query   

    Automatizar el proceso de estadisticas de un esquema 

    En varias ocaciones me ah sucedido que se debe automatizar el proceso de actualización de estadisticas del motor o bien de un esquema en particular, suponiendo que en dicho esquema estan los datos mas importantes y que mas utiliza el cliente.-

    Para esto es posible dejar en un crontab (Unix/Linux) o bien en una tarea programada (Windows) un pequeño script que identidique todas las tablas de un esquema, elimine las estadisticas antiguas y luego las actualice, para esto les dejo el siguiente script que hace ésta labor.-

    Por crontab puede quedar programado para alguna hora ya sea en la noche o bien durante el fin de seman…

    #!/bin/bash
    export NLS_LANG=spanish_spain.WE8ISO8859P1
    export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/bin::/opt/j2sdk1.4.1/bin:/opt/oracle/product/9.2.0/bin
    export ORACLE_HOME=
    export ORACLE_SID=
    RUTA= export ORACLE_SID ORACLE_HOME RUTA
    rm -f $RUTA/ejecuta_estadisticas_esquema.sql
    #Genera script SQL para estadisticas ...
    sqlplus user/pass @$RUTA/estadisticas_esquema.sql
    #Ejecuta las estadisticas
    sqlplus user/pass @$RUTA/ejecuta_estadisticas_esquema.sql

    Detalle script estadisticas_esquema.sql

    set pages 0
    set feed off
    set head off
    set lines 90
    spool /ejecuta_estadisticas_esquema.sql
    select rtrim(a.an1||' delete statistics;'),rtrim(b.an1||' compute statistics;')
    from (select 'analyze table '|| a.owner ||'.'|| a.table_name as an1 from dba_tables a
    where owner =''
    ) a
    ,(select 'analyze table '|| b.owner ||'.'|| b.table_name as an1 from dba_tables b
    where owner =''
    ) b
    where a.an1 = b.an1
    ;
    select 'exit' from dual
    ;
    spool off
    exit

     
  • Juanjinio 10:12 on 11/08/2008 Permalink | Reply
    Tags: , , Query   

    identificar objetos con muchos extents 

    Aca dejo un script para poder identificar que objetos son los candidatos para una mantencion de espacios, para lo cual es necesario determinar que objetos son los que han tenido mas extents por lo cual se podría reducir su espacio.-

    select owner, segment_name, tablespace_name, segment_type, bytes/1024/1024 MB, extents
    from dba_segments
    where extents > 100
    order by extents desc

     
  • Juanjinio 09:56 on 11/08/2008 Permalink | Reply
    Tags: , , Query   

    Generar Export/Import compresos 

    Revisando algunos sitios de Oracle me percaté que en la web de Oracle-Books hay muchos tips bastante buenos de los que me gustaría destacar la generación de Export directamente a archivos compresos y lo mismo para la importación de data, algo bastante útil cuando no hay mucho espacio disponible

    para realiza un export de datos a un archivo compresos:
    /etc/mknod pipename p
    compress < pipename > newfilename.Z &
    exp / file=pipename
    rm -f pipename

    para realiza un import de datos a un archivo compresos:
    /etc/mknod pipename p
    uncompress < newfilename.Z > pipename &
    imp / file=pipename
    rm -f pipename

     
  • Juanjinio 18:36 on 08/08/2008 Permalink | Reply
    Tags: , , Query   

    Determinar el comportamiento de una instancia en el tiempo (STATPACK) 

    una buena herramienta que te indica el comportamiento de una instancia es el llamado StatPack, esta utilidad se utiliza mucho para realizar Tuning de BD.-

    Esta utilidad lo que hace es que realiza una comparación entre Snapshot o fotos de la BD que se van tomando cada cierto tiempo, los snapshot a medida que se van acumulando en el tiempo se debe tener cuidado ya que van a consumir mas espacio en el tablespace en donde se guarden

    Aca dejo algunos script basicos para instalar y capturar.-

    REPORTE STATPACK

    Para Unix/Linux
    connect perfstat/password
    @?/rdbms/admin/spreport.sql

    Para Windows
    connect perfstat/password
    @%ORACLE_HOME%/rdbms/admin/spreport.sql

    connect perfstat/password
    define begin_snap=<1>
    define end_snap=<2>
    define report_name=
    @?/rdbms/admin/spreport.sql

    connect perfstat/password
    define begin_snap=<1>
    define end_snap=<2>
    define hash_value=
    define report_name=
    @spreport.sql

    INSTALACION STATPACK

    Este es el script que se utiliza y que viene con la BD para instalar el statpack, tener cuidado si se va a utilizar un tablespace exclusivo o bien alguno ya existente, por lo general se utiliza el SYSAUX, pero recomendacion es mejor utilizar un tablespace exclusivo

    connect /as sysdba
    define default_tablespace='SYSAUX'
    define temporaly_tablespace='TEMP'
    define perfstat_password= @?/rdbms/admin/spcreate.sql
    undefine perfstat_password

    CAPTURAR STATPACK

    connect perfstat/password
    execute statspack.snap;

    variable snap number;
    begin :snap := statspack.snap; end;/
    print snap

     
  • Juanjinio 18:26 on 08/08/2008 Permalink | Reply
    Tags: , , Query   

    Determinar Objetos invalidos 

    Aca un script para determinar los objetos invalidos de una instancia Oracle.-

    select OWNER,
    OBJECT_TYPE,
    OBJECT_NAME,
    STATUS
    from dba_objects
    where STATUS = 'INVALID'
    order by OWNER, OBJECT_TYPE, OBJECT_NAME;

     
  • Juanjinio 18:23 on 08/08/2008 Permalink | Reply
    Tags: , , Query   

    Determinar la generación de Archive Logs 

    Aca hay un script para poder determinar la generación de ArchiveLogs de una BD Oracle.-

    select to_char(FIRST_TIME,'DY, DD-MON-YYYY') day,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'00',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'00',1,0))) d_0,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'01',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'01',1,0))) d_1,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'02',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'02',1,0))) d_2,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'03',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'03',1,0))) d_3,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'04',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'04',1,0))) d_4,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'05',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'05',1,0))) d_5,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'06',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'06',1,0))) d_6,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'07',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'07',1,0))) d_7,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'08',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'08',1,0))) d_5,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'09',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'09',1,0))) d_9,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'10',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'10',1,0))) d_10,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'11',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'11',1,0))) d_11,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'12',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'12',1,0))) d_12,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'13',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'13',1,0))) d_13,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'14',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'14',1,0))) d_14,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'15',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'15',1,0))) d_15,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'16',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'16',1,0))) d_16,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'17',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'17',1,0))) d_17,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'18',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'18',1,0))) d_18,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'19',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'19',1,0))) d_19,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'20',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'20',1,0))) d_20,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'21',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'21',1,0))) d_21,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'22',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'22',1,0))) d_22,
    decode(sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'23',1,0)),0,'-',sum(decode(substr(to_char(FIRST_TIME,'HH24'),1,2),'23',1,0))) d_23,
    count(trunc(FIRST_TIME)) "Total"
    from v$log_history
    group by to_char(FIRST_TIME,'DY, DD-MON-YYYY')
    order by to_date(substr(to_char(FIRST_TIME,'DY, DD-MON-YYYY'),5,15) )

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
esc
cancel