How to do Multithreading in Oracle PlSql using a Single Session
Hi All,
I have a complex but interesting requirement.
1) I have a table with 90k rows.
2) My PlSql Package picks up all the 90k rows one by one, does some processing/transformation on it
3) if the row satisfies some business rules, then it gets inserted into an application table. If the row is not eligible, then it inserts the row into a Error table.
4) After processing all the 90k records, If my Error Table Count reaches 10% of the input count (90k), then all inserts (i.e. both application table inserts and
error table inserts) must be rolled back.
5) Right now, we are achieving this logic in a single session but there are far many performance issues, because processing has to go through row by row.
Is it possible to implement the above logic as "multi threading within PlSql" whereby i can run Step 2 in 10 parallel slaves and if the total error count of all the 10 slaves exceeds 10% of the input data, then there should be a rollback for all 10 slaves.
+A sample testcase is given below. Issue is: rollback statement in p1 is not taking any effect (because plsql spawns sessions to execute p2 which autocommits itself on graceful exit). But is there any other way by which i can make the rollback to be effective+
create table t1 (a number);
create table j1(b number);
create or replace procedure p1
as
l_cnt number;
i number;
l_job number;
begin
for i in 1 .. 5 loop
dbms_job.submit( l_job, 'p2('||i||');' );
end loop;
commit;
loop
dbms_lock.sleep(30);
select count(*) into l_cnt from j1;
exit when (l_cnt = 5);
end loop;
rollback;
end;
create or replace procedure p2(i number)
as
begin
insert into t1 values(i);
insert into j1 values(1);
end;
/
Basically your current 'algorithm' can be described as 'slow-by-slow processing' (co Tom Kyte)
Relational databases are about sets not about records.
Consequently your approach must be qualified as evil.
Instead of fixing the problem (and getting rid of slow-by-slow processing), you propose to add even more evil by adding multi-threading to the mix.
The issue you describe is not an issue at all, it is just making clear you are heading for disaster.
An approach that works quite nicely is
- add an extra status column to the table to be processed.
- UPDATE the status column of all records that do not qualify. By UPDATE I mean the UPDATE statement, not record by record processing
- (BULK)-INSERT the remaining records, for which the flag is NULL.
The simple guidelines for application development are:
Only do it in PL/SQL when you can't do it in straight SQL
Only do it in Java when you can't do it in PL/SQL
Only do it in 3GL when you can't do it in Java.
Your 'strategy' is doomed to fail.
Get rid of it.
Before it is too late, and your heart is pumping like mad, because your problems are increasing, and increasing, and increasing, and you have to work 7 x 24 to deal with 'performance problems'
You have already demonstrated your approach doesn't work.
Don't try to make it worse.
Sybrand Bakker
Senior Oracle DBA
Experts: those who do read documentation
Similar Messages
-
How to get resultset from oracle procedure use ejb3
how to get resultset from oracle procedure use ejb3
i know oracle procedure should like this
Create or replace PROCEDURE resultset_test(
aaa IN NUMBER,
bbb OUT sys_refcursor) ....
but what s the ejb3 scripts looks like? please give me an example or link~
ths- there are no EJB3 scripts, only compiled application code
- the part of the EJB spec that deals with databases is called the Java Persistence API, but likely you are just looking for the JDBC API.
Now you should know what to Google to get your "example script": "java jdbc oracle procedure" -
Help Required:How Upload Excel file Into Oracle Table Using PLSQL Procedure
Please Help , Urgent Help Needed.
Requirement is to Upload Excel file Into Oracle Table Using PLSQL Procedure/Package.
Case's are :
1. Excel File is On Users/ Client PC.
2. Application is on Remote Server(Oracle Forms D2k).
3. User Is Using Application Using Terminal Server LogIn.
4. So If User Will Use to GET_FILE_NAME() function of D2K to Get Excel File , D2k Will Try to pick File from That Remote Server(Bcs User Logind from Terminal Server Option).
5. Cannot Use Util_File Package Or Oracle Directory to Place That File on Server.
6. we are Using Oracle 8.7
So Need Some PL/SQL Package or Fuction/ Procedure to Upload Excel file on User's Pc to Oracle Table.
Please Guide me wd some Code. or with Some Pl/SQL Package, or With SOme Hint. Or any Link ....
Jus help to Sort This Issue ........
you can also write me on :
[email protected], [email protected]TEXT_IO is a PL/SQL package available only in Forms (you'll want to post in the Forms forum for more information). It is not available in a stored procedure in the database (where the equivalent package is UTL_FILE).
If the Terminal Server machine and the database machine do not have access to the file system on the client machine, no application running on either machine will have access to the file. Barring exceptional setups (like the FTP server on the client machine), your applications are not going to have more access to the client machine than the operating system does.
If you map the client drives from the Terminal Server box, there is the potential for your Forms application to access those files. If you want the files to be accessible to a stored procedure in the database, you'll need to move the files somewhere the database can access them.
Justin -
How do i setup a control table using a single input
I am a very newbie LabView user. I am trying to build a control component using a single 4 position input (a dial (0 thru 3) that outputs a 4 bit result based on the input. What control do I need to use?
The table looks like this:
inputs |outputs
4H
Open
Open
Open
Ground
2H
Ground
Open
Ground
Ground
N
Ground
Ground
Ground
Open
4L
Ground
Ground
Open
Open
Eric Yuzon
Senior engineer
ERC
Walled Lake, MI 48390
[email protected]
e-reman.com
Solved!
Go to Solution.That would depend on your hardware.
What hardware are you using?
You could use the "DAQmx Write" function in this palette:
Measurement I/O >> DAQmx - Data Aquisition
Cory K
Attachments:
Control Table.vi 7 KB -
Multithreading in oracle PLSQL
Hi
I am having 100000 records in my database,
Normally i fetch 1000 records from 100000 in bulk and do the process, after completion of first batch the it took second set of 1000 records from 100000 in bulk and do the process.
Say in the 1st batch there is a transaction for the A/C no : 9856423456
after completion of batch 1
2nd batch is in process here some transaction for the same A/c : 9856423456
so complete this batch
and batch process is continuous till completion of whole record.
there is a dependences between 1st batch and 2nd or some other batch
say in the 1st batch transaction for the A/C no : 9856423456 after completion of this transaction balance available for the A/C no : 9856423456 2,00,000 rupees
in the 2nd or some other batch, some transaction may come for same A/c, so after completion of the first batch only we know what actual balance is.
Now i want implement multi-threading :
how can i implement
ThanksBalajiraam wrote:
Now i want implement multi-threading : how can i implementThere 2 basic options to parallel processing using PL/SQL.
You can use the Parallel Query (PQ) feature of Oracle. This parallelises SQLs by breaking large scans into a number of smaller scans and running these in parallel. You can also run PL/SQL via PQ by defining a parallel enabled PL/SQL pipeline table function.
This second method is rolling your own parallel processing in PL/SQL. With 11g you can use DBMS_PARALLEL_EXECUTE. You can use DBMS_JOB to run parallel processes. You can use message queues and database pipes (or even plain SQL tables) for IPC. You can use DBMS_LOCK for implementing semaphores and mutexes.
It all depends on your requirements ito multi-threading/parallel processing in PL/SQL. -
How to Restore datas in Oracle 10g using hot backup?
I did Hot backup things (On-line backup) in Oracle 10g (Windows environment)
Now backup files are stored in physical location..
How to restore the datas to original location..
Can any one give the url or command for recovery in ora 10g for hot backup
ThanksPlease do not dump all of your work in this forum, and expect volunteers to do it for free!!!
Dear Great Senior DBA Sybrand Bakker
What are Oracle Discussion Forums?
Oracle Discussion Forums is an interactive community for sharing information, questions, and comments about Oracle products and related technologies. Most forums are moderated by product managers, and all of them are frequently visited by knowledgeable users from the community
oracle forums is not your place for showing “bossing” it is a place where junior to seniors share there knowledge and advices, it means helping and sharing….. Knowledge is for giving ….giving only it will increase… don’t discourage any one like this ……
There are my Great Seniors (not like u) mainly respected Mr. Jonathan Lewis, Mr. Don Burleson and a lot of oracle nominated ACE members are all giving patiently replay to jr. to sr.
Obeasley oracle doubts are mostly related to practical issue only……
Pls try to learn the word meaning of “volunteers” -
How can I replace existing oracle-sequences using impdp?
I use impdp to transport table data from one database-instance to another (on a regular base).
I do this by using a database link.
Here is the content of the parameterfile for the impdp:
NETWORK_LINK=dbl_backoffice
INCLUDE=TABLE:" in ('SSU_CUSTOMERS','SSU_ORDERS','SSU_ORDERLINES')"
INCLUDE=SEQUENCE:" in ('SEQ_ORDERNR','SEQ_CUSTNR')"
TABLE_EXISTS_ACTION=REPLACE
Now, the mentioned tabels are neatly replaced however, the sequence-objects aren't because impdp reports :
ORA-31684: Object type SEQUENCE:"SSU"."SEQ_ORDERNR'" already exists
ORA-31684: Object type SEQUENCE:"SSU"."SEQ_CUSTNR'" already exists
It is understandable, because the impdp will issue create sequence statements and fails because they're already there (and there is no such thing as a import-parameter as SEQUENCE_EXISTS_ACTION=REPLACE or whatsoever).
I don't want to do a complete schema import, since I only want to refresh front-office data with a part of the back-office data.You need a plugin called Flip4Mac to create a wmv on a Mac
It plugs in to Quicktime.
WMV is generally unavailable on MAcs cos its a Windows thing ( Windows Media Video)
just like PorRes is not available generally on a Windows system. -
How to execute more than oracle scripts using sqlplus
Dears,
I have 10 scripts that create table ,need to execute scripts sequentially
Example
Ascript
Bscript
Cscript
Dscript
need to run scripts using sqlplus commands in one timeuser8929623 wrote:
Dears,
I have 10 scripts that create table ,need to execute scripts sequentially
Example
Ascript
Bscript
Cscript
Dscript
need to run scripts using sqlplus commands in one timeCreate a script like :
@Ascript
@Bscript
@Cscript
@Dscript -
How do I create two iWeb sites using a single .Mac account?
I would like to create two distinct sites/URLs using iWeb and a single — not a family — .Mac account. Is this possible? If so, what are the basic steps?
When I read related forum posts, it would seem to me that one site would overwrite the other site when I publish. Yes or no?
iBook 1.2 mhz, G4 Mac OS X (10.3.6)
iBook 1.2 mhz, G4 Mac OS X (10.3.6)
iBook 1.2 mhz, G4 Mac OS X (10.4.4) iLife 06I would like to create two distinct sites/URLs using
iWeb and a single — not a family — .Mac account. Is
this possible? If so, what are the basic steps?
If you just do the obvious and use File > New Site in iWeb, you do create two distinct sites with different urls. However, you cannot exactly duplicate page names in the sites or publish changes in one without publishing changes in the other. The short default url web.mac.com/username/iWeb normally goes to the top site on the list within iWeb.
If you create two sites with distinct names in different accounts on your machine, they should not overwrite each other, and they should also have distinct urls. However I think that the
index.html file which tells browsers what to do with the default short url web.mac.com/username/iWeb may get confused, so that deleting that or modifying it manually might be desirable. -
Integrating Oracle Utilities using Oracle SOA
Hi,
I need help on how to proceed to integrate Oracle utilities using Oracle SOA
Our project has around 13 modules like New connection, Disconnection, Dismantle, Billing , Global Information System
Each modiule will interact with different other modules to get few services.
For Example: 1)New Connection module should interact with Billing to generate the invoice in one scenarion
and with Global Information System to identify the location in other scenario
2) Same way Disconnection need to interact with other modules to get some information from other modules.
3) All modules may need a SMS/ Email facility to send to the customers.
I need to integrate this kind of application using Oracle SOA
Please help me on how I should proceed further.
Do i need to create a seperate BPEL process for each request of individual module and give them the endpoint of my WSDL to interact with other modules ?
Can I have a single entry point and then navigate from there ? If so, the input params may vary, how this should be handled ?
Please help me on developing this kind of project. Any sample applications are also helpful ...
Thanks,
dbpconsider the adpater developers guide guide .. and the online help in JDeveloper .. that should give you a good head start ..
hth clemens -
Message Driven Beans: how to receive and send in a single session?
Hello
How to receive and send JMS messages in a message driven bean using a single session?
Thanks.Are you referring to writing code within the onMessage method itself to receive JMS messages?
If so, that is not a pattern that is recommended, especially not in the case of a blocking JMS
receieve. If you must write an explicit JMS receive within an EJB component it's best to use
a "check the queue" approach where you give a very small timeout for the receive. That way
if the message is there it will be returned but if not the call will not block.
You'll also need to take the transactional settings of the onMessage method into account.
If your are sending a message and then waiting for a response, those two actions can
not be done within the same global transaction. For that, you'll need to either use
BMT and perform each in its own transaction or just not use global transactions at all,
in which case each send and receive operation will be atomic.
--ken -
Help Required :Excel Upload Into Oracle Table Using PLSQL Procedure/Package
Please Help , Urgent Help Needed.
Requirement is to Upload Excel file Into Oracle Table Using PLSQL Procedure/Package.
Case's are :
1. Excel File is On Users/ Client PC.
2. Application is on Remote Server(Oracle Forms D2k).
3. User Is Using Application Using Terminal Server LogIn.
4. So If User Will Use to GET_FILE_NAME() function of D2K to Get Excel File , D2k Will Try to pick File from That Remote Server(Bcs User Logind from Terminal Server Option).
5. Cannot Use Util_File Package Or Oracle Directory to Place That File on Server.
6. we are Using Oracle 8.7
So Need Some PL/SQL Package or Fuction/ Procedure to Upload Excel file on User's Pc to Oracle Table.
Please Guide me wd some Code. or with Some Pl/SQL Package, or With SOme Hint. Or any Link ....
Jus help to Sort This Issue ........
you can also write me on :
[email protected], [email protected]I also Tried to Use This
But How can i Use SQLLDR Command In Stored Procedure.
Well IN SQL*PlUS it is successfull but in Stored Procedure /Package ,PL/SQL does not recognise the OS commands.
So now my Question How can I recognise the SQLLDR Commnad in Stored Procedure. -
Hi All,
How to connect the Oracle database using C/C++ on Mac OS X? I have used Instant Client library "instantclient-basic-macosx-10.1.0.3" provided by the Oracle but could not be success. I'm using PowerPC G4, Mac OS X 10.4.9, and XCode version 2.4.1.
Specially Mr Oscar Armanini has done this in C on Mac OS X. Please let me know. I would be very thankful to you.
Thanks,
GhufranHi Ghufran
there are two Metalink Notes on using Instant Client with PowerPc Mac:
https://metalink.oracle.com/metalink/plsql/showDoc?db=NOT&id=316497.1
How to Install, Configure and Test Oracle 10g Instant Client Basic,
SQL*Plus and SDK Packages for Mac OS X
(Runs OCI sample code - cdemo81.c)
https://metalink.oracle.com/metalink/plsql/showDoc?db=NOT&id=332588.1
How to Install, Configure and Test Oracle 10g Instant Client Basic,
SQL*Plus and SDK Packages for Mac OS X
(Runs OCCI sample code - occidml.cpp)
The first Metalink Note uses an OCI examples and it is pasted here below,
in case you don't have a Metalink ID.
The second Metalink Note uses an OCCI example.
I have never used Instant Client (neither on Os X or on other platform),
but I was successful on compiling C programs (no GUI involved) using the
Full Client installed on my PowerBook G4.
I'm a DBA, but I was a developer years ago (about when Oracle 7.3
was considered a giant step forward): I installed the Oracle 10.1 db
(a complicated job for a developer) and I got the Full Client
installed as well, for free, so I was happy to compile one of the demo C sources
(those that you can find in the Oracle Pro*C manuals:
by the way, Oracle Pro*C manuals are really worth reading).
Good luck
Oscar
Applies to: Oracle Server - Enterprise Edition - Version: 10.1.0.3
Apple Macintosh PowerPC
Goal
This article will show you how to install and configure your 10g Instant Client (IC) Software for the Mac.
It will install the following packages:
the Basic package
the SQL*Plus package and
the SDK package
and then test its connectivity to an Oracle database using SQL*Plus.
It will also show you how to setup and test a sample program, cdemo81.c, that uses the Oracle Call Interface (OCI)
to connect to the database.
The sample program is located under the <Instant_Client>/sdk/demo directory.
Solution1. Download the following three (3) files from the Oracle Technology Network (OTN) website.
You will need an account to do this.
Macintosh OS X 10g Instant Client Software
a. instantclient-basic-macosx-10.1.0.3.zip (32,395,622 bytes)
b. instantclient-sqlplus-macosx-10.1.0.3.zip (326,740 bytes)
c. instantclient-sdk-macosx-10.1.0.3.zip (293,913 bytes)
NOTE: The above three (3) files will be updated as new patches are released for the 10g Instant Client software. 10.1.0.3 or later versions (10.1.0.x) of these files may be used similarly with this article.
2. Save the following text into a file called tnsnames.ora:
# If you receive an
# ORA-12154: TNS:could not resolve the connect identifier specified
# error when running the setup script and attempting to connect to Oracle
# from SQL*Plus then the name of your SERVICE NAME (i.e. ORCL) may require
# that you include the DOMAIN (i.e. US.ORACLE.COM) in order to connect successfully.
# To obtain the DOMAIN of your environment, type "hostname" from your shell
# and it should report this information back to you. Configure your SERVICE
# NAME to look like Example 2.
# Example 1
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = database_machine.us.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = orcl)
# Example 2
#ORCL.US.ORACLE.COM =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TCP)(HOST = database_machine.us.oracle.com)(PORT = 1521))
# (CONNECT_DATA =
# (SERVER = DEDICATED)
# (SID = orcl)
3. Save the following text into a file called sqlplus_script.sql:
SELECT user FROM dual;
SELECT sysdate FROM dual;
SELECT 'successful ' AS TEST_RESULTS FROM dual;
exit;
4. Save the following text into a file called setup1:
# ===========================================
# MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP1
# ===========================================
# DESCRIPTION
# ===========
# This script will install and configure your 10g Instant Client (IC) Software
# for the Mac. It will install the Basic, SQL*Plus and SDK (OCI/OCCI) packages
# and then test its connectivity to an Oracle database using SQL*Plus.
# Once this script has completed, you will need to run the script SETUP2 to build
# and run the CDEMO81.C sample application located under the <IC>/sdk/demo folder
# in your newly installed Instant Client home.
# NOTE: In order for this script to run successfully, you MUST perform any
# necessary actions required under the SETUP section below.
# SETUP
# =====
# (1) You MUST be in a directoy with ALL of the following files
# BEFORE running this script:
# 1 - instantclient-basic-macosx-10.1.0.3.zip
# 2 - instantclient-sqlplus-macosx-10.1.0.3.zip
# 3 - instantclient-sdk-macosx-10.1.0.3.zip
# 4 - tnsnames.ora (configured properly)
# 5 - sqlplus_script.sql (connectivity test)
# 6 - setup1 (this file)
# 7 - setup2 (will run this file later)
# (2) Edit the TNSNAMES.ORA file and update it with the necessary information
# to connect to a database on your network. Be sure to note the comments
# in this file. You will have to change the following information:
# SERVICE NAME (orcl or orcl.us.oracle.com)
# HOST (database_machine.us.oracle.com)
# PORT (1521)
# SID (orcl)
# (3) Go to the end of this scrip and modify the following line:
# ./instantclient10_1/sqlplus scott/tiger@orcl @sqlplus_script.sql
# Replace "orcl" with the SERVICE NAME you used in step (2) above.
# (4) To run this script use the command: ". setup1"
# BEGINNING OF SCRIPT
# output this file to your shell
echo
echo MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP1
echo
#more setup1
# output the TNSNAMES.ORA file to your shell
echo TNSNAMES.ORA FILE
echo
more tnsnames.ora
# remove the instantclient10_1 directory should it exist
echo
echo CHECKING FOR instantclient10_1 DIRECTORY...
echo WILL REMOVE DIRECTORY IF IT ALREADY EXISTS
echo
rm -d -f -R instantclient10_1
# extract the instantclient software (basic, sql*plus & sdk)
echo
echo
echo INSTALLING SOFTWARE...
echo
echo BASIC
echo
unzip instantclient-basic-macosx-10.1.0.3.zip
echo
echo SQL*PLUS
echo
unzip instantclient-sqlplus-macosx-10.1.0.3.zip
echo
echo SDK
echo
unzip instantclient-sdk-macosx-10.1.0.3.zip
# set the following environment variables
# Uncomment if you want a way to find the Instant Client (IC) home quickly
#export IC=$PWD/instantclient10_1
# Dynamic Library path required to use the Instant Client (IC) software
export DYLD_LIBRARY_PATH=$PWD/instantclient10_1
# TNS_ADMIN is required if using the TNSNAMES.ORA file (recommended)
export TNS_ADMIN=$PWD/instantclient10_1
# display the modified environment variables
echo
echo SETTING ENVIRONMENT VARIABLES
echo
echo DYLD_LIBRARY_PATH
echo $DYLD_LIBRARY_PATH
echo
echo TNS_ADMIN
echo $TNS_ADMIN
# display all environment variables
#echo
#echo ALL ENVIRONMENT VARIABLES
#echo
#env
# copy the TNSNAMES.ORA to the instantclient directory
echo
echo COPYING TNSNAMES.ORA TO INSTANT CLIENT [IC] DIRECTORY
echo
cp tnsnames.ora ./instantclient10_1/tnsnames.ora
# list the contents of the IC directory to see what has been installed
echo
echo INSTANT CLIENT [IC] DIRECTORY
echo
ls ./instantclient10_1
echo
# SQL*Plus Connectivity Test
# To connect to the database specified in your TNSNAMES.ORA file change the
# SERVICE NAME (i.e. orcl) below to the name of the entry in your TNSNAMES.ORA
# file designating the specific database in which you want to connect to
echo
echo SQL*PLUS CONNECTIVITY TEST
./instantclient10_1/sqlplus scott/tiger@orcl @sqlplus_script.sql
# Alternately, you can connect from SQL*Plus to Oracle without using a TNSNAMES.ORA
# file. You can embed the NAME-VALUE pair of the SERVICE NAME from the TNSNAMES.ORA
# file directly into the connection string making sure to use the proper HOST, PORT
# and SID like so:
#./instantclient10_1/sqlplus scott/tiger@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=database_machine.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))
5. Save the following text into a file called setup2:
# ===========================================
# MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP2
# ===========================================
# DESCRIPTION
# ===========
# This script will build and run the OCI sample application CDEMO81.C inside
# your Instant Client (IC) software located under the <IC>/sdk/demo folder.
# NOTE: In order for this script to run successfully
# (A) you MUST have already run the script SETUP1 successfully
# and
# (B) you MUST perform any necessary actions required under the SETUP
# section below.
# SETUP
# =====
# (1) You need to edit the CDEMO81.C application PRIOR to running this script to
# change the connection information. By default, the application will attempt
# to connect as user SCOTT with password TIGER to a local Oracle database using
# the BEQ-LOCAL network protocol. This will not work.
# (A) You need to make sure you have the SCOTT/TIGER schema created in your database.
# If not, have your DBA create it by running the script "SCOTT.SQL" from your
# <ORACLE_HOME>/rdbms/admin folder.
# (B) You need to modify the CDEMO81.C application to connect to the database
# you have configured inside your TNSNAMES.ORA file.
# (i) Open the CDEMO81.C file located under the <IC>/sdk/demo folder.
# (ii) Find the following line of code:
# (void) OCIServerAttach( srvhp, errhp, (text *)"", strlen(""), 0);
# and change the two empty strings to the SERVICE NAME you are using like so
# (void) OCIServerAttach( srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
# (iii) Save the file.
# (2) You MUST be in the initial directory where you copied all of the files listed
# in script SETUP1. In this same location you will find SETUP2. Run SETUP2 from
# this location.
# (3) To run this script use the command: ". setup2"
# BEGINNING OF SCRIPT
# output this file to your shell
echo
echo MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP2
echo
#more setup2
# output the TNSNAMES.ORA file to your shell
echo TNSNAMES.ORA FILE
echo
more tnsnames.ora
# output the username, password and service name from CDEMO81.C file to your shell
echo
echo USERNAME, PASSWORD AND SERVICE NAME INFO FROM YOUR OCI cdemo81.c FILE
echo
#more ./instantclient10_1/sdk/demo/cdemo81.c
grep -i "*username" ./instantclient10_1/sdk/demo/cdemo81.c
grep -i "*password" ./instantclient10_1/sdk/demo/cdemo81.c
grep -i OCIServerAttach ./instantclient10_1/sdk/demo/cdemo81.c
# display the required environment variables
#env
echo
echo REPORTING REQUIRED ENVIRONMENT VARIABLES
echo
echo DYLD_LIBRARY_PATH
echo $DYLD_LIBRARY_PATH
echo
echo TNS_ADMIN
echo $TNS_ADMIN
# move to the sdk/demo directory
cd ./instantclient10_1/sdk/demo
echo
echo CHANGING TO [IC]/SDK/DEMO DIRECTORY
echo
ls
# run demo application
echo
echo ATTEMPTING TO RUN APPLICATION
echo
echo BUILDING APPLICATION USING PROVIDED MAKE FILE, [IC]/sdk/demo/demo.mk...
echo
make -f demo.mk
echo
echo
echo INSTANT CLIENT [IC] DIRECTORY...
echo
ls ../..
echo
echo CREATING links FOR REQUIRED LIBRARIES IN INSTANT CLIENT [IC] FOLDER...
echo
echo - libclntsh.dylib
echo - libocci.dylib
ln ../../libclntsh.dylib.10.1 ../../libclntsh.dylib
ln ../../libocci.dylib.10.1 ../../libocci.dylib
echo
echo INSTANT CLIENT [IC] DIRECTORY WITH links CREATED...
echo
ls ../..
echo
echo
echo EXECUTING APPLICATION...
echo
cdemo81
echo
echo
# TROUBLE-SHOOTING
# If you receive the following error messages:
# Error - ORA-24327: need explicit attach before authenticating a user
# Error - ORA-03114: not connected to ORACLE
# Then you did not modify the CDEMO81.C application with proper SERVICE NAME
# information. See step 1B under the SETUP section in this script to resolve
# this error.
6. Take all seven (7) files and move them into the same directory on your OS where you want to install the Instant Client software from:
1 - instantclient-basic-macosx-10.1.0.3.zip
2 - instantclient-sqlplus-macosx-10.1.0.3.zip
3 - instantclient-sdk-macosx-10.1.0.3.zip
4 - tnsnames.ora
5 - sqlplus_script.sql
6 - setup1
7 - setup2
7. Open the file tnsnames.ora. Be sure to review the comments in this file. You will have to change the following information to connect to a database on your network:
SERVICE NAME (orcl or orcl.us.oracle.com)
HOST (database_machine.us.oracle.com)
PORT (1521)
SID (orcl)
Save the file.
8. Open the file setup1, go to the end of this script and modify the following line:
./instantclient10_1/sqlplus scott/tiger@orcl @sqlplus_script.sql
Replace orcl with the SERVICE NAME you used in Step 7 above. Save the file.
9. You are now ready to install the 10g Instant Client software for Mac OS X. From the location where your seven (7) files reside, issue the following command:
[macosx]/oracle> . setup1
NOTE: Be sure to include the period "." and a space " " before the word "setup1" so all environment variables persist for the current session.
This will install the Instant Client Basic and SQL*Plus software and connect to the database specified in the tnsnames.ora file.
10. Here is the sample output of a successful execution of the setup1 script:
[macosx]/oracle> . setup1
MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP1
TNSNAMES.ORA FILE
# If you receive an
# ORA-12154: TNS:could not resolve the connect identifier specified
# error when running the setup script and attempting to connect to Oracle
# from SQL*Plus then the name of your SERVICE NAME (i.e. ORCL) may require
# that you include the DOMAIN (i.e. US.ORACLE.COM) in order to connect successfully.
# To obtain the DOMAIN of your environment, type "hostname" from your shell
# and it should report this information back to you. Configure your SERVICE
# NAME to look like Example 2.
# Example 1
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = orcl)
# Example 2
#ORCL.US.ORACLE.COM =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
# (CONNECT_DATA =
# (SERVER = DEDICATED)
# (SID = orcl)
CHECKING FOR instantclient10_1 DIRECTORY...
WILL REMOVE DIRECTORY IF IT ALREADY EXISTS
INSTALLING SOFTWARE...
BASIC
Archive: instantclient-basic-macosx-10.1.0.3.zip
inflating: instantclient10_1/classes12.jar
inflating: instantclient10_1/libclntsh.dylib.10.1
inflating: instantclient10_1/libnnz10.dylib
inflating: instantclient10_1/libocci.dylib.10.1
inflating: instantclient10_1/libociei.dylib
inflating: instantclient10_1/libocijdbc10.dylib
inflating: instantclient10_1/ojdbc14.jar
SQL*PLUS
Archive: instantclient-sqlplus-macosx-10.1.0.3.zip
inflating: instantclient10_1/README_IC.htm
inflating: instantclient10_1/glogin.sql
inflating: instantclient10_1/libsqlplus.dylib
inflating: instantclient10_1/sqlplus
SDK
Archive: instantclient-sdk-macosx-10.1.0.3.zip
creating: instantclient10_1/sdk/
creating: instantclient10_1/sdk/demo/
inflating: instantclient10_1/sdk/demo/cdemo81.c
inflating: instantclient10_1/sdk/demo/demo.mk
inflating: instantclient10_1/sdk/demo/occidemo.sql
inflating: instantclient10_1/sdk/demo/occidemod.sql
inflating: instantclient10_1/sdk/demo/occidml.cpp
creating: instantclient10_1/sdk/include/
inflating: instantclient10_1/sdk/include/nzerror.h
inflating: instantclient10_1/sdk/include/nzt.h
inflating: instantclient10_1/sdk/include/occi.h
inflating: instantclient10_1/sdk/include/occiAQ.h
inflating: instantclient10_1/sdk/include/occiCommon.h
inflating: instantclient10_1/sdk/include/occiControl.h
inflating: instantclient10_1/sdk/include/occiData.h
inflating: instantclient10_1/sdk/include/occiObjects.h
inflating: instantclient10_1/sdk/include/oci.h
inflating: instantclient10_1/sdk/include/oci1.h
inflating: instantclient10_1/sdk/include/oci8dp.h
inflating: instantclient10_1/sdk/include/ociap.h
inflating: instantclient10_1/sdk/include/ociapr.h
inflating: instantclient10_1/sdk/include/ocidef.h
inflating: instantclient10_1/sdk/include/ocidem.h
inflating: instantclient10_1/sdk/include/ocidfn.h
inflating: instantclient10_1/sdk/include/ociextp.h
inflating: instantclient10_1/sdk/include/ocikpr.h
inflating: instantclient10_1/sdk/include/ocixmldb.h
inflating: instantclient10_1/sdk/include/odci.h
inflating: instantclient10_1/sdk/include/oratypes.h
inflating: instantclient10_1/sdk/include/ori.h
inflating: instantclient10_1/sdk/include/orid.h
inflating: instantclient10_1/sdk/include/orl.h
inflating: instantclient10_1/sdk/include/oro.h
inflating: instantclient10_1/sdk/include/ort.h
inflating: instantclient10_1/sdk/include/xa.h
SETTING ENVIRONMENT VARIABLES
DYLD_LIBRARY_PATH
/oracle/instantclient10_1
TNS_ADMIN
/oracle/instantclient10_1
COPYING TNSNAMES.ORA TO INSTANT CLIENT [IC] DIRECTORY
INSTANT CLIENT [IC] DIRECTORY
README_IC.htm libocci.dylib.10.1 sdk/
classes12.jar libociei.dylib* sqlplus*
glogin.sql libocijdbc10.dylib* tnsnames.ora
libclntsh.dylib.10.1* libsqlplus.dylib*
libnnz10.dylib ojdbc14.jar
SQL*PLUS CONNECTIVITY TEST
SQL*Plus: Release 10.1.0.3.0 - Production on Fri Aug 19 15:26:08 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
USER
SCOTT
SYSDATE
19-AUG-05
TEST_RESULTS
successful
Disconnected from Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
IF THE SQL*PLUS CONNECTIVITY TEST WAS SUCCESSFUL
READ SETUP2 TO CONFIGURE AND RUN THE OCI cdemo81.c SAMPLE
[macosx]/oracle>
11. Once you have obtained a successful execution of the setup1 script, you are ready to configure cdemo81.c to connect to the database you have configured inside your tnsnames.ora file.
Open the cdemo81.c file located under the <Instant_Client>/sdk/demo folder. Find the following line of code:
(void) OCIServerAttach( srvhp, errhp, (text *)"", strlen(""), 0);
Change the two (2) empty strings to the SERVICE NAME you used in Step 7 above.
(void) OCIServerAttach( srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
Save the file.
12. You are now ready to run cdemo81.c. You MUST issue the following command from the initial directory where you copied all of the files in Step 6:
[macosx]/oracle> . setup2
NOTE: Be sure to include the period "." and a space " " before the word "setup2" so all environment variables persist for the current session.
This script will configure your environment, build and run the OCI sample code connecting to the database specified in the tnsnames.ora file.
13. Here is the sample output of a successful execution of the setup2 script:
[macosx]/oracle> . setup2
MAC OS X INSTANT CLIENT 10g SCRIPT - SETUP2
TNSNAMES.ORA FILE
# If you receive an
# ORA-12154: TNS:could not resolve the connect identifier specified
# error when running the setup script and attempting to connect to Oracle
# from SQL*Plus then the name of your SERVICE NAME (i.e. ORCL) may require
# that you include the DOMAIN (i.e. US.ORACLE.COM) in order to connect successfully.
# To obtain the DOMAIN of your environment, type "hostname" from your shell
# and it should report this information back to you. Configure your SERVICE
# NAME to look like Example 2.
# Example 1
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = orcl)
# Example 2
#ORCL.US.ORACLE.COM =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TCP)(HOST = gbednars-pc.us.oracle.com)(PORT = 1521))
# (CONNECT_DATA =
# (SERVER = DEDICATED)
# (SID = orcl)
USERNAME, PASSWORD AND SERVICE NAME INFO FROM YOUR OCI cdemo81.c FILE
static text username = (text ) "SCOTT";
static text password = (text ) "TIGER";
(void) OCIServerAttach( srvhp, errhp, (text *)"ORCL", strlen("ORCL"), 0);
REPORTING REQUIRED ENVIRONMENT VARIABLES
DYLD_LIBRARY_PATH
/oracle/instantclient10_1
TNS_ADMIN
/oracle/instantclient10_1
CHANGING TO [IC]/SDK/DEMO DIRECTORY
cdemo81.c* demo.mk occidemo.sql occidemod.sql occidml.cpp
ATTEMPTING TO RUN APPLICATION
BUILDING APPLICATION USING PROVIDED MAKE FILE, [IC]/sdk/demo/demo.mk...
rm -rf SunWS_cache
rm -rf ../../libclntsh.dylib
rm -rf ../../libocci.dylib
rm -rf cdemo81 cdemo81.o occidml occidml.o
/usr/bin/gcc -c -I../include -I/rdbms/public/ -I/oracore/include -I/oracore/publ
ic -I/oracore/port/include -I/nlsrtl/include -I/plsql/public -I/plsql/include -I
/network/public -I/network/include -I/otrace/public -I/otrace/include/ -I/precom
p/public -I/precomp/include/ -I/slax/include -I/ordts/public -I/ordts/include -I
/javavm/include -I/javavm/include/osds/unix/solaris -I/ctx/public -I/ordvir/publ
ic -I/ordvir/include -idirafter . -g -DRE_ENTRANT -DOCCI_NO_WSTRING=1 -DMAC_O
SX -D_GNU_SOURCE -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS -D_BCER
T_API_ -DRSA_PLATFORM=RSA_PLATFORM_MAC_PPC_DARWIN -DNTEV_USE_POLL -DNTEV_USE_GE
NERIC -DNET_USE_LDAP -DOCCI cdemo81.c
ln ../../libclntsh.dylib.10.1 ../../libclntsh.dylib
ln ../../libocci.dylib.10.1 ../../libocci.dylib
/usr/bin/g++ -o cdemo81 cdemo81.o -L../../ -locci -lclntsh -lpthread
rm -rf ../../libclntsh.dylib
rm -rf ../../libocci.dylib
/usr/bin/g++ -c -I../include -I/rdbms/public/ -I/oracore/include -I/oracore/publ
ic -I/oracore/port/include -I/nlsrtl/include -I/plsql/public -I/plsql/include -I
/network/public -I/network/include -I/otrace/public -I/otrace/include/ -I/precom
p/public -I/precomp/include/ -I/slax/include -I/ordts/public -I/ordts/include -I
/javavm/include -I/javavm/include/osds/unix/solaris -I/ctx/public -I/ordvir/publ
ic -I/ordvir/include -idirafter . -g -DRE_ENTRANT -DOCCI_NO_WSTRING=1 -DMAC_O
SX -D_GNU_SOURCE -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS -D_BCER
T_API_ -DRSA_PLATFORM=RSA_PLATFORM_MAC_PPC_DARWIN -DNTEV_USE_POLL -DNTEV_USE_GE
NERIC -DNET_USE_LDAP -DOCCI occidml.cpp
In file included from ../include/occi.h:43,
from occidml.cpp:11:
../include/occiData.h:411: warning: use of `long double' type; its size may
change in a future release
../include/occiData.h:411: warning: (Long double usage is reported only once
for each file.
../include/occiData.h:411: warning: To disable this warning, use
-Wno-long-double.)
ln ../../libclntsh.dylib.10.1 ../../libclntsh.dylib
ln ../../libocci.dylib.10.1 ../../libocci.dylib
/usr/bin/g++ -o occidml occidml.o -L../../ -locci -lclntsh -lpthread
rm -rf ../../libclntsh.dylib
rm -rf ../../libocci.dylib
INSTANT CLIENT [IC] DIRECTORY...
README_IC.htm libocci.dylib.10.1 sdk/
classes12.jar libociei.dylib* sqlplus*
glogin.sql libocijdbc10.dylib* tnsnames.ora
libclntsh.dylib.10.1* libsqlplus.dylib*
libnnz10.dylib ojdbc14.jar
CREATING links FOR REQUIRED LIBRARIES IN INSTANT CLIENT [IC] FOLDER...
- libclntsh.dylib
- libocci.dylib
INSTANT CLIENT [IC] DIRECTORY WITH links CREATED...
README_IC.htm libnnz10.dylib libsqlplus.dylib*
classes12.jar libocci.dylib ojdbc14.jar
glogin.sql libocci.dylib.10.1 sdk/
libclntsh.dylib* libociei.dylib* sqlplus*
libclntsh.dylib.10.1* libocijdbc10.dylib* tnsnames.ora
EXECUTING APPLICATION...
Enter employee name (or CR to EXIT): LARRY
Enter employee job: CEO
Enter employee salary: 10000
Enter employee dept: 40
LARRY added to the OPERATIONS department as employee number 7974
Enter employee name (or CR to EXIT):
Exiting...
[macosx]/oracle/instantclient10_1/sdk/demo>
14. If you have any problems running this script please open a Service Request (SR) with Oracle Support for further assistance and be sure to upload the output from the script to the SR.
ReferencesNote
332588.1 - How to Install, Configure and Test Oracle 10g Instant Client Basic, SQL*Plus and SDK Packages for Mac OS X (Runs OCCI sample code - occidml.cpp)
Errors
ORA-3114 "not connected to ORACLE"
ORA-24327 need explicit attach before authenticating a user
ORA-12154 "TNS:could not resolve service name" -
How To Store pdf or doc file in Oracle Database using Java Jdbc?
can any one help me out How To Store pdf or doc file in Oracle Database using Java Jdbc in JSP/Serlet? i tried like anything. using blob also i tried. but i am able 2 store images in DB not files. please if u know or else if u have some code like this plz send that to me, and help me out plz. i need that urgent.
Hi.. i am not getting error, But i am not getting the original contents from my file. i am getting all ASCII vales, instead of my original data. here i am including my code.
for Adding PDF in DB i used image.jsp
Database table structure (table name. pictures )
Name Null? Type
ID NOT NULL NUMBER(11)
IMAGE BLOB
<%@ page language="java" import="java.util.*,java.sql.*,java.io.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.135:1521:orcl","scott","tiger");
PreparedStatement ps,pstmt,psmnt;
ps = con.prepareStatement("INSERT INTO pictures VALUES(?,?)");
File file =
new File("D:/info.pdf");
FileInputStream fs = new FileInputStream(file);
ps.setInt(1,4);
ps.setBinaryStream(2,fs,fs.available());
int i = ps.executeUpdate();
if(i!=0){
out.println("<h2>PDF inserted successfully");
else{
out.println("<h2>Problem in image insertion");
catch(Exception e){
out.println("<h2>Failed Due To "+e);
%>
O/P: PDF inserted successfully
i tried to display that pdf using servlet. i am giving the code below.
import java.io.IOException;
import java.sql.*;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DispPDF extends HttpServlet {
* The doGet method of the servlet. <br>
* This method is called when a form has its tag value method equals to get.
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//response.setContentType("text/html"); i commented. coz we cant use response two times.
//PrintWriter out = response.getWriter();
try{
InputStream sPdf;
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.135:1521:orcl","scott","tiger");
PreparedStatement ps,pstmt,psmnt;
psmnt = con.prepareStatement("SELECT image FROM pictures WHERE id = ?");
psmnt.setString(1, "4"); // here integer number '4' is image id from the table.
ResultSet rs = psmnt.executeQuery();
if(rs.next()) {
byte[] bytearray = new byte[1048576];
//out.println(bytearray);
int size=0;
sPdf = rs.getBinaryStream(1);
response.reset();
response.setContentType("application/pdf");
while((size=sPdf.read(bytearray))!= -1 ){
//out.println(size);
response.getOutputStream().write(bytearray,0,size);
catch(Exception e){
System.out.println("Failed Due To "+e);
//out.println("<h2>Failed Due To "+e);
//out.close();
OP
PDF-1.4 %âãÏÓ 2 0 obj <>stream x+är á26S°00SIá2PÐ5´1ôÝ BÒ¸4Ü2KüsSSS4C²ê Pkø$VãGÒU×713CkW )(Ü endstream endobj 4 0 obj <>>>/MediaBox[0 0 595 842]>> endobj 1 0 obj <> endobj 3 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj xref 0 7 0000000000 65535 f 0000000325 00000 n 0000000015 00000 n 0000000413 00000 n 0000000168 00000 n 0000000464 00000 n 0000000509 00000 n trailer <<01b2fa8b70ac262bfa939cc786f8770c>]/Root 5 0 R/Size 7/Info 6 0 R>> startxref 641 %%EOF
plz help me out. -
How to write a file in unix server through oracle plsql code
Hi All,
My requirement is to create and write a file (any file for eg txt file) in unix box with in a specified directory through oracle plsql code.
Oracle sits in windows server.
using utl_file package we can create directory where oracle resides and write it there in oracle server in our case windows..
But here we need to create,write a file but in unix server which is different server than where the oracle server resides..
we are using Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
Can any one one please help me out in this issue...
Thanks in Advance.
PrakashMr Prakash,
Why are you asking this question multiple times in every forum you can spell?
Valid responses have been presented to you already two times.
Can you explain why you can't follow them up, but continue to abuse this forum by repeating doc questions?
Sybrand Bakker
Senior Oracle DBA
Maybe you are looking for
-
How do I get my pictures from old iphone onto new one
Icloud only dowloaded some of my pictures onto my new iphone, how do i get ALL my pictures onto my new one?
-
I've found a few treads and posts related to this error, but none of the answers seem to work. I have DPM 2010 U7 server backing up my file server (Server 2008 R2). The backup of the D: Drive(which hosts all shares) is failing with the following erro
-
ITunes Match seems to be working NOW!
You guys should try it again, mine is ok now. Cheers.
-
Can't start Safari.exe - Entry Point Not Found in JavaScriptCore.dll
The procedue entry point JSValueMakeFromJSONString could not be located in the dynamic link library JavaScriptCore.dll - Have removed/reinstalled java and Safari and still get this error. On Windows/XP with current service packs. Message was edited b
-
Process Order Blending Solution
Hi , Is anybody have experience on process order blending scenario ? For example : We produce 5 different batch finish goods Now we want to blend those 5 different batch into 1 batch Thanks for help !