viernes, 22 de enero de 2021

Restrict MODE

 When a database is started in restricted mode only users with restricted access can login to the database. The reason to start database in restrict is to restrict normal users to connect to the database. To switch the database back to normal mode, you would need to restart the database.

One can start the database in restricted mode by using the following option when starting up.

SQL> STARTUP RESTRICT;
shows database is in restricted mode


sojha@testdb> select logins from v$instance;
LOGINS
RESTRICTED


If you need to grant a user access to database when it’s in restricted mode, you can run the following SQL.
SQL> GRANT RESTRICTED SESSION TO scott;
Grant succeeded.


To revoke access restricted mode access
SQL> REVOKE RESTRICTED SESSION FROM scott;


How to find the users that have restricted session access:
find users who have been granted through the role (displays 1 level)
SELECT b.grantee, a.grantee || ‘ (Role)’ AS granted
FROM dba_sys_privs a, dba_role_privs b
WHERE a.privilege = ‘RESTRICTED SESSION’
AND a.grantee = b.granted_role
UNION
SELECT b.username, ‘User (Direct)’ -- find users who have given access not through role
FROM dba_sys_privs a, dba_users b
WHERE a.privilege = ‘RESTRICTED SESSION’
AND a.grantee = b.username;

GRANTEE GRANTED
SCOTT User (Direct)
SYS DBA (Role)
SYSTEM DBA (Role)


To change from restricted mode to unrestricted/active mode, which can switch without restarting the database.
SQL> alter system disable restricted session;
System altered.

SQL> select logins from v$instance;
LOGINS
ALLOWED

Also database can be placed in restricted mode by running the following DDL without restarting the database.
SQL> alter system enable restricted session;
System altered.

SQL> select logins from v$instance;
LOGINS
RESTRICTED

Note: There seems to be an issue when disabling restricted mode in 10.2.0.1, you can try to shutdown from the same session where restricted session was disable was executed from.


SQL> shutdown immediate;
ORA-01097: cannot shutdown while in a transaction commit or rollback first
You can work around this by executing shutdown from a new session or executing commit/rollback from the session where restricted session was disabled.

Generando reportes AWR, ASH y ADDM

 En algún momento durante el monitoreo de nuestra base de datos Oracle será necesario obtener información detallada en reportes, estos podrían ser los de AWR, AHR y/o ADDM. Este post se enfocará en realizar las mismas utilizando scripts, una manera alternativa a lo que nos ofrece con la interfaz gráfica de Enterprise Manager. A continuación se detalla los pasos para obtener los reportes.



A) Reporte AWR (awrrpt.sql)
El utilitario de informes AWR proporciona una visión general del rendimiento de bases de datos en un determinado tiempo. En esencia, calcula la variación de la actividad de la base de datos en el intervalo de tiempo elegido. el script "awrrpt.sql" se encuentra en el directorio $ORACLE_HOME/RDBMS/admin.
La salida del archivo es ubicada en el directorio actual. Para una mejor comprensión de dicho informe seleccionar el formato HTML.

1. Ingresamos al directorio donde se generará el Informe AWR.
bash-3.2$ cd /u01/informes/
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
bash-3.2$
2 Nos conectamos vía sqlplus con usuario de provilegios de DBA.
bash-3.2$ sqlplus pticona

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jun 22 23:58:15 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL>
3. Ejecutamos awrrpt.sql y nos aparecerá los datos actuales de la instancia.
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  798387748 PRMY                1 prmy
3.1. Elegimos la opción para que el informe se genere en formato "html".
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type:html

Type Specified:  html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 798387748         1 PRMY         prmy         primario

Using  798387748 for database Id
Using          1 for instance number

3.2. Para encontrar todos los AWR de la base de datos solo damos enter sin escribir nada.
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing  without
specifying a number lists all completed snapshots.

Enter value for num_days:

Listing all Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
prmy         PRMY                 1 18 Jun 2014 01:30      1
                                  2 18 Jun 2014 11:13      1
                                  3 18 Jun 2014 12:00      1
                                  4 22 Jun 2014 15:04      1
                                  5 22 Jun 2014 16:00      1
                                  6 22 Jun 2014 17:00      1
                                  7 22 Jun 2014 18:00      1
                                  8 22 Jun 2014 19:00      1
                                  9 22 Jun 2014 20:00      1
                                 10 22 Jun 2014 21:00      1
                                 11 22 Jun 2014 22:00      1
                                 12 22 Jun 2014 23:00      1
                                 13 23 Jun 2014 00:01      1
