slot gacor
slot gacor
Administración, tips, SQL y utilidades sobre bases de datos Oracle

Administración, tips, SQL y utilidades sobre bases de datos Oracle

Administración, tips, SQL y utilidades sobre bases de datos Oracle Dataprix 30 Marzo, 2022 - 21:18

Tips sobre bases de datos Oracle

Recopilación de información, utilidades y dudas sobre bases de datos Oracle.

Administración, rendimiento, SQL, vistas materializadas, conexiones, backups..

Auditoría de la base de datos, seguimiento y seguridad

Auditoría de la base de datos, seguimiento y seguridad Carlos 20 May, 2010 - 13:50

Abro este tema de auditoría en bases de datos Oracle para comentar cualquier cuestión relacionada con la activación y utlización de la auditoría de Oracle para hacer un seguimiento de determinadas consultas, usuarios, objetos, conexiones, etc. con el fin de mejorar el rendimiento de la base de datos, o también por cuestiones de seguridad.

Comienzo incluyendo este documento que explica bastante bien cómo utilizar la auditoría

Auditoria Oracle 10g from Silvana Cecilia Vire

Buen dia, necesito saber como restrinjo a un usuario para que no tenga mas de 3 o x sesiones.

Hola muchachos ando realizando un monitoreo a la base de datos donde ando viendo las personas que modifican los objetos de la base "DDL".

El tema aqui es que cuando alguien modifica externamente los objetos que no son por medio de un cliente si no dentro del servidor no puedo ver a detalle los datos del ususario.

Uds tendran algo entre sus cursidades ..?

Buenas tardes, necesito saber el id de la sesion de Oracle que está activo en determinado momento que corre un proceso.

Es decir, si yo consulto la vista:

select sid from v$session
where username : 'DESA'

Si hay varias sesiones abiertas, me devuelta tantos sid como sesiones abiertas haya y lo que necesito en realidad es un único valor de sid que me muestra univocamente la sesion utilizada, es esto posible?

Muchas Gracias,
Saludos,
Osk

En respuesta a por osk (no verificado)

 Que tal osk, prueba con el siguiente query

SELECT SS.SID, P.PROGRAM, P.PGA_USED_MEM, P.PGA_MAX_MEM, S.SQL_TEXT, SS.SID

FROM V$SQL S, V$SESSION SS, V$PROCESS P WHERE S.SQL_ID = SS.SQL_ID 

AND P.ADDR = SS.PADDRAND

AND SS.USERNAME = ' TU USUARIO'

Con esto puedes ver el query que corre cada sesion de tu usuario y puedes determinar cual es la sesion que necesitas

Espero te sirva, Saludos.

 

Buen dia,

Podrian apoyarme con la siguiente solicitud, hemos presentado problemas de espacio con los file system, creemos que programar depuraciones desde EBS podria ayudar a liberar espacios, pero para definir los periodos de depuración, me solicitan un analisis para saber la carga diaria es decir cuantos outputs, archivos temporales etc, se generan diariamente y el espacio que ocupan, esto para definir la programacion,  tienen algun metodo para sacar estas estadisticas o como podria recopilar la informacion que me solicitan.

De antemano mil gracias por su apoyo

Buen día Carlos:

 

Eh visto tu blog en está página y me ha parecido interesante, te comento que eh ingresado a una institución financiera como DBA.

 

Debido a multiples limitaciones que existen conn el tema de acceso hacia la Base de datos de desarrollo, la cual tengo que administrar en un futuro.

 

Me gustaría preguntarte si existe alguna herramienta que me permita monitorear los cambios a los objetos de la  base (tablas, stores, funciones, paquetes, etc), aquí en el área realizan cambios sin aviso y de ultimo momento. Por lo que la auditoria unificada en el servidor de la base no es opción por n limitaciones que existen.

 

No puedo instalar nada en el servidor ya que es solaris y por lo que eh escuchado, todo el tema de hardware o almacenamiento es muy caro. Si puedo implementar alguna aplicaciòn que me permita auditar sería en mi laptop y que se conecte al servidor con el usuario que ya tengo temporalmente.

 

Saludos y muchas gracias.

 

Abraham Santamaría.

En respuesta a por Abraham Santamaría (no verificado)

Hola Abraham

Lo normal es utilizar la auditoría que proporciona la base de datos porque el servidor de base de datos es el que centraliza los cambios. Cualquier otra cosa tendría que estar consultando constantemente los objetos auditados para comprobar si han cambiado. No te digo que no exista alguna utilidad que haga algo así, pero yo no la conozco.

Lo que sí hay son aplicaciones que recogen cambios consultando en los logs del servidor, en lugar de hacer consultas contra la base de datos, y así no interfieren en el funcionamiento, pero igualmente si quieres que los cambios se salven en los logs has de tener activada la auditoría de la base de datos.

Otra opción, si el problema es el espacio, sería activar la auditoría, y lanzar consultas contra la base de datos, pero recoger y almacenar los resultados en otra máquina de la red, o un ordenador, o un portátil, eso sí que seguro que lo hacen herramientas de administración de bases de datos Oracle.

Saludos,

Concatenar cadenas en Oracle

Concatenar cadenas en Oracle Carlos 12 May, 2014 - 10:59

Concatenar cadenas en Oracle no tiene ningún secreto, el operador que se utiliza es el string '||' (doble barra vertical) siguiendo el estandar de sintaxis de SQL, pero lo comento aquí como apunte porque en otros motores de base de datos, como SQL Server, o DB2, la concatenación se hace con otros operadores, concretamente '+' en SQL Server y 'CONCAT' en IBM DB2.

La concatenación en Oracle es tan sencilla como insertar el operador entre las dos cadenas a concatenar (bueno, el método es el mismo en todas las bases de datos, lo único que puede cambiar es el operador):

SELECT 'Mi nombre completo es ' || nombre || ' ' || apellidos
FROM usuarios WHERE id_usuario=8;

La sintaxis es muy simple, pero con un poco de imaginación, o de práctica, puede ayudar a crear sentencias complejas, o incluso scripts de administración que utilicen el diccionario de datos para crear las instrucciones necesarias para realizar operaciones sobre una lista de objetos de la base de datos, seleccionados dinámicamente.

Apuntar también que en SQL Server la utilización del operador '+' para concatenar puede traer algún que otro problemilla cuando tú quieres concatenar y el analizador de SQL entiende que lo que quieres es sumar números.

 

Es cierto, yo he trabajado siempre con Oracle, y al tener que contatenar una vez con SQLServer utilizando el + me paso lo que comentas, que tenía errores porque SQL intetaba sumar en lugar de concatenar.

Creación de esquemas en Oracle

Creación de esquemas en Oracle Carlos 12 Junio, 2009 - 17:55

Este tema es para recoger comentarios acerca de la creación de nuevos esquemas en Oracle, creación de tablespaces, usuarios, asignación de permisos, etc.

Un esquema es un owner o un user ???

En respuesta a por Esper (no verificado)

Entonces puedo entender que la conexion seria  la siguiente.

Usuario: APP

Password: APPPWD

Base de Datos: APPDAT

Estos seran mis parametros desde mi toad o pl/sqldev no es asi? o me equivoco?

 

Saludos.

Henry

En respuesta a por Anonimo (no verificado)

Los datos del usuario y el password serían correctos, pero APPDAT es el tablespace, que no tiene nada que ver con el nombre de la base de datos.

El tablespace es el lugar donde se crean los objetos de uno o varios usuarios, y una base de datos tiene varios tablespaces. En este caso, al crear el usuario, le dices que todos los objetos (tablas, índices, procedures, etc.) que cree este user lo haga por defecto sobre el tablespace APPDAT.

El nombre de la base de datos lo puedes encontrer en el fichero tnsnames.ora, que estará en el directorio donde se haya instalado esta base de datos.

Es recomendable crear un tablespace para cada usuario que vaya a crear objetos, pero si te lo quieres ahorrar, si no especificas nada la base de datos utiliza el tablespace USERS como tablespace por defecto para cada nuevo usuario que se crea.

El esquema lo componen todos los objetos propiedad de un usuario, en el ejemplo el User APP será el Owner de todas las tablas, índices, secuencias, etc que cree, y todos estos objetos formarán su esquema.

Carlos Fernández

Analista de sistemas

En respuesta a por Carlos

[quote=carlos]El esquema lo componen todos los objetos propiedad de un usuario, en el ejemplo el User APP será el Owner de todas las tablas, índices, secuencias, etc que cree, y todos estos objetos formarán su esquema. [/quote]

Es decir, que por defecto, los objetos que crea un usuario pasan a ser directamente de su propiedad y parte de su esquema.

El tablespace es el lugar físico donde se almacenan objetos de la base de datos. Cada usuario tiene asignado un tablespace por defecto donde se almacenan todos los objetos que crea, si no especifica otro tablespace en la sentencia de creación.

En un mismo tablespace se pueden almacenar objetos de diferentes esquemas. Un buen ejemplo es el Tablespace USERS, que es donde por defecto se crean los objetos de los nuevos usuarios de la base de datos. Un usuario también puede crear objetos en diferentes tablespaces, sólo ha de especificar el tablespace que quiera en la sentencia de creación.

Con estas aclaraciones espero que puedas seguir sin problemas lo que se va haciendo en Cómo crear un nuevo esquema en Oracle paso a paso

 

Tengo una Instancia en Oracle 10g, con varios esquemas, y necesito que uno de ellos pueda ver y consultar todas las tablas de todos los otros usuarios o esquemas.

¿como puedo hacer esto?

En respuesta a por José (no verificado)

