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
14. JSON
OTN Article by Alex Zaballa
http://www.oracle.com/technetwork/pt/articles
/sql/json-oracle-database-12c-2378776-
ptb.html
15. JSON
• Oracle Database 12.1.0.2 has now native
support for JSON.
• “JSON (JavaScript Object Notation) is a
lightweight data-interchange format. It is easy
for humans to read and write. It is easy for
machines to parse and generate.”
Source: http://json.org/
19. Data Redaction
OTN Article in English by Alex Zaballa
http://www.oracle.com/technetwork/articles/d
atabase/data-redaction-odb12c-2331480.html
20. 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
25. SQL Query Row Limits and Offsets
create table tabela_teste (id number, name varchar2(20), salary 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);
26. SQL Query Row Limits and Offsets
Top-N Queries – Pré 12c
select * from ( select id, name, salary
from tabela_teste
order by salary desc)
where rownum <= 5;
27. SQL Query Row Limits and Offsets
select id, name, salary
from tabela_teste
order by salary desc
FETCH FIRST 5 ROWS ONLY;
28. SQL Query Row Limits and Offsets
select id, name, salary
from tabela_teste
order by salary
FETCH FIRST 30 PERCENT ROWS ONLY;
29. SQL Query Row Limits and Offsets
select id, name, salary
from tabela_teste
order by salary desc
OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY;
31. 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
32. Invisible Columns
INSERT INTO tabela_teste
(coluna1,coluna2,coluna3,coluna4) VALUES
(1,2,3,4);
INSERT INTO tabela_teste VALUES (1,2,4);
33. Invisible Columns
SET COLINVISIBLE ON
SQL> desc tabela_teste
Name
-----------------------------------------
COLUNA1 NUMBER
COLUNA2 NUMBER
COLUNA4 NUMBER
COLUNA3 (INVISIBLE) NUMBER
39. PL/SQL From SQL
with
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;
41. Session Level Sequences
Session level sequences are used to produce
unique values in a session. Once the session
ends, the sequence is reset.
Generating Primary Keys for a Global Temporary
Table would be a field where those kinds of
sequences could be used.
45. Extended Data Types
SQL> create table tabela_teste(campo01
varchar2(4001));
*
ERROR at line 1:
ORA-00910: specified length too long for its
datatype
46. Extended Data Types
- VARCHAR2 : 32767 bytes
- NVARCHAR2 : 32767 bytes
- RAW : 32767 bytes
47. Extended Data Types
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
ALTER SYSTEM SET max_string_size=extended;
@?/rdbms/admin/utl32k.sql
SHUTDOWN IMMEDIATE;
STARTUP;
**Once you switch to extended data types you can't switch back
49. Multiple Indexes on the same set of
Columns
Pre 12c:
ORA-01408: such column list already indexed
error.
50. Multiple Indexes on the same set of
Columns
Is the ability to create more than one index on
the same set of columns in 12c.
**Only one of these indexes can be visible at a
time
51. Multiple Indexes on the same set of
Columns
Why would you want to do that?
• Unique versus nonunique
• B-tree versus bitmap
• Different partitioning strategies
53. READ Object Privilege and READ ANY
TABLE System Privilege
What is the difference to SELECT and SELECT
ANY TABLE?
54. READ Object Privilege and READ ANY
TABLE System Privilege
SELECT and SELECT ANY TABLE provides the
ability to lock rows:
LOCK TABLE table_name IN EXCLUSIVE MODE;
SELECT ... FROM table_name FOR UPDATE;
55. 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.
56. 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
58. Session private statistics for Global
Temporary Tables
Pre 12c, statistics gathered for global temporary
tables (GTTs) were common to all sessions.
59. 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;
/
60. Session private statistics for Global
Temporary Tables
BEGIN
dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','G
LOBAL_TEMP_TABLE_STATS','SHARED');
END;
BEGIN
dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','G
LOBAL_TEMP_TABLE_STATS','SESSION');
END;
62. Temporary Undo
Global Temporary Tables (GTT) hold the data in a
temporary tablespace. The data in GTTs are either
deleted after commit or kept until the session is
connected depending of the definition of the
GTT.(ON COMMIT PRESERVE OR DELETE ROWS ).
DMLs in a Global Temporary Tables do not generate
REDO, but generate UNDO and this will result in
REDO generating.
65. Statistics During Loads
The ability to gather statistics automatically
during bulk loads:
- CREATE TABLE AS SELECT
- INSERT INTO ... SELECT into an empty table
using a direct path insert
67. Partial Indexes for Partitioned Table
• You can create local and global indexes on a
subset of the partitions of a table, enabling
more flexibility in index creation.
• This feature is not supported for unique
indexes, or for indexes used for enforcing
unique constraints.
72. 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.
77. Limit the PGA
SQL> show parameter pga
NAME TYPE VALUE
-------------------------- ------------- ----------------------
pga_aggregate_limit big integer 2G
78. Limit the PGA
PGA_AGGREGATE_LIMIT is set to the greater of:
- 2 GB (default value)
- 200% of PGA_AGGREGATE_TARGET
- 3 MB times the PROCESSES parameter
79. Full Database Caching
Can be used to cache the entire database in
memory. It should be used when the buffer
cache size of the database instance is greater
than the whole database size.
80. RMAN Table Recovery in 12c
RMAN enables you to recover one or more
tables or table partitions to a specified point in
time.
81. RMAN Table Recovery in 12c
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'
82. In-Database Archiving
SQL> create table tabela_teste(coluna1 number)
row archival;
insert into tabela_teste values(1);
insert into tabela_teste values(2);
insert into tabela_teste values(3);
86. Heat Map, Automatic Data
Optimization and ILM
OTN Article in Portuguese by Daniel Da Meda and Alex Zaballa
http://www.oracle.com/technetwork/pt/articles
/database-performance/ilm-e-automatic-data-
optimization-2601873-ptb.html
87. 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
88. Heat Map, Automatic Data
Optimization and ILM
Enabling Heat Map
SQL> alter system set heat_map = on;
89. Heat Map, Automatic Data
Optimization and ILM
Heat Map statistics can be viewed graphically
through EM Cloud Control:
90. Heat Map, Automatic Data
Optimization and ILM
Creating ADO policies
Compress the tablespace USER_DATA and all its residing
segments at OLTP level after 30 days of low access:
ALTER TABLESPACE USER_DATA ILM ADD POLICY
ROW STORE COMPRESS ADVANCED
SEGMENT AFTER 30 DAYS OF LOW ACCESS;
91. Heat Map, Automatic Data
Optimization and ILM
Creating ADO policies
Compress the table ORDER_ITEMS including any
SecureFile LOBs at OLTP level after 90 days of no
modification:
ALTER TABLE ORDER_ITEMS ILM ADD POLICY
ROW STORE COMPRESS ADVANCED
GROUP AFTER 90 DAYS OF NO MODIFICATION;
107. 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;