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:18Recopilació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:50Abro 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
Buen dia, necesito saber como
Buen dia, necesito saber como restrinjo a un usuario para que no tenga mas de 3 o x sesiones.
- Inicie sesión para enviar comentarios
Puedes hacerlo utilizando los
Puedes hacerlo utilizando los profiles de Oracle.
Está comentado en el tema del foro Limitar el numero de conexiones por usuario
Con Enterprise Manager mismo puedes definir nuevos profiles y especificar o limitar sus características.
Un saludo,
- Inicie sesión para enviar comentarios
Hola muchachos ando
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 ..?
- Inicie sesión para enviar comentarios
Buenas tardes, necesito saber
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
- Inicie sesión para enviar comentarios
Que tal osk, prueba con el
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.
- Inicie sesión para enviar comentarios
Buen dia, Podrian apoyarme
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
- Inicie sesión para enviar comentarios
Buen día Carlos: Eh visto
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.
- Inicie sesión para enviar comentarios
Hola Abraham Lo normal es
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,
- Inicie sesión para enviar comentarios
Concatenar cadenas en Oracle
Concatenar cadenas en Oracle Carlos 12 May, 2014 - 10:59Concatenar 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.
Hola carlos necesito ayuda en
Hola carlos necesito ayuda en un merge que estoy generando. Muchas gracias
- Inicie sesión para enviar comentarios
Es cierto, yo he trabajado
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.
- Inicie sesión para enviar comentarios
Creación de esquemas en Oracle
Creación de esquemas en Oracle Carlos 12 Junio, 2009 - 17:55Este 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.
OWNER or User
Un esquema es un owner o un user ???
- Inicie sesión para enviar comentarios
El Schéma es un user...
El Schéma es un user...
- Inicie sesión para enviar comentarios
Entonces puedo entender que
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
- Inicie sesión para enviar comentarios
El tablespace y la instancia
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.
- Inicie sesión para enviar comentarios
Esquema
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
- Inicie sesión para enviar comentarios
[quote=carlos]El esquema lo
[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
- Inicie sesión para enviar comentarios
Select any table
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?
- Inicie sesión para enviar comentarios
Permisos de consulta sobre tablas de diferentes esquemas
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
- Inicie sesión para enviar comentarios
Pregunta
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
- Inicie sesión para enviar comentarios
Has de asignar permisos a los usuarios
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";
- Inicie sesión para enviar comentarios
hola me pueden ayudar con un
hola me pueden ayudar con un script para identificar los tablespace utilizados por un esquema
- Inicie sesión para enviar comentarios
En Recopilacion de scripts y
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.
- Inicie sesión para enviar comentarios
a ver si comprendo ??? 1
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 ???
- Inicie sesión para enviar comentarios
Me encantó el post, me fue
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.
- Inicie sesión para enviar comentarios
Hola Tengo un usuario USR1
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
- Inicie sesión para enviar comentarios
Puedes hacerlo utilizando
Puedes hacerlo utilizando sinónimos públicos de Oracle, se trata sólo de crear un sinónimo para cada objeto excluyendo del mismo el nombre del owner.
Te enlazo el post Utilización de sinónimos para compartir objetos, donde se explica con más detalle cómo hacerlo.
Un saludo,
- Inicie sesión para enviar comentarios
Gran post, tengo una duda
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
- Inicie sesión para enviar comentarios
[quote=OMARE]Gran post, tengo
[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
- Inicie sesión para enviar comentarios
Cada usuario tiene definido
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;
- Inicie sesión para enviar comentarios
Hola Carlos, necesito crear
- Inicie sesión para enviar comentarios
El procedimiento que yo
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.
- Inicie sesión para enviar comentarios
Hola Carlos Tengo nivel súper
- Inicie sesión para enviar comentarios
Hola Carlos, necesito crear
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?
- Inicie sesión para enviar comentarios
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:34Abro 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
q pasa si qiero dar los rpivilegios pero no solo a una tabla si no a todas a la ves
- Inicie sesión para enviar comentarios
Para conceder permisos sobre
Para conceder permisos sobre todas las tablas de un usuario a otro usuario se puede utilizar la sentencia:
grant SELECT_ANY_TABLE to ;
Carlos Fernández
Analista de sistemas
- Inicie sesión para enviar comentarios
EN Oracle 10 no me deja GRANT SELECT_ANY_TABLE TO;
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
- Inicie sesión para enviar comentarios
Jose, seguramente el problema
Jose, seguramente el problema es que el usuario 'aplicacion1' no tiene permisos de DBA.
Deberías hacer la concesión de permisos con el usuario SYS o SYSTEM, por ejemplo, o otorgar a 'aplicación1' privilegios para que a su vez pueda conceder permisos.
- Inicie sesión para enviar comentarios
Hola, necesito crear una
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
- Inicie sesión para enviar comentarios
Asignar permisos a otros esquemas
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
- Inicie sesión para enviar comentarios
buen dia, necesito de su
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
- Inicie sesión para enviar comentarios
Sobre el punto 1, en
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.
- Inicie sesión para enviar comentarios
Comentario
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.
- Inicie sesión para enviar comentarios
Saludos! como podria crear
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
- Inicie sesión para enviar comentarios
Ryusaki, creo que me he
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";
- Inicie sesión para enviar comentarios
disculpa tienes razon
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
- Inicie sesión para enviar comentarios
Creo que el problema que
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.
- Inicie sesión para enviar comentarios
Saludos. gracias de nuevo por
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?
- Inicie sesión para enviar comentarios
Insisto en que no se puede
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.
- Inicie sesión para enviar comentarios
buenas tardes yo voy hacer
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
- Inicie sesión para enviar comentarios
Saludos. Deseo dar
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.
- Inicie sesión para enviar comentarios
Si quieres darle los
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';
- Inicie sesión para enviar comentarios
Privilegios de DBA
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.
- Inicie sesión para enviar comentarios
Privilegios para crear comentarios
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;
- Inicie sesión para enviar comentarios
Gratitud
Amigo Muchas Gracias por tu respuesta, me sirvio de gran ayuda...
- Inicie sesión para enviar comentarios
Si me puede colaborar con
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.
- Inicie sesión para enviar comentarios
Las sentencias son
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
- Inicie sesión para enviar comentarios
Hola!! Tengo una duda acerca
- Inicie sesión para enviar comentarios
buenas tardes Señores, Tengo
- Inicie sesión para enviar comentarios
hola necesito ayuda para
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 =)
- Inicie sesión para enviar comentarios
Hola a todos, tengo el
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?
- Inicie sesión para enviar comentarios
Sobre los permisos, los
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.
- Inicie sesión para enviar comentarios
Buena solución, eddy, gracias
Buena solución, eddy, gracias por compartirla!
- Inicie sesión para enviar comentarios
Hola, Desde hace un par de
Hola,
Desde hace un par de dias que estoy leiendoel foro, y hoy he pensado participar,
Un saludo.
- Inicie sesión para enviar comentarios
Pues bienvenida, 'pepas',
Pues bienvenida, 'pepas', pero recuerda que si quieres abrir nuevos temas, y acumular puntos por participar, tienes que registrarte.
Saludos,
- Inicie sesión para enviar comentarios
Buenas tardes solicito su
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.
- Inicie sesión para enviar comentarios
Prueba a poner delante de los
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
- Inicie sesión para enviar comentarios
hola buenas, tengo este
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
);
- Inicie sesión para enviar comentarios
Buenas, Me gustaría que
- Inicie sesión para enviar comentarios
hola carlos un favor soy
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
- Inicie sesión para enviar comentarios
Hola a todos Quisiera
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
- Inicie sesión para enviar comentarios
ayuda con esto porfa
ayuda con esto porfa
- Inicie sesión para enviar comentarios
buen dia, necsito de su
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;
- Inicie sesión para enviar comentarios
Buenas, Quisiera que me
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.
- Inicie sesión para enviar comentarios
Buenas tengo una duda con un
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
- Inicie sesión para enviar comentarios
Cuestiones sobre vistas materializadas de Oracle
Cuestiones sobre vistas materializadas de Oracle Carlos 22 Enero, 2010 - 11:59Abro 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
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
- Inicie sesión para enviar comentarios
Buena pregunta. En teoría la
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.
- Inicie sesión para enviar comentarios
Pues yo estaba convencido de
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.
- Inicie sesión para enviar comentarios
queria preguntarle si no
- Inicie sesión para enviar comentarios
Como crear una vista que le
- Inicie sesión para enviar comentarios
Hola, tengo una
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
- Inicie sesión para enviar comentarios
CREATE MATERIALIZED VIEW
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
- Inicie sesión para enviar comentarios
Envio de eMails y SMS's con PL/SQL
Envio de eMails y SMS's con PL/SQL Carlos 20 May, 2010 - 17:09Abro 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
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.
- Inicie sesión para enviar comentarios
El envio de SMS's depende
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!
- Inicie sesión para enviar comentarios
Buenos días, Estoy intentando
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
- Inicie sesión para enviar comentarios
Hola Carlos: Soy nuevo
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.
- Inicie sesión para enviar comentarios
Pues la verdad es que yo no
Pues la verdad es que yo no lo he hecho nunca.
Supongo que tendrás que revisar las opciones de UTL_SMTP para ver si se pueden adjuntar archivos al email, o a lo mejor alguien que lo haya probado alguna vez nos pueda ayudar..
- Inicie sesión para enviar comentarios
Otra duda... Quiero enviar
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?
- Inicie sesión para enviar comentarios
Hola Diego Si el código del
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;
- Inicie sesión para enviar comentarios
Hice todo lo que decia pero
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.
- Inicie sesión para enviar comentarios
Buscando un poco he
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 :)
- Inicie sesión para enviar comentarios
Ahora voy a probar.
Ahora voy a probar. Muchisimas gracias Carlos.
- Inicie sesión para enviar comentarios
Hola Carlos Esta buenisimo el
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
- Inicie sesión para enviar comentarios
Hola Carlos, mi pregunta es:
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
- Inicie sesión para enviar comentarios
La verdad es que nunca he
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.
- Inicie sesión para enviar comentarios
Hola, cómo puedo enviar
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
- Inicie sesión para enviar comentarios
Hola Carlos, Actualmente
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,
- Inicie sesión para enviar comentarios
Hola, estoy presentando
Hola, estoy presentando exactamente el mismo problema que tu. ¿Pudiste resolverlo?
De antemano gracias por tu respuesta.
- Inicie sesión para enviar comentarios
Buenos dias...hay alguna
- Inicie sesión para enviar comentarios
Lo que yo tengo es un archivo
- Inicie sesión para enviar comentarios
Hola Carlos, estoy probando
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.
- Inicie sesión para enviar comentarios
Base de Datos Lenta
Base de Datos Lenta Gustavo.chavez 5 Marzo, 2014 - 17:52Hola 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
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
- Inicie sesión para enviar comentarios
Configuracion de DATAGUARD
Configuracion de DATAGUARD Gustavo.chavez 6 Septiembre, 2013 - 21:37Hola que tal buen dia!
Me gustaria saber como poder configurar un dataguard
Saludos
Pues si te soy sincero nunca
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!
- Inicie sesión para enviar comentarios
Hola que tal Una
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!!!!
- Inicie sesión para enviar comentarios
Optimización de consultas SQL
Optimización de consultas SQL Carlos 10 Marzo, 2010 - 00:00Abro 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
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 !!
- Inicie sesión para enviar comentarios
Tody, el coste de las
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.
- Inicie sesión para enviar comentarios
Gracias por tu respuesta
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í?
- Inicie sesión para enviar comentarios
No necesariamente. Depende de
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.
- Inicie sesión para enviar comentarios
Perfecto. Buscaré entonces
Perfecto. Buscaré entonces la forma de optimizar aun más la consulta. Mil gracias por compartir tu conocimiento en este mundo tan maravilloso como lo son las bases de datos y más, en BI.
Saludos.
- Inicie sesión para enviar comentarios
Estoy intentando optimizar
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.
- Inicie sesión para enviar comentarios
Carlos, podrias por favor
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
- Inicie sesión para enviar comentarios
Hola Ramón La mejor
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.
- Inicie sesión para enviar comentarios
hola estoy empezando a
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.
- Inicie sesión para enviar comentarios
hola Me gustaria saber
hola
Me gustaria saber cuantos OR puedo poner en una clauaula WHERE?
Gracias
- Inicie sesión para enviar comentarios
Que yo sepa no hay ninguna
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?
- Inicie sesión para enviar comentarios
como puedo optimizar esta
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
- Inicie sesión para enviar comentarios
Hola Diana ¿Y la consulta
Hola Diana
¿Y la consulta SQL? Si tienes el explain plan también ayudaría.
Lo único que para poder crear imágenes tienes que registrarte.
Saludos,
- Inicie sesión para enviar comentarios
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:45Buen 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
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..
- Inicie sesión para enviar comentarios
Gracias Carlos por la
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.
- Inicie sesión para enviar comentarios
Tienes razón Pedro, con el
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.
- Inicie sesión para enviar comentarios
Gracias Carlos.. Lo voy a
Gracias Carlos.. Lo voy a revisar y te cuento
- Inicie sesión para enviar comentarios
Pasaron 6 años y no contaste
Pasaron 6 años y no contaste a Carlos.
- Inicie sesión para enviar comentarios
Buen dia- como restringir por
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
- Inicie sesión para enviar comentarios
Hola Carlos como veo que es
Hola Carlos como veo que es lo que esta realizando un usuario conectado?
Saludos!!
- Inicie sesión para enviar comentarios
Tienes que activar la
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
- Inicie sesión para enviar comentarios
Base de datos lenta cada cierto tiempo
Base de datos lenta cada cierto tiempo luismedina 13 Agosto, 2015 - 06:01tengo 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
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.
- Inicie sesión para enviar comentarios
Hola Carlos Voy a desactivar
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
- Inicie sesión para enviar comentarios
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:47Buen 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.
Perdon, olvide indicar que la
Perdon, olvide indicar que la base de datos es Oracle 11g.
- Inicie sesión para enviar comentarios
Estas cosas siempre son
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.
- Inicie sesión para enviar comentarios
Buenos dias, muchas gracias
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.
- Inicie sesión para enviar comentarios
Fragmentacion de tablas
Fragmentacion de tablas luismedina 3 Septiembre, 2015 - 01:34Buenas 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
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.
- Inicie sesión para enviar comentarios
Hola: Me gustaría saber si
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.
- Inicie sesión para enviar comentarios
Vistas Materializadas Funciones Dblinks
Vistas Materializadas Funciones Dblinks moyanoa 20 Febrero, 2015 - 20:20Hola, 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
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.
- Inicie sesión para enviar comentarios
Problemas con el Export y Expdp en Oracle 10g
Problemas con el Export y Expdp en Oracle 10g Gustavo.chavez 22 Agosto, 2014 - 16:07Hola 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
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.
- Inicie sesión para enviar comentarios
Hola, quería hacer una
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!
- Inicie sesión para enviar comentarios
ORA-01114: IO error writing block to file 201
ORA-01114: IO error writing block to file 201 jalbe_40 31 Julio, 2014 - 03:34Estoy 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!!
Pues sí, tiene toda la pinta
Pues sí, tiene toda la pinta de ser lo mismo. Pero es un tablespace normal o es el temporal?
- Inicie sesión para enviar comentarios
Disculpen la demora. Sí.
Disculpen la demora.
Sí. los demás errores si están relacionado con el error de espacio insuficiente, se incremento el tamaño de los archivos de tempdb, para solvental el estos errores.
Gracias!!
- Inicie sesión para enviar comentarios