SlideShare a Scribd company logo
1 of 56
Download to read offline
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1
What’s New in
Oracle Database 12c for
Scripting Languages
Christopher Jones, Oracle
Shoaib Lari, Oracle
September 2013
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3
The following is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The development, release,
and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4
Program Agenda
 Three-slide Introduction to PHP OCI8
 Useful Oracle Database 12c Features
 PHP DTrace for Dynamic Tracing
 Oracle/MySQL PHP Applications
 PHP Performance and Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5
Three-slide Introduction to
PHP OCI8
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6
Traditional PHP Script Processing
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7
One of Many Modern PHP Architectures
PHP
Update
QueueCache
Apache
PHP
OCI8 Extension
Oracle Libraries
PHP Web Service
DB
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8
What is PHP OCI8?
 Recommended Oracle Database extension for PHP
 Supports many Oracle features
 Available in PHP C source and binary bundles
 PHP OCI8 2.0 "Development" is on http://pecl.php.net
$c = oci_connect('scott', 'tiger', 'localhost/pdborcl');
$s = oci_parse($c, 'SELECT * FROM employees');
oci_execute($s);
while (($row = oci_fetch_row($s)) != false)‫‏‬
foreach ($row as $item)‫‏‬
print $item;
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9
Program Agenda
 Three-slide Introduction to PHP OCI8
 Useful Oracle Database 12c Features
 PHP DTrace for Dynamic Tracing
 Oracle/MySQL PHP Applications
 PHP Performance and Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10
Useful Oracle Database 12c
Features
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11
32K VARCHARs in Oracle Database 12c
 SQL
CREATE TABLE vctab (vcdata VARCHAR2(32767));
 PHP OCI8 does insert and fetch in one piece
$s = oci_parse($c, "INSERT INTO vctab (vcdata) VALUES (:bv)");
$bv = str_repeat('x', 32767);
oci_bind_by_name($s, ":bv", $bv);
oci_execute($s);
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12
32K VARCHARs in Oracle Database 12c
 CLOB vs VARCHAR2
$s = oci_parse($c,
'SELECT clobdata FROM ctab');
oci_execute($s);
$row = oci_fetch_assoc($s);
$result = $row['CLOBDATA']->load();
 32K fetch times (very dependent on LOB storage, network speeds etc)
CLOB: 0.574 seconds
VARCHAR2: 0.279 seconds
$s = oci_parse($c,
'SELECT vcdata FROM vctab');
oci_execute($s);
$row = oci_fetch_assoc($s);
$result = $row['VCDATA'];
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13
Oracle DB 12c SQL Row Limiting Clause
$sql = "SELECT employee_id, last_name FROM employees ORDER BY employee_id";
if ($oracleversion >= 12) {
$sql = $sql . ' OFFSET :offset ROWS FETCH NEXT :maxnumrows ROWS ONLY';
} else {
$sql = "SELECT * FROM (SELECT A.*, ROWNUM AS MY_RNUM FROM ($sql) A
WHERE ROWNUM <= :maxnumrows + :offset)
WHERE MY_RNUM > :offset";
}
$offset = 5;
$maxnumrows = 5;
$s = oci_parse($c, $sql);
oci_bind_by_name($s, ":offset", $offset, -1, SQLT_INT);
oci_bind_by_name($s, ":maxnumrows", $maxnumrows, -1, SQLT_INT);
oci_execute($s);
oci_fetch_all($s, $res);
105 Austin
106 Pataballa
107 Lorentz
108 Greenberg
109 Faviet
Or use row_number()
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14
Oracle DB 12c IDENTITY Columns
 ANSI auto increment syntax:
CREATE TABLE t1 (c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
c2 VARCHAR2(20));
 In PHP:
$s = oci_parse($c, "INSERT INTO t1 (c2) VALUES ('Alison')");
oci_execute($s);
$s = oci_parse($c, "INSERT INTO t1 (c1, c2) VALUES (NULL, 'Chris')");
oci_execute($s);
 Table now contains:
1 Chris
2 Alison
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15
Oracle DB 12c OCI oraaccess.xml
Deployment Settings
 New $TNS_ADMIN/oraaccess.xml deployment settings file
 Client (i.e. PHP) side file for configuring OCI-based driver settings
 Global and per-connection string parameters
 Don't need to modify application to improve performance
 Restart application after editing
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16
Row Prefetching Refresher
Temporary buffer cache for query duration
// First Fetch
$r = oci_fetch_row(…);
var_dump($r);
// array('1000','Roma');
OCI8
Extension
Oracle
Libraries
1000, Roma
1100, Venice
1200, Tokyo
. . .
1000, Roma
// Second Fetch
$r = oci_fetch_row(…);
var_dump($r);
// array('1100','Venice');
OCI8
Extension
Oracle
Libraries
1000, Roma
1100, Venice
1200, Tokyo
. . .
1100, Venice
No DB access
for second fetch
X
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17
oraaccess.xml Prefetch Tuning
 PHP code needing tuning:
$s = oci_parse($c, "SELECT ...");
oci_execute($s);
oci_set_prefetch($s, 1); // application sets prefetch
while (($row = oci_fetch_row($s)) != false)
var_dump($row);
 $TNS_ADMIN/oraaccess.xml snippet:
<prefetch>
<rows>1000</rows>
</prefetch
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18
oraaccess.xml Prefetch Tuning
 Pre-12c:
Fetching 20000 rows with application prefetch 1
Time is: 5.822 seconds
 With Oracle Database 12c $TNS_ADMIN/oraaccess.xml:
