Ver tamaño tablespace temporal en Oracle

Problema:

Necesitamos saber el tamaño que hay usado en el tablespace temporal de nuestra base de datos

Solución:

Para saber el espacio usado por el tablespace temp, nos vale con las vistas clásicas de tamaño de tablespace, para ello tenemos que consultar en la vista dba_temp_free_space

Con la siguiente query sabríamos el espacio usado:

SELECT *
FROM   dba_temp_free_space

 

 

Dar permisos de lectura a un usuario en todos sus objetos

PROBLEMA:

Hemos creado un usuario en Oracle y queremos darle permisos de SELECT en todos los objetos del esquema. Esto supondria tener que ir uno por uno dando permisos de grant.

Solución:

Para ello lo que vamos ha hacer es con una query sacar un fichero txt con todos los grant que luego ejecutaremos directamente.

Por ejemplo nuestro usuario se llama read_user

CREATE USER read_user IDENTIFIED BY lectura;

A continuación ejecutamos la siguiente consulta

 SELECT 'GRANT SELECT ON MySchema.'||object_Name||' TO read_user;' From dba_objects where object_type = 'TABLE' and owner = 'Usuario_propiertario'

Quedando algo de esta manera

RANT SELECT ON Usuario_propiertario.USERPICKERFILTER TO read_user;
GRANT SELECT ON Usuario_propiertario.USERPICKERFILTERGROUP TO read_user;
GRANT SELECT ON Usuario_propiertario.USERPICKERFILTERROLE TO read_user;
GRANT SELECT ON Usuario_propiertario.PROJECTVERSION TO read_user;
GRANT SELECT ON Usuario_propiertario.VERSIONCONTROL TO read_user;
GRANT SELECT ON Usuario_propiertario.VOTEHISTORY TO read_user;
GRANT SELECT ON Usuario_propiertario.WORKFLOWSCHEME TO read_user;
GRANT SELECT ON Usuario_propiertario.WORKFLOWSCHEMEENTITY TO read_user;
GRANT SELECT ON Usuario_propiertario.JIRAWORKFLOWSTATUSES TO read_user;
GRANT SELECT ON Usuario_propiertario.APP_USER TO read_user;

Con esto nos ahorraríamos bastante tiempo

Logs creación bases de datos en ODA

Problema:

En nuestro ODA (Oracle Database Appliance X7-2HA), se necesita crear una base de datos, pero en algún momento de la instalación esta finaliza con el siguiente error:

ERROR: 2019-01-14 08:30:43: Failed to run /u01/app/12.2.0.1/grid/bin/sqlplus -L / as sysasm @/opt/oracle/oak/log/oda1/utils/12.2.1.3.0/sql/checkdg_redundancy_70817.sql
Died at /opt/oracle/oak/lib/oakutilslib/SqlUtils.pm line 95.

Para la creación de la base se ha usado la siguiente orden:

[root@oda1 dbconf]# oakcli create database -db test -oh OraDb12102_home1 -params dataguard 

Donde dataguard son los paremetros para la creación de nuestra base de datos

Solución:

Para tener mas información y saber en que ha fallado o donde puede estar el problema, los logs de la creación de la base de datos en ODA están en la ruta “/opt/oracle/oak/log/inca1/tools/12.2.1.3.0/ ” donde 12.2.1.3.0 es la version de nuestro demonio de OAK

Backup export oracle de uno o varios esquemas

Problema:

Necesitas hacer un export de un esquema de nuestra bases de datos Oracle, sin necesidad de hacer un backup completo de toda la base de datos

SOLUCIÓN:

Para solucionar este problema lo que debemos de hacer es especificarle el schema del cual queremos hacer backup

 

test:/home/oracle $ expdp schemas=myschema directory=EXPORT dumpfile=schema.dmp logfile = schemas.log

Export: Release 12.1.0.2.0 - Production on Mon Oct 29 08:35:40 2018

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Username: system

Processing object type SCHEMA_EXPORT/JOB
Processing object type SCHEMA_EXPORT/REFRESH_GROUP

Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /backup_exports/uxxiace/schema-RAC.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Oct 29 08:37:07 2018 elapsed 0 00:00:53

Con esto ya tendríamos el backup de un solo esquema

Tamaño de una base de datos

Problema:

Necesitamos saber el espacio que nos ocupa una base de datos, para por ejemplo poder clonarla en otro entorno

Solución:

Para ello lo que haremos será sumar los tamaños de los data_files, dba_temp_files, redo_logs y control_file

 SQL> SELECT SUM(bytes)/1024/1024/1024 data_size from dba_data_files;

 DATA_SIZE
----------
38.2902832

SQL> select nvl(sum(bytes),0)/1024/1024/1024 temp_size from dba_temp_files.
  2      
SQL> select nvl(sum(bytes),0)/1024/1024/1024 temp_size from dba_temp_files;

 TEMP_SIZE
----------
32.0693207

SQL> select sum(bytes)/1024/1024/1024 redo_size from sys.v_$log.
  2  ^C

SQL> select sum(bytes)/1024/1024/1024 redo_size from sys.v_$log;

 REDO_SIZE
----------
         4

