High Availability With FAN and RAC
As an example, the code below does some work (perhaps a series of update statements). 
If there is a connection failure, it reconnects, checks the transaction state and retries the 
work. The OCI8 extension will detect the connection failure and be able reconnect on request, 
but the user script must also determine that work failed, why it failed, and be able to continue 
that work. The example code detects connections errors so it can identify it needs to continue 
or retry work. It is generally important not to redo operations that already committed updated 
data.
Typical errors returned after an instance failure are ORA-12153: TNS:not connected or 
ORA-03113: end-of-file on communication channel. Some more connection related errors are 
shown in the example but others, and errors including standard database errors, may be 
returned, depending on timing.
function isConnectionError($err)
{
switch($err) {
case    22: /* session does not exist */
case    28: /* session killed */
case   378: /* buffer pool param incorrect */
case   602: /* core dump */
case   603: /* fatal error */
case   604: /* recursive SQL error */
case   609: /* attach failed */
case  1012: /* not logged in */
case  1033: /* init or shutdown in progress */
case  1041: /* internal error */
case  1043: /* Oracle not available */
case  1089: /* immediate shutdown in progress */
case  1090: /* shutdown in progress */
case  1092: /* instance terminated */
case  3113: /* disconnect */
case  3114: /* not connected */
case  3122: /* closing window */
case  3135: /* lost contact */
case 12153: /* TNS: not connected */
case 27146: /* fatal or instance terminated */
case 28511: /* Lost RPC */
return true;
}
return false;
}
$c = doConnect();
$err = doSomeWork($c);
if (isConnectionError($err)) { 
// reconnect, find what was committed, and retry
$c = doConnect();
$err = checkApplicationStateAndContinueWork($c);
}
if ($err) {
// end the application
handleError($err);
}
277
Pdf create fillable form - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
add print button to pdf form; add form fields to pdf without acrobat
Pdf create fillable form - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
best pdf form creator; change font in pdf form
PHP Connection Pooling and High Availability
The complexity is with identifying what work the application has completed and what needs 
to be redone after reconnection. Make sure the application uses transactions and does not 
auto-commit. One technique for identifying what work remains to be done is to add a status 
column to a table. Each part of the script updates the status column when it has completed.
RAC Connection Load Balancing With PHP
PHP OCI8 1.3 onwards will automatically balance new connections across RAC instances with 
Oracle's Connection Load Balancing (CLB) to use resources efficiently. The balancing happens 
at the first connect for each set of credentials in a PHP process. The same RAC instance will 
then be used for the life of the PHP process.
It is recommended to use FAN and CLB together.
No PHP script changes are needed to use CLB. The connection balancing is handled 
transparently by the Oracle Net listener. To enable CLB, the database service must be 
modified to send load events to the listener. In Oracle 11gR2 use the -j SHORT or -j LONG 
options to srvctl. For example: 
$ srvctl modify service –d SALESDB –s SALES –j LONG
Table 17: CLB goal parameter values.
Parameter Value
Parameter Description
SHORT
Use for connection load balancing method for applications 
that have short-lived connections such as created by 
oci_connect() in quick scripts. This uses CPU-based 
statistics to distribute connections.
LONG
Use for applications that have long-lived connections such 
as created by oci_pconnect(). This uses a simple session-
based metric to distribute connections
278
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
pdf save form data; adding text field to pdf
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Create PDF files from both DOC and DOCX formats. Convert multiple pages Word to fillable and editable
changing font size in pdf form field; pdf form creation
CHAPTER 15
PHP 
AND
T
IMES
T
EN
I
N
-M
EMORY
D
ATABASE
TimesTen is an in-memory database that can be used standalone or as a cache to Oracle 
database. The product marketing description gives this overview:
Oracle TimesTen In-Memory Database (TimesTen) is a full-featured, memory-
optimized, relational database with persistence and recoverability. It provides 
applications with the instant responsiveness and very high throughput required by 
database-intensive applications. Deployed in the application tier, TimesTen operates 
on databases that fit entirely in physical memory (RAM). Applications access the 
TimesTen database using standard SQL interfaces. For customers with existing 
application data residing on the Oracle Database, TimesTen is deployed as an in-
memory cache database with automatic data synchronization between TimesTen and 
the Oracle Database.
The native C interface to TimesTen is ODBC but there is an Oracle OCI layer on top of this that 
allows some standard PHP OCI8 features to work. You can build PHP OCI8 and connect to both 
Oracle Database and TimesTen In-Memory Database.
Many basic PHP scripts will work unchanged against either database. However, TimesTen 
is a different database than Oracle Database. Some PHP OCI8 features cannot be expected to 
work the same way, or don't work at all. In particular LOB support from PHP OCI8 is not 
available, even though TimesTen 11g Release 2 allows LOBS to be stored. Collection support 
isn't available and you might experience some edge cases with binding, particularly if your 
code is not well formed. Error messages might differ. If you are migrating existing applications 
to TimesTen is also important to test thoroughly because TimesTen does not support all SQL, 
PL/SQL or database features of Oracle Database. Problem resolution for using PHP with 
TimesTen is via OTN forums, which is the same as for PHP with Oracle Database.
Native ODBC applications will generally be much faster than PHP due to the overheads of 
PHP, some overheads of the Oracle OCI layer that sits on top of TimeTen's native ODBC API, 
and due to the scale-out architecture commonly used by PHP applications not being directly 
congruent with the in-memory high performance design of TimesTen.
Installing TimesTen on Linux
Install TimesTen following the Oracle TimesTen In-Memory Database Installation Guide 11. 
These steps are summarized below using 64-bit Oracle Linux 6.
1. Download "TimesTen 11.2.2.2.0 for Linux x86 (64-bit)" from the TimesTen downloads 
page, http://www.oracle.com/technetwork/products/timesten/downloads/
2. As root, create a new software owner and set a password:
# useradd -m -c "TimesTen Owner" -d /home/ttadmin -s /bin/bash ttadmin
# chmod 755 /home/ttadmin
# passwd ttadmin
279
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Create fillable and editable PDF documents from Excel in Visual
adding form fields to pdf; change tab order in pdf form
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Create fillable and editable PDF documents from Excel in both .NET WinForms and ASP.NET. Create searchable and scanned PDF files from Excel.
add email button to pdf form; add fillable fields to pdf online
PHP and TimesTen In-Memory Database
3. Create a new timesten group and add the TimesTen administrator and the Apache users 
to it:
# groupadd timesten
# usermod -a -G timesten ttadmin
# usermod -a -G timesten apache
4. Create the instance registry:
# mkdir /etc/TimesTen
# chgrp ttadmin /etc/TimesTen
# chmod 770 /etc/TimesTen/
5. Login as the ttadmin user.
6. In a terminal, extract the downloaded software archive:
$ tar -xf /tmp/timesten112220.linux8664.tar.gz
7. Install TimesTen:
$ cd linux8664
$ ./setup.sh
Accept the default values except for the Group and the QuickStart questions. The 
prompts are answered:
Instance name: tt1122
Install the "Client/Sever and Data manager"
Install into/home/ttadmin 
Create the daemon directory /home/ttadmin/TimesTen/tt1122/info
Daemon logs are in /home/ttadmin/TimesTen/tt1122/info 
Default port for the TimesTen daemon:53396
Change the group to restrict access fromttadmintotimesten.
Enable PL/SQL
TNS_ADMIN is skipped and left unset
The TimesTen server listens on53397
Install the QuickStart and Documentation: yes (This is not  the default.)
Create the DemoDataStore in/home/ttadmin/TimesTen/tt1122/info 
Do not use Replication with Oracle Clusterware
8. If you want the database to start when the machine boots, login as the root user and 
follow the steps given on the screen to install the startup scripts in/etc/init.d:
# cd /home/ttadmin/TimesTen/tt1122/bin
# ./setuproot -install
TimesTen will now be running.
Managing TimesTen
The/home/ttadmin/TimesTen/tt1122/quickstart/ttquickstartenv.shscript is a convenient way 
to set environment variables before accessing the sample database.
280
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
add an image to a pdf form; adding signature to pdf form
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Convert multiple pages Word to fillable and editable PDF documents in both .NET WinForms and ASP.NET. Easy to create searchable and scanned PDF files from
changing font size in pdf form; cannot edit pdf form
Managing TimesTen
As the ttadmin user, check the status of the instance by setting the environment and 
running thettstatus command:
$ source /home/ttadmin/TimesTen/tt1122/quickstart/ttquickstartenv.sh
$ ttstatus
This gives:
TimesTen status report as of Mon Jun 18 12:44:50 2012
Daemon pid 23629 port 53396 instance tt1122
TimesTen server pid 23638 started on port 53397
----------------------------------------------------
Data store /home/ttadmin/TimesTen/tt1122/info/DemoDataStore/sampledb_1122
There are no connections to the data store
Replication policy  : Manual
Cache Agent policy  : Manual
PL/SQL enabled.
-----------------------------------------------------
Accessible by group timesten
End of report
There is a command-line tool for running ad hoc queries against an instance:
$ ttisql "dsn=sampledb_1122;uid=appuser"
Installing the sample database is shown in the next section. The default appuser password is 
oracle.
If you need to manually stop or start the instance of TimesTen, login as ttadmin, set the 
environment, and run:
$ ttdaemonadmin -start
or
$ ttdaemonadmin -stop
If you want to remove the instance of TimesTen, first stop it and then, as root, run:
# cd /home/ttadmin
# TimesTen/tt1122/bin/setup.sh -uninstall
Creating the TimesTen Sample Database
Create the sample database by logging in as the ttadmin operating system user and following 
these steps:
1. Run the creation script:
$ cd \ /home/ttadmin/TimesTen/tt1122/quickstart/sample_scripts/createdb
$ ./build_sampledb.sh
2. Choose and remember passwords when prompted for the adm, appuser and xlauser 
users.
281
C# Create PDF Library SDK to convert PDF from other file formats
Create fillable PDF document with fields. Load PDF from existing documents and image in SQL server. Load PDF from stream programmatically.
change font size pdf fillable form; create pdf forms
VB.NET Create PDF Library SDK to convert PDF from other file
Create fillable PDF document with fields in Visual Basic .NET application. Load PDF from existing documents and image in SQL server.
add image field to pdf form; adding signature to pdf form
PHP and TimesTen In-Memory Database
Installing Apache and PHP for TimesTen
The packaged Apache and PHP binaries are used below, but installation can be customized as 
needed using steps shown earlier in this book.
Install Apache and PHP with:
1. As root, use the bundled packages for the web server and for PHP:
# yum install httpd php php-devel
2. Edit /etc/php.ini and add a timezone setting using an appropriate timezone, for example:
date.timezone = America/Los_Angeles
3. Download the latest OCI8 extension from PECL. Extract and install it with:
# tar -xf oci8-1.4.9.tgz
# cd oci8-1.4.9
# phpize
# ./configure –with-oci8=instantclient,\
/home/ttadmin/TimesTen/tt1122/ttoracle_home/instantclient_11_2
# make
# make install
4. Edit /etc/php.ini and add:
extension=oci8.so
5. Configure Apache. In /etc/sysconfig/httpd set TNS_ADMIN and LD_LIBRARY_PATH:
TT=/home/ttadmin/TimesTen/tt1122
export TNS_ADMIN=$TT/network/admin/samples
export LD_LIBRARY_PATH=$TT/lib:$TT/ttoracle_home/instantclient_11_2
6. Make sure SELinux is in Permissive mode by editing /etc/sysconfig/selinux and rebooting. 
Alternatively turn it off temporarily with:
# setenforce permissive
Checking the Installation
Use the httpd service if you manually need to stop and restart Apache. Since the 
configuration just changed when OCI8 was installed, restart it now:
# service httpd restart
Test PHP by creating a file /var/www/html/pi.php:
<?php
phpinfo();
?>
Load this in a browser using http://localhost/pi.php. You will get the normal page of 
configuration information about PHP. Check there is a section for OCI8.
282
VB.NET Create PDF from OpenOffice to convert odt, odp files to PDF
Create PDF document from OpenOffice Text Document with embedded Export PDF document from OpenOffice Presentation. ODT, ODS, ODP forms into fillable PDF formats.
pdf form save; pdf form change font size
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Create PDF document from OpenOffice Presentation in both .NET WinForms and ASP.NET NET control to change ODT, ODS, ODP forms to fillable PDF formats in Visual
change font size in pdf form; create a fillable pdf form online
Connecting to TimesTen With PHP OCI8
Connecting to TimesTen With PHP OCI8
The ttisql example given earlier shows the credentials and connect string for the sample 
database. These can be used in PHP scripts to connect to TimesTen. Test with a basic query 
script such as /var/www/html/oci8tt.php:
Script 124: /var/www/html/oci8tt.php
<?php
$c = oci_connect("appuser", "oracle", "sampledb_1122");
if (!$c) {
$m = oci_error();
trigger_error('Could not connect to database: ' .
$m['message'], E_USER_ERROR);
}
$s = oci_parse($c, "select * from emp");
if (!$s) {
$m = oci_error($c);
trigger_error('Could not parse statement: ' . 
$m['message'], E_USER_ERROR);
}
$r = oci_execute($s);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not execute statement: ' .
$m['message'], E_USER_ERROR);
}
echo "<table border='1'>\n";
while (($row = 
oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo "  <td>".($item !== null ? htmlentities($item,
ENT_QUOTES) : "&nbsp;")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Load this in a browser with http://localhost/oci8tt.php. The query results will be displayed in a 
table.
If you get a blank screen or have problems, check the Apache log in 
/var/logs/httpd/error_log. 
Configuring TimesTen
The default RAM policy of TimesTen is inUse, meaning that the database is loaded into 
memory at time of first connection, and unloaded when the last connection completes. This 
283
PHP and TimesTen In-Memory Database
means that the first and last connections can be slow. This is most noticeable if you are using 
command line scripts or using non-persistent connections. 
You can change the inUse grace period or alter the RAM policy with ttRamPolicySet() to 
overcome this. The changed value is persistent.
With an inUse policy, the slow unload-on-last-connect issue can be resolved by setting a 
grace period time the database is kept in RAM after the last application has disconnected. For 
example this PHP code sets it to five seconds, deferring the database shutdown and allowing 
the PHP application to close the last connection without delay:
$s = oci_parse($cc, "call ttRamPolicySet('inUse', 5)");
oci_execute($s);
However instead of inUse, a general recommendation is to change the RAM policy to manual: 
$s = oci_parse($cc, "call ttRamPolicySet('manual', null)");
oci_execute($s);
With this done, before running applications, you must explicitly load the database into RAM by 
using the ttAdmin utility:
$ ttAdmin -ramLoad
When the database is no longer needed it can be unloaded with:
$ ttAdmin -ramUnLoad
The TimesTen manual discusses RAM policies and gives other options.
284
CHAPTER 16
PHP 
AND
O
RACLE
T
UXEDO
Oracle Tuxedo is a transaction oriented application server which can be used for developing 
and deploying applications written in PHP, Python and Ruby, as well as in the traditional 
languages C, C++, and COBOL. Tuxedo is based on a routing and queuing system, which is 
highly configurable.
This chapter shows using Oracle Tuxedo 11.1 with PHP applications running under Apache. 
HTTP requests are forwarded from Apache to mod_tuxedo which then invokes the PHP script 
engine.
The mod_tuxedo component for handling PHP (and Python and Ruby) web requests is licensed 
with Oracle Service Architecture Leveraging Tuxedo (SALT) . It is available on Linux and 
Solaris. It is included in SALT from 11.1.1.2.2 onwards. In Tuxedo 12c, it is part of the base 
Tuxedo component.
There is a pre-configured demonstration Tuxedo Web Application Server Demo VM for 
VirtualBox available that shows similar examples to this chapter. It can be found on the 
Tuxedo download page: 
http://www.oracle.com/technetwork/middleware/tuxedo/downloads/index.html.
With a service orientated architecture, Tuxedo also allows multiple languages, including 
PHP, to be used as service consumers and producers. This is not covered in this manual.
Installing Tuxedo 11.1 and SALT for PHP Web Applications
Begin by reviewing the prerequisites in the documentation at 
http://www.oracle.com/technetwork/middleware/tuxedo/documentation/index.html. 
285
Figure 73: Oracle SALT Web Appliction Server Architecture
PHP and Oracle Tuxedo
Remember to turn off SELinux before beginning the installation by editing 
/etc/sysconfig/selinux and rebooting.
Installing Oracle Tuxedo
To install Tuxedo, follow these steps:
1. Create a user to be the Tuxedo administrator and login as that user, for example cjones.
2. If you intend to run the operating system packaged Apache, make the new user directory 
readable to the webserver:
$ chmod 755 /home/cjones
3. Download Oracle Tuxedo 11gR1 (11.1.1.2.0) from 
http://www.oracle.com/technetwork/middleware/tuxedo/downloads/index.html 
4. Run the Tuxedo installer:
$ sh tuxedo111120_64_Linux_01_x86.bin
5. A GUI appears. Start the menu by clicking Next:
286
Figure 74: Oracle Tuxedo Installer Introduction
Documents you may be interested
Documents you may be interested