Para conceder permisos de consulta a este usuario sobre todas las tablas de los demás esquemas lo mejor es que utilices el diccionario de datos para crear los permisos. Entra con un usuario de sistema (SYS o SYSTEM) que 'vea' todas las tablas y ejecuta una sentencia como esta:

select 'Grant select on '|| t.owner||'.'||t.table_name ||' to usuario;'
from all_tables t
where owner not like '%SYS%';

Si quieres, en el artículo Construcción de scripts con ayuda del diccionario puedes consultar cómo crear un script con estas sentencias y lanzarlo desde la linea de comandos.

Otra opción sería asignar al usuario el rol SELECT_CATALOG_ROLE, o darle permisos de SELECT ANY DICTIONARY, pero con la que te propongo puedes restringir los permisos a lo que quieras en la misma select si, por ejemplo, no te interesa que el usuario tenga acceso a las tablas de sistema.

Carlos Fernández

Analista de sistemas

En respuesta a por Carlos

Carlos, que tal, evidentemente sabes bastante de oracle. Tengo 1 esquema creado para dos usuarios:

 

Esquema: x

Usuario: Y

Usuario: YY

 

Uso un soft que se conecta a la base de datos, es un soft de piping, pero la pregunta es, como se conectan estos dos usarios

a la base de datos??? les instalo cliente de oracle, pero cuando pongo en sqlplus, el nombre de usurario: Y y la pass asignada me dice que no tiene privilegios, error ORA-01031? via toad es mejor??

 

Slds compas y gracias de antemano

En respuesta a por Manuel (no verificado)

Hola Manuel, la mejor prueba es lo que hagas desde SQLPLUS.

Si te da ese error significa que estos usuarios no tienen permisos para conectar a este esquema. Supongo que especificas el esquema en la conexión, no?
En tu caso:

$ sqlplus Y/passwd@x

Si esto está bien también podría ser que los usuarios no tuvieran permisos de conexión. Asegurate de haberles asignado antes los roles CONNECT y RESOURCE con un usuario DBA de la BD:

GRANT "CONNECT" TO "Y";
GRANT "RESOURCE" TO "Y";

En respuesta a por Anonim. (no verificado)

En Recopilacion de scripts y consultas utiles de Oracle puedes encontrar varias consultas SQL que te pueden ayudar a utilizar el diccionario de datos de Oracle para obtener este tipo de información.

Esta, por ejemplo, creo que te podría servir:

SELECT owner,
       decode(partition_name, null, segment_name, segment_name || ':' || partition_name) name,
       segment_type, tablespace_name,bytes,initial_extent,
       next_extent, PCT_INCREASE, extents, max_extents
FROM dba_segments
WHERE owner= 'EL_ESQUEMA_QUE_ME_INTERESA' And extents > 1 order by 9 desc, 3

Con esta consulta recuperas los datos de los objetos del esquema 'EL_ESQUEMA_QUE_ME_INTERESA', incluyendo el tablespace donde se crean. Puedes adaptarla o simplificarla a tu gusto.

a ver si comprendo ???

1 tablespace es el espacio en los que los usuarios graban sus datos e indices

y el schema ???

acaso es un usuario propietario de los objetos usados en dicho DB ???

Me encantó el post, me fue muy util.

Tengo un tablespace con dos datafile y ¿como puedo eliminar uno de ellos y hacer el otro extensible? 

La versión de Oracle que uso es la 9.2.0.1.0. He visto que en Oracle 10g es realmente facil. 

 

Muchas gracias por todo.

 

 

Hola

Tengo un usuario USR1 con su esquema ESQ1, como puedo crear un USR2 que vea ese mismo esquema ESQ1 y que las consultas no me pidan el nombre del esquema, por ejemplo:

Select * from ESQ1.tabla1;

Saludos

Gran post, tengo una duda sobre este tema.

Ya he creado varios esquemas dentro de una misma base de datos cada uno con sus propios objetos y privilegios, solamente quiero saber como monitorear los recursos de memoria que utiliza cada usuario, un ejemplo tengo los esquemas A y B, despues de la creacion del esquema B, se ha mostrado algo de irregularidad en el esquema A como jobs que se quedan colgados y no se ejecutan o se tardan mas de lo normal. En el esquema B tengo el privilegio de sistema UNLIMITED TABLESPACE por que no podia crear objetos en los tablespace que le tenia asignado a B, no se si esto afecte al esquema de A.

Saludos

En respuesta a por OMARE (no verificado)

[quote=OMARE]Gran post, tengo una duda sobre este tema.

Ya he creado varios esquemas dentro de una misma base de datos cada uno con sus propios objetos y privilegios, solamente quiero saber como monitorear los recursos de memoria que utiliza cada usuario, un ejemplo tengo los esquemas A y B, despues de la creacion del esquema B, se ha mostrado algo de irregularidad en el esquema A como jobs que se quedan colgados y no se ejecutan o se tardan mas de lo normal. En el esquema B tengo el privilegio de sistema UNLIMITED TABLESPACE por que no podia crear objetos en los tablespace que le tenia asignado a B, no se si esto afecte al esquema de A.

Saludos

 

Otra duda Como puedo ver varios TABLESPACE con un usuario ademas del que se asigna por default al usuario sin tener el privilegio de UNLIMITED TABLESPACE, saludos

 

 

En respuesta a por OMARE

Cada usuario tiene definido el tablespace por defecto donde se crean sus objetos si este no especifica nada. Para crear objetos en otros tablespaces sólo hay que dar al usuario los permisos necesarios y especificar el tablespace en la sentencia de creación del objeto.

En lugar de darle el privilegio UNLIMITED TABLESPACE al user, puedes asignar una cuota a cada TABLESPACE que vaya a utilizar. Sería algo así:

CREATE USER mi_usuario
IDENTIFIED BY mi_password
DEFAULT TABLESPACE mi_tablespace
QUOTA 20M ON otro_tablespace
QUOTA UNLIMITED ON otro_tablespace_mas;

Hola Carlos, necesito crear un usuario para producción que tenga acceso a tablas, vistas, procedimientos y otros objetos de otro esquema sin necesidad de nominar los objetos anteponiendo el esquema. Se que se puede hacer con scripts creando sinonimos y dando permisos al usuario en el esquema. La idea es que se desarrolle con un usuario que tiene ciertos privilegios que no puede tener el usuario de producción ¿cúal es la dinámica habitual? Gracias

En respuesta a por Atman (no verificado)

El procedimiento que yo conozco es el que puedes consultar en el post Utilización de sinónimos para compartir objetos. Se trataría simplemente de crear un script que para cada objeto que quieras 'enmascarar' cree un sinónimo público con sólo su nombre.

La variante que propone ljmunozc de crear un trigger que altere la sesión para 'situar' al usuario en ese esquema me parece muy ocurrente, gracias por la aportación, aunque todo lo que tenga que ver con triggers hay que manejarlo con mucho cuidado, hay que tener siempre en cuenta que se le está cambiando automáticamente la sesión al usuario.

Si lo pruebas ya nos explicarás qué tal funciona.

Hola Carlos Tengo nivel súper básico, tengo que crear varios esquemas, cada uno con varias tablas, entiendo que creas un tablespace, después el usuario, ese usuario lo asignas al tablespace, mi duda es donde entra el schema, cómo asignas un schema a un tablespace?

Hola Carlos, necesito crear un usuario igualito a otro ya existente, es decir, mismas tablas, misma data, etc... Como lo hago? Cual es el mejor camino?

Cuestiones sobre concesión de permisos y seguridad en Oracle

Cuestiones sobre concesión de permisos y seguridad en Oracle Carlos 24 Febrero, 2010 - 18:34

Abro este tema a propósito del artículo Grants with grant option, la propiedad transitiva en la concesión de permisos para comentar cualquier cuestión sobre el mismo, o temas relacionados con la seguridad, los roles y la concesión de permisos en Oracle.

q pasa si qiero dar los rpivilegios pero no solo a una tabla si no a todas a la ves

En respuesta a por Carlos

Buenas tardes,

 

En Oracle 10, desde el usuario "aplicacion1" ejecuto el comando  --> grant SELECT_ANY_TABLE to aplicacionadmin ;

Y me devuelve:

ORA-01919: el rol 'SELECT_ANY_TABLE' no existe

 

La idea es que desde aplicacionadmin se pueda realizar tareas de mantenimiento sobre todas las tablas de aplicacion1 y aplicacion2 asi como poder importar y exportar el esquema de cada uno de ellos teniendo su contenido en un tablespace en comun (TB_APLICACION)

 

¿Como puedo hacer esto?

 

Gracias

Hola, necesito crear una tabla en una session, donde esta tabla hace referencias a otras tablas que estan en otra session, me tira un error: previlegios insuficientes

En respuesta a por Anonimo (no verificado)

Seguramente es porque el usuario User1 que quiere crear la tabla TabA no tiene permisos asignados sobre la tabla TabB del otro esquema User2 a la que se hace referencia.

Para solucionarlo deberías conectarte con el User2 o un usuario de sistema y asignar los permisos necesarios al User1:

GRANT SELECT ON User2.TabA TO User1;

Carlos Fernández

Analista de sistemas

En respuesta a por Carlos

buen dia,

necesito de su colaboracion con los siguiente,

tengo tres usuarios y uno de ellos es un esquema (usuario1, usuario2, esq_usuario3),

como hago para crear roles y dar los siguientes privilegios:

1- el usuario1 puede consultar, actualizar, borrar, alterar, crear tablas o vistas en esq_usuario3

2- el usuario2 solo puede consultar las tablas y vistas del esquema esq_usuario3 tanto las actuales como las que se vayan creando, pero el usuario2 no puede actualizar, borrar, alterar ni crear tablas o vistas en esq_usuario3

