Академический Документы
Профессиональный Документы
Культура Документы
R2
Para habilitar el envo de correos hay que activar las listas de control (ACL) para el
usuario GESAFIN, ya que se va a utilizar el paquete PKG_GESAFIN_NOTIFICACIONES:
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl
=> 'acl_gesafin.xml',
description => 'A test of the ACL functionality',
principal
=> 'GESAFIN',
is_grant
=> TRUE,
privilege
=> 'connect',
start_date
=> SYSTIMESTAMP,
end_date
=> NULL);
COMMIT;
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl
=> 'acl_gesafin.xml',
host
=> '*.lico.com',
lower_port => NULL,
upper_port => NULL);
COMMIT;
END;
2) Indices de funcin
NOTA: hay creada una incidencia (201100060) sobre este aspecto para modificar los
ndices que se ven afectados antes de realizar la migracin a la versin 11gR2, de
esta forma al cambiar a la nueva versin no ser necesario modificar nada.
NOTA: hay creada una incidencia (201100152) sobre este aspecto para modificar las
tablas IOT que se ven afectados antes de realizar la migracin a la versin 11gR2, de
esta forma al cambiar a la nueva versin no ser necesario modificar nada.
Con esta configuracin, los campos varchar2 de las tablas podrn almacenar un
mximo de 4000 caracteres siempre que stos pertenezcan al lenguaje estndar y se
almacenen en 1 slo byte por caracter; si la fila contiene caracteres especiales o
suplementarios (como o ), el nmero mximo de caracteres se reducir:
11gR2.explotacion>
create table t_prueba (c1 varchar2(4000));
Tabla creada.
11gR2.explotacion>
@ddl t_prueba
Procedimiento PL/SQL terminado correctamente.
DDL
------------------------------------------------------------------------------------CREATE TABLE "EXPLOTACION"."T_PRUEBA"
(
"C1" VARCHAR2(4000 CHAR)
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING
TABLESPACE "EXPLOTACION" ;
1 fila seleccionada.
11gR2.explotacion> --> 4000 caracteres normales: OK
insert into t_prueba values (rpad(' ',3999,'*') || '*');
1 fila creada.
11gR2.explotacion> --> 4001 caracteres normales: ERROR
insert into t_prueba values (rpad(' ',3999,'*') || '**');
insert into t_prueba values (rpad(' ',3999,'*') || '**')
*
ERROR en lnea 1:
ORA-01489: resultado de la concatenacin de cadena de caracteres demasiado largo
11gR2.explotacion> --> 3999 caracteres normales + 1 caracter ampliado: ERROR
insert into t_prueba values (rpad(' ',3999,'*') || '');
insert into t_prueba values (rpad(' ',3999,'*') || '')
*
ERROR en lnea 1:
ORA-01489: resultado de la concatenacin de cadena de caracteres demasiado largo
RMAN no realiza backup de los datos de UNDO que han sido validados (committed y
expired) y, por tanto, no son necesarios para la restauracin, RMAN slo realiza
backup de unos pocos bloques del tablespace de UNDO (uncommitted).
Esta caracterstica reduce el tamao de las copias de seguridad, disminuyendo
tambin el tiempo de realizacin del Backup (as como de la restauracin en caso de
ser necesaria), y est implementado de forma automtica en la versin 11g.
3) Realizar backup de metadatos ASM
La instancia ASM mantiene sus metadatos (nombre de los grupos de discos, nombre
de cada disco que forma un grupo, estructura de directorios, ) en las propias
cabeceras de los discos. As, si por cualquier circunstancia se perdiera
completamente un grupo de discos, la restauracin puede ser bastante compleja.
Oracle 11g incorpora nuevos comandos para trabajar con ASM (con la utilidad
asmcmd) que permiten realizar un backup de los metadatos y restaurarlos si fuera
necesario:
bash-3.00$ export ORACLE_SID=+ASM
bash-3.00$ export ORACLE_HOME=/opt/oracle/11.2.0/grid
bash-3.00$ $ORACLE_HOME/bin/asmcmd
ASMCMD> ls
GORACLE/
ASMCMD> cd GORACLE/PRODUCA
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfilePRODUCA.ora
ASMCMD> md_backup -G GORACLE /Backup/asm_metadata.bck
Disk group metadata to be backed up: GORACLE
Current alias directory path: PRODUCA/TEMPFILE
Current alias directory path: PRODUCA/DATAFILE
Current alias directory path: PRODUCA/ONLINELOG
Current alias directory path: PRODUCA
Current alias directory path: PRODUCA/PARAMETERFILE
Current alias directory path: PRODUCA/CONTROLFILE
ASMCMD> md_restore /Backup/asm_metadata.bck -S /Backup/asm_metadata.sql
Current Diskgroup metadata being restored: GORACLE
ASMCMD> exit
bash-3.00$ ls -lah /Backup/asm_metadata.*
-rw-r--r-1 oracle
oinstall
21K mar 11 09:51 /Backup/asm_metadata.bck
-rw-r--r-1 oracle
oinstall
10K mar 11 09:53 /Backup/asm_metadata.sql
bash-3.00$ more /Backup/asm_metadata.sql
create diskgroup GORACLE NORMAL redundancy failgroup GFAIL_01 disk
'/dev/rdsk/c3t600508B4001075F00001000003470000d0s6' name DISK_003
size 51152M , '/dev/rdsk/c3t600508B40010555F0000D00012F10000d0s6' name DISK_001 size 51152M
failgroup GFAIL_02 disk '/dev/rdsk/c3t6
00508B40010555F0000D000130F0000d0s6' name DISK_002 size 51152M ,
'/dev/rdsk/c3t600508B4001075F000010000034A0000d0s6' name DISK_004 s
ize 51152M attribute 'compatible.asm' = '11.2.0.0.0' , 'compatible.rdbms' = '10.1.0.0.0' ,
'au_size' = '1048576', 'sector_size' = '5
diskgroup
diskgroup
diskgroup
diskgroup
diskgroup
diskgroup
/*ASMCMD
/*ASMCMD
/*ASMCMD
/*ASMCMD
/*ASMCMD
/*ASMCMD
AMBR
AMBR
AMBR
AMBR
AMBR
AMBR
*/
*/
*/
*/
*/
*/
GORACLE
GORACLE
GORACLE
GORACLE
GORACLE
GORACLE
add
add
add
add
add
add
directory
directory
directory
directory
directory
directory
'+GORACLE/PRODUCA';
'+GORACLE/PRODUCA/DATAFILE';
'+GORACLE/PRODUCA/PARAMETERFILE';
'+GORACLE/PRODUCA/ONLINELOG';
'+GORACLE/PRODUCA/TEMPFILE';
'+GORACLE/PRODUCA/CONTROLFILE';
Los ndices de funcin (FBI) pueden ser borrados sin descompilar la paquetera que
usa la tabla a la que pertenece el ndice borrado.
8) Aadir columnas a tablas con valor por defecto
En la versin 10g, cuando se aade una columna con valor por defecto a una tabla
con miles de registros, Oracle debe bloquear la tabla (generando esperas al resto de
sesiones que quieran acceder a la tabla) y actualizar todos los registros al valor por
defecto, lo que origina gran cantidad de undo & redo, y tiempo para completar la
tarea:
10g.explotacion>
create table prueba as select level c1,
'valor_' || level || ' del total de registros' c2
2
from dual connect by level < 1000000;
Tabla creada.
10g.explotacion>
=>
=>
=>
=>
=>
'EXPLOTACION',
'PRUEBA',
'for all columns size REPEAT',
true,
false);
En Oracle 11gR2, crear un nuevo campo con un valor por defecto no supone una
carga para la DB, puesto que en lugar de actualizar la tabla insertando el valor por
defecto en cada registro, si no que actualiza el valor por defecto como metadata, esto
supone un tiempo mnimo de actualizacin y cero generacin de undo o redo:
11gR2.explotacion>
create table prueba as select level c1,
2
'valor_' || level || ' del total de registros' c2
3
from dual connect by level < 1000000;
Tabla creada.
11gR2.explotacion>
create unique index prueba_idx on prueba(c1);
ndice creado.
11gR2.explotacion>
2
3
4
5
6
7
8
begin
dbms_stats.gather_table_stats(ownname
tabname
method_opt
cascade
no_invalidate
end;
/
=>
=>
=>
=>
=>
'EXPLOTACION',
'PRUEBA',
'for all columns size REPEAT',
true,
false);
DESARROLLO
1) Hint IGNORE_ROW_ON_DUPKEY_INDEX
Este Hint est destinado a las sentencias insert into target select from source,
cuando del conjunto de filas seleccionado para ser insertado algunos registros podran
chocar con una restriccin de tipo unique en la tabla destino.
Hast ahora, si queramos realizar el insert descartando los registros duplicados tena
que hacerse registro a registro mediante cdigo PL/SQL controlando la excepcin
dup_val_on_index:
11gR2.explotacion>
drop table t_prueba purge;
Tabla borrada.
11gR2.explotacion>
create table t_prueba(
c1 number(5),
constraint pk_t_prueba primary key (c1) using index tablespace indx);
Tabla creada.
11gR2.explotacion>
insert into t_prueba values (5);
1 fila creada.
11gR2.explotacion>
commit;
Confirmacin terminada.
11gR2.explotacion> --> el insert directo falla
begin
2 insert into t_prueba select level from dual connect by level < 10;
3 commit;
4 end;
5 /
begin
*
ERROR en lnea 1:
ORA-00001: restriccin nica (EXPLOTACION.PK_T_PRUEBA) violada
ORA-06512: en lnea 2
11gR2.explotacion> --> hay que hacer insert registro a registro
begin
2
for reg in (select level as valor
3
from dual connect by level < 10) loop
4
begin
5
insert into t_prueba values (reg.valor);
6
exception
7
when DUP_VAL_ON_INDEX then
8
null;
9
end;
10
end loop;
11
commit;
12 end;
13 /
Procedimiento PL/SQL terminado correctamente.
11gR2.explotacion>
select * from t_prueba;
C1
---------1
2
3
4
5
6
7
8
9
9 filas seleccionadas.
11gR2.explotacion>
create table t_prueba(
c1 number(5),
constraint pk_t_prueba primary key (c1) using index tablespace indx);
Tabla creada.
11gR2.explotacion>
insert into t_prueba values (5);
1 fila creada.
11gR2.explotacion>
commit;
Confirmacin terminada.
11gR2.explotacion> --> insert directo con el nuevo hint
begin
2 insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX (t pk_t_prueba)*/ into t_prueba t
3
select level from dual connect by level < 10;
4 commit;
5 end;
6 /
Procedimiento PL/SQL terminado correctamente.
11gR2.explotacion>
select * from t_prueba;
C1
---------1
2
3
4
5
6
7
8
9
9 filas seleccionadas.
Al poder realizarse la misma operacin con una sentencia SQL en lugar de todo un
bloque PL/SQL el rendimiento es mucho mayor.
2) Asignar valor de secuencias en expresiones PL/SQL
Ya no es necesario utilizar una select para asignar el valor de una secuencia a una
variable, se puede hacer directamente en la declaracion:
11GR2.explotacion>
create sequence seq start with 1;
Secuencia creada.
11GR2.explotacion>
declare
2 x number := seq.nextval;
3 begin
4 --> Ya no es necesario:
5 -- select seq.nextval into x from dual;
6 dbms_output.put_line(x);
7 end;
8 /
1
Procedimiento PL/SQL terminado correctamente.