PROQUIET problem

ron

Member
I have a package system that sits on 7 databases. (2PC is NOT used. I know the implications of that - and I'm trying to sort it out with the package vendor.)

We're using Progress 8.3E on Solaris - and we're getting ready to move to 9.1D within the next two months.

I'm testing a new AI system to extract AI files from a Production system about hourly - and then apply the AI files to a copy DB on a Disaster Site system.

I tested the new AI system without PROQUIET ... to get all the basics working properly.

Now I've introduced PROQUIET and I'm in trouble.

This is the logic I've used (error checking etc removed for clarity):

for db in $DBLIST
do
$PROQUIET $db -C enable
done

for db in $DBLIST
do
$RFUTIL $db -C aimage extent new
done

for db in $DBLIST
do
$PROQUIET $db -C disable
done

My intention was to get ALL seven databases in a quiet state at the same time -- and then swap AI extents. That way I can be sure that at the time the AI files are swapped ... all seven databases are at the same point (ie, they're synchronised).

But I find that when I do the PROQUIET enable ... it automatically swaps to the next AI file! I've looked at the Progress manuals - and I can not see that annoying behaviour mentioned anywhere.

Furthermore - it is obvious that Progress did not intend proquiet to be used in this way - because when a DB is "quiet" an attempt to swap AI files will "hang" - waiting for "quiet" to be removed.

Of course the problem is immediately solved if the 7 databases are coalesced into one - but I do not have direct control over that.

Can anyone help me?
 
Ron,
here is the method we use. For each database, we start a background process that waits until the time is exactly on the minute. It is not as exact as the method you are trying to do, but it is fairly consistent.

We kick off this process at 1 minute to the hour (again, edited to bare essentials)
Code:
for DATABASE in `ls *.db`
do
  proutil $DATABASE -C busy > /dev/null 2>&1
  if [ $? = 6 ]; then
	markfulldb $DATABASE &
  fi
done
And the markfulldb script looks like this
Code:
sleep 40
while [ ! `date +%S` = "00" ]
do
	sleep 1
done
rfutil $1 -C aimage extent new
 
I suspect the behaviour of the proquiet may have changed between 8.3 and 9.1D.

I am interested in your comments on the use of 2PC.... In most systems I have worked on this has caused an overhead which has reduced performance to the "unworkable" level. If all your databases are on the same host, is it really necessary to use 2PC or can you survive without it.

2PC really protects databases on seperate hosts where the communication between the hosts is a significant period of time. On the same host it is highly unlikely that a process would or could die leaving a transaction committed in one database and not in another, since the moment of commit for the transaction is the same. When you get to Client-Server applications then it starts to become possible to break the enforced synchronisation between the databases.

If your sole purpose of 2PC is to obtain a valid backup set, then this seems a lot of work and a large performance overhead.

Have you considered replication (especially now that PeerDirect/Fathom is available) to keep a remote set of databases in sync and use those to back up?

One implementation of 2PC I did consider was to link all the databases to a null database that never gets updated and is solely there to act as the transaction co-ordinator. Unfortunately I never got to test this.
 
Top