3- el usuario1 no puede actualizar, borrar, alterar, crear tablas o vistas en ningun otro esquema diferente a esq_usuario3

En respuesta a por Anonimo (no verificado)

Sobre el punto 1, en principio, con Oracle no puedes dar a un usuario permisos de creación sobre un esquema del que no es propietario, o crea tablas en su propio esquema, o le das permisos para crear tablas en todos los esquemas.

Lo que te podría servir es utilizar el sistema de autenticación proxy que permite a un usuario autenticarse, pero obteniendo los permisos de otro usuario. Es decir, podrías dar al usuario1 permisos para autenticarse con los permisos del propietario de esq_usuario3 con una sentencia como esta:

ALTER USER usuario3 GRANT CONNECT THROUGH usuario1;

Entonces, al conectar con usuario1 tendrías permisos para crear tablas en el esquema del que usuario3 es OWNER.

 

Sobre el punto 2, ya sea con permisos directos o creando roles, que yo sepa no puedes definir en una sola sentencia que un usuario tenga sólo permisos de SELECT sobre todas las tablas y vistas de otro esquema, tienes que asignar los permisos específicamente para cada tabla o vista. No es complicado, pero te obliga a actualizar los permisos cada vez que se crea un objeto nuevo en el esquema, que es lo que entiendo que querías evitar.

Aqui comentábamos ya este tema, pero igualmente te copio un script para creación de un rol con permisos para los objetos de un usuario concreto que también te puede ser útil para la asignación de permisos. Recuerda revisarlo y adaptar los permisos para tus necesidades, como por ejemplo dejar sólo permisos de consulta para las tablas:

CREATE ROLE schem_b_user;

BEGIN
  dbms_output.enable(1000000);

    FOR x IN ( SELECT owner,
                      object_name,
                      DECODE(object_type, 'TABLE' ,   'select, insert, update, delete',
                                          'SEQUENCE', 'select',
                                          'VIEW',     'select',
                                                      'execute') AS privs,
                      DECODE (owner, 'USERA', 'SCHEMA_B_USER' ) AS app_user
                 FROM dba_objects
                WHERE object_type IN ('TABLE',    'PACKAGE', 'PROCEDURE',
                                      'FUNCTION', 'SEQUENCE', 'VIEW')
                  AND owner       IN ('USERA' ))
    LOOP
      BEGIN
         EXECUTE IMMEDIATE 'grant ' || x.privs       || ' on ' || x.owner ||
                           '.'      || x.object_name || ' to ' || x.app_user   ;
--        EXECUTE IMMEDIATE 'create or replace synonym '|| x.app_user||'.'||x.object_name||
--                           ' for ' ||x.owner||'.'||x.object_name ;
      EXCEPTION
        WHEN others THEN
          dbms_output.put_line('Bad owner = '||x.owner||';  Bad app_user='||x.app_user||
                               ';  Bad object_name='||x.object_name);
      END;
    END LOOP;
END;
/
GRANT schema_b_user TO userb;

 

El punto 3 ya lo tienes resuelto si sólo asignas los permisos especificos sobre objetos a cada usuario.

 

Gracias por el comentario.

 

Quisiera añadir que para que que 'U_CONSULTA' pueda trabajar sobre la VISTA sin que la base de datos le devuelva un ORA-00942, este procedimiento también daría resultado: 

   U_DATOS:
   SQL> GRANT SELECT ON TABLA TO U_VISTA WITH GRANT OPTION;

   U_VISTA:
   SQL> GRANT SELECT ON VISTA TO U_CONSULTA;

   U_CONSULTA:
   SQL> SELECT * FROM VISTA;

 

Se elimina por tanto la sentencia de concesión de permisos de U_VISTA a U_CONSULTA sobre el objeto U_DATOS.TABLA:

--   U_VISTA:
--   SQL> GRANT SELECT ON U_DATOS.TABLA TO U_CONSULTA;

 

Con este procedimiento, se restringe aún mas los permisos del usuario U_CONSULTA, ya que este sólo podría realizar una consulta a la vista VISTA y no a la tabla TABLA.
 

Saludos!

 

como podria crear un usuario  y brindarle el privilegio de crear tablas e indices

dentro del usuario system a otro usuario dentro de su sesion?

y que el primer usuario creado al dar privilegios al usuario que creara lo haga con with grant option

por que me marca error que solo con admin option

gracias de antemano

En respuesta a por Ryusaki (no verificado)

Ryusaki, creo que me he perdido, tendrás que explicarte mejor.
A lo mejor lo que quieres hacer es más complicado, pero de momento asegúrate de que al crear el usuario le asignas estos roles para poder conectarse y crear objetos en su propio esquema:
GRANT "CONNECT" TO "APP";
GRANT "RESOURCE" TO "APP";

En respuesta a por Carlos

 disculpa tienes razon tampoco me entendi muy bien,

pues en system debo crear a un usuario con privilegios restringidos

solo crear tablas, vistas e indices con la opcion with grant option, y dentro de ese usuario 

crear otro que tambien pueda crear vistas e indices,

pero me marca error que solo con with admin option o que no tengo suficientes

privilegios. 

gracias de antemano

En respuesta a por Ryusaki (no verificado)

Creo que el problema que tenemos es de nomenclatura. No se puede crear un usuario dentro de otro usuario. A los usuarios se les asigna un tablespace por defecto, que es donde se crean todos sus objetos, si no se especifica lo contrario.

Por lo que dices yo entiendo que quieres crear un primer usuario que pueda crear objetos en el tablespace del usuario SYSTEM. Lo que ya no me queda tan claro es cómo quieres crear el segundo, a lo mejor te sirve simplemente crear otro que también pueda crear objetos en el mismo tablespace.

Comentarte también que no es muy habitual ni recomendable que un usuario cree objetos en el tablespace de SYSTEM, este espacio se suele reservar para objetos del sistema, a menos que esté muy justificado lo que quieres hacer, yo lo haría sobre otro tablespace.

Te recomiendo echarle un vistazo al post Cómo crear un nuevo esquema en Oracle paso a paso, y si sigues teniendo problemas, concretando ya con tablespaces y usuarios seguro que nos terminamos de aclarar.

En respuesta a por Carlos

Saludos.

gracias de nuevo por tu respuesta.

y pues lo del usuario dentro de otro usuario es condicion para mi tarea, asi k no tengo opcion.

y lo peor de todo es que no puedo dar privilegios de system al primer usuario con with grant option

de crear tablas o vistas, y eso tambien es una condicion indispensable para entregar mi tarea,

y ademas tengo que validar que cada usuario creado solo pueda insertar datod dentro de  

una tabla (por ejemplo proyectos) pero que solo

pueda crear proyectos del departamento al que pertenece el usuario, como podria hacer eso? 

con trigger, procedimientos, funciones?

En respuesta a por Ryusaki (no verificado)

 Insisto en que no se puede crear un usuario dentro de otro usuario, puedes asignar a un usuario los mismos privilegios o los mismos roles que a otro, o que compartan el mismo tablespace, o que puedan hacer determinadas acciones sobre los mismos objetos, pero no hay usuarios dentro de otros.

Lo que sí hay, y a lo mejor te refieres a eso es que con la opción WITH GRANT OPTION puedes hacer que el usuario al que concedes privilegios sobre determinados objetos pueda a su vez concederlos a otros usuarios.

Por lo que comentas, seguramente lo que necesitas es conceder permisos de sistema en lugar de privilegios sobre objetos, y para ello, si quieres que el usuario 'autorizado' pueda a su vez conceder estos permisos has de utilizar la opción WITH ADMIN OPTION.

 

Sobre el control de los datos que un usuario inserta en una tabla, si se tratara de un control sencillo podrías utilizar un CHECK, pero por lo que comentas creo que lo más apropiado sería crear un TRIGGER del tipo BEFORE INSERT asociado a esta tabla que antes de cada INSERT haría la comprobación de que el usuario pertenezca al departamento.

buenas tardes yo voy hacer una base de datos en un solo computador q sentencia utilizo para q el resto de las computadoras tengan acceso a ella y poder ver todas las tablas como tambien agregar,eliminar y modificar registro?

gracisas

Saludos.
Deseo dar privilegios a un usuario para que pueda acceder y modificar los datos y la estructura de los objetos de un esquema. Como puedo hacer esto sin necesidad de ejecutar un grant individual por cada objeto del esquema?

Gracias de antemano por la ayuda.

En respuesta a por Reynaldo (no verificado)

Si quieres darle los privilegios sólo para un esquema creo que no te queda otro remedio que hacerlo objeto por objeto. La alternativa más parecida que se me ocurre es aplicar al usuario un grant de sistema, pero estos permisos los tendría para todos los esquemas:

SQL> GRANT SELECT ANY TABLE TO usuario;

 

De todas maneras, puedes utilizar el diccionario para crearte un script y 'automatizar' la concesión de permisos.

 

Puedes crear sinónimos para todos los objetos, para que el usuario no tenga que acceder con el formato 'esquema.tabla' a las tablas:

SELECT 'create public synonym ' || table_name || 
       ' for Esquema.' || table_name || ' to usuario;'
FROM dba_tables WHERE owner = 'Esquema';

 

Y sacar las sentencias de asignación de los permisos:

SELECT 'grant select, insert, update on Esquema.' 
       || table_name || ' to usuario;'
FROM dba_tables WHERE owner = 'Esquema';

 

En respuesta a por Carlos