Fetching 20000 rows with application prefetch 1
Time is: 0.863 seconds
(Very dependent on network speeds etc)
 See exhibition booth demo
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19
Statement Caching Refresher
oci8.statement_cache_size = 20
1. “select col from tab”, <metadata>
2.
…
20.
1. “select col from tab”
2.
…
statement 1
select col from tab
select col from tab
select col from tab
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20
oraaccess.xml Auto-tuning Statement Cache
 Statement cache size monitored & updated in a cycle
– Cache size increases/decreases gradually
 ram_threshold is max percentage of installed RAM
 memory_target is absolute max size
 Lesser of these two is used as the limit.
<auto_tune>
<enable>true</enable>
<ram_threshold>0.1</ram_threshold>
<memory_target>2M</memory_target>
</auto_tune>
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21
oraaccess.xml Auto-tuning Statement Cache
for ($j = 0; $j < 10; ++$j) {
echo "Running workloadn";
for ($i = 0; $i < 30; ++$i)
do_query($c1, "SELECT $i FROM dual"); // 30 distinct queries
echo "Number of new parses for this session: ",
print_new_parse_count(), "n";
}
 PHP OCI8 default: oci8.statement_cache_size = 20
– So 30 sequential statements are never effectively cached
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22
oraaccess.xml Auto-tuning Statement Cache
 Pre-12c
...
Running workload
Number of new parses for this session: 30
Running workload
Number of new parses for this session: 30
...
 Tune by manually monitoring web server performance, AWR byte
transfers, reset oci8.statement_cache_size
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23
oraaccess.xml Auto-tuning Statement Cache
 Auto-tuned with Oracle Database 12c $TNS_ADMIN/oraaccess.xml:
...
Running workload
Number of new parses for this session: 30
Running workload
Number of new parses for this session: 0
Running workload
Number of new parses for this session: 0
...
 See exhibition booth demo
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24
Implicit Result Sets in PHP
$sql =
"DECLARE
c1 SYS_REFCURSOR;
BEGIN
OPEN c1 FOR SELECT city, postal_code FROM locations;
DBMS_SQL.RETURN_RESULT(c1);
OPEN c1 FOR SELECT * FROM employees;
DBMS_SQL.RETURN_RESULT(c1);
END;";
 Needs PHP OCI8 2.0-devel from PECL
 From 10gR2
– With Oracle Database 12c client and 12c server now uses ONS
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25
Implicit Result Sets in PHP
 Use standard query code:
$s = oci_parse($c, $sql);
oci_execute($s);
while (($row = oci_fetch_row($s))
!= false) {
foreach ($row as $item)
echo $item . " ";
echo "n";
}
Roma 00989
Venice 10934
...
Mexico City 11932
100 Steven King SKING
101 Neena Kochhar NKOCHHAR
...
BEGIN
OPEN c1 FOR SELECT city, postal_code
FROM locations;
DBMS_SQL.RETURN_RESULT(c1);
OPEN c1 FOR SELECT * FROM employees;
DBMS_SQL.RETURN_RESULT(c1);
END;
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26
Implicit Result Sets in PHP Example #2
 Use oci_get_implicit_resultset() function in PHP OCI8 2.0
$s = oci_parse($c, $sql);
oci_execute($s);
while (($s_2 = oci_get_implicit_resultset($s))) {
for ($i = 1; $i <= oci_num_fields($s_2); ++$i)
echo oci_field_name($s_2, $i) . " "; // Use column names for headings
echo "n";
while (($row = oci_fetch_row($s_2)) != false) {
foreach ($row as $item)
echo $item . " ";
echo "n";
}
}
CITY POSTAL_CODE
Roma 00989
Venice 10934
...
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL
100 Steven King SKING
101 Neena Kochhar NKOCHHAR
...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27
Program Agenda
 Three-slide Introduction to PHP OCI8
 Useful Oracle Database 12c Features
 PHP DTrace for Dynamic Tracing
 Oracle/MySQL PHP Applications
 PHP Performance and Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28
PHP DTrace for Dynamic
Tracing on Oracle Linux
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29
Dynamic Tracing Overview
 Dynamic Tracing from Solaris ported to Oracle Linux's UEK3 kernel
"DTrace is a facility for the dynamic instrumentation of
production systems, for the purpose of troubleshooting and
analysis."
 DTrace User Space Dynamic Tracing (USDT) now available
 PHP source code is instrumented with “probes”
if (DTRACE_OCI8_ERROR_ENABLED()) {
DTRACE_OCI8_ERROR((int)errstatus, (long)errcode);
}
 PHP 5.4.20 & 5.5.4 –-enable-dtrace linking stabilized
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30
DTrace User Space Dynamic Tracing (USDT)
 Install Oracle Linux with UEK3 kernel and dtrace-utils
http://public-yum.oracle.com/beta/
 For PHP, enable DTrace User Space Dynamic Tracing (USDT)
# modprobe fasttrap
# chmod 666 /dev/dtrace/helper
 Build PHP 5.4.20 or PHP 5.5.4 and install PHP OCI8 2.0 as a shared
library from PECL
# ./configure --enable-dtrace ...
# make && make install
# PHP_DTRACE=yes pecl install oci8-devel
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31
DTrace User Space Dynamic Tracing (USDT)
 Show probes available in PHP OCI8:
# dtrace -l -m oci8.so
...
18 php9559 oci8.so php_oci_do_connect oci8-connect-entry
23 php9559 oci8.so php_oci_do_connect oci8-connect-return
24 php9559 oci8.so php_oci_do_connect_ex oci8-connect-type
25 php9559 oci8.so php_oci_error oci8-error
26 php9559 oci8.so php_oci_statement_execute oci8-execute-mode
...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32
DTrace User Space Dynamic Tracing (USDT)
 Write tracing scripts in D, e.g. trace.d:
