Consultas útilesAquí van algunas de esas consultas que nos podrían ser útiles en el día a día. Copien, peguen y guarden bien a mano... Espero les sean de utilidad... •• Consulta Oracle SQL sobre la vista que muestra el estado de la base de datos: select * from v$instance •• Consulta Oracle SQL que muestra si la base de datos está abierta select status from v$instance •• Consulta Oracle SQL sobre la vista que muestra los parámetros generales de Oracle select * from v$system_parameter •• Consulta Oracle SQL para conocer la Versión de Oracle select value from v$system_parameter where name = 'compatible' •• Consulta Oracle SQL para conocer la Ubicación y nombre del fichero spfile select value from v$system_parameter where name = 'spfile' •• Consulta Oracle SQL para conocer la Ubicación y número de ficheros de control select value from v$system_parameter where name = 'control_files' •• Consulta Oracle SQL para conocer el Nombre de la base de datos select value from v$system_parameter where name = 'db_name' •• Consulta Oracle SQL sobre la vista que muestra las conexiones actuales a Oracle. Para visualizarla es necesario entrar con privilegios de administrador select osuser, username, machine, program from v$session order by osuser •• Consulta Oracle SQL que muestra el número de conexiones actuales a Oracle agrupado por aplicación que realiza la conexión select program Aplicacion, count(program) Numero_Sesiones from v$session group by program order by Numero_Sesiones desc •• Consulta Oracle SQL que muestra los usuarios de Oracle conectados y el número de sesiones por usuario select username Usuario_Oracle, count(username) Numero_Sesiones from v$session group by username order by Numero_Sesiones desc •• Consulta Oracle SQL que muestra propietarios de objetos y número de objetos por propietario select owner, count(owner) Numero from dba_objects group by owner •• Consulta Oracle SQL sobre el Diccionario de datos (incluye todas las vistas y tablas de la Base de Datos) select * from dictionary •• Consulta Oracle SQL que muestra los datos de una tabla especificada (en este caso todas las tablas que lleven la cadena "XXX" select * from ALL_ALL_TABLES where upper(table_name) like '%XXX%' •• Consulta Oracle SQL para conocer las tablas propiedad del usuario actual select * from user_tables 'NO') "DEFAULT".tablespace_name "Tablespace".80) "Fichero de datos" FROM DBA_FREE_SPACE f.tablespace_name AND f. tablespace_name.tablespace_name = d. 'DEFERRED'. extents. ROUND(SUM(decode(f.bytes. valor actual y su descripción: SELECT v. 'YES') SES_MODIFIABLE. v.0.initial_extent.bytes)/1024/1024) (SUM(decode(f.bytes))/1024/1024).. t. el espacio libre y los ficheros de datos de los mismos: Select t. segment_type.file_id GROUP BY t.file_name. table_name from sys. .): Select * FROM dba_users •• Consulta Oracle SQL para conocer tablespaces y propietarios de los mismos: select owner.1.2) "MB Libres". 'FALSE'. ROUND((MAX(d. 'YES'.bytes))/1024/1024. 'FALSE') ISSYS_MODIFIABLE.description FROM V$PARAMETER v WHERE name not like 'nls%' ORDER BY 1 •• Consulta Oracle SQL que muestra los usuarios de Oracle y datos suyos (fecha de creación. tablespace temporal. 'DEFERRED'.'YES') SYS_MODIFIABLE .. 'DEFERRED'. DECODE(ISSYS_MODIFIABLE. DECODE(ISSES_MODIFIABLE.sql_text. 'TRUE'.status "Estado". column_name from sys. ROUND(MAX(d. next_extent.pct_increase "% incremento". t. NULL.3 DESC •• Consulta Oracle SQL para conocer los productos Oracle instalados y la versión: select * from product_component_version •• Consulta Oracle SQL para conocer los roles y privilegios por roles: select * from role_sys_privs •• Consulta Oracle SQL para conocer las reglas de integridad y columna a la que afectan: select constraint_name.bytes. 'YES'. decode(ISSYS_MODIFIABLE..value value.bytes)/1024/1024. t. 'NO'.status ORDER BY 1.file_id(+) = d.all_synonyms where table_owner like 'xxx' •• Consulta Oracle SQL como la anterior.•• Consulta Oracle SQL para conocer todos los objetos propiedad del usuario conectado a Oracle select * from user_catalog •• Consulta Oracle SQL para el DBA de Oracle que muestra los tablespaces. el espacio utilizado.'FALSE'. f. estado. v. en este caso "xxx": SELECT table_owner.isDefault.pct_increase. 'IMMEDIATE'. decode(v. DBA_DATA_FILES d. vs.2) "MB Usados".bytes. nombre. 'NO'. 'FALSE'. 'NO'. segment_name || ':' || partition_name) name. decode(partition_name. SUBSTR(d. PCT_INCREASE. DBA_TABLESPACES t WHERE t. id.tablespace_name(+) = d. 'TRUE'.tablespace_name. segment_name. NULL.sharable_mem. 3 •• Últimas consultas SQL ejecutadas en Oracle y usuario que las ejecutó: select distinct vs. null.2) "MB Tamaño".tablespace_name AND f.0. 'IMMEDIATE'.name.file_name.all_cons_columns •• Consulta Oracle SQL para conocer las tablas de las que es propietario un usuario. pero de otra forma más efectiva (tablas de las que es propietario un usuario): SELECT DISTINCT TABLE_NAME FROM ALL_ALL_TABLES WHERE OWNER LIKE 'HR' •• Parámetros de Oracle. max_extents from dba_segments Where 1=1 And extents > 1 order by 9 desc. 'YES'. 'YES'. t. d. f. v$sesstat b.serial#. sum(reloads) Fallos_cache.serial#.to_number(value) bytes from v$parameter where name ='shared_pool_size' union all select name. vs.sid. vs. vs.USERNAME parseuser from v$sqlarea vs .sql_text) like '%WHERE CAMPO LIKE%' ORDER BY c.persistent_mem.sql_text FROM v$session c. vs.value Cursores_Abiertos from v$session a. c.command_type. c.hash_value and sid = 105 ORDER BY c. all_users au where (parsing_user_id != 0) AND (au. v$sqltext d WHERE c.sid and a.piece •• Una sentencia SQL concreta (filtrado por sid) SELECT c. vs.sid. v$statname c where c. d. b.'MM/DD HH24:MI:SS') first_load_time.piece.'TRIGGER').buffer_gets. d.sql_hash_value = d.parsing_user_id .bytes from v$sgastat where pool = 'shared pool' and name = 'free memory' •• Cursores abiertos por usuario select b. OPTIMIZER_MODE .sql_hash_value = d.sid. 'YYYY-MM-DD/HH24:MI:SS').statistic# = c.parsing_user_id) and (executions >= 1) order by buffer_gets/executions desc •• Consulta Oracle SQL para conocer todos los tablespaces: select * from V$TABLESPACE •• Consulta Oracle SQL para conocer la memoria Share_Pool libre y usada select name.first_load_time.hash_value and upper(d.piece •• Consulta Oracle SQL para conocer el tamaño ocupado por la base de datos select sum(BYTES)/1024/1024 MB from DBA_EXTENTS •• Consulta Oracle SQL para conocer el tamaño de los ficheros de datos de la base de datos select sum(bytes)/1024/1024 MB from dba_data_files .sid. c.name in ('opened cursors current') and b.username. vs.piece. vs.executions.vs.version_count.sorts. d. trunc(sum(reloads)/sum(pins)*100.user_id(+)=vs. c.users_opening. d.2) Porcentaje_aciertos from v$librarycache where namespace in ('TABLE/PROCEDURE'.hash_value hash_value . d. to_char(to_date(vs. vs.parse_calls. d.module.loads.username is not null and b.sql_text FROM v$session c. vs.username. vs. au. rawtohex(vs.sid.value >0 order by 3 •• Consulta Oracle SQL para conocer los aciertos de la caché (no debería superar el 1 por ciento) select sum(pins) Ejecuciones.runtime_mem. v$sqltext d WHERE c.username. vs.sid = b. vs.'BODY'.disk_reads. rows_processed .statistic# and a.'SQL AREA'. a. •• Sentencias SQL completas ejecutadas con un texto determinado en el SQL SELECT c.address) address. vs. . SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS group by owner •• Consulta Oracle SQL para conocer el espacio ocupado por los diferentes segmentos (tablas. LTRIM.. ABS.'INDEX') and (segment_name='NOMBRETABLA' or segment_name in (select index_name from user_indexes where table_name='NOMBRETABLA')) •• Consulta Oracle SQL para conocer el tamaño ocupado por una columna de una tabla select sum(vsize('NOMBRECOLUMNA'))/1024/1024 MB from NOMBRETABLA •• Consulta Oracle SQL para conocer el espacio ocupado por usuario SELECT owner. Matar sesiones Oracle en Linux . .•• Consulta Oracle SQL para conocer el tamaño ocupado por una tabla concreta sin incluir los índices de la misma select sum(bytes)/1024/1024 MB from user_segments where segment_type='TABLE' and segment_name='NOMBRETABLA' •• Consulta Oracle SQL para conocer el tamaño ocupado por una tabla concreta incluyendo los índices de la misma select sum(bytes)/1024/1024 Table_Allocation_MB from user_segments where segment_type in ('TABLE'. SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS group by SEGMENT_NAME order by 2 desc Caracter de escape Como ya bien sabemos % y _ son caracteres de escape que sirven para generar patrones. cluster.) SELECT SEGMENT_TYPE. muestra los objetos que más ocupan primero SELECT SEGMENT_NAME. undo.. rollback. índices. % = equivale a O o N caracteres _= equivale a O o 1 caracter Nos podemos encontrar en situaciones en las que en el WHERE de una consulta queramos buscar caracteres que contengan _ o % por lo que necesitaremos un caracter de escape que le diga a Oracle que esos dos caracteres no son caracteres especiales... SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS group by SEGMENT_TYPE •• Consulta Oracle SQL para obtener todas las funciones de Oracle: NVL. SELECT distinct object_name FROM all_arguments WHERE package_name = 'STANDARD' order by object_name •• Consulta Oracle SQL para conocer el espacio ocupado por todos los objetos de la base de datos. Se hace de esta forma: SELECT name FROM emp WHERE id LIKE '%\%%' ESCAPE '\'. en este caso queremos "matar" al usuario USER1: SQL: select sid.---------. System altered. En este caso. status from v$session. y la sesión aparece en v$session con status “KILLED” SQL> select sid. Esto sucede cuando una sesión no puede ser interrumpida hasta que terminie la operación que está realizando.---------370 226 373 557 USER1 381 90 SYS 383 1 385 1 386 7 389 3 390 3 391 4 393 1 394 1 395 1 396 1 397 1 398 1 399 1 400 1 STATUS -------ACTIVE INACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE 17 rows selected. username. El comando para eliminar el sid 373 es el siguiente: SQL: alter system kill session '373. Para matar una sesión contamos con el comando ALTER SYSTEM KILL SESSION 'sid. serial#.-----370 108 373 557 USER1 381 90 SYS 383 1 385 1 386 7 389 3 390 3 391 4 393 1 394 1 395 1 396 1 397 1 STATUS -------ACTIVE KILLED ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE . otras veces aunque están en estado activo se nos pide que las eliminemos. Sin embargo hay ocasiones en que ALTER SYSTEM KILL SESSION no libera los bloqueos que tenía la sesión que matamos.557'. la sesión mantiene todos los recursos que obtuvo de nuestro servidor hasta que termina la operación.A veces necesitamos matar sesiones de la base de datos Oracle. status from v$session. la sesión que ejecutó el ALTER SYSTEM KILL SESSION recibe el mensaje: “the session has been marked to be terminated”. SID SERIAL# USERNA ---------. muchas veces estas sesiones se quedan “colgadas” e inactivas incluso por días. serial#' Previamente debemos de conocer el sid y el serial# de la sesión que deseamos eliminar. serial#. username.---------. SID SERIAL# USERNAME ---------. Normalmente. conociendo previamente el proceso del usuario. SID SERIAL# USERNAME ---------.addr = s.-------..spid Thread.------------364 SYS sqlplus. Publicado por eSkErNeL en 10:11 Sin comentarios: VIERNES.username is not null. *** EN EL CASO QUE ESTÉN BAJO CON ORACLE BAJO WINDOWS. Para poder matar el proceso del usuario en Linux.program 2 from v$process p. serial#. THREAD USERNAME PROGRAM -----------.EXE *** Primeramente encontramos el thread con el siguiente query (debemos de conocer el thread previamente a ejecutar el comando ALTER SYSTEM KILL SESSION. lo hacemos con un kill -9. Oracle y JBoss. de otra manera Oracle perdería la referencia al thread en cuestión): SQL> select p. . s.exe El comando por lo tanto sería: kill -9 4524 A continuación en v$session vemos que ya no existe la sesión del usuario QUICK SQL> select sid.---------370 226 381 90 SYS 383 1 385 1 386 7 389 3 390 3 391 4 393 1 394 1 395 1 396 1 397 1 398 1 399 1 400 1 STATUS -------ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE 16 rows selected. username. SUGIERO REVISAR COMANDO ORAKILL. s.paddr and s.. Y con ésto. 8 DE JULIO DE 2011 Oracle y JBoss.398 399 400 1 1 1 ACTIVE ACTIVE ACTIVE 17 rows selected. v$session s 3 where p. finalmente nos liberamos de esas molestas sesiones en estado KILLED que ocupan recursos en nuestra Base de Datos Oracle.exe 4524 USER1 sqlplus. status from v$session.username Username.---------. vip application ONLINE ONLINE racdb2 Intenté levantarlas nuevamente.gsd application ONLINE ONLINE racdb1 ora. Bueh... y obviamente no podía conectarme.. Se me complicó.....racdb1.. 16 DE MARZO DE 2011 CRS-0223: Resource 'xxx' has placement error Me encontré con este error luego de instalar DG4ODBC y reiniciar el RAC.. alguien que recomendaba matar los procesos crsd y probar levantar las instancias nuevamente..B2. y fue lo que hice..prod...gsd application ONLINE ONLINE racdb2 ora. no se ven una a otra como un RAC pero al menos accedo a los datos. > export ORACLE_SID=prod1 > sqlplus /nolog >> connect / as sysdba >> startup...vip application ONLINE ONLINE racdb1 ora.. por lo menos para empezar..asm application ONLINE ONLINE racdb1 ora.. sin necesidad de FAILOVER ni BALANCEO.ons application ONLINE ONLINE racdb2 ora..d1.racdb1.. y que está en la tapa del libro...ons application ONLINE ONLINE racdb1 ora. salimos del paso.inst application ONLINE UNKNOWN ora.. con crs_start. Luego de un par de días de darle vueltas al asunto..Publicado por eSkErNeL en 14:03 1 comentario: MIÉRCOLES..B1.. encontré googleando.....inst application ONLINE UNKNOWN ora.db application ONLINE ONLINE ora.inst' has placement error.d2...racdb1.SM2. error! PRKP-1001 : Error starting instance prod1 on node racdb1 CRS-1028: Dependency analysis failed because of: CRS-0223: Resource 'ora.. dónde está la salida?!?! Intenté levantarlas como si fueran BDs stanalone primero prod1 y luego prod2.racdb1.SM1... y viendo que el status de las instancias no era ONLINE. simplemente cambio las propiedades de las aplicaciones que hacen uso del RAC.. no tocar algo que está funcionando y menos aún hacer pruebas sobre eso.lsnr application ONLINE ONLINE racdb1 ora. y que empiecen a apuntar a una de las instancias.... las mostraba como unknown. con srvctl.... y levantaron !!! la instancia 1 y la 2....racdb2. :) Luego de algunos minutos y con los latidos a 200 por minuto... y lo peor era un RAC que estaba en Producción!!! He aquí el primer consejo..asm application ONLINE ONLINE racdb2 ora. y funcionó! .prod1.racdb2.lsnr application ONLINE ONLINE racdb2 ora.racdb2.. crs_stat -t Name Type Target State Host -----------------------------------------------------------ora... no había caso.. y nooo. ...racdb1.9 --> en ambos nodos > srvctl start instance -i prod1 -d prod --> luego con prod2 y listo!!! todo ONLINE nuevamente. hoy quizás sea la excepción.inst application ONLINE ONLINE racdb1 ora.. Por ejemplo..racdb2....ons application ONLINE ONLINE racdb2 ora.SM2.B1.racdb2. Se podría utilizar para matchear el id_pais de la tabla CLIENTES. con el id_pais de la tabla PAISES.. Hace casi un año que no agregaba ningún post.. Se utiliza cuando se quiere matchear dos tablas que tienen valores en común en una o más columnnas... Se puede usar self join cuando una columna de una tabla debe . o no.d2.racdb2. 26 DE AGOSTO DE 2010 JOIN eando.racdb1...asm application ONLINE ONLINE racdb2 ora...asm application ONLINE ONLINE racdb1 ora. Estaba pensando de que podía hablar (escribir en realidad).gsd application ONLINE ONLINE racdb1 ora.prod.. OUTER JOIN Se utiliza si se desea que el resultado no solo contenga los registros que cumplen con la condición del join...lsnr application ONLINE ONLINE racdb2 ora. por decirlo de alguna forma. Los diferentes tipos de joins y sus aplicaciones: INNER JOIN Es el join "mas común". SELF JOIN Se aplica para matchear una tabla consigo misma. y eso es lo que intentaré hacer..db application ONLINE ONLINE racdb1 ora.. eso nos traería los clientes que tengan asociado algún id_pais existente en la tabla PAISES.gsd application ONLINE ONLINE racdb2 ora.lsnr application ONLINE ONLINE racdb1 ora.> kill . sino también cualquier registro que no cumpla de una tabla o de las demás.d1...vip application ONLINE ONLINE racdb1 ora.SM1.racdb1..vip application ONLINE ONLINE racdb2 Publicado por eSkErNeL en 12:33 1 comentario: JUEVES...ons application ONLINE ONLINE racdb1 ora. incluyendo aquellos clientes que no tienen un país asociado. Se me cruzó por la mente describir los diferentes tipos de joins que podemos utilizar en una sentencia sql. crs_stat -t Name Type Target State Host -----------------------------------------------------------ora.B2.. Este tipo de join se lo conoce como producto cartesiano. CROSS JOIN Utilizado cuando se quiere matchear todos los registros de una tabla con cada registro de otra tabla... se puede usar para obtener todos los clientes de la tabla CLIENES con su país asociado de la tabla PAISES.inst application ONLINE ONLINE racdb2 ora.. . Para poder transportar un tablespace. o al recuperarlo de un estado anterior (recover).contenido archivo export_parfile.TRANSPORT_SET_CHECK(ts_list => 'nombre_tablespace'..referenciar una columna diferente en la misma tabla. es decir.ejemplo respaldo bajo Linux cp tablespace_datafile*. Seteamos el tablespace en cuestión en modo READ ONLY: ALTER TABLESPACE nombre_tablespace READ ONLY. Ejecutamos el siguiente export: exp parfile=export_parfile. Cómo chequeamos si el tablespace es self-contained? EXEC DBMS_TTS. 23 DE SEPTIEMBRE DE 2009 Transportable Tablespaces Con esta utilidad.dbf /Respaldo Ya con ésto tenemos todo lo necesario para poder levantar el mismo tablespace en otra BD o simplemente para utilizarlo como respaldo. -. no debe contener objetos que referencien a otros objetos en diferentes tablespaces. éste debe ser self-contained (auto-contenido).. SELECT * FROM transport_set_violations RESPALDANDO EL TABLESPACE A TRANSPORTAR: Como primer paso. Luego chequeamos la vista transport_set_violations para ver si existe alguna violación. . más específicamente al transferir un tablespace de una BD a otra. Publicado por eSkErNeL en 11:14 1 comentario: MIÉRCOLES.log statistics=NONE Respaldamos los datafiles que componen el tablespace.txt userid="sys/pass as sysdba" transport_tablespace=y tablespaces=(nombre_tablespace) file=plug_in_nombre_tablespace_ts. debemos crear el "respaldo" del tablespace a transportar. incl_constraints => TRUE).dmp log=plug_in_nombre_tablespace_ts.txt -. ésto lo podemos hacer simplemente con el comando de copia del sistema operativo (xcopy para Win o cp para Linux) o como más cómodo nos quede. luego de estos chequeos. lo que buscamos básicamente es bajar los tiempos de pasaje de datos.. Ahora deberíamos llevar nuevamente el tablespace a modo READ WRITE para retornar a la "normalidad": . que tan cuidadosamente habíamos guardado.dbf $ORACLE_BASE/oradata/orcl Luego. -.txt userid="sys/pass as sysdba" transport_tablespace=y file=plug_in_nombre_tablespace_ts.log tablespaces=(nombre_tablespace) tts_owners=schema_origen fromuser=schema_origen touser=schema_destino datafiles=( '$ORACLE_BASE/oradata/orcl/tablespace_datafile1. debemos "enchufar" (no se me ocurrió otro término para traducir plug-in) el tablespace: imp parfile=plug_in_nombre_tablespace_ts. debemos eliminarlo: DROP TABLESPACE nombre_tablespace INCLUDING CONTENTS AND DATAFILES.($ORACLE_HOME/admin/orcl/udump) sqlplus ($ORACLE_HOME/bin) .. donde se encuentran por default. -. Si el tablespace que vamos a restaurar ya existe en nuestra BD destino.trc .log ($ORACLE_HOME/admin/orcl/bdump) donde orcl es el nombre de la instancia orcl_ora_xxxx.ejemplo copia desde respaldo. ) Luego de terminado el import.dmp -.. RESTAURANDO EL TRANSPORTABLE TABLESPACE: Ahora intentaremos describir cómo hacer para levantar el respaldo que realizamos en el capítulo anterior. deberíamos poder realizar los transportes de tablespaces sin mayores problemas. Restauramos los datafiles del "respaldo".dbf ' -.archivos trace de usuario .. Espero que haya sido de utilidad! Ubicación de archivos Veamos en este post.declaramos todos los datafiles del ts $ORACLE_BASE/oradata/orcl/tablespace_datafile2..en su ubicación correspondiente . supongamos orcl es la BD cp /Respaldo/tablespace_datafile*. algunos archivos y utilitarios que podemos llegar a necesitar: alert.ALTER TABLESPACE nombre_tablespace READ WRITE.dmp generado en el respaldo log=plug_in_nombre_tablespace_ts. colocamos el tablespace en modo READ WRITE: ALTER TABLESPACE nombre_tablespace READ WRITE.txt -. Si seguimos los pasos al pie de la letra.contenido archivo plug_in_nombre_tablespace_ts.dbf '. Con ésto hemos logrado. verificamos el segmento.. Pero.-----------------------SYS_LOB0000760032C00019$$ SYS_IL0000760032C00019$$ COLUMN_LOB Movemos la tabla TABLA_LOB al tablespace que deseamos: alter table TABLA_LOB move tablespace TS_LOB. INDEX_NAME TABLESPACE_NAME --------------------. conseguimos mover el dichoso segmento! . Verificamos: select index_name.------------------------------SYS_IL0000760032C00019$$ TS_LOB Está listo. qué sucede si esta tabla contiene un atributo de tipo CLOB? Cuando se crea una tabla con un atributo de tipo CLOB. Ahora.--------------------. Oracle implícitamente crea un segmento LOB y un índice LOB para dicha columna. el índice y la columna asociada al campo lob de dicha dicha tabla: select segment_name.. SYS_LOBxxxx para los segmentos y SYS_ILxxxx para los índices. mover la tabla TABLA_LOB al tablespace requerido. pero el segmento LOB aún permanece en el tablespace de origen. tablespace_name from user_indexes where table_name = ‘TABLA_LOB’. column_name from user_lobs where table_name='TABLA_LOB'. Para mover el segmento debemos ejecutar el siguiente sql: alter table TABLA_LOB move lob (COLUMN_NAME) store as (tablespace TS_LOB). Aquí va la receta para mover la tabla conjuntamente con ese índice y segmento LOB... SEGMENT_NAME INDEX_NAME COLUMN_NAME -------------------------.dbca ($ORACLE_HOME/bin) dbua ($ORACLE_HOME/bin) spfile. Supongamos que la tabla en cuestión se llama TABLA_LOB. Los nombres que asigna Oracle para estos objetos son. index_name.ora ($ORACLE_HOME/dbs) expdp / impdp / exp / imp ($ORACLE_HOME/bin) Publicado por eSkErNeL en 14:43 Sin comentarios: MIÉRCOLES. como ya sabíamos. 2 DE SEPTIEMBRE DE 2009 Mover columna LOB a otro tablespace Mover una tabla de un tablespace a otro puede resultar tan sencillo como ejecutar la sentencia: alter table TABLA_SIMPLE move tablespace TS_DESTINO. donde dice algo similar a: $ORACLE_SID:$ORACLE_HOME:N Cambiamos la "N" por "Y" -... 12 DE AGOSTO DE 2009 Inicio automático Oracle en Linux En este post "intentaré" explicar cómo configurar el inicio automático de Oracle 10 en un S. # ORA_HOME=/u01/app/oracle/product/10.O.o sea le decimos que sí! :) -Quedaría: $ORACLE_SID:$ORACLE_HOME:Y En mi caso particular quedó: orcl10:/u01/app/oracle/product/10.d/dbora con el usuario root.0/db_1ORA_OWNER=oracle case "$1" in . debemos editar el archivo /etc/oratab.). col_pk2. con el siguiente contenido: (espero que haya quedado bien el copy & paste!) #!/bin/bash # # chkconfig: 35 99 10 # description: Starts and stops Oracle processes # # Set ORA_HOME to be equivalent to the $ORACLE_HOME # from which you wish to execute dbstart and dbshut. Linux (Red Hat en mi caso particular). # # Set ORA_OWNER to the user id of the owner of the # Oracle database in ORA_HOME. Publicado por eSkErNeL en 18:17 6 comentarios: MIÉRCOLES.2. 13 DE AGOSTO DE 2009 Eliminar registros duplicados Si por algún motivo insertaron registros duplicados de una tabla. Donde tabla indica la tabla en cuestión y las col_pkn son las columnas que forman la primary key. Luego de instalado Oracle. por aquí les dejo una sentencia que los puede ayudar a eliminar esos registros innecesarios: delete from tabla where rowid not in (select min(rowid) from tabla group by (col_pk1.Publicado por eSkErNeL en 14:09 2 comentarios: JUEVES.0/db_1:Y Luego creamos el archivo /etc/init.2. col_pk3. ya sea porque han eliminado la clave primaria o ni siquiera la han creado y ahora la consideran necesaria. $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_stop" #fi # Stop the TNS Listener su .$ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start" #fi touch /var/lock/subsys/dbora .$ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" if [ -f $ORA_HOME/bin/oemctl ]. Hay un bug conocido que nos puede complicar al reinicio. then su .. pero no preocuparse.$ORA_OWNER -c $ORA_HOME/bin/dbstart # Start the Intelligent Agent #if [ -f $ORA_HOME/bin/agentctl ].$ORA_OWNER -c $ORA_HOME/bin/dbshut rm -f /var/lock/subsys/dbora . then su .$ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole" fi su .d/dbora Y asociamos al servicio con los runlevels apropiados: chkconfig --level 345 dbora on La instancia ahora debería iniciarse automáticamente al reinicio de nuestro servidor Oracle. porque por suerte "es conocido" y tiene solución! Si nos encontramos con este error: . esac # End of script dbora A continuación (seguimos con root) seteamos los privilegios sobre el archivo dbora: chmod 750 /etc/init.$ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" # Stop the Oracle databases: # The following command assumes that the oracle login # will not prompt the user for any values su . then # su .$ORA_OWNER -c "$ORA_HOME/bin/agentctl start" #else # su .'start') su . then # su . then # su .$ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start" #fi # Start Enterprise Management Console #if [ -f $ORA_HOME/bin/oemctl ].$ORA_OWNER -c "$ORA_HOME/bin/agentctl stop" #else # su .$ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole" #fi # Start HTTP Server #if [ -f $ORA_HOME/Apache/Apache/bin/apachectl ].$ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop" #fi # Stop Enterprise Management Console if [ -f $ORA_HOME/bin/oemctl ].$ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole" fi # Stop the Intelligent Agent #if [ -f $ORA_HOME/bin/agentctl ]. then # su .. 'stop') # Stop HTTP Server #if [ -f $ORA_HOME/Apache/Apache/bin/apachectl ]. then # su . 10 DE AGOSTO DE 2009 Habilitar ARCHIVELOG La mayoría de las características de Alta Disponibilidad de Oracle requieren el modo ARCHIVELOG activado. los archivos redo logs. -. de lo contrario obviamos este paso -SQL> startup mount. Cómo hacemos para habilitarlo? sqlplus sys/pass as sysdba -.levantamos la BD -- Nuestra BD finalmente quedó en modo ARCHIVELOG! Los archivos generados por el archivado de logs. Espero que este post les sea de utilidad! Publicado por eSkErNeL en 13:23 Sin comentarios: LUNES. es decir. debido a que no debemos especificar siquiera parámetro de inicio en el spfile (como el "LOG_ARCHIVE_START=true" en la versión 9). por default.): ORACLE_HOME_LISTENER=/ade/vikrkuma_new/oracle Con ésto: ORACLE_HOME_LISTENER=$ORACLE_HOME Ahora sí. .montamos la BD -- SQL> alter database archivelog. Habilitar ARCHIVELOG a partir de la versión 10. no está en modo ARCHIVELOG. con esta modificación el listener debería iniciar automáticamente sin problema alguno.'db_recovery_file_dest_size'). serán guardados antes de ser sobreescritos.nos conectamos a la consola de SQLPlus -SQL> shutdown immediate.Failed to auto-start Oracle Net Listener using /ade/vikrkuma_new/bin/tnslsnr Se debe a un path hard-coded en el script dbstart. resulta más sencillo que en versiones anteriores. Esta sentencia nos indicará la ubicación de los archive logs y el tamaño asignado para esta área: select * from v$parameter where name in ('db_recovery_file_dest'. Una vez habilitada esta característica.activamos ARCHIVELOG -SQL> alter database open. quedarán ubicados en la FRA (Flash Recovery Area). la bajamos. -. -. Como chequeamos si está habilitado el modo ARCHIVELOG? SQL> archive log list. Para solucionarlo editamos el archivo $ORACLE_HOME/bin/dbstart y reemplazamos la siguiente línea (línea 78 aprox. -.si la BD está levantada. Database log mode No Archive Mode Automatica archival Disabled Archive destination USE_DB_RECOVERY_FILE_DES Oldest online log sequence 42541 Current log sequence 42543 El "No Archive Mode" evidentemente nos indica que esta base no esta guardando los online archive logs. pero los resultados no fueron los esperados. Configurando el parámetro /3GB logramos que un sistema Win 32 bits redireccione arriba de los 2Gb de memoria por proceso. hasta que en metalink (metalink.. fue un intento no más! Luego.. viendo que la memoria que tenía asignada la SGA+PGA estaban "CASI" en los 2Gb y que mi S. Ups! se supone que un sistema de 32bits. Googleando en la vuelta.. Ahí lo que me quedaba era disminuir la memoria asignada a la SGA o probar con el parámetro /3GB en el boot. en realidad tampoco esperaba que diera resultado.com) hallé el DOC ID 556428. me quería volver loco!!! No sabía por donde empezar. máxime que ese día la carga de usuarios en el sistema se veía algo incrementada comparada con los demás días.. era de 32 bits.oracle. de processes. Las características del Server con el que estaba piloteando eran: Intel Quad Core 4Gb RAM Windows 2003 (32 bits) Oracle 10.Hasta aquí este artículo sobre ARCHIVELOG! Publicado por eSkErNeL en 12:39 Sin comentarios: MARTES. en fin.ini..1 que me dió algunas sugerencias interesantes... y yo estaba caminando por la corniza. no puede redireccionar más de 2Gb a un solo proceso.. ésto último fue lo que terminé configurando y por suerte salimos a flote. pero. aumentar el nro. no encontré nada preciso que me ayudara rápidamente a solucionar el error. que rezaba un lindo mensaje "TNS:listener could not hand off client connection".0.. Un primer intento.. Cómo setear este parámetro? Contenido archivo boot. 4 DE AGOSTO DE 2009 ORA-12518 Cuando me encontré con este ORA error.O.6Gb 320Mb PGA .. Standard" /3Gb /fastdetect /NoExecute=OptOut .2.ini [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003.3 SGA >1..