Buenos Dias.
Soy nuevo en oracle y estube creando algunos roles especificamente para la creacion de objetos tales como tablas vista, secuencias entre otros mas y no consigo cual es el privilegio para crear  los COMMENT en las tablas. agradeseria su maximo apoyo en esto.

En respuesta a por Frank (no verificado)

Hola Frank

Si el usuario que utilizas es el propietario de las tablas no necesita ningún privilegio especial para crear comentarios en ellas.
Si, por ejemplo, el usuario miusuario ha creado la tabla mitabla podrás ejecutar sin problemas la sentencia:

COMMENT ON COLUMN mitabla.nombre IS 'mi comentario sobre el campo nombre';

Si el usuario que utilizas no es el owner de la tabla o vista que quieres comentar necesitará tener el privilegio COMMENT ANY TABLE y si se tratara de comentar en un índice necesitaría el COMMENT ANY INDEXTYPE.

Para concedérselo, con un usuario con privilegios de DBA (System, por ejemplo) ejecuta la sentencia:

GRANT COMMENT ANY TABLE TO miusuario;

 

Si me puede colaborar con lo siguiente

Desde un usuario con rol de administrador llamado “hr”  el cual es propietario de dos tablas llamadas “employess” y “departments” he creado un usuario llamado “usuario1” y he creado un rol llamado “palma” con privilegios para hacer select a las dos tablas mencionadas, para crear vistas, para crear tablas y para crear sesión, este rol se lo he dado a “usuario1”, además he creado un sinónimo público para cada una de las tablas, las siguientes son las sentencias

 

Créate user usuario1 identified by clave

create role palma

 

grant select on employees to palma

grant select on departments to palma

grant create view to palma

grant create table to palma

grant create session to palma

 

grant palma to usuario1

create or replace public synonym departments

for hr.departments

 

create or replace public synonym employess

for hr.employess

 

Mi problema es que al iniciar sesión con “usuario1” y tratar de crear una vista llamada “vista1” con la siguiente sentencia, me dice que no tengo privilegios suficientes para crear la vista.

 

create or replace view vista1 as

select * from employees

 

le agradezco si me puede ayudar con este inconveniente.

 

 

 

Las sentencias son exactamente como las escribes? Porque al sinónimo le llamas 'employess', y la vista la creas sobre 'employees'

De todas maneras, para no liarte con el sinónimo puedes crear la vista haciendo referencia directa a la tabla, en lugar del sinónimo:

create or replace view vista1 as select * from hr.employees

 

Hola!! Tengo una duda acerca de el otorgar privilegios, necesito crear un usuario que pueda consultar todas las tablas menos 1 (cliente por ejemplo) le hago el grant select any table to usuario1 pro no se como quitarle el permiso a esa unica tabla?? gracias!!

buenas tardes Señores, Tengo un dilema , les escribo por si me pueden ayudar, tengo una tabla el cual hago un select en pl y muestra correctamente los registros, sin embargo si este select lo ato un reporte, me genera un error de tabla o vista no existe. He chequeado los permisos, sinonimos y nada.. De antemano agradezco su colaboración. Saludos!

hola necesito ayuda para hacer una modificacion de character set
estoy utilizando Oracle 11 y mi schema ya esta en producción
trato de alterar la tabla:

ALTER TABLE ESCOLARIDAD CHARACTER SET utf8;
pero me manda el siguiente error :
Informe de error:
Error SQL: ORA-01735: opción ALTER TABLE no válida
01735. 00000 - "invalid ALTER TABLE option"
pense que eran los privilegios del usuario pero ya tiene todos los privilegios hacia una tabla
y gracias de antemano =)

Hola a todos, tengo el siguiente problema, al iniciar la implementacion de un aplicativo sobre oracle 11g ,se le dio permisos de dba a un usuario, ahora la auditoria solicita quitar estos permios de dba, los quite pero empezaron a salir mensajes en el aplicativo al ejecutar algo como "no existen privilegios en tablespace USERS",revisé y hay muchas tablas creadas en el tablespace "users" por este usuario, pero el usuario tiene un tablespace asignado llamado PALMA. Q instruccion debo ejecutar para darle privilegios sobre este tablespace especificamente a esas tablas Y Puedo cambiar estas tablas al tablespaces Palma?

Sobre los permisos, los usuarios tienen un tablespace definido por defecto, pero los permisos se definen más bien sobre las tablas, no sobre los tablespaces. Puede que el problema sea que al quitarle los privilegios de DBA necesites asignar algún permiso genérico. Te enlazo un artículo en el que se comenta cómo crear un nuevo esquema de usuario desarrollador de Oracle para que puedas revisar si tu usuario tiene los permisos básicos para trabajar.

Sobre mover las tablas a otro Tablespace, enlazo otro post en el que se explica cómo unificar tablespaces en Oracle 10g, ojo con esta operación, que no es complicada, pero es delicada, si lo haces prepáralo bien y te recomiendo que hagas antes una prueba con una tabla que no utilice nadie.

 

Hola,
Desde hace un par de dias que estoy leiendoel foro, y hoy he pensado participar,
Un saludo.

Buenas tardes solicito su ayuda mi problema es el siguiente:
Desde el usuario system@xe; connect Normal, trato de compilar un pck que tiene en uno de sus cursores la vista v$process, pero obtengo como error: La tabla o vista no existe, pensé que era por permisos de administrador, pero me sigue saliendo el mismo error. Necesito compilar el pck pero con conexión Normal, porque en SYSDBA no me aparece este error, pero las tablas que se encuentran en el pck y otros prc, los tengo creados en modo de conexión normal, y al pasar a conexión SYSDBA las tablas creadas aparecen que no existen.

Prueba a poner delante de los objetos el nombre del propietario. Como SYSDBA has de tener acceso a todo, pero si la tabla la ha creado otro usuario y no hay ningún sinónimo público definido sobre la misma has de indicar delante de la misma el usario propietario.

Por ejemplo: SELECT * FROM usuario.tabla

hola buenas, tengo este codigo para generar dos tablas y me da error el crearlas, me podrias decir en q fallo?

CREATE TABLE DIRECCIN(
IDDIRECCION NCHAR(7) NOT NULL CONSTRAINT PK_IDDIRECCION PRIMARY KEY,
CALLE VARCHAR2(30) NOT NULL,
NUMERO NCHAR(4),
PISO NCHAR(2),
LETRA CHAR(2),
CP NCHAR(5),
POBLACION NCHAR(15) NOT NULL
);

Buenas, Me gustaría que pudieran ayudarme con un problema. Tengo creadas unas tablas ya con sus respectivos synonimos y con los privilegios asignados. Sin enbargo cuando intento jalar esa tabla desde APEX, éste no puede ver las tablas que he creado!! Que debo hacer para que las tablas puedan ser vistas por APEX???

hola carlos un favor soy nuevo en esto de los permisos mira este es mi problema

 

tengo un usuario 'sisalman' con varias tablas, lo que me piden es crear otro usuario 'basico' el cual pueda ver todas las tablas del usuario 'sisalman' pero que solo pueda ejecutar sentencias select, para esto estoy usando Oracle 10G y Toad 9, te agradesco mucho

Hola a todos

Quisiera pedirles su apoyo.

Tengo una funcion que levanta un concurrente en oracle. Si la ejecuto en el esquema apps funciona bien pero si lo hago desde apex no levanta el concurrente.

 

Ya le di permisos al esquema para que vea la funcion, ya no me marca error en cuanto a que no la ve pero sigue sin levantar el concurrente.

 

Hay algo mas que deba hacer para apex pueda levantar el concurrente en oracle?

 

Saludos y gracias

buen dia, necsito de su colaboracion con los siguiente, tengo tres usuarios y uno de ellos es un esquema (usuario1, usuario2, esq_usuario3), como hago para crear roles y dar los siguientes privilegios:

1- el usuario1 puede consultar, actualizar, borrar, alterar, crear tablas o vistas en esq_usuario3

2- el usuario2 solo puede consultar las tablas y vistas del esquema esq_usuario3 tanto las actuales como las que se vallan creando, pero el usuario2 no puede actualizar, borrar, alterar ni crear tablas o vistas en esq_usuario3

3- el usuario1 no puede actualizar, borrar, alterar, crear tablas o vistas en ningun otro esquema diferente a esq_usuario3;

Buenas, Quisiera que me ayudara sobre un problema que tengo.

La Version de Oracle que uso es la versión 11.2.0.4. y bueno de lo que se trata el problema es que hay usuarios que no tienen permisos de actualización (update) sobre una determinada tabla pero al intentar el usuario hacer un “select for update” sobre esa tabla por más que le haya salido mensaje de que no tiene permisos, aun así logra bloquear la tabla y varios usuarios que si tienen permisos de update no puedan actualizar la tabla porque esta bloqueada debido al usuario que no tiene permisos de update y bloqueo la tabla y lo que se quiere es que por mas que intente hacer un "select for update", aparte de que no pueda hacerlo se desea que tampoco bloquee la tabla y no ocasione el problema.

He estado revisando y encontre una solución pero para la version 12c y no para la 11g en la que a un usuario se le quita los privilegios de select y se le otorga privilegio de read:

SQL> revoke select on sh.solo_lectura from usuario_solo_lectura; Revoke succeeded. SQL> grant read on sh.solo_lectura to usuario_solo_lectura; Grant succeeded.

Como podria otorgar permisos de lectura a un usuario para una determinada tabla para que no ocasione esos problemas mas o menos como el privilegio READ en la version 12c.

 

Gracias de Antemano.

Buenas tengo una duda con un script en oracle 12c soy nuevo utilizado oracle Como genero un script que me autogenere el bloqueo de todos los usuarios de la base de datos excluyendo SYS - SYSTEM