#!/usr/sbin/dtrace -Zqs
php*:::oci8-connect-entry
{ printf("%lld: PHP connect-entryn", walltimestamp);
printf("t credentials %s@%sn“,‫‏‏‬arg0 ? copyinstr(arg0) : "",
arg1 ? copyinstr(arg1) : "");
printf("t charset %sn", arg2 ? copyinstr(arg2) : "");
printf("t session_mode %ld : n", (long)arg3);
printf("persistent %d : ", (int)arg4);
printf("exclusive %dn", (int)arg5);
}
...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33
DTrace User Space Dynamic Tracing (USDT)
 Run trace.d
# ./trace.d
 Run a PHP script
$ php oci8.php
Beijing
Bern
Bombay
Geneva
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34
DTrace User Space Dynamic Tracing (USDT)
# ./trace.d
1379702722173349580: PHP connect-entry
credentials cj@localhost/pdborcl
charset
session_mode 0 : persistent 0 : exclusive 1
1379702722258590635: PHP oci8-connect-return
connection 0x7fccdc1c2828
1379702722259141543: PHP oci8-sqltext
connection 0x7fccdc1c2828
sql select city from locations where rownum < 5 order by 1
1379702722259240438: PHP oci8-execute-mode
connection 0x7fccdc1c2828
mode 0x20
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35
Program Agenda
 Three-slide Introduction to PHP OCI8
 Useful Oracle Database 12c Features
 PHP DTrace for Dynamic Tracing
 Oracle/MySQL PHP Applications
 PHP Performance and Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36
Oracle/MySQL PHP
Applications
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37
Oracle Database Driver for MySQL Applications
 Deployment Process:
– Migrate Schema and Data
– Build Application with the
Driver
– Translate SQL
– Test and Tune to Leverage
Oracle Database Features
libmysqlclient
MySQL DB Oracle DB
liboramysql
OCI
Application using
MySQL’s C API
Application using
MySQL’s C API
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38
Build Application with the Driver
 One method of re-linking with the new 12c Driver:
– Build PHP mysql extension(s) with MySQL Connector/C
# ./configure --with-mysql=/usr ...
# make && make install
– Create a symlink to the Oracle driver library:
# ln –s $ORACLE_HOME/lib/liboramysql12.so $ORACLE_HOME/lib/libmysql.so
# export LD_LIBRARY_PATH=$ORACLE_HOME/lib
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39
Build Application with the Driver
 Another method of re-linking with the new 12c Driver:
– Use a Connector/C emulator:
# cd $HOME
# $INSTANTCLIENTDIR/sdk/demo/setuporamysql.sql
# ./configure --with-mysql=$HOME/oramysql ...
# make && make installs
(Other methods exist too)
 Restart PHP
# service httpd start
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40
Translate SQL
 Change connect string:
mysql_connect("localhost/pdborcl", "scott", "tiger");
 Change SQL manually or use an Oracle Database 12c SQL
Translation Profile:
– MySQL syntax:
$sql = "SELECT * FROM mytab LIMIT 5,10";
– Oracle ANSI syntax:
$sql = "SELECT * FROM mytab OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY";
 Run the Application
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41
Program Agenda
 Three-slide Introduction to PHP OCI8
 Useful Oracle Database 12c Features
 PHP DTrace for Dynamic Tracing
 Oracle/MySQL PHP Applications
 PHP Performance and Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42
PHP Performance and
Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43
Scaling up with DRCP Connection Pooling
5000 users, DRCP pool size of 100
Dedicated Server Processes
5000 x 4 MB +
5000 x 400 KB +
0 =
21 GB
DB Processes
Session Memory
DRCP Broker
Total
100 x 4 MB +
100 x 400 KB +
5000 x 35 KB =
610 MB
PHP DB PHP DB
DRCP Server Processes
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44
DRCP Connection Pooling
 Use DRCP for short lived connections by same DB user
 Using DRCP in PHP 5.3+ with Oracle 11g+:
– Start the Pool:
SQL> EXECUTE DBMS_CONNECTION_POOL.START_POOL();
– Set oci8.connection_class in php.ini
oci8.connection_class = MY_PHP_APP
– Add "POOLED" to the connect string:
$c = oci_pconnect('scott', 'tiger', 'myhost/sales:pooled');
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45
DRCP Connection Pooling Benchmark
 2GB RAM
 1 connection broker
 100 pooled servers
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46
Client Identifiers for Auditing and Monitoring
 Set client identifier in PHP after connection
session_start();
$c = oci_pconnect('phpuser', 'welcome', 'localhost/orcl');
if (authenticate_web_user()) {
oci_set_client_identifier($c, $_SESSION['app_user_name']); // e.g. 'Chris'
. . .
} else {
trigger_error(. . .);
}
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47
Client Identifiers for Auditing
APP_USERNAME USERNAME EXTENDED_TIMESTAMP ACTION_NAME
------------- ----------- ----------------------------------- -----------
Chris PHPUSER 16-AUG-13 12.25.42.846153 PM -07:00 SELECT
Alison PHPUSER 16-AUG-13 12.25.50.870773 PM -07:00 SELECT
Details in an OTN article
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.49
Client Identifiers for Monitoring
 Client Identifier is visible in views and in Enterprise Manager
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.53
Oracle Client and Server Result Caches
CREATE TABLE SALES (...) RESULT_CACHE;
 Results of queries from small tables can be cached
 Caches automatically invalidated by server data changes
– If no roundtrip within defined time, cache is assumed stale
 Configure globally in DB or at client in sqlnet.ora