3.3. Con el listado desplegado, elegimos el intervalo de tiempo.
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 10
Begin Snapshot Id specified: 10

Enter value for end_snap: 11
End   Snapshot Id specified: 11
3.4. Asignamos el nombre para el reporte.
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_10_11.html.  To use this name,
press  to continue, otherwise enter an alternative.

Enter value for report_name: reporte_awr.html
.
.
Report written to reporte_awr.html
3.5. Salimos de sqlplus.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
bash-3.2$
4 Finalmente verificamos el archivo creado.
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
reporte_awr.html
bash-3.2$
5 Para realizar una comparativa de reportes AWR, utilizar el siguiente script.
SQL> @$ORACLE_HOME/rdbms/admin/awrddrpt.sql



B) Reporte ASH (ashrpt.sql)
El reporte ASH es útil para determinar la cantidad de sesiones activas, lo que estaban haciendo, y que sentencias SQL son las más activas durante el período de tiempo seleccionado. Especialmente es muy útil para el análisis de problemas de rendimiento transitoria. El script "ashrpt.sql" se encuentra en el directorio $ORACLE_HOME/RDBMS/admin.
La salida del archivo es ubicada en el directorio actual. Para una mejor comprension de dicho informe seleccionar el formato HTML. 

1. Ingresamos al directorio donde se generará el Informe ASH.
bash-3.2$ cd /u01/informes/
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
bash-3.2$
2 Nos conectamos vía sqlplus con usuario de provilegios de DBA.
bash-3.2$ sqlplus pticona

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jun 22 23:58:15 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL>
3. Ejecutamos ashrpt.sql y nos aparecerá los datos actuales de la instancia.
SQL> @$ORACLE_HOME/rdbms/admin/ashrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  798387748 PRMY                1 prmy
3.1. Elegimos la opción para que el informe se genere en formato "html".
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: html

Type Specified:  html

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 798387748         1 PRMY         prmy         primario

Defaults to current database

Using database id: 798387748

Enter instance numbers. Enter 'ALL' for all instances in a
RAC cluster or explicitly specify list of instances (e.g., 1,2,3).
Defaults to current instance.

Using instance number(s): 1

3.2. Ingresamos la hora de inicio y el intervalo de tiempo de duracion para el reporte ASH.
ASH Samples in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Oldest ASH sample available:  18-Jun-14 01:19:24   [   7150 mins in the past]
Latest ASH sample available:  23-Jun-14 00:29:06   [      0 mins in the past]


Specify the timeframe to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter begin time for report:

--    Valid input formats:
--      To specify absolute begin time:
--        [MM/DD[/YY]] HH24:MI[:SS]
--        Examples: 02/23/03 14:30:15
--                  02/23 14:30:15
--                  14:30:15
--                  14:30
--      To specify relative begin time: (start with '-' sign)
--        -[HH24:]MI
--        Examples: -1:15  (SYSDATE - 1 Hr 15 Mins)
--                  -25    (SYSDATE - 25 Mins)

Defaults to -15 mins
Enter value for begin_time: 06/22/14 21:05
Report begin time specified: 06/22/14 21:05

Enter duration in minutes starting from begin time:
Defaults to SYSDATE - begin_time
Press Enter to analyze till current time
Enter value for duration: 60
Report duration specified:   60

Using 22-Jun-14 21:05:00 as report begin time
Using 22-Jun-14 22:05:00 as report end time
3.3. Asignamos el nombre para el reporte ASH.
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is ashrpt_1_0622_2205.html.  To use this name,
press  to continue, otherwise enter an alternative.
Enter value for report_name: reporte_ash.html
.
.
Report written to reporte_ash.html
3.4. Salimos de sqlplus.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
bash-3.2$
4 Finalmente verificamos el archivo creado.
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
reporte_ash.html
bash-3.2$



C) Reporte ADDM (addmrpt.sql)
El utilitario de ADDM crea un informe con las conclusiones de rendimiento de base de datos. El script "addmrpt.sql" se encuentra en el directorio $ORACLE_HOME/RDBMS/admin. La salida del archivo se ubica en el directorio actual y es enformato de archivo de texto.
1. Ingresamos al directorio donde se generará el reporte ADDM.
bash-3.2$ cd /u01/informes/
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
bash-3.2$
2 Nos conectamos vía sqlplus con usuario de provilegios de DBA.
bash-3.2$ sqlplus pticona