Cuestiones sobre vistas materializadas de Oracle

Cuestiones sobre vistas materializadas de Oracle Carlos 22 Enero, 2010 - 11:59

Abro este tema a propósito del artículo Vistas materializadas de Oracle para optimizar un Datawarehouse para que comentemos aquí cualquier cuestión relacionada con la creación, funcionamiento, consejos, errores, etc. de Vistas Materializadas de Oracle.

Enlazo para empezar la consulta que ha hecho Elena en el tema Cuestiones sobre los dblinks de Oracle sobre la creación de vistas materializadas a partir de tablas remotas (enlazadas por database links).

Tengo una duda, estoy haciendo un replica entre dos bases de datos Oracle 10g mediante vistas materializadas.

Todo bien hasta ahi, el problema es que se estan agregando columnas a la tabla principal pero estos cambios no los puedo reflejar en la tabla de replica. Mi duda es ¿Como modifico el Query que consulta la tabla principal para agregarle dentro de esa sentencia las nuevas columnas?

 

saludos

En respuesta a por OMARE (no verificado)

Buena pregunta. En teoría la única manera de agregar columnas a una vista materializada es borrar la vista y volver a recrearla completamente con la nueva definición.

El problema es que no existe ningún comando tipo ALTER TABLE que se pueda aplicar a las vistas materializadas para agregar columnas, o simplemente para cambiar la definición de una columna.

Para vistas con pocos datos no hay ningún problema, la recreación puede ser rápida. El problema viene cuando hablamos de vistas materializadas grandes, de un Data Warehouse por ejemplo, donde la recreación puede ser muy costosa.

Pero siempre hay una solución para todo. En el Blog de Arup Nanda he encontrado un excelente post que explica cómo ingeniárselas para alterar la definición de una vista materializada sin recrearla completamente.

Se trata de utilizar la opción ON PREBUILT TABLE al crear la vista para que la vista se apoye internamente en una tabla. Cuando se ha de realizar alguna modificación se borra la vista, pero la tabla interna permanece. Se realiza un ALTER TABLE sobre esta tabla, y después se vuelve a crear la vista materializada a partir de la tabla. Como la tabla ya existe la creación de la vista es muy rápida.

Extraigo a continuación las sentencias que permitirían hacerlo, consultar el detalle en el post original:

SQL> create table mi_vista (contador number(10));

SQL> create materialized view mi_vista on prebuilt table never refresh as select cast(count (1) as number(10)) contador from t1;

SQL> DROP MATERIALIZED VIEW mi_vista;

SQL> alter table mi_vista modify (contador number(11));

SQL> create materialized view mi_vista on prebuilt table never refresh as select cast(count (1) as number(11)) cnt from t1;

Y ahora me dirás que tu ya tienes creada tu vista materializada y esta solución llega un poco tarde. Es cierto, pero para eso Arup Nanda también propone una solución para hacer una reconstrucción de la vista materializada con el mínimo impacto en el rendimiento de nuestra base de datos:

1. Crear una tabla con la opción nologging a partir de la Vista materializada
SQL> create table nueva_vista_materializada nologging as select * from mi_vista;
2. Recoger la definición de la Vista materializada del diccionario de datos
SQL> select dbms_metadata.get_ddl ('MATERIALIZED_VIEW','MV1') from dual ;
3. Guardarla en un fichero que se ejecutará después
4. Editar el fichero añadiendo la opción ON PREBUILT TABLE.
CREATE MATERIALIZED VIEW "DATAPRIX"."MI_VISTA"  ("contador")ORGANIZATION HEAP ON PREBUILT TABLE PCTFREE 10
5.Hacer export de tipo Data Pump con la opción CONTENTS=METADATA_ONLY.
6. Eliminar la Vista materializada "mi_vista".
7. Renombrar la tabla nueva_vista_materializada a mi_vista.
8. Ejecutar el script creado anteriormente para recrear la Vista materializada
9. Importar el fichero de Dump exportado anteriormente.

Bueno, espero que esto te sirva, ya nos explicarás si lo has podido aplicar.

Pues yo estaba convencido de que la versión XE no permitía utilizar vistas materializadas, incluso consultando la comparativa de Oracle de opciones de las diferentes 'Editions' da la sensación de que en esta versión no se incluyan, pero si las estás usando está claro que sí.

Consultando la información sobre licenciamiento de Oracle Database Express Edition, parece que lo que no está incluído es el Query Rewrite con vistas materializadas (Materialized View Query Rewrite), pero sí una replicación básica con vistas materializadas de sólo lectura y actualización, que supongo que es lo que tú estás utilizando:

Basic Replication

Yes (read-only and updateable materialized view site only)

 

 

En cualquier caso espero que nos puedas explicar si sacas algo en claro con los logs, poder utilizar un método sencillo de replicación con BBDD Oracle XE seguro que va a interesar a mucha gente.

queria preguntarle si no tienen un tutorial de como realizar replicacion con vistas materializadas y con la que version de oracle es la adecuada soy novata en el tema y me seria de mucha ayuda solo es como proyecto de pruva entre dos o tre maquinas

Como crear una vista que le permita insertar, Editar y Eliminar registros desde una tabla x?

Hola, tengo una pregunta...

Necesito modificar la defnicion del select de la vista, se puede usar un ALTER MATERIALIZED VIEW en este caso?

y su se puede me dicen como es la sentencia porque no me funciona, lo escribi asi:

 

ALTER MATERIALIZED VIEW mi_vista

as SELECT.... ;

 

muchas gracias

CREATE MATERIALIZED VIEW SALUD_REPO REFRESH START WITH SYSDATE + 10/(24 * 60 * 54) NEXT SYSDATE + 10/(24 * 60 * 54) AS select * from eps@BDSALUD;

Si se puede lo que no se debe usar es, la intruccion FAST. ya que no está soportada por la ficha tecnica.

saludos

Envio de eMails y SMS's con PL/SQL

Envio de eMails y SMS's con PL/SQL Carlos 20 May, 2010 - 17:09

Abro este tema de envio de eMails y SMS's desde Oracle y PL/SQL para que podamos comentar dudas sobre cómo utilizar los paquetes que nos permiten el envío de eMails desde la base de datos, y otros mecanismos para crear nuestros propios sistemas de alertas, o simplemente informativos.

En este comentario de betorey_24 ya podemos encontrar un método para enviar emails con UTL_SMTP.

Y después elicived también nos recomendaba consultar el artículo Sending e-mail from Oracle, de Burleson Consulting

 

Que tal Carlos, una molestia he estado buscando en internet y no veo la forma de como enviar un SMS a un celular desde un PL/SQL, lo que he encontrado es que te lo manda pero como correo a tu cel y lo que me interesa es que sea un vil SMS ¿Sabes si Oracle tiene algo al respecto?

 

Saludos y Gracias.

En respuesta a por isunza

El envio de SMS's depende siempre de que las operadoras ofrezcan una interface para poder hacerlo, y cada una tiene su plataforma, y sus reglas. No creo que Oracle ofrezca ningún package que vaya actualizando con los protocolos de las operadoras telefónicas, por eso todo lo que encuentras es para enviar eMails.

No sé si lo has visto, pero hay operadoras que permiten enviar un eMail a una dirección que incluye el número de móvil, y ellas se encargan de hacer llegar el SMS al móvil. Es la opción más sencilla, pero dependes de si la operadora a la que envías el SMS ofrece este servicio. En EEUU lo tienen muchas, y lo llaman SMS gateway, es cuestión de investigar si la que tu utilizas lo ofrece. De momento puedes consultar este listado.

La otra opción (aparte de tener tu propia plataforma de mensajería ;)) es utilizar un servicio público de terceros que sí se dedican a 'entenderse' con las plataformas de las operadoras. Buscando también se puede llegar a encontrar alguno, aunque el servicio no suele ser gratuíto.

En el blog Inside Oracle APEX publican un ejemplo sobre cómo enviar SMS's con un procedure PL/SQL utilizando los servicios web de Esendex, y un usuario de prueba que has de crearte primero.

Ya nos dirás si al final lo consigues!

Buenos días,

Estoy intentando enviar un mail con una imagen desde Oracle con PL/SQL. Consigo hacerlo adjuntando la imagen, pero lo que quiero es que vaya en el cuerpo del mensaje. ¿Alguien puede ayudarme?.

Muchas gracias

 Hola Carlos: 
Soy nuevo aqui, me parece muy interesante el blog. Necesito mandar un e.mail con PLSQL, lo enviar, pero no se como adjuntar un archivo, agradeceria tu ayuda. Muchas gracias.

 

Otra duda... Quiero enviar mail comun desde la base de datos, ya lo logre hacer con SYS pero quiero hacerlo con otro usuario y no me deja, me da error de que no tiene habilitado ACL.

Cuando quiero ejecutar el siguiente codigo para crear ACL:

BEGIN

   DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (

    'utl_smtp.xml',

    'SMTP Access',

    'USUARIO',

    TRUE,

    'connect',

    null,

    null

  );

  COMMIT;

END;

 

y los otros 2 procedimientos que siguen tampoco me deja, porque me dice que esta corrupto el package body DBMS_NETWORK_ACL_ADMIN.

 

Sabes como puedo solucionar eso?

 

 

En respuesta a por diegozaw

Hola Diego

 

Si el código del package está corrupto tendrías que repararlo volviendo a cargar el código del package. Te enlazo un post que explica cómo reparar packages inválidos.

Pero sobretodo asegúrate antes de tocar nada de que realmente el cuerpo del package no está bien, ya que la operación de recrear y recompilar los packages y vistas del catálogo no deja de ser delicada.

