Oracle Database 12c The Best Oracle Database 12c New Features for Developers and DBAs Presented	by: Alex	Zaballa,	Oracle	DBA
Alex Zaballa http://alexzaballa.blogspot.com/ @alexzaballa206	and	counting… https://www.linkedin.com/in/alexzaballa
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
Oracle Database 12c New Features for Developers and DBAs
Oracle	Official	Documentation 12.1.0.2 • http://docs.oracle.com/database/121/NEWFT/ch apter12102.htm Oracle	Learning	Library	(OLL) • https://apexapps.oracle.com/pls/apex/f?p=44785 :1:0
Articles	about	12c • https://oracle-base.com/articles/12c/articles- 12c
“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.”
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
Availability	of	Oracle	Database	12.2 Source:	https://blogs.oracle.com/UPGRADE/entry/oracle_database_12_2_just
Oracle	Database	Release	Status MOS	Note:742060.1
Upgrade	to	12.1.0.2	or	wait	for 12.2	? CDB	ou	NON-CDB?
Let’s	start…
JSON OTN	Article	by	Alex	Zaballa http://www.oracle.com/technetwork/pt/articles /sql/json-oracle-database-12c-2378776- ptb.html
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/
JSON
JSON
DEMO
Data	Redaction OTN	Article	in	English	by	Alex	Zaballa http://www.oracle.com/technetwork/articles/d atabase/data-redaction-odb12c-2331480.html
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
Data	Redaction
Data	Redaction
DEMO
Invisible	Columns CREATE	TABLE	table_test_inv ( column1	NUMBER, column2	NUMBER, column3	NUMBER	INVISIBLE, column4	NUMBER ); SQL>	desc table_test_inv Name ----------------------------------------- COLUMN1	NUMBER COLUMN2	NUMBER COLUMN4	NUMBER
Invisible	Columns INSERT	INTO	table_test_inv (column1,column2,column3,column4)	VALUES (1,2,3,4); INSERT	INTO	table_test_inv VALUES	(1,2,4);
Invisible	Columns SET	COLINVISIBLE	ON SQL>	desc table_test_inv Name ----------------------------------------- COLUMN1	NUMBER COLUMN2	NUMBER COLUMN4	NUMBER COLUMN3	(INVISIBLE)	NUMBER
Invisible	Columns ALTER	TABLE	table_test_inv MODIFY	column3	VISIBLE; WHY	? You	are	preparing	the	changes	on	the	database,	but	the	application	is	not prepared	yet. Select	*	from	…... Insert	into	TABLE	VALUES	(......,	.....,	.....)
DEMO
SQL	Text	Expansion SQL>	variable	retorno clob SQL>	begin dbms_utility.expand_sql_text(	input_sql_text =>	'select	*	from	emp',	output_sql_text=> :retorno ); end;
SQL	Text	Expansion • Views • VPDs
DEMO
Extended	Data	Types SQL>	create	table	table_test(column01 varchar2(4001)); * ERROR	at	line	1: ORA-00910:	specified	length	too	long	for	its datatype
Extended	Data	Types - VARCHAR2	:	32767	bytes - NVARCHAR2	:	32767	bytes - RAW	:	32767	bytes
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
DEMO
Multiple	Indexes	on	the	same	set	of Columns Pre	12c: ORA-01408:	such	column	list	already	indexed error.
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
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
DEMO
READ	Object	Privilege	and	READ	ANY TABLE	System	Privilege What	is	the	difference	to	SELECT and	SELECT ANY	TABLE?
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;
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.
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
DEMO
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
DEMO
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.
Partial	Indexes	for	Partitioned	Table
DEMO
SQL*Loader	Express • You	don't	need	to	to	write	and	test	a SQL*Loader	control	file. • The	benefit	main	is	the	savings	for	time	and effort.
SQL*Loader	Express [oracle@oracle01	tmp]$	cat	EMP_TEST.dat 1,Emp	1 2,Emp	2 3,Emp	3 4,Emp	4 5,Emp	5 6,Emp	6 7,Emp	7 8,Emp	8 9,Emp	9
SQL*Loader	Express [oracle@oracle01	tmp]$	sqlldr teste/teste	TABLE=EMP_TEST 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:	EMP_TEST Path	used:	External	Table,	DEGREE_OF_PARALLELISM=AUTO Table	EMP_TEST: 9	Rows	successfully	loaded. Check	the	log	files: EMP_TEST.log EMP_TEST_%p.log_xt for	more	information	about	the	load.
DEMO
Truncate	Cascade SQL>	truncate	table	scott.dept; truncate	table	scott.dept * ERROR	at	line	1: ORA-02266:	unique/primary	keys	in	table referenced	by	enabled	foreign	keys
Truncate	Cascade SQL>	truncate	table	scott.dept cascade; Table	truncated. The	constraint	should	be	ON	DELETE	CASCADE.
DEMO
Limit	the	PGA SQL>	show	parameter	pga NAME TYPE	VALUE -------------------------- ------------- ---------------------- pga_aggregate_limit big	integer	2G pga_aggregate_target ****
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
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.
RMAN	Table	Recovery	in	12c RMAN	enables	you	to	recover	one	or	more tables	or	table	partitions	to	a	specified	point	in time.
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'
In-Database	Archiving SQL>	create	table	table_test(column1	number) row	archival; insert	into	table_test values(1); insert	into	table_test values(2); insert	into	table_test values(3);
In-Database	Archiving
In-Database	Archiving update	table_test set	ora_archive_state=DBMS_ILM.ARCHIVESTATENAME(1) where	column1=3;
In-Database	Archiving alter	session	set	row	archival	visibility=all;
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
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
Heat	Map,	Automatic	Data Optimization	and	ILM Enabling	Heat	Map SQL>	alter	system	set	heat_map =	on;
Heat	Map,	Automatic	Data Optimization	and	ILM Heat	Map	statistics	can	be	viewed	graphically through	EM	Cloud	Control:
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;
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;
DDL	LOGGING
DDL	LOGGING /u01/app/oracle/diag/rdbms/orcl/orcl/log/ddl/log.xml
Direct	SQL	statement	execution	in RMAN Pre	- 12c: RMAN> SQL	‘SELECT	sysdate FROM	dual’; 12c: RMAN> SELECT	sysdate FROM	dual;
Session	private	statistics	for	Global Temporary	Tables Pre	12c,	statistics	gathered	for	global	temporary tables	(GTTs)	were	common	to	all	sessions.
Session	private	statistics	for	Global Temporary	Tables On	12c,	by	default	session-private	statistics	are enabled SELECT	DBMS_STATS.get_prefs('GLOBAL_TEMP_TABLE_STATS') FROM	dual; STATS ------------------------------------------------------------------------------ SESSION
Session	private	statistics	for	Global Temporary	Tables How	to	change? Behavior	pre	12c: BEGIN DBMS_STATS.set_global_prefs ( pname =>	'GLOBAL_TEMP_TABLE_STATS', pvalue =>	'SHARED'); END; / Back	to	default	on	12c: BEGIN DBMS_STATS.set_global_prefs ( pname =>	'GLOBAL_TEMP_TABLE_STATS', pvalue =>	'SESSION'); END; /
Session	private	statistics	for	Global Temporary	Tables How	to	change	for	one	table? BEGIN dbms_stats.set_table_prefs('SCOTT','GTT_TEST', 'GLOBAL_TEMP_TABLE_STATS','SHARED'); END; BEGIN dbms_stats.set_table_prefs('SCOTT','GTT_TEST', 'GLOBAL_TEMP_TABLE_STATS’,’SESSION'); END;
DEMO
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.
Temporary	Undo alter	session	set	temp_undo_enabled=true; **you	can	change	for	the	session	or	for	the	database.
DEMO
Identity	Columns CREATE	TABLE	tabela_teste ( id	NUMBER	GENERATED	ALWAYS AS	IDENTITY, coluna1	VARCHAR2(30) );
Identity	Columns CREATE	TABLE	tabela_teste ( id	NUMBER	GENERATED	BY	DEFAULT	AS	IDENTITY, coluna1	VARCHAR2(30) );
Identity	Columns CREATE	TABLE	tabela_teste ( id	NUMBER	GENERATED	BY	DEFAULT	ON	NULL	AS IDENTITY, coluna1	VARCHAR2(30) );
SQL	Query	Row	Limits	and	Offsets
SQL	Query	Row	Limits	and	Offsets
SQL	Query	Row	Limits	and	Offsets Top-N	Queries	– Pré 12c
SQL	Query	Row	Limits	and	Offsets
SQL	Query	Row	Limits	and	Offsets
SQL	Query	Row	Limits	and	Offsets
DEMO
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;
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.
Session	Level	Sequences CREATE	SEQUENCE	sequence_test START	WITH	1 INCREMENT	BY	1 SESSION /
Session	Level	Sequences ALTER	SEQUENCE	sequence_test SESSION; ALTER	SEQUENCE	sequence_test GLOBAL;
Multitenant
Fonte:	Oracle	Documentation
Multitenant Fonte:	https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
Multitenant Fonte:	https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
Multitenant Fonte:	https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
In-Memory Fonte:	Oracle	Documentation
SIMD	Vector	Processing Fonte:	http://www.oracle.com/technetwork/database/in-memory/overview/twp- oracle-database-in-memory-2245633.html
In-Memory In-Memory	Area	– a	static	pool	in	SGA
In-Memory Fonte:	OracleBase.com
In-Memory Alter	table	hr.EMPLOYEES inmemory; ALTER	TABLE	sales	MODIFY	PARTITION	SALES_Q1_1998 INMEMORY; ALTER	TABLE	sales	INMEMORY	NO	INMEMORY(prod_id); CREATE	TABLESPACE	tbs_test DATAFILE	'+DG01	SIZE	100M DEFAULT	INMEMORY;
In-Memory Fonte:	http://www.oracle.com/technetwork/database/in-memory/overview/twp- oracle-database-in-memory-2245633.html
SQLcl http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
Thank	You Slides	Available:	http://www.slideshare.net/

OTN TOUR 2016 - Oracle Database 12c - The Best Oracle Database 12c New Features for Developers and DBAs