SQL*Plus: Release 11.2.0.3.0 Production on Sun Jun 22 23:58:15 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL>
3. Ejecutamos addmrpt.sql y nos aparecerá los datos actuales de la instancia.
SQL> @$ORACLE_HOME/rdbms/admin/addmrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  798387748 PRMY                1 prmy


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 798387748         1 PRMY         prmy         primario

Using  798387748 for database Id
Using          1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing  without
specifying a number lists all completed snapshots.



Listing the last 3 days of Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
prmy         PRMY                 4 22 Jun 2014 15:04      1
                                  5 22 Jun 2014 16:00      1
                                  6 22 Jun 2014 17:00      1
                                  7 22 Jun 2014 18:00      1
                                  8 22 Jun 2014 19:00      1
                                  9 22 Jun 2014 20:00      1
                                 10 22 Jun 2014 21:00      1
                                 11 22 Jun 2014 22:00      1
                                 12 22 Jun 2014 23:00      1
                                 13 23 Jun 2014 00:01      1
3.1. Elegimos el intervalo de snapshots para el reporte ADDM.
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 10
Begin Snapshot Id specified: 10

Enter value for end_snap: 11
End   Snapshot Id specified: 11
3.2. Asignamos el nombre para el reporte.
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is addmrpt_1_10_11.txt.  To use this name,
press  to continue, otherwise enter an alternative.

Enter value for report_name: reporte_addm.txt
.
.
.
The database's maintenance windows were active during 100% of the analysis
period.

End of Report
Report written to reporte_addm.txt
SQL>
3.3. Salimos de sqlplus.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
bash-3.2$
4 Finalmente verificamos el archivo creado.
bash-3.2$ pwd
/u01/informes
bash-3.2$ ls
reporte_addm.txt
bash-3.2$

jueves, 14 de enero de 2021

Upgrading the Recovery Catalog

 To upgrade the recovery catalog:

  1. To install the new recovery catalog schema, the recovery catalog user must have TYPE privilege:

    sqlplus> connect sys/oracle@catdb as sysdba;
    sqlplus> grant TYPE to rman;
    
    
  2. Use RMAN to connect to the target and recovery catalog databases. For example, enter:

    % rman TARGET / CATALOG rman/cat@catdb
    
    connected to recovery catalog database 
    PL/SQL package rcat.DBMS_RCVCAT version 08.00.04 in RCVCAT database 
    is too old
    
    
  3. Issue the UPGRADE CATALOG command:

    UPGRADE CATALOG;
    
    recovery catalog owner is rman 
    enter UPGRADE CATALOG command again to confirm catalog upgrade 
    
    
  4. Enter the UPDATE CATALOG command again to confirm:

    UPGRADE CATALOG;
    
    recovery catalog upgraded to version 09.02.00
    DBMS_RCVMAN package upgraded to version 09.02.00
    DBMS_RCVCAT package upgraded to version 09.02.00

miércoles, 13 de enero de 2021

Cambiar a modo restricted session en Oracle

 

1. Introducción

Que una base de datos oracle esté en restricted session significa que sólo los usuarios con CREATE SESSION y RESTRICTED SESSION system privileges ( privilegios de sistema ) pueden conectar con la base de datos.

Esto puede ser bueno, cuando queramos por ejemplo,que sólo un usuario concreto debido a una actualización de la base de datos, pueda conectar con esta.

2. Activar modo restricted session:

Para activar el modo restricted de una base de datos realizamos los siguiente pasos:

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

Cuando la base de datos está en este modo, si un usuario que no tenga el privilegio RESTRICTED SESSION no podrá conectar con la base de datos.

3. Desactivar el modo restricted session

SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

4. Activar el modo restricted session al levantar la base de datos

En caso de que la base de datos no esté levantada y se quiera levantar en modo RESTRICTED SESSION habrá que hacerlo de la siguiente forma:

SQL> STARTUP RESTRICT;

lunes, 28 de diciembre de 2020

ORA-04021: timeout occurred while waiting to lock object (BLOQUEOS)

1

 set pagesize 1000

 select /*+ ordered */ w1.sid  waiting_session,

         h1.sid  holding_session,

         w.kgllktype lock_or_pin,

         w.kgllkhdl address,

         decode(h.kgllkmod,  0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',

            'Unknown') mode_held,

         decode(w.kgllkreq,  0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',

          'Unknown') mode_requested

  from dba_kgllock w, dba_kgllock h, v$session w1, v$session h1

  where  (((h.kgllkmod != 0) and (h.kgllkmod != 1) 

     and ((h.kgllkreq = 0) or (h.kgllkreq = 1)))

     and (((w.kgllkmod = 0) or (w.kgllkmod= 1))

     and ((w.kgllkreq != 0) and (w.kgllkreq != 1))))

     and  w.kgllktype      =  h.kgllktype

     and  w.kgllkhdl =  h.kgllkhdl

     and  w.kgllkuse     =   w1.saddr

     and  h.kgllkuse     =   h1.saddr;

 