Como explican en el post, antes de nada, para comprobar el estado general utiliza a sentencia 

SELECT r.comp_name, r.version, r.status FROM dba_registry r;

 

Hice todo lo que decia pero no me funciona, es mas me compila todo menos el package DBMS_NETWORK_ACL_ADMIN.

Tengo otra base de datos que tambien tiene corrupto ese package pero igual envia con otro usuario distinto a SYS, es muy raro.

En respuesta a por diegozaw

Buscando un poco he encontrado este post donde comentan que para utlizar ACL se ha de tener instalado previamente XML DB, ya que las ACL se almacenan en XML DB:

The 11g allows access to external packages UTL_TCP, UTL_HTTP, UTL_SMTP, UTL_MAIL, UTL_INADDR, DBMS_LDAP, but the access must be granted explicitly. Please note that ACLs are stored in XML DB and user must install XML DB for the use of ACL, if not installed.

Podría ser eso, comprueba si tienes instalado XML DB, y prueba suerte de nuevo :)

 

Hola Carlos

Esta buenisimo el tema, pero tengo una duda. Yo cree ya una ACL direccionando al correo de la empresa y todo funciono perfecto.

Ahora necesito utilizar gmail, solo funciona con Stunnel? debe instalarse en el servidor donde este la base de datos?

gracias por la ayuda

 

Hola Carlos, mi pregunta es: como se puede recibir correos mediante Oracle, poder obtener el remitente, asunto, cuerpo del mensaje y los archivos adjuntos? muchas gracias por la ayuda

En respuesta a por Yesenia

La verdad es que nunca he utilizado Oracle para recibir o almacenar correos. No sé si existe algún package específico que te permita parsear directamente los campos sobre una tabla, y además almacenar ficheros adjuntos.

Si no, lo que seguro que encontrarás es alguna utilidad externa para convertir los mails a XML, y después podrías importarlos a Oracle con las utilidades para trabajar con XML.

 

Hola, cómo puedo enviar emails a otros dominios como hotmail, etc? Internamente puedo enviar emails, pero para enviar externos me sale ORA-29279:SMTP permanent error: 550 5.7.1 Unable to relay.
Gracias de antemano

Hola Carlos,

Actualmente existe un procedimiento que esta utilizan el utl_SMTP. Los correos salen perfectamente sin ningun problema. Sin embargo luego de varios dias, resulta que los correos no salen, entonces bajo la base de datos e inmediatamente empiezan a salir. Sabes que podrá ser el problema? Algun parametro en la base de datos?

Muchas gracias por su ayuda.

saludos,

En respuesta a por Esteban (no verificado)

Hola, estoy presentando exactamente el mismo problema que tu. ¿Pudiste resolverlo?

 

De antemano gracias por tu respuesta.

Buenos dias...hay alguna manera de recibir correo en plsql..es que necesitamos recorrer la cabecera del correo para sacar de ahi la fecha en la q se ha enviado un correo..me podrias dar algun tipo de orientacion ya sea en este lenguaje o algun otro.. Gracias.

En respuesta a por Jean Carlos Oyague (no verificado)

Lo que yo tengo es un archivo en lenguaje pl/sql que permite enviar mensajes desde mi dominio da.go.cr. Si desea le puedo dar ese archivo, escríbame a: mgarcia at da.go.cr Con ese archivo no creo que pueda resolver lo de recorrer la cabecera del correo, pero si lo necesita, ya sabe, estoy a su disposición.

Hola Carlos, estoy probando UTL_MAIL sobre una Base Oracle 11G (que utiliza UTL_SMTP haciendo mas facil la programacion del PL/SQL para enviar mails).

Pero me encuentro con un problema que no logro resolver. Para descartar un tema de conectividad use el UTL_SMTP y resolvio perfecto. Se enviaron los mails. Ahora cuando utilizo el UTL_MAIL me da un error extraño de tipo de datos.

Intente cambiar todo al tipo de dato definido en el PR de UTL_SMTP y nada.

Copio debajo el codigo ORA que me arroja:

ORA-06502: PL/SQL: error numérico o de valor ORA-06512: en "SYS.UTL_MAIL", línea 654
ORA-06512: en "SYS.UTL_MAIL", línea 671 ORA-06512: en "PRC_SEND_MAIL", línea 19
ORA-06512: en línea 1

La linea #19 se corresponde con la llamada al UTL_MAIL.SEND()
La llamada la hago asi: EXEC PRC_SEND_MAIL('laura@dominio', 'laura@dominio');
y te paso el código porque no le encuentro la vuelta.

CREATE OR REPLACE PROCEDURE PRC_SEND_MAIL (p_from IN VARCHAR2, p_to IN VARCHAR2, p_cc IN VARCHAR2 DEFAULT NULL, p_co IN VARCHAR2 DEFAULT NULL, p_subject IN VARCHAR2 DEFAULT 'Subject vacio', p_message IN VARCHAR2 DEFAULT 'Mensaje vacio') AS mail_conn UTL_SMTP.connection;
p_smtp_host VARCHAR2 (30) := 'smtp-desarrollo.grupo.dominio.com';
p_smtp_port NUMBER :=25;
vMType VARCHAR2(30) := 'text/plain;
charset=us-ascii';
BEGIN mail_conn := UTL_SMTP.open_connection (p_smtp_host, p_smtp_port);
UTL_MAIL.SEND( sender => p_from, recipients => p_to, cc => p_cc, bcc => p_co, subject => p_subject, message => p_message, mime_type => vMType, priority => 3 );
UTL_SMTP.quit (mail_conn);
EXCEPTION WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error THEN NULL;
dbms_output.put_line ('Error: '||SQLERRM);

/ Les agradecere muchisimo vuestras colaboraciones.

 

Base de Datos Lenta

Base de Datos Lenta Gustavo.chavez 5 Marzo, 2014 - 17:52

 Hola buen dia!

Me gustaria pedir informacion acerca de la optimizacion de la BD oracle, ya que en actualmente tenemos un problema con una base de datos, el problema es que nuestra base de datos esta muy lenta.

Ya le hemos cambiado algunos parametros en la BD, pero aun asi nada. 

Utilzamos una aplicacion Cliente - Servidor y untilizamos el procesamiento por lotes (Batch).

 

Me podrian apoyar indicandome que comsultas pudiera correr para investigar si mi base de datos esta sana, y el porque de la lentitud.

 

Adjunto una imagen el cual me indica en el plana de ejecucion los siguientes datos,

 

Saludos

 

 

 

 Que tal Gustavo

La lentitud se puede dar por n escenarios querys mal diseñados, bloqueos en la base de datos, consumo en I/O, fragmentacion en las tablas e indices, etc.

 

Por lo que muestras en el plan de ejecucion te recomiendo lo siguiente:

--Generar estadisticas tu esquema owner (ejemplo con X7)

exec dbms_stats.gather_schema_stats (ownname=>'X7', estimate_percetnt=>10);

 

--Habilitar el monitoreo de los indices que de tu owner

ALTER INDEX "INDEXNAME" MONITORING USAGE;

 

ALTER INDEX "INDEXNAME" NOMONITORING USAGE; (para deshabilitar el monitoreo)

Revisa la vista v$object_usage para validar cuales se estan utilizando, los que si se usen recrealos con un REBUILD los que no eliminalos de tu base de datos

 

--Shrink de tablas

Con esto vas a compactar los bloques vacios que tengas en tablespace, esto te ayuda a no tener tanto I/O en tablespace my grandes, si son tablas grandes evalua el particionamiento.

 

Primero habilitas el monitoreo

ALTER TABLE "TABLENAME" ENABLE ROW MOVEMENT;

 

ALTER TABLE "TABLENAME" SHRINK SPACE CASCADE;

si no te recupera espacio muevelos a otro tablespace con un ALTER TABLE "NOMBRE" MOVE TABLESPACE "TBSNAME"; y luego regresalos al original, ten cuidado con los segmentos LOB para esos la sentencia para moverlos es 

ALTER TABLE OWNER.TABLA MOVE LOB("nombredecolumnalob") store as (tablespace "nombredetablespace")

 

Ya que acabes con esto genera otra vez las estadisticas por los cambios de bloques y registros en los indices.

 

Si la consulta no te toma los indices checa la opcion de usar el HINT para forzara a que los use.

 

Saludos

Configuracion de DATAGUARD

Configuracion de DATAGUARD Gustavo.chavez 6 Septiembre, 2013 - 21:37

 Hola que tal buen dia!

 

Me gustaria saber como poder configurar un dataguard

 

Saludos

 

 

Pues si te soy sincero nunca lo he utilizado, y parece que de momento nadie más contesta.

Lo único que puedo hacer es enlazarte un documento técnico de Oracle en castellano sobre Data Guard:

Documento técnico de Oracle: Oracle Data Guard 11g versión 2

(lo adjunto a tu tema, por si más adelante cambian el enlace..)

Si encuentras información interesante, no olvides compartirla!

 

Hola que tal

 

Una pregunta... se puede realizar o configurar oracle data guard de 10g en rac a 11g en rac?.

 

me encomendaron esta tarea en el trabajo... alguien me puede ayudar por favor

 

Gracias y saludos!!!!

Optimización de consultas SQL

Optimización de consultas SQL Carlos 10 Marzo, 2010 - 00:00

Abro este tema para comentar cuestiones sobre rendimiento y optimización de consultas SQL en bases de datos Oracle, ejecución y análisis de Explain Plans, etc.

Carlos, excelente haber encontrado este foro... felicidades!!