– CLIENT_RESULT_CACHE_SIZE or OCI_RESULT_CACHE_MAX_SIZE
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.54
Other Oracle DB Features for
High Performance Applications
 Bind Variables
 Transactions – don’t auto commit unnecessarily
 Advanced Queuing
– Move slower processing out of HTTP request/response cycle
 Fast Application Notification
– Handle DB errors without timeouts
– Improves reconnection behavior
– Needs Oracle DB 12c client libraries for Oracle DB 12c
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.55
Other Oracle DB Features for
High Performance Applications
 Edition Based Redefinition
– Online PL/SQL Upgrades
– Useful for A/B testing
 Continuous Query Notification
– Can use for cache invalidation
 DBMS_XA
– Stop/restart transaction in different HTTP requests
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.56
Resources
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.57
Resources
http://blogs.oracle.com/opal: Blog, e.g. Implicit Result Sets, DTrace
http://www.oracle.com/technetwork/topics/php: OTN PHP Dev Center
http://tinyurl.com/phporacle: The Underground PHP & Oracle Manual
http://tinyurl.com/drcpphp: DRCP Connection Pooling Whitepaper
http://tinyurl.com/phpaudit: PHP Web Auditing, Authorization and
Monitoring with Oracle Database
 Demo Pod SL-033 (back left of Moscone South)
 “Application Performance, Scalability, and Availability with Oracle
Database 12c” (CON8855) 5:15pm Marriott Marquis - Golden Gate B
 Email: christopher.jones@oracle.com Twitter: @ghrd
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.58
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.59
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.60
The preceding is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The development, release,
and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.

More Related Content

What's hot

Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...Andrejs Prokopjevs
 
Configuration beyond Java EE 8
Configuration beyond Java EE 8Configuration beyond Java EE 8
Configuration beyond Java EE 8Anatole Tresch
 
Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!Guatemala User Group
 
ORDS - Oracle REST Data Services
ORDS - Oracle REST Data ServicesORDS - Oracle REST Data Services
ORDS - Oracle REST Data ServicesJustin Michael Raj
 
Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Performance Tuning Corporation
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Alex Zaballa
 
0396 oracle-goldengate-12c-tutorial
0396 oracle-goldengate-12c-tutorial0396 oracle-goldengate-12c-tutorial
0396 oracle-goldengate-12c-tutorialKlausePaulino
 
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014Alex Zaballa
 
Configure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaConfigure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaAnatole Tresch
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridVinay Kumar
 
Mysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sysMysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sysMark Leith
 
Configuration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and TamayaConfiguration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and TamayaDmitry Kornilov
 
Extending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorExtending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorMark Leith
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSDoug Gault
 
common_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQLcommon_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQLShlomi Noach
 

What's hot (20)

Best Features of Multitenant 12c
Best Features of Multitenant 12cBest Features of Multitenant 12c
Best Features of Multitenant 12c
 
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
Oracle Unified Directory. Lessons learnt. Is it ready for a move from OID? (O...
 
Configuration beyond Java EE 8
Configuration beyond Java EE 8Configuration beyond Java EE 8
Configuration beyond Java EE 8
 
Wizard of ORDS
Wizard of ORDSWizard of ORDS
Wizard of ORDS
 
Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!
 
ORDS - Oracle REST Data Services
ORDS - Oracle REST Data ServicesORDS - Oracle REST Data Services
ORDS - Oracle REST Data Services
 
Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
 
0396 oracle-goldengate-12c-tutorial
0396 oracle-goldengate-12c-tutorial0396 oracle-goldengate-12c-tutorial
0396 oracle-goldengate-12c-tutorial
 
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
Flex Cluster e Flex ASM - GUOB Tech Day - OTN TOUR LA Brazil 2014
 
Configure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaConfigure Your Projects with Apache Tamaya
Configure Your Projects with Apache Tamaya
 
Oracle Cloud As Services
Oracle Cloud As ServicesOracle Cloud As Services
Oracle Cloud As Services
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug Madrid
 
Mysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sysMysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sys
 
ASH and AWR on DB12c
ASH and AWR on DB12cASH and AWR on DB12c
ASH and AWR on DB12c
 
Configuration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and TamayaConfiguration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and Tamaya
 
Extending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorExtending MySQL Enterprise Monitor
Extending MySQL Enterprise Monitor
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDS
 
common_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQLcommon_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQL
 
Hacking oracle using metasploit
Hacking oracle using metasploitHacking oracle using metasploit
Hacking oracle using metasploit
 

Similar to What’s New in Oracle Database 12c for PHP

DOAG 2016 Oracle Logon Security
DOAG 2016 Oracle Logon SecurityDOAG 2016 Oracle Logon Security
DOAG 2016 Oracle Logon SecurityLoopback.ORG
 
AWR and ASH Advanced Usage with DB12c
AWR and ASH Advanced Usage with DB12cAWR and ASH Advanced Usage with DB12c
AWR and ASH Advanced Usage with DB12cKellyn Pot'Vin-Gorman
 
Graal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them AllGraal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them AllThomas Wuerthinger
 
Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)Bobby Curtis
 
Php classes in mumbai
Php classes in mumbaiPhp classes in mumbai
Php classes in mumbaiaadi Surve
 
Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001jucaab
 
18(ish) Things You'll Love About Oracle Database 18c
18(ish) Things You'll Love About Oracle Database 18c18(ish) Things You'll Love About Oracle Database 18c
18(ish) Things You'll Love About Oracle Database 18cChris Saxon
 
Manual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQLManual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQLErick Vidbaz
 