SQL> select sum(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024 controlfile_size from v$controlfile;

CONTROLFILE_SIZE
----------------
      .017944336

Realizamos la suma de todas las querys y con esto tenemos el tamaño total de la base de datos

¿Cómo hacer que tu cuenta de Oracle nunca expire?

Cuando creamos un usuario en oracle, por defecto nos suele poner una fecha de caducidad en la contraseña, por lo que llegada esa fecha, nuestra password expira.

Si preferimos que la cuenta no caduque y modificar la contraseña según la política que creamos conveniente, lo podemos hacer de la siguiente manera.

Nos conectamos a la base de datos con el usuario administrador

SQL> connect sys/password as sysdba;

Continuar leyendo “¿Cómo hacer que tu cuenta de Oracle nunca expire?”

Reclamando espacio para tablas Oracle (Shrink)

Objetivo

Reclamar el espacio liberado de una tabla tras haber realizado un borrado masivo de filas (shrink).

Usando shrink

Oracle permite reclamar el espacio que hemos liberado en una tabla. Cuando borramos un montón de filas , observamos que la tabla sigue ocupando el mismo espacio. Shrink nos permite liberarlo.

Suponiendo que la tabla donde quiero liberar espacio se llama compras, los pasos a seguir serían los siguientes:

Habilitaríamos row movement en la tabla

SQL> alter table compras enable row movement;
Table altered

Reclamaríamos el espacio. Hay dos formas de hacerlo

SQL> alter table compras shrink space;
Table altered
SQL> Alter table compras shrink space cascade;
Table altered.

Continuar leyendo “Reclamando espacio para tablas Oracle (Shrink)”

Error UDE-28002 y ORACLE 28002 en Oracle al realizar un export

Problema:

Al realizar un export para hacer un backup de nuestra bases de datos, obtenemos el siguiente error:

C:\Agent13c\agent_inst\sysman\emd>C:\"app\oracle\product\12.1.0\dbhome_1\BIN"\expdp system/xxxxxx DUMPFILE=export:DB.dmp FULL=Y LOGFILE=log:DB.log
 
Export: Release 12.1.0.2.0 - Production on Dom Abr 1 23:30:05 2018
 
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
 
UDE-28002: la operación ha generado un error ORACLE 28002
ORA-28002: la contraseña vencerá en 6 días

Solución:

El problema es que la contraseña del usuario sysman caduca en una fecha próxima y por eso no podemos hacer el backup, para ello debemos poner que la contraseña del usuario no caduque. Lo haremos de la siguiente manera

SQL> SELECT LIMIT, RESOURCE_NAME FROM dba_profiles 
WHERE RESOURCE_NAME in (‘PASSWORD_GRACE_TIME’,'PASSWORD_LIFE_TIME’,
‘PASSWORD_REUSE_MAX’,'PASSWORD_REUSE_TIME’) AND
PROFILE=(select profile from dba_users where username=’USUARIO‘)
/

Usuario, en nuestro caso sera sysman y obtendremos la siguiente salida

 LIMIT       RESOURCE_NAME
—————————     ——————————–
120         PASSWORD_LIFE_TIME
  6         PASSWORD_GRACE_TIME

Para cambiar estas propiedas lo haremos con las siguiente sentencias

SQL> ALTER PROFILE “DEFAULT” LIMIT PASSWORD_LIFE_TIME UNLIMITED;

SQL> ALTER PROFILE “DEFAULT” PASSWORD_GRACE_TIME UNLIMITED;

Hacer un export (expdp) de una tabla de oracle restringiendo valores (query)

Objetivo

Añadir a nuestro export la posibilidad de filtrar datos mediante una consulta.

¿Cómo hacerlo?

En ocasiones necesitamos realizar un export(expdp) de un rango de valores concretos de una tabla en oracle. Para ello, al igual que podemos realizar consultas con la cláusula where para restringir la búsqueda con unos valores determinados, podemos incluir dentro de la opción query en nuestro export (expdp) cola cláusula where para hacerlo.

Para evitar errores del tipo:

ORA-39001: valor de argumento no valido
ORA-39035: Ya se ha especificado el filtro de datos SUBQUERY.

que muchas veces se deben a que no escapamos bien los valores, es recomendable crearnos un parfile donde se eliminarán estos problemas de sintaxis. Continuar leyendo “Hacer un export (expdp) de una tabla de oracle restringiendo valores (query)”

Obtener el código (DLL) de nuestro export de base de datos Oracle.

Objetivo

Cuando realizamos un export de base de dato oracle, este lo guarda en un formato que no es legible. En alguna ocasión, necesitamos ver el código DDL de nuestra base de datos. Explicamos cómo hacerlo.

¿Cómo lo hacemos?

Existe una opción para “traducir” nuestro dumpfile (export realizado en oracle) en un fichero sql y así poder ver el código DDL de creación de nuestra base de datos.

Partiendo de la base de que ya tenemos generado nuestro dumpfile haremos lo siguiente:

impdp system/****** directory=export dumpfile=export.dmp sqlfile=ddl.sql

export.dmp es nuestro fichero export que previamente hemos realizado realizado con la herramienta expdp y dll.sql es el fichero donde se volcarán las sentencias DLL de nuestro export.