Estoy auditando las consutlas SQL que se han ejecutado por un periodo determinado, sin embargo, entre la información que me arroja, encuentro: Tipo de objeto, Orden, Filas, Tamaño (KB), Costo, Tiempo(seg), Costo de CPU y Costo de E/S. Los costos a qué se refieren? en qué unidades está expresado el dato? Esto, es por cada select, union, group by, etc. que tenga en mi consulta.

De antemano, gracias !!

En respuesta a por Tody1820 (no verificado)

Tody, el coste de las consultas es una estimación que hace el optimizador de Oracle cuando ejecutas un Explain Plan, y es una medida interna que has de tener en cuenta, pero que al ser una estimación no es muy precisa.
Básicamente te va a servir para estimar si un cambio en la manera de hacer una Query va a conllevar una mejora en su ejecución, no vas a poder compararlo con otras medidas de rendimiento, y ni siquiera es aconsejable compararlo entre dos consultas diferentes que no devuelvan los mismos datos.

En respuesta a por Carlos

Gracias por tu respuesta Carlos !! ... entendiendo entonces que cada consulta tiene su propia medición, hice unas adecuaciones optimizando una misma consulta y las cantidades cambiaron mucho. Sin embargo, me sigue quedando la duda del por qué los valores de un inner join, left join, etc. siempre salen muy altos a pesar de haber optimizado en gran medida los demás elementos de la consulta.  Deberían de aminorar al igual que los otros elementos, no es así? 

En respuesta a por Tody

No necesariamente. Depende de la optimización que hayas hecho. Si no varían quiere decir que la optimización puede mejorar otras cosas, pero no afecta demasiado a las joins.

Si la optimización la habías hecho justo para mejorar las joins, revisa la consulta porque puede que algo no se esté comportando como esperabas.

Si es una optimización orientada a mejorar en otros puntos, si el coste de esos puntos y el general se ha reducido ya irás bien encaminado.

Estoy intentando optimizar esta query y me es imposible se os ocurre algo:
SELECT COLOR.VAL_MINIMO,
MAX(COLOR.VAL_DESCRIPCION)
FROM COLOR, COLOR6
WHERE COLOR.VAL_CODIGO = COLOR6.DV_COD_VALOR AND
COLOR6.DV_COD_MODELO = 80 AND
COLOR6.DV_COD_VERSION = 2 AND
COLOR6.DV_COD_DATO = 118
GROUP BY COLOR.VAL_MINIMO
ORDER BY VAL_MINIMO

Tiene de coste 22 y es una exageracion.

Gracias.

Carlos, podrias por favor darme una explicacion detallada respecto a tecnicas de optimizacion o tal vez unos link de referencia (revision sitactica,plan de ejecucion, otros), muchas gracias

Hola Ramón

La mejor referencia que se me ocurre es la misma documentación de Oracle. Para temas de optimización, en el libro Oracle Database Performance Tuning Guide 11g, por ejemplo, seguro que vas a encontrar casi todo lo que necesites, y sabes que la fuente es fiable. Te enlazo el capítulo Optimizing SQL Statements de este libro de la documentación online de Oracle, espero que te sea útil.

 

hola estoy empezando a estudiar sql y quería saber si hay un analizador de consultas sql para oracle, y no cometer fallos en la sintaxis, y si lo hay se le puede poner cualquier tabla?? muchas gracias.

En respuesta a por caperucita

Que yo sepa no hay ninguna limitación específica para los OR que puedes incluir en una sentencia SQL de Oracle, aunque si utilizas demasiados, y dependiendo también de lo que contengan los OR, se puede llegar a producir un error de tipo ORA-03113: end-of-file on communication channel.

También te digo que el error te va a venir más bien porque hayas alcanzado el límite que tu base de datos, o los conectores que intervengan puedan manejar para una sola sentencia SQL, no por llegar a un límite para los OR que contiene la sentencia.

Este límite para sentencias, además, puede depender de la versión de la base de datos, de tu entorno, del cliente que utilices..

Te enlazo una respuesta en askTom, que lo deja bastante claro, y un documento de referencia de Oracle 10g en el que se indican los límites lógicos de la base de datos, y al final apunta esta nota: 

The limit on how long a SQL statement can be depends on many factors,  
including database configuration, disk space, and memory

Y de todas maneras, lo normal es que una sentencia con muchos OR siempre se pueda resolver de otra manera más simple, ¿cuántos OR necesitas incluir en tu sentencia?

 

como puedo optimizar esta consulta, me aparece un index fast full scan en la tabla en_objeto el indice de esta tabla es sgl_categoria y las pks son:cod_convocatoria, tpo_objeto, cod_etapa, sgl_tipologia

 

Saber conexiones en ORACLE no realizan ningun query o tarea y matarlas.

Saber conexiones en ORACLE no realizan ningun query o tarea y matarlas. Pedro Tablas Sanchez 28 Julio, 2010 - 22:45

Buen día a todo:

Mi pregunta como puedo hacer una consulta donde me diga que usuarios(conexiones) a la base de datos de oracle no esten ejecutando nada (query o proceso), en realidad saber que no esten haciendo nada y que tengan ya mucho tiempo en 'INACTIVE' para de este modo eliminarlas.

se me ocurre que con un profile matar todas las que esten en STATUS='SNIPED' de la vista V$SESSION pero que pasa si me guio por el tiempo y estan realizando algun query y los cambia de estado, por eso pienso que si manejo tiempo de conectado (LOGON_TIME) y saber si no hacen nada (PARA ESTO ES EL QUERY qUE MENCIONO) para asi matar las sesiones que en realidad son zombies.

Gracias a todos por sus posibles respuestas.

Y porquè no utilizas el parámetro IDLE_TIME del profile? Con el IDLE_TIME defines el tiempo máximo sin actividad que se permite a las conexiones. Cuando se supera este tiempo, definido en minutos, sin que la conexión haya tenido ninguna actividad, Oracle desconecta al usuario.

 

Por ejemplo, para crear un perfil definiendo un límite de máximo de inactividad de 30 minutos:

 

SQL> create profile prof_inactividad limit idle_time 30;

Y para asignar este perfil a cualquier usuario:

 

SQL> alter user usuario_limitado profile prof_inactividad;

 

De todas maneras pruébalo bien antes de aplicarlo a todos los usuarios, porque las limitaciones de los profiles siempre son delicadas, y pueden producir algún efecto que no se había tenido en cuenta..

En respuesta a por Carlos

  Gracias Carlos por la respuesta, y si eso ya lo tengo en unos usuarios pero en caso de otros necesito saber si no están inactivos pero talvez esten realizando alguna tarea (query) entonces debo de saber que en realidad esten ahi sin hacer nada para así poder eliminar esas sesiones, y el campo IDLE_TIME  hacer que cambie de estatus en v$session a SNIPED.

 

que mas debo hacer para saber que no esten haciendo nada porque no puedo matarlas si enrelizadad estan haciendo u nquery  y tarda 30 min y se quede inavtiva la session.

 

Gracias y Saludos. 

En respuesta a por Pedro Tablas Sanchez

Tienes razón Pedro, con el parámetro IDLE_TIME sólo se controla la inactividad de las sesiones por la parte cliente, pero los procesos que se han lanzado en el servidor pueden seguir ejecutándose con la sesión cliente inactiva.

Podrías probar a utilizar el parámetro EXPIRE_TIME de SQL*NET, que comprueba cada cierto tiempo (los minutos que le especifiques) que las conexiones estén activas a nivel cliente/servidor, la comprobación se hace desde la parte servidora. Ten cuidado, porque parece ser que consume bastantes recursos del servidor.

Te enlazo el Tip Terminating Oracle connections with connect_time, idle_time, expire_time andinbound_connect_timeout de Burleson Consulting, que explica cómo funciona este parámetro y como modificar el fichero sqlnet.ora para ponerlo en funcionamiento.

Buen dia-
como restringir por listener o tnsnames que los usuarios que estan sniped y mato, no queden como killed y ese idle aumente y nunca mueran....??

no puedo hacer un job que los mate por sistema operativo, porque se manejan despachadores y mataria varios usuarios...

alguien tiene alguna idea, agradezco respuestas a mi correo.

quedo atenta
silvia

Hola Carlos como veo que es lo que esta realizando un usuario conectado?
Saludos!!

En respuesta a por Anonimo (no verificado)

Tienes que activar la auditoría de Oracle sobre ese usuario. Te enlazo un tema de Auditoría, seguimiento y seguridad en BD Oracle, en el que encontrarás informacion sobre cómo activar la auditoría sobre usuarios y otros objetos de BBDD Oracle.

Mientras no activas la auditoría, otra manera de ver lo que hace un usuario 'al vuelo' es utilizando esta consulta:

Últimas consultas SQL ejecutadas en Oracle y usuario que las ejecutó