War of the Indices- SQL Server and Oracle
War of the Indices-  SQL Server and OracleWar of the Indices-  SQL Server and Oracle
War of the Indices- SQL Server and OracleKellyn Pot'Vin-Gorman
 
Ruby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrādeRuby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrādeRaimonds Simanovskis
 
Get the most out of Oracle Data Guard - POUG version
Get the most out of Oracle Data Guard - POUG versionGet the most out of Oracle Data Guard - POUG version
Get the most out of Oracle Data Guard - POUG versionLudovico Caldara
 
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019Dave Stokes
 
PHP, The X DevAPI, and the MySQL Document Store Presented January 23rd, 20...
PHP,  The X DevAPI,  and the  MySQL Document Store Presented January 23rd, 20...PHP,  The X DevAPI,  and the  MySQL Document Store Presented January 23rd, 20...
PHP, The X DevAPI, and the MySQL Document Store Presented January 23rd, 20...Dave Stokes
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...Alex Zaballa
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...Alex Zaballa
 
MySQL NoSQL JSON JS Python "Document Store" demo
MySQL NoSQL JSON JS Python "Document Store" demoMySQL NoSQL JSON JS Python "Document Store" demo
MySQL NoSQL JSON JS Python "Document Store" demoKeith Hollman
 
Oracle 12cR2 RAC Database Software Installation and Create Database
Oracle 12cR2 RAC Database Software Installation and Create DatabaseOracle 12cR2 RAC Database Software Installation and Create Database
Oracle 12cR2 RAC Database Software Installation and Create DatabaseMonowar Mukul
 

Similar to What’s New in Oracle Database 12c for PHP (20)

ORACLE
ORACLEORACLE
ORACLE
 
DOAG 2016 Oracle Logon Security
DOAG 2016 Oracle Logon SecurityDOAG 2016 Oracle Logon Security
DOAG 2016 Oracle Logon Security
 
AWR and ASH Advanced Usage with DB12c
AWR and ASH Advanced Usage with DB12cAWR and ASH Advanced Usage with DB12c
AWR and ASH Advanced Usage with DB12c
 
Graal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them AllGraal and Truffle: One VM to Rule Them All
Graal and Truffle: One VM to Rule Them All
 
Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)
 
Php classes in mumbai
Php classes in mumbaiPhp classes in mumbai
Php classes in mumbai
 
Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001
 
18(ish) Things You'll Love About Oracle Database 18c
18(ish) Things You'll Love About Oracle Database 18c18(ish) Things You'll Love About Oracle Database 18c
18(ish) Things You'll Love About Oracle Database 18c
 
Manual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQLManual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQL
 
War of the Indices- SQL Server and Oracle
War of the Indices-  SQL Server and OracleWar of the Indices-  SQL Server and Oracle
War of the Indices- SQL Server and Oracle
 
Ruby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrādeRuby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrāde
 
Get the most out of Oracle Data Guard - POUG version
Get the most out of Oracle Data Guard - POUG versionGet the most out of Oracle Data Guard - POUG version
Get the most out of Oracle Data Guard - POUG version
 
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
 
PHP, The X DevAPI, and the MySQL Document Store Presented January 23rd, 20...
PHP,  The X DevAPI,  and the  MySQL Document Store Presented January 23rd, 20...PHP,  The X DevAPI,  and the  MySQL Document Store Presented January 23rd, 20...
PHP, The X DevAPI, and the MySQL Document Store Presented January 23rd, 20...
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
 
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
OOW16 - Oracle Database 12c - The Best Oracle Database 12c New Features for D...
 
MySQL JSON Functions
MySQL JSON FunctionsMySQL JSON Functions
MySQL JSON Functions
 
MySQL NoSQL JSON JS Python "Document Store" demo
MySQL NoSQL JSON JS Python "Document Store" demoMySQL NoSQL JSON JS Python "Document Store" demo
MySQL NoSQL JSON JS Python "Document Store" demo
 
Oracle 12cR2 RAC Database Software Installation and Create Database
Oracle 12cR2 RAC Database Software Installation and Create DatabaseOracle 12cR2 RAC Database Software Installation and Create Database
Oracle 12cR2 RAC Database Software Installation and Create Database
 
Con4445 jesus
Con4445 jesusCon4445 jesus
Con4445 jesus
 

Recently uploaded

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 

Recently uploaded (20)

A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 

