If you mean process-IDs, they would be subject to change each time thay are started by cron.
Main Topics
Browse All TopicsDear experts,
We aim to implement a set of processes in Unix to insert data into a same oracle table simultaneously without the processes waiting for the others to complete. Is it possible and how can I implement this?
Any solution as well as documentation welcomes.
BR
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
If all that is happening is INSERTS of new records, you should have no issues with locking, all locking is "row level locking", with the row you are inserting locked until you've COMMITted it. And this is Oracle, so we don't do dirty reads, so it isn't possible for another process to reference the row until it is committed.
Aside from that, there was the question of how you ensure that each seperate unix process that inserts a record is able to obtain a unique primary key value. Some previous suggestions indicated use of the Unix Process ID as a key to partition by, though a more conventional approach would be to use an Oracle Sequence to generate a unique key, and if necessary a timestamp can be helpful to ensure a unique key.
And there are specific types of indexes that you want to avoid; BITMAP indexes lock all entries with the same key. If you have high rates of inserts, it will work better if you can minimize the number of indexes, as each insert needs to update a block in the table and then in each of the indexes, so if you figure a disk can handle 100 IOPS, you can do 100 inserts per second on a table with no indexes, or 50 per sec with 1 index, or 33 per sec with 2 indexes or 25 per sec with 3 indexes and so on... adding indexes degrades the rate at which you can insert, and of course a well striped NVM cached SAN may do way better, I just give some rates you might expect if you did something silly like put your Oracle DB on a single locally resident disk instead of striping across spindles on a SAN. Yup, if you are looking for good I/O throughput, make sure you have some good Storage folks involved in estimating and provisioning to handle the necessary IOPS. If the striped volumes are there, Oracle will use it effectively, but if you physically bottleneck on I/O, then Oracle may see some enqueue waits.
Business Accounts
Answer for Membership
by: grzessioPosted on 2009-09-02 at 22:48:28ID: 25248120
I think that the best idea here is to partition your table (eg. by additional column) which will correspond to process number (unix process - lets suppose that it will be 10 processes)
so create table...
partition by list
partition p_1 values 1
partitoin p_2 values 2
...
and insert should look like:
INSERT /*+ APPEND */ INTO TABLE ... PARTITION (P_1) for process 1 (similarly for other processes)
this should do the work.