select distinct vs.sql_text, vs.sharable_mem,
vs.persistent_mem, vs.runtime_mem, vs.sorts,
vs.executions, vs.parse_calls, vs.module,
vs.buffer_gets, vs.disk_reads, vs.version_count,
vs.users_opening, vs.loads,
to_char(to_date(vs.first_load_time,
'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time,
rawtohex(vs.address) address, vs.hash_value hash_value ,
rows_processed , vs.command_type, vs.parsing_user_id ,
OPTIMIZER_MODE , au.USERNAME parseuser
from v$sqlarea vs , all_users au
where (parsing_user_id != 0) AND
(au.user_id(+)=vs.parsing_user_id)
and (executions >= 1) order by buffer_gets/executions desc

 

Base de datos lenta cada cierto tiempo

Base de datos lenta cada cierto tiempo luismedina 13 Agosto, 2015 - 06:01

tengo una base de datos oracle 11g.

la base de datos estuvo trabajando normalmente hasta hace 2 dias.

la base de datos se pone lenta cada 1 hora. se pone tan lento los aplicativos al momento de buscar y realizar cualquier transaccion.

la base de datos esta en modo archivelog.

 

slds

Hola Luis

El modo archivelog consume recursos porque la base de datos tiene que ir escribiendo los archivos de log cada cierto tiempo, pero tendrás que investigar un poco para averiguar si el problema de lentitud de la base de datos viene por ahí o es por otra cosa.

Si te lo puedes permitir una prueba sencilla sería desactivar el modo archivelog durante unas horas, y comprobar si en ese tiempo se producen los problemas de lentitud o no.

Hola Carlos

Voy a desactivar el archive log para monitorearlo.

Otra consulta como puedo verificar que consultas, modificaciones y procedimientos almacenados se estan ejecutando on line, esto para saber monitorear ya que posiblemente algun procedimiento almacenado se este ejecutando y poniendo lento la base de datos. si podrias recomendarme alguna herramienta grafica 

 

gracias

 

Excepción de E/S: Connection reset by peer Error Code: 17002

Excepción de E/S: Connection reset by peer Error Code: 17002 Herberth Guzman 23 Marzo, 2017 - 16:47

Buen dia.

Que bueno es este foro, gracias por compartir sus conocimientos.
Les comento que tengo un problema ya que hay un programa hecho en genexus que emite un reporte, despues de 7 horas de estar ejecutandose muestra este mensaje de error

 

Text       : Excepción de E/S: Connection reset by peer

Error Code : 17002 SQLState   : null

java.sql.SQLException: Excepción de E/S: Connection reset by peer

 

Ya busque que puede ser, pero no logro encontrar el problema.

 

El usuario con el que se ejecuta el programa tiene el perfil pordefault de la base de datos y esta en todas sus opciones ILIMITADO.

 

Si alguien, puede ayudarme, se los agradezco.

 

Gracias.

En respuesta a por Herberth Guzman

Estas cosas siempre son difíciles de encontrar. Primero deberías asegurarte de que realmente no sea un problema de red, o de interrupción de la comunicación. Si no va por ahí, podría tener algo que ver con los drivers de conexión que utilices, si no te cuesta mucho cambiarlo, podrías probar a utilizar otro driver.

Buenos dias, muchas gracias por responder.

 

Les comento que efectivamente, era problema de red.

 

Lograron detectar que era un switch el que ocasionaba el problema, lo cambiaron y listo, todo OK.

 

Que pasen un buen dia.

Fragmentacion de tablas

Fragmentacion de tablas luismedina 3 Septiembre, 2015 - 01:34

Buenas noches

Existen algunas tablas que al tener demasiadas consultas y modificaciones se ponen lentos.

Averiguando me comentaron que debo de tener tablas fragmentadas, asi como regenerar los indices y actualizar las estadisticas.

mi duda es :

- como listar las tablas que estan fragmentadas

- como bajar la fragmentacion de dichas tablas

- el proceso de regenerar los indices y actualizar las estadisticas tienen alguna consecuencia negativa (por ejemplo en sql server este proceso aumenta en gran cantidad el log de sql server)

 

Slds 

Hola Luis

Para eliminar la fragmentación de las tablas de tu base de datos Oracle, si te puedes permitir que no se pueda acceder a ellas mientras dura el proceso, lo más efectivo es hacer un export de las tablas, y después un import. De esta manera, al importarlas, ya se guardan los datos contiguos y se elimina la fragmentación que pueda haber. Si no puedes hacer el export/import, también hay otras maneras. Echa un vistazo a este post para más detalles. Estos consejos de OMARE también te pueden ayudar.

Y si tu base de datos es 10g o superior seguro que el comando shrink table te va a ser de utilidad para compactar los datos de las tablas.

Para consultar el nivel de fragmentación de las tablas, puedes utilizar esta sentencia, obtenida del blog de Bulachi):

  select /*+ rule */ a.owner, a.segment_name, a.segment_type, round(a.bytes/1024/1024,0) MBS,
      round((a.bytes-(b.num_rows*b.avg_row_len) )/1024/1024,0) WASTED,
      'ALTER TABLE '||a.owner||'.'||a.segment_name||' ENABLE ROW MOVEMENT'||';'||'ALTER TABLE '||a.owner||'.'||a.segment_name||' SHRINK SPACE COMPACT'||';'||'ALTER TABLE '||a.owner||'.'||a.segment_name||' SHRINK SPACE;' "SCRIPT"
from dba_segments a, dba_tables b
where a.owner=b.owner and
      a.owner not like 'SYS%' and a.segment_name = b.table_name and a.segment_type='TABLE'
group by a.owner, a.segment_name, a.segment_type, round(a.bytes/1024/1024,0) ,round((a.bytes-(b.num_rows*b.avg_row_len) )/1024/1024,0)
having round(bytes/1024/1024,0) >10
order by round(bytes/1024/1024,0) desc;

La regeneración de los índices y mantener las estadísticas actualizadas en principo siempre va a ser beneficioso para optimizar el rendimiento de una base de datos Oracle y, que yo sepa, no tiene un efecto demasiado grande sobre los logs de Oracle, que igualmente ya deberían estar controlados para que no crezcan indefinidamente. Lo único que has de tener en cuenta es que estos procesos consumen recursos en el momento en que se ejecutan, así que tendrías que buscar ventanas de actuación en las que la base de datos tenga poca actividad o los usuarios no estén conectados.

 

Hola:

 

Me gustaría saber si alguien sabe de un buen curso semi-presencial o mejor online sobre migración de datos, en versión avanzada y/o pl/sql avanzado, necesito un reciclaje un poco dirijido.

Si me podéis recomendar, os lo agradezco.

Vistas Materializadas Funciones Dblinks

Vistas Materializadas Funciones Dblinks moyanoa 20 Febrero, 2015 - 20:20

Hola, acabo de entrar a una empresa que esta trabajando en ORacle 10 y usan VISTAS simples, las bases son grandes y traen muchos datos y obviamente demora mucho tiempo en traerlos, por eso decidi ir por VISTAS MATERIALIZADAS, el tema es el siguiente las vistas actuales trabajan con dblinks y COUNT y SUM en las consulta, y por otro lado los datos no cambian mucho por lo que hacer un COMPLETE una vez al dia estaria ok.

 

Aca viene la pregunta, estuve leyendo que si se usa las funciones de SUM se tiene que tener ciertos aspectos en cuenta como por ejemplo de usar COUNT sobre ese campo, o crear una vista materializada para ese SUM???

 

Seria correcto realizar esta vista o ven una forma mejor?

 

CREATE MATERIALIZED VIEW nombre_view
BUILD IMMEDIATE
REFRESH NEXT SYSDATE + 1 COMPLETE
ENABLE QUERY REWRITE AS

 

Desde ya muchas gracias.

Saludos

 

 

Agustin.-

 

Habría que ver la query de la vista, pero yo creo que no vas a tener problema al crear la visita materializada con estas opciones, sobretodo porque utilizas un refresco en modo COMPLETE, que no tiene tantas restricciones o requisitos como el modo FAST o incremental.
De todas maneras lo mejor es que primero hagas una prueba, si la consulta te tiene que dar algún problema con la vista materializada lo verás ya en el primer refresco que hagas.

Problemas con el Export y Expdp en Oracle 10g

Problemas con el Export y Expdp en Oracle 10g Gustavo.chavez 22 Agosto, 2014 - 16:07

 Hola buen dia;

Actualmente cuento con una Base de datos Oracle 10g en un SRV Windows Server 2003 x64 bits, pero al tratar de realizar el Export y/o el Expdp me indica errores(Anexo imagenes y logs), 

Le agradeceria mucho su informacion y conocimiento ya que lo he estado intentanto realizar por varias ocasiones sin exito.

Cabe señalar que cuento con storage suficiente para poder realizarlo.

 

Saludos

 

Hola Gustavo, por lo que veo en los logs de salida pueden ser por dos cosas, una algún block dañado de las tablas que no te dejan hacer el export, la otra algún daño físico que tengas a nivel storage por que veo que intentas hacer el export pero te truena en varias tablas,

Valida haciendo el mismo ejercicio en un ambiente alterno con un dmp que tengas.

En respuesta a por OMARE

Hola, quería hacer una consulta.
Necesito exportar un esquema desde una base de datos en AIX e importarlo en un Oracle en Linux. Se que se pueden exportar tablespaces con la opción Transportable Tablespaces por la diferencia en los endian. Pero, ¿Es posible solo exportar un esquema? ¿Cómo podría hacerlo? ¿Algún ejemplo?

Gracias!

ORA-01114: IO error writing block to file 201

ORA-01114: IO error writing block to file 201 jalbe_40 31 Julio, 2014 - 03:34

   Estoy trabajndo en algunas consultas SQL en Oracle 11g que tienes algunas funciones de agregacion  y union  y al momento de ejecurta el script me 

  da los siguientes errores:

  

  ORA-01114:IO error writing block to file 201

 

 

  ORA-27069: skgfdisp: attempt to do I/O beyond the range of the file

  OSD-04026: Invalid parameter passed. 

  ORA-01114: IO error writing block to file 201 

  ORA-27069: skgfdisp: attempt to do I/O beyond the range of the file

  OSD-04026: Invalid parameter passed. 

 

  Esto me sudeces cuando trato de consultar conjuntos grandes de datos, Ciertamente son errores de IO y espacio insuficiente en Tablespace.

 

 Mi pregunta es si los otros errores estan relacionados con el espacio insuficiente en tablespace?

 

 DISCULPEN!!