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

Estado del raid de arranque en ODA x7

Problema:

En nuestro oda, despues de un tiempo sin reinciar y antes un proceso crítico en las proximas fechas, necesitamos saber si una vez apagado, al arrancar de nuevo el raid de discos donde se encuentra el boot funcioná de manera correcta

SOLUCIÓN:

Para realizar esta tarea, lo haremos con el comando mdad sobre los dispositivos «/dev/md0» y «/dev/md1» que son los discos que tienen el boot de arranque (En raid 0)

[root@test-node1 ~]##NODO 0
[root@node0-x7 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Thu May 3 20:48:11 2018
Raid Level : raid1
Array Size : 511936 (499.94 MiB 524.22 MB)
Used Dev Size : 511936 (499.94 MiB 524.22 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun Jun 24 01:00:04 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Name : localhost.localdomain:0
UUID : f208c90f:1aeddba4:5aab5a39:da7f9f34
Events : 43

Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
[root@node0-x7 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.1
Creation Time : Thu May 3 20:48:12 2018
Raid Level : raid1
Array Size : 467694592 (446.03 GiB 478.92 GB)
Used Dev Size : 467694592 (446.03 GiB 478.92 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Wed Jun 27 09:29:54 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Name : localhost.localdomain:1
UUID : ce4fb3e0:2af57fa0:7608ff49:cf4e9e5f
Events : 4171

Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 8 19 1 active sync /dev/sdb3

##NODO 1
[root@node1-x7 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Thu May 3 20:44:44 2018
Raid Level : raid1
Array Size : 511936 (499.94 MiB 524.22 MB)
Used Dev Size : 511936 (499.94 MiB 524.22 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Tue Jun 26 15:27:01 2018
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Name : localhost.localdomain:0
UUID : 3d087a10:957b48ba:8f50c397:b5a34ea3
Events : 43

Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
[root@node1-x7 ~]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.1
Creation Time : Thu May 3 20:44:45 2018
Raid Level : raid1
Array Size : 467694592 (446.03 GiB 478.92 GB)
Used Dev Size : 467694592 (446.03 GiB 478.92 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Wed Jun 27 09:28:56 2018
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Name : localhost.localdomain:1
UUID : 74e59374:1639f352:fea3567d:5efacab3
Events : 4098

Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 8 19 1 active sync /dev/sdb3

</pre class>

En la salida del comando, tenemos que ver que la etiqueta "Working devices" está en 2 y que la etiqueta "Failed devices" está a 0

Esta comprobación hay que realizarla en los dos nodos para asegurarnos

Como registrar en ASR de manera automática ODA-X7-2-HA

Problema:

Para cuando no estamos en la oficina y necesitamos que en caso de fallo hardware del ODA (Oracle Database Appliance) que se abra un caso de manera automática con Oracle. Con esto el servicio técnico de Oracle ya se pondría en contacto con nosostros

SOlución:

En primer lugar nos conectamos al nodo primario del oda y a continuacion hacemos el registro, para ello previamente necesitaremos un usuario de mos (usuario de soporte de oracle)

[root@test-node1 ~]# odacli configure-asr -u test@test-enterprise -a -t proxyport-r proxy.enterprise.com
Asr User password: 

Job details                                                      
----------------------------------------------------------------
                     ID:  8deefdbc0-8266-4392-a76e-d906aae9f7
            Description:  Configure ASR
                 Status:  Created
                Created:  June 8, 2018 10:12:57 AM CEST
                Message:

Con esto ya esta registrado nuestro sistema en ASR, ahora debemos comprobar que está funcionando de manera correcta con los comandos odacli describer-asr y odacli test-asr

[root@test-node1 ~]# odacli describe-asr
ASR details
----------------------------------------------------------------
ID: ea1158b8-4f6e-48fa-83c8-112cec37ee0
Name: ASR
ASR Type: Internal
External ASR Manager IP : 192.168.25.150
UserName: test@enterprise.com
ProxyServerName: proxy.enterprse.com
ProxyPort: 3128
ProxyUserName:
SnmpVersion: V3
State: Configured
Created: June 8, 2018 10:09:55 AM CEST
Updated: June 8, 2018 10:13:28 AM CEST
[root@test-node1 ~]# odacli test-asr

Job details
----------------------------------------------------------------
ID: 28034-4003-48fa-a847-4720711ddaf3
Description: Test ASR
Status: Created
Created: June 8, 2018 10:14:15 AM CEST

 

¿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;