2

select sid,serial# from v$session where sid=nnnnn:


3

alter system kill session '1089,10013' immediate;


lunes, 14 de diciembre de 2020

OUTER JOIN en ORACLE

 

Combinaciones externas de estilo Oracle en la cláusula WHERE

Para la compatibilidad con Oracle, Amazon Redshift admite el operador de combinación externo de Oracle (+) en condiciones de combinación de la cláusula WHERE. Este operador está diseñado para utilizarse exclusivamente en la definición de condiciones de combinación externa; no intente utilizarlo en otros contextos. En la mayoría de casos, otros usos de este operador se omiten silenciosamente.

Una combinación externa devuelve todas las filas que la combinación interna equivalente devolvería, además de filas no coincidentes de una o ambas tablas. En la cláusula FROM, puede especificar combinaciones externas izquierdas, derechas y completas. En la cláusula WHERE, puede especificar combinaciones externas izquierdas y derechas únicamente.

Para realizar una combinación externa en las tablas TABLE1 y TABLE2, y devolver filas no coincidentes de la TABLE1 (una combinación externa izquierda), especifique TABLE1 LEFT OUTER JOIN TABLE2 en la cláusula FROM o aplique el operador (+) en todas las columnas de combinación de la TABLE2 en la cláusula WHERE. Para todas las filas en la TABLE1 que tengan filas no coincidentes en la TABLE2, el resultado de la consulta contiene valores nulos para cualquier expresión de lista de selección que contiene columnas de la TABLE2.

Para producir el mismo comportamiento para todas las filas en la TABLE2 que no tienen filas coincidentes en la TABLE1, especifique TABLE1 RIGHT OUTER JOIN TABLE2 en la cláusula FROM o aplique el operador (+) en todas las columnas de combinación de la TABLE1 en la cláusula WHERE.

Sintaxis básica