What’s New in Oracle Database 12c for PHP

  • 1. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1
  • 2. What’s New in Oracle Database 12c for Scripting Languages Christopher Jones, Oracle Shoaib Lari, Oracle September 2013
  • 3. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3 The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 4. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4 Program Agenda  Three-slide Introduction to PHP OCI8  Useful Oracle Database 12c Features  PHP DTrace for Dynamic Tracing  Oracle/MySQL PHP Applications  PHP Performance and Scalability
  • 5. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5 Three-slide Introduction to PHP OCI8
  • 6. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6 Traditional PHP Script Processing
  • 7. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7 One of Many Modern PHP Architectures PHP Update QueueCache Apache PHP OCI8 Extension Oracle Libraries PHP Web Service DB
  • 8. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8 What is PHP OCI8?  Recommended Oracle Database extension for PHP  Supports many Oracle features  Available in PHP C source and binary bundles  PHP OCI8 2.0 "Development" is on http://pecl.php.net $c = oci_connect('scott', 'tiger', 'localhost/pdborcl'); $s = oci_parse($c, 'SELECT * FROM employees'); oci_execute($s); while (($row = oci_fetch_row($s)) != false)‫‏‬ foreach ($row as $item)‫‏‬ print $item;
  • 9. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9 Program Agenda  Three-slide Introduction to PHP OCI8  Useful Oracle Database 12c Features  PHP DTrace for Dynamic Tracing  Oracle/MySQL PHP Applications  PHP Performance and Scalability
  • 10. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10 Useful Oracle Database 12c Features
  • 11. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11 32K VARCHARs in Oracle Database 12c  SQL CREATE TABLE vctab (vcdata VARCHAR2(32767));  PHP OCI8 does insert and fetch in one piece $s = oci_parse($c, "INSERT INTO vctab (vcdata) VALUES (:bv)"); $bv = str_repeat('x', 32767); oci_bind_by_name($s, ":bv", $bv); oci_execute($s);
  • 12. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12 32K VARCHARs in Oracle Database 12c  CLOB vs VARCHAR2 $s = oci_parse($c, 'SELECT clobdata FROM ctab'); oci_execute($s); $row = oci_fetch_assoc($s); $result = $row['CLOBDATA']->load();  32K fetch times (very dependent on LOB storage, network speeds etc) CLOB: 0.574 seconds VARCHAR2: 0.279 seconds $s = oci_parse($c, 'SELECT vcdata FROM vctab'); oci_execute($s); $row = oci_fetch_assoc($s); $result = $row['VCDATA'];
  • 13. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13 Oracle DB 12c SQL Row Limiting Clause $sql = "SELECT employee_id, last_name FROM employees ORDER BY employee_id"; if ($oracleversion >= 12) { $sql = $sql . ' OFFSET :offset ROWS FETCH NEXT :maxnumrows ROWS ONLY'; } else { $sql = "SELECT * FROM (SELECT A.*, ROWNUM AS MY_RNUM FROM ($sql) A WHERE ROWNUM <= :maxnumrows + :offset) WHERE MY_RNUM > :offset"; } $offset = 5; $maxnumrows = 5; $s = oci_parse($c, $sql); oci_bind_by_name($s, ":offset", $offset, -1, SQLT_INT); oci_bind_by_name($s, ":maxnumrows", $maxnumrows, -1, SQLT_INT); oci_execute($s); oci_fetch_all($s, $res); 105 Austin 106 Pataballa 107 Lorentz 108 Greenberg 109 Faviet Or use row_number()
  • 14. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14 Oracle DB 12c IDENTITY Columns  ANSI auto increment syntax: CREATE TABLE t1 (c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, c2 VARCHAR2(20));  In PHP: $s = oci_parse($c, "INSERT INTO t1 (c2) VALUES ('Alison')"); oci_execute($s); $s = oci_parse($c, "INSERT INTO t1 (c1, c2) VALUES (NULL, 'Chris')"); oci_execute($s);  Table now contains: 1 Chris 2 Alison
  • 15. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15 Oracle DB 12c OCI oraaccess.xml Deployment Settings  New $TNS_ADMIN/oraaccess.xml deployment settings file  Client (i.e. PHP) side file for configuring OCI-based driver settings  Global and per-connection string parameters  Don't need to modify application to improve performance  Restart application after editing
  • 16. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16 Row Prefetching Refresher Temporary buffer cache for query duration // First Fetch $r = oci_fetch_row(…); var_dump($r); // array('1000','Roma'); OCI8 Extension Oracle Libraries 1000, Roma 1100, Venice 1200, Tokyo . . . 1000, Roma // Second Fetch $r = oci_fetch_row(…); var_dump($r); // array('1100','Venice'); OCI8 Extension Oracle Libraries 1000, Roma 1100, Venice 1200, Tokyo . . . 1100, Venice No DB access for second fetch X
  • 17. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17 oraaccess.xml Prefetch Tuning  PHP code needing tuning: $s = oci_parse($c, "SELECT ..."); oci_execute($s); oci_set_prefetch($s, 1); // application sets prefetch while (($row = oci_fetch_row($s)) != false) var_dump($row);  $TNS_ADMIN/oraaccess.xml snippet: <prefetch> <rows>1000</rows> </prefetch
  • 18. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18 oraaccess.xml Prefetch Tuning  Pre-12c: Fetching 20000 rows with application prefetch 1 Time is: 5.822 seconds  With Oracle Database 12c $TNS_ADMIN/oraaccess.xml: Fetching 20000 rows with application prefetch 1 Time is: 0.863 seconds (Very dependent on network speeds etc)  See exhibition booth demo
  • 19. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19 Statement Caching Refresher oci8.statement_cache_size = 20 1. “select col from tab”, <metadata> 2. … 20. 1. “select col from tab” 2. … statement 1 select col from tab select col from tab select col from tab
  • 20. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20 oraaccess.xml Auto-tuning Statement Cache  Statement cache size monitored & updated in a cycle – Cache size increases/decreases gradually  ram_threshold is max percentage of installed RAM  memory_target is absolute max size  Lesser of these two is used as the limit. <auto_tune> <enable>true</enable> <ram_threshold>0.1</ram_threshold> <memory_target>2M</memory_target> </auto_tune>
  • 21. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21 oraaccess.xml Auto-tuning Statement Cache for ($j = 0; $j < 10; ++$j) { echo "Running workloadn"; for ($i = 0; $i < 30; ++$i) do_query($c1, "SELECT $i FROM dual"); // 30 distinct queries echo "Number of new parses for this session: ", print_new_parse_count(), "n"; }  PHP OCI8 default: oci8.statement_cache_size = 20 – So 30 sequential statements are never effectively cached
  • 22. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22 oraaccess.xml Auto-tuning Statement Cache  Pre-12c ... Running workload Number of new parses for this session: 30 Running workload Number of new parses for this session: 30 ...  Tune by manually monitoring web server performance, AWR byte transfers, reset oci8.statement_cache_size
  • 23. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23 oraaccess.xml Auto-tuning Statement Cache  Auto-tuned with Oracle Database 12c $TNS_ADMIN/oraaccess.xml: ... Running workload Number of new parses for this session: 30 Running workload Number of new parses for this session: 0 Running workload Number of new parses for this session: 0 ...  See exhibition booth demo
  • 24. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24 Implicit Result Sets in PHP $sql = "DECLARE c1 SYS_REFCURSOR; BEGIN OPEN c1 FOR SELECT city, postal_code FROM locations; DBMS_SQL.RETURN_RESULT(c1); OPEN c1 FOR SELECT * FROM employees; DBMS_SQL.RETURN_RESULT(c1); END;";  Needs PHP OCI8 2.0-devel from PECL  From 10gR2 – With Oracle Database 12c client and 12c server now uses ONS
  • 25. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25 Implicit Result Sets in PHP  Use standard query code: $s = oci_parse($c, $sql); oci_execute($s); while (($row = oci_fetch_row($s)) != false) { foreach ($row as $item) echo $item . " "; echo "n"; } Roma 00989 Venice 10934 ... Mexico City 11932 100 Steven King SKING 101 Neena Kochhar NKOCHHAR ... BEGIN OPEN c1 FOR SELECT city, postal_code FROM locations; DBMS_SQL.RETURN_RESULT(c1); OPEN c1 FOR SELECT * FROM employees; DBMS_SQL.RETURN_RESULT(c1); END;
  • 26. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26 Implicit Result Sets in PHP Example #2  Use oci_get_implicit_resultset() function in PHP OCI8 2.0 $s = oci_parse($c, $sql); oci_execute($s); while (($s_2 = oci_get_implicit_resultset($s))) { for ($i = 1; $i <= oci_num_fields($s_2); ++$i) echo oci_field_name($s_2, $i) . " "; // Use column names for headings echo "n"; while (($row = oci_fetch_row($s_2)) != false) { foreach ($row as $item) echo $item . " "; echo "n"; } } CITY POSTAL_CODE Roma 00989 Venice 10934 ... EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL 100 Steven King SKING 101 Neena Kochhar NKOCHHAR ...
  • 27. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27 Program Agenda  Three-slide Introduction to PHP OCI8  Useful Oracle Database 12c Features  PHP DTrace for Dynamic Tracing  Oracle/MySQL PHP Applications  PHP Performance and Scalability
  • 28. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28 PHP DTrace for Dynamic Tracing on Oracle Linux
  • 29. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29 Dynamic Tracing Overview  Dynamic Tracing from Solaris ported to Oracle Linux's UEK3 kernel "DTrace is a facility for the dynamic instrumentation of production systems, for the purpose of troubleshooting and analysis."  DTrace User Space Dynamic Tracing (USDT) now available  PHP source code is instrumented with “probes” if (DTRACE_OCI8_ERROR_ENABLED()) { DTRACE_OCI8_ERROR((int)errstatus, (long)errcode); }  PHP 5.4.20 & 5.5.4 –-enable-dtrace linking stabilized
  • 30. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30 DTrace User Space Dynamic Tracing (USDT)  Install Oracle Linux with UEK3 kernel and dtrace-utils http://public-yum.oracle.com/beta/  For PHP, enable DTrace User Space Dynamic Tracing (USDT) # modprobe fasttrap # chmod 666 /dev/dtrace/helper  Build PHP 5.4.20 or PHP 5.5.4 and install PHP OCI8 2.0 as a shared library from PECL # ./configure --enable-dtrace ... # make && make install # PHP_DTRACE=yes pecl install oci8-devel
  • 31. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31 DTrace User Space Dynamic Tracing (USDT)  Show probes available in PHP OCI8: # dtrace -l -m oci8.so ... 18 php9559 oci8.so php_oci_do_connect oci8-connect-entry 23 php9559 oci8.so php_oci_do_connect oci8-connect-return 24 php9559 oci8.so php_oci_do_connect_ex oci8-connect-type 25 php9559 oci8.so php_oci_error oci8-error 26 php9559 oci8.so php_oci_statement_execute oci8-execute-mode ...
  • 32. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32 DTrace User Space Dynamic Tracing (USDT)  Write tracing scripts in D, e.g. trace.d: #!/usr/sbin/dtrace -Zqs php*:::oci8-connect-entry { printf("%lld: PHP connect-entryn", walltimestamp); printf("t credentials %s@%sn“,‫‏‏‬arg0 ? copyinstr(arg0) : "", arg1 ? copyinstr(arg1) : ""); printf("t charset %sn", arg2 ? copyinstr(arg2) : ""); printf("t session_mode %ld : n", (long)arg3); printf("persistent %d : ", (int)arg4); printf("exclusive %dn", (int)arg5); } ...
  • 33. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33 DTrace User Space Dynamic Tracing (USDT)  Run trace.d # ./trace.d  Run a PHP script $ php oci8.php Beijing Bern Bombay Geneva
  • 34. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34 DTrace User Space Dynamic Tracing (USDT) # ./trace.d 1379702722173349580: PHP connect-entry credentials cj@localhost/pdborcl charset session_mode 0 : persistent 0 : exclusive 1 1379702722258590635: PHP oci8-connect-return connection 0x7fccdc1c2828 1379702722259141543: PHP oci8-sqltext connection 0x7fccdc1c2828 sql select city from locations where rownum < 5 order by 1 1379702722259240438: PHP oci8-execute-mode connection 0x7fccdc1c2828 mode 0x20
  • 35. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35 Program Agenda  Three-slide Introduction to PHP OCI8  Useful Oracle Database 12c Features  PHP DTrace for Dynamic Tracing  Oracle/MySQL PHP Applications  PHP Performance and Scalability
  • 36. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36 Oracle/MySQL PHP Applications
  • 37. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37 Oracle Database Driver for MySQL Applications  Deployment Process: – Migrate Schema and Data – Build Application with the Driver – Translate SQL – Test and Tune to Leverage Oracle Database Features libmysqlclient MySQL DB Oracle DB liboramysql OCI Application using MySQL’s C API Application using MySQL’s C API
  • 38. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38 Build Application with the Driver  One method of re-linking with the new 12c Driver: – Build PHP mysql extension(s) with MySQL Connector/C # ./configure --with-mysql=/usr ... # make && make install – Create a symlink to the Oracle driver library: # ln –s $ORACLE_HOME/lib/liboramysql12.so $ORACLE_HOME/lib/libmysql.so # export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  • 39. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39 Build Application with the Driver  Another method of re-linking with the new 12c Driver: – Use a Connector/C emulator: # cd $HOME # $INSTANTCLIENTDIR/sdk/demo/setuporamysql.sql # ./configure --with-mysql=$HOME/oramysql ... # make && make installs (Other methods exist too)  Restart PHP # service httpd start
  • 40. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40 Translate SQL  Change connect string: mysql_connect("localhost/pdborcl", "scott", "tiger");  Change SQL manually or use an Oracle Database 12c SQL Translation Profile: – MySQL syntax: $sql = "SELECT * FROM mytab LIMIT 5,10"; – Oracle ANSI syntax: $sql = "SELECT * FROM mytab OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY";  Run the Application
  • 41. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41 Program Agenda  Three-slide Introduction to PHP OCI8  Useful Oracle Database 12c Features  PHP DTrace for Dynamic Tracing  Oracle/MySQL PHP Applications  PHP Performance and Scalability
  • 42. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42 PHP Performance and Scalability
  • 43. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43 Scaling up with DRCP Connection Pooling 5000 users, DRCP pool size of 100 Dedicated Server Processes 5000 x 4 MB + 5000 x 400 KB + 0 = 21 GB DB Processes Session Memory DRCP Broker Total 100 x 4 MB + 100 x 400 KB + 5000 x 35 KB = 610 MB PHP DB PHP DB DRCP Server Processes
  • 44. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44 DRCP Connection Pooling  Use DRCP for short lived connections by same DB user  Using DRCP in PHP 5.3+ with Oracle 11g+: – Start the Pool: SQL> EXECUTE DBMS_CONNECTION_POOL.START_POOL(); – Set oci8.connection_class in php.ini oci8.connection_class = MY_PHP_APP – Add "POOLED" to the connect string: $c = oci_pconnect('scott', 'tiger', 'myhost/sales:pooled');
  • 45. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45 DRCP Connection Pooling Benchmark  2GB RAM  1 connection broker  100 pooled servers
  • 46. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46 Client Identifiers for Auditing and Monitoring  Set client identifier in PHP after connection session_start(); $c = oci_pconnect('phpuser', 'welcome', 'localhost/orcl'); if (authenticate_web_user()) { oci_set_client_identifier($c, $_SESSION['app_user_name']); // e.g. 'Chris' . . . } else { trigger_error(. . .); }
  • 47. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47 Client Identifiers for Auditing APP_USERNAME USERNAME EXTENDED_TIMESTAMP ACTION_NAME ------------- ----------- ----------------------------------- ----------- Chris PHPUSER 16-AUG-13 12.25.42.846153 PM -07:00 SELECT Alison PHPUSER 16-AUG-13 12.25.50.870773 PM -07:00 SELECT Details in an OTN article
  • 48. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.49 Client Identifiers for Monitoring  Client Identifier is visible in views and in Enterprise Manager
  • 49. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.53 Oracle Client and Server Result Caches CREATE TABLE SALES (...) RESULT_CACHE;  Results of queries from small tables can be cached  Caches automatically invalidated by server data changes – If no roundtrip within defined time, cache is assumed stale  Configure globally in DB or at client in sqlnet.ora – CLIENT_RESULT_CACHE_SIZE or OCI_RESULT_CACHE_MAX_SIZE
  • 50. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.54 Other Oracle DB Features for High Performance Applications  Bind Variables  Transactions – don’t auto commit unnecessarily  Advanced Queuing – Move slower processing out of HTTP request/response cycle  Fast Application Notification – Handle DB errors without timeouts – Improves reconnection behavior – Needs Oracle DB 12c client libraries for Oracle DB 12c
  • 51. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.55 Other Oracle DB Features for High Performance Applications  Edition Based Redefinition – Online PL/SQL Upgrades – Useful for A/B testing  Continuous Query Notification – Can use for cache invalidation  DBMS_XA – Stop/restart transaction in different HTTP requests
  • 52. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.56 Resources
  • 53. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.57 Resources http://blogs.oracle.com/opal: Blog, e.g. Implicit Result Sets, DTrace http://www.oracle.com/technetwork/topics/php: OTN PHP Dev Center http://tinyurl.com/phporacle: The Underground PHP & Oracle Manual http://tinyurl.com/drcpphp: DRCP Connection Pooling Whitepaper http://tinyurl.com/phpaudit: PHP Web Auditing, Authorization and Monitoring with Oracle Database  Demo Pod SL-033 (back left of Moscone South)  “Application Performance, Scalability, and Availability with Oracle Database 12c” (CON8855) 5:15pm Marriott Marquis - Golden Gate B  Email: christopher.jones@oracle.com Twitter: @ghrd
  • 54. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.58
  • 55. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.59
  • 56. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.60 The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.