Esta sessão irá analisar quais dos novos recursos do Oracle Database 12c são os mais interessantes para DBAs e desenvolvedores e dará exemplos de como utilizá-los.
#oowbr
Terça-feira, jun 28, 6:45 p.m. - 7:30 p.m. | Mezanino: Sala 2
3. Worked for 7 years in Brazil as an Oracle Developer.
2000 - 2007
Worked for 8 years in Angola as an Oracle DBA
for the Ministry of Finance.
2007 - 2015
9. “With more than 500 new features, Oracle
Database 12c is designed to give Oracle
customers exactly what they’ve told us they
need for cloud computing, big data, security,
and availability.”
10. Oracle Announces Beta Availability of Oracle Database 12c Release 2 - Oct 26,
2015
• PLUGGABLE DATABASES
From 252 to 4096
• HOT CLONING
Don’t need to put the source in read-only for cloning
• SHARDING
It’s like partitioning in a shared nothing database
The data is split into multiple databases
• In-Memory
In-Memory column Store on Active Data Guard
Heat Map
• APPLICATION CONTAINER
Pluggable Databases will share application objects
• More isolation, resource manager will limit the memory in addition to CPU and I/O.
• AWR will work on Active Data Guard Database: you can tune your reporting database
11. Availability of Oracle Database 12.2
Source: https://blogs.oracle.com/UPGRADE/entry/oracle_database_12_2_just
24. In-Memory
Alter table hr.EMPLOYEES inmemory;
ALTER TABLE sales MODIFY PARTITION SALES_Q1_1998
NO INMEMORY;
ALTER TABLE sales INMEMORY NO INMEMORY(prod_id);
CREATE TABLESPACE tbs_test
DATAFILE '+DG01 SIZE 100M
DEFAULT INMEMORY;
30. JSON
• No Oracle Database 12c (12.1.0.2), foi
adicionado o suporte nativo ao JavaScript
Object Notation (JSON).
• O JSON é um formato leve para intercâmbio
de dados que é relativamente fácil para o ser
humano ler e escrever, além de ser fácil para
os softwares analisarem e gerarem.
34. Data Redaction
Artigo no OTN:
http://www.oracle.com/technetwork/pt/articles
/idm/funcionalidade-data-redaction-12c-
2209076-ptb.html
35. Data Redaction
• One of the new features introduced in Oracle
Database 12c
• Part of the Advanced Security option
• Enables the protection of data shown to the
user in real time, without requiring changes to
the application
40. SQL Query Row Limits and Offsets
create table tabela_teste (codigo number, nome varchar2(20), salario
number);
insert into tabela_teste values (1,'Alex' ,100);
insert into tabela_teste values (2,'Joao' ,200);
insert into tabela_teste values (3,'Maria' ,300);
insert into tabela_teste values (4,'Pedro',400);
insert into tabela_teste values (5,'Paulo',500);
insert into tabela_teste values (6,'Fernando',600);
insert into tabela_teste values (7,'Rafael',700);
insert into tabela_teste values (8,'Samuel',700);
insert into tabela_teste values (9,'Daniel',800);
insert into tabela_teste values (10,'Luciano',1000);
41. SQL Query Row Limits and Offsets
Top-N Queries – Pré 12c
select * from ( select codigo, nome, salario
from tabela_teste
order by salario desc)
where rownum <= 5
42. SQL Query Row Limits and Offsets
select codigo, nome, salario
from tabela_teste
order by salario desc
FETCH FIRST 5 ROWS ONLY
43. SQL Query Row Limits and Offsets
select codigo, nome, salario
from tabela_teste
order by salario
FETCH FIRST 30 PERCENT ROWS ONLY
44. SQL Query Row Limits and Offsets
select codigo, nome, salario
from tabela_teste
order by salario desc
OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY;
46. Invisible Columns
CREATE TABLE tabela_teste
(
coluna1 NUMBER,
coluna2 NUMBER,
coluna3 NUMBER INVISIBLE,
coluna4 NUMBER
);
SQL> desc tabela_teste
Name
-----------------------------------------
COLUNA1 NUMBER
COLUNA2 NUMBER
COLUNA4 NUMBER
47. Invisible Columns
INSERT INTO tabela_teste
(coluna1,coluna2,coluna3,coluna4) VALUES
(1,2,3,4);
INSERT INTO tabela_teste VALUES (1,2,4);
48. Invisible Columns
SET COLINVISIBLE ON
SQL> desc tabela_teste
Name
-----------------------------------------
COLUNA1 NUMBER
COLUNA2 NUMBER
COLUNA4 NUMBER
COLUNA3 (INVISIBLE) NUMBER
54. PL/SQL From SQLwith
function Is_Number
(x in varchar2) return varchar2 is
Plsql_Num_Error exception;
pragma exception_init(Plsql_Num_Error, -06502);
begin
if (To_Number(x) is NOT null) then
return 'Y';
else
return '';
end if;
exception
when Plsql_Num_Error then
return 'N';
end Is_Number;
select rownum, x, is_number(x) is_num from t;
56. Session Level Sequences
Session level sequences são utilizadas para
produzir valores únicos dentro de uma sessão.
Assim que a sessão termina, a sequence é
reinicializada.
Elas são muito utilizadas para gerar valores de
Primary Keys em Global Temporary Tables.
60. Extended Data Types
SQL> create table tabela_teste(campo01
varchar2(4001));
*
ERROR at line 1:
ORA-00910: specified length too long for its
datatype
61. Extended Data Types
- VARCHAR2 : 32767 bytes
- NVARCHAR2 : 32767 bytes
- RAW : 32767 bytes
62. Extended Data Types
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
ALTER SYSTEM SET max_string_size=extended;
@?/rdbms/admin/utl32k.sql
SHUTDOWN IMMEDIATE;
STARTUP;
**Após aumentar o tamanho máximo dos tipos de dados, não é possível desfazer
esta alteração.
64. Multiple Indexes on the same set of
Columns
Pré 12c:
ORA-01408: such column list already indexed
error.
65. Multiple Indexes on the same set of
Columns
No 12c é possível ter vários índices em uma
mesma coluna ou lista de colunas.
A criação de um índice sobre uma coluna ou lista
de colunas que já foram indexadas é simples e
você tem que garantir que apenas um índice
será visível.
66. Multiple Indexes on the same set of
Columns
• Unique versus nonunique
• B-tree versus bitmap
• Different partitioning strategies
68. READ Object Privilege and READ ANY
TABLE System Privilege
Qual a diferença para SELECT e SELECT ANY
TABLE?
69. READ Object Privilege and READ ANY
TABLE System Privilege
O privilégio de objeto SELECT e o privilégio de
sistema SELECT ANY TABLE permitem bloquear
as linhas de uma tabela através da execução das
seguintes operações:
LOCK TABLE table_name IN EXCLUSIVE MODE;
SELECT ... FROM table_name FOR UPDATE;
70. READ Object Privilege and READ ANY
TABLE System Privilege
SQL> grant select on scott.emp to teste;
Grant succeeded.
SQL> lock table scott.emp in exclusive mode;
Table(s) Locked.
71. READ Object Privilege and READ ANY
TABLE System Privilege
SQL> grant read on scott.emp to teste;
Grant succeeded.
SQL> lock table scott.emp in exclusive mode;
lock table scott.emp in exclusive mode
*
ERROR at line 1:
ORA-01031: insufficient privileges
73. Session private statistics for Global
Temporary Tables
Até o 12c, as estatísticas para tabelas
temporárias globais (GTTs) eram comuns para
todas as sessões.
74. Session private statistics for Global
Temporary Tables
SELECT
DBMS_STATS.get_prefs('GLOBAL_TEMP_TABLE_STATS')
Stats FROM dual;
STATS
------------------------------------------------------------------------------
SESSION
75. Session private statistics for Global
Temporary Tables
BEGIN
DBMS_STATS.set_global_prefs (
pname => 'GLOBAL_TEMP_TABLE_STATS',
pvalue => 'SHARED');
END;
/
BEGIN
DBMS_STATS.set_global_prefs (
pname => 'GLOBAL_TEMP_TABLE_STATS',
pvalue => 'SESSION');
END;
/
76. Session private statistics for Global
Temporary Tables
BEGIN
dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','GLOB
AL_TEMP_TABLE_STATS','SHARED');
END;
BEGIN
dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','GLOB
AL_TEMP_TABLE_STATS','SESSION');
END;
78. Temporary Undo
Uma Global Temporary Table armazena seus dados
em uma temporary tablespace e estes dados são
mantidos durante a transação ou durante toda a
sessão (ON COMMIT DELETE ROWS ou ON COMMIT
PRESERVE ROWS).
Instruções DML em Global Temporary Tables não
geram REDO, devido ao fato destes dados estarem
armazenados em uma temporary tablespace, mas
geram UNDO e isto sim implicará na geração de
REDO.
79. Temporary Undo
alter session set temp_undo_enabled=true;
**pode ser alterado a nível de banco de dados
ou de sessão.
81. Statistics During Loads
O banco de dados irá coletar estatísticas
automaticamente das tabelas durante os
seguintes tipos de operações bulk load:
- CREATE TABLE AS SELECT
- INSERT INTO ... SELECT into an empty table
using a direct path insert
83. Partial Indexes for Partitioned Table
• Você pode criar os índices (globais ou locais)
para partições ou sub-partições específicas,
isto é, os índices serão criados apenas para
partições/sub-partições que você deseja.
• Este recurso não é suportado para índices
únicos, ou seja, para índices utilizados para
impor restrições exclusivas.
86. SQL*Loader Express
• No modo express, não é necessário criar o
arquivo de controle.
• O objetivo principal é salvar tempo e diminuir
o esforço.
• O express mode pode ser utilizado quando
todas as colunas são do tipo character,
number ou datetime
88. SQL*Loader Express
[oracle@oracle01 tmp]$ sqlldr teste/teste TABLE=EMPRESA
SQL*Loader: Release 12.1.0.1.0 - Production on Sat Jan 11 12:16:28 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Express Mode Load, Table: EMPRESA
Path used: External Table, DEGREE_OF_PARALLELISM=AUTO
Table EMPRESA:
9 Rows successfully loaded.
Check the log files:
EMPRESA.log
EMPRESA_%p.log_xt
for more information about the load.
93. Limit the PGA
SQL> show parameter pga
NAME TYPE VALUE
-------------------------- ------------- ----------------------
pga_aggregate_limit big integer 2G
94. Limit the PGA
PGA_AGGREGATE_LIMIT é setado como default
para o maior valor entre:
- 2 GB (valor default)
- 200% do valor do parâmetro
PGA_AGGREGATE_TARGET
- 3 MB multiplicado pelo valor do parâmetro
PROCESSES
95. Full Database Caching
Este novo recurso permite armazenar todos os
segmentos do banco de dados em memória
(quando os segmentos forem acessados).
97. Recuperando Tabelas com o RMAN
• Utilizado para recuperação de tabelas/partições
de um backup realizado pelo RMAN.
• Este comando, diminui o tempo e a complexidade
da restauração, permitindo a recuperação “point-
in-time” apenas da tabela/partição, ao invés de
toda tablespace como era nas versões anteriores.
• É muito útil quando não temos informações
suficientes no UNDO para utilizar o Flashback
Table.
98. Recuperando Tabelas com o RMAN
RMAN> RECOVER TABLE HR.REGIONS
UNTIL TIME "TO_DATE('01/10/2013
09:33:39','DD/MM/RRRR HH24:MI:SS')"
AUXILIARY DESTINATION '/tmp/backups'
105. Heat Map, Automatic Data
Optimization and ILM
OTN - Artigo do Alex Zaballa e Daniel Da Meda
http://www.oracle.com/technetwork/pt/articles
/database-performance/ilm-e-automatic-data-
optimization-2601873-ptb.html
106. Heat Map, Automatic Data
Optimization and ILM
• Heat Map: Oracle Database 12c feature that stores system-
generated data usage statistics at the block and segment
levels. Automatically tracks modification and query
timestamps at the row and segment levels.
• Automatic Data Optimization (ADO): automatically moves
and compresses data according to user-defined policies
based on the information collected by Heat Map
• ILM: Heat Map and Automatic Data Optimization make
Oracle Database 12c ideal for implementing ILM
107. Heat Map, Automatic Data
Optimization and ILM
Habilitando o Heat Map
SQL> alter system set heat_map = on;
108. Heat Map, Automatic Data
Optimization and ILM
As estatísticas de Heat Map visualizadas
graficamente através do EM Cloud Control:
109. Heat Map, Automatic Data
Optimization and ILM
Criando políticas ADO
Comprimir a tablespace USER_DATA e todos os seus
segmentos utilizando compressão OLTP após 30 dias de
baixo acesso:
ALTER TABLESPACE USER_DATA ILM ADD POLICY
ROW STORE COMPRESS ADVANCED
SEGMENT AFTER 30 DAYS OF LOW ACCESS;
110. Heat Map, Automatic Data
Optimization and ILM
Criando políticas ADO
Comprimir a tabela ORDER_ITEMS utilizando compressão
OLTP após 90 dias sem modificações.
ALTER TABLE ORDER_ITEMS ILM ADD POLICY
ROW STORE COMPRESS ADVANCED
GROUP AFTER 90 DAYS OF NO MODIFICATION;