[ WHERE { [ table1.column1 = table2.column1(+) ] [ table1.column1(+) = table2.column1 ] }

La primera condición equivale a lo siguiente:

from table1 left outer join table2 on table1.column1=table2.column1

La segunda condición equivale a lo siguiente:

from table1 right outer join table2 on table1.column1=table2.column1

La sintaxis que se muestra aquí cubre el caso simple de una equijoin sobre un par de columnas de combinación. Sin embargo, también son válidos otros tipos de condiciones de comparación y varios pares de columnas de combinación.

Por ejemplo, la siguiente cláusula WHERE define una combinación externa sobre dos pares de columnas. El operador (+) debe estar adjunto a la misma tabla en ambas condiciones:

where table1.col1 > table2.col1(+) and table1.col2 = table2.col2(+)

Notas de uso

Siempre que sea posible, use la sintaxis OUTER JOIN de la cláusula FROM estándar en lugar del operador (+) en la cláusula WHERE. Las consultas que contienen el operador (+) están sujetas a las siguientes reglas:

  • Solo se puede usar el operador (+) en la cláusula WHERE, y solo en referencia a las columnas de tablas o vistas.

  • No se puede aplicar el operador (+) a las expresiones. Sin embargo, una expresión puede contener columnas que utilicen el operador (+). Por ejemplo, la siguiente condición de combinación devuelve un error de sintaxis:

    event.eventid*10(+)=category.catid

    Sin embargo, la siguiente condición de combinación es válida:

    event.eventid(+)*10=category.catid
  • No se puede usar el operador (+) en un bloque de consulta que también contiene una sintaxis de combinación de la cláusula FROM.

  • Si se combinan dos tablas sobre varias condiciones de combinación, debe usar el operador (+) en todas o ninguna de las siguientes condiciones. Una combinación con estilos de sintaxis dispares ejecuta una combinación interna, sin advertencia.

  • El operador (+) no produce una combinación externa si se combina una tabla de la consulta externa con una tabla derivada de una consulta interna.

  • Para usar el operador (+) para combinar de manera externa una tabla consigo misma, debe definir los alias de tabla en la cláusula FROM y hacer referencia a ellos en la condición de combinación:

    select count(*) from event a, event b where a.eventid(+)=b.catid; count ------- 8798 (1 row)
  • No se puede combinar una condición de combinación que contiene el operador (+) con una condición OR o una condición IN. Por ejemplo:

    select count(*) from sales, listing where sales.listid(+)=listing.listid or sales.salesid=0; ERROR: Outer join operator (+) not allowed in operand of OR or IN.
  • En la cláusula WHERE que combina de manera externa más de dos tablas, el operador (+) puede aplicarse solo una vez en determinada tabla. En el siguiente ejemplo, no se puede hacer referencia a la tabla SALES con el operador (+) en dos combinaciones consecutivas.

    select count(*) from sales, listing, event where sales.listid(+)=listing.listid and sales.dateid(+)=date.dateid; ERROR: A table may be outer joined to at most one other table.
  • Si la condición de combinación externa de la cláusula WHERE compara una columna de la TABLE2 con una constante, aplique el operador (+) a la columna. Si no se incluye el operador, se eliminan las filas combinadas de manera externa de TABLE1, que contienen valores nulos para la columna restringida. Consulte la sección de ejemplos a continuación.

EJEMPLOS

La siguiente consulta de combinación especifica una combinación externa izquierda de las tablas SALES y LISTING sobre sus columnas LISTID:

select count(*) from sales, listing where sales.listid = listing.listid(+); count -------- 172456 (1 row)

La siguiente consulta equivalente produce el mismo resultado pero utiliza la sintaxis de combinación de la cláusula FROM:

select count(*) from sales left outer join listing on sales.listid = listing.listid; count -------- 172456 (1 row)

La tabla SALES no contiene registros de todas las listas de la tabla LISTING, ya que no todas las listas generan ventas. La siguiente consulta combina de manera externa SALES y LISTING, y devuelve filas de LISTING incluso cuando la tabla SALES no informa ventas para un determinado ID de lista. Las columnas PRICE y COMM, que derivan de la tabla SALES, contienen valores nulos en el conjunto de resultados para esas filas no coincidentes.

select listing.listid, sum(pricepaid) as price, sum(commission) as comm from listing, sales where sales.listid(+) = listing.listid and listing.listid between 1 and 5 group by 1 order by 1; listid | price | comm --------+--------+-------- 1 | 728.00 | 109.20 2 | | 3 | | 4 | 76.00 | 11.40 5 | 525.00 | 78.75 (5 rows)

Tenga en cuenta que, cuando se utiliza un operador de combinación de la cláusula WHERE, el orden de las tablas en la cláusula FROM no es importante.

Un ejemplo de una condición de combinación externa más compleja de la cláusula WHERE es el caso en el que la condición consta de una comparación entre dos columnas de tablas y una comparación con una constante:

where category.catid=event.catid(+) and eventid(+)=796;

Tenga en cuenta que el operador (+) se utiliza en dos lugares: primero, en la comparación de igualdad entre las tablas y, segundo, en la condición de comparación para la columna EVENTID. El resultado de esta sintaxis es la preservación de las filas combinadas de manera externa cuando se evalúa la restricción de EVENTID. Si elimina el operador (+) de la restricción de EVENTID, la consulta trata esta restricción como un filtro, no como parte de la condición de combinación externa. A su vez, las filas combinadas de manera externa que contienen valores nulos para EVENTID se eliminan del conjunto de resultados.

A continuación se muestra una consulta completa que ilustra este comportamiento:

select catname, catgroup, eventid from category, event where category.catid=event.catid(+) and eventid(+)=796; catname | catgroup | eventid -----------+----------+--------- Classical | Concerts | Jazz | Concerts | MLB | Sports | MLS | Sports | Musicals | Shows | 796 NBA | Sports | NFL | Sports | NHL | Sports | Opera | Shows | Plays | Shows | Pop | Concerts | (11 rows)

La consulta equivalente a través de la sintaxis de la cláusula FROM es de la siguiente manera:

select catname, catgroup, eventid from category left join event on category.catid=event.catid and eventid=796;

Si elimina el segundo operador (+) de la versión de la cláusula WHERE de esta consulta, devuelve solo 1 fila (la fila donde eventid=796).

select catname, catgroup, eventid from category, event where category.catid=event.catid(+) and eventid=796; catname | catgroup | eventid -----------+----------+--------- Musicals | Shows | 796 (1 row)

RMAN - Cuando no se encuentra un archive log --- RMAN-06726: could not locate archived log

  Lo importante en todo esto, es estar dentro del catalogo correspondiente, sino el crosscheck NO FNCIONA !!   oracle backup of logfiles is ...