DB Start Port

Hello Team,

Progress Version : 11.6
QAD: 2016 EE

There is no -S parameter defined in database startup script and there is no such .pf file that contains these parameters. We found below entry in DB log files:

(4262) Service Name (-S): 0

We need DB ports for setting repl.properties file.

Please suggest what ports are in use for all databases.

Regards,
 

RealHeavyDude

Well-Known Member
In that case the database is started without network capabilities and can only be accessed via shared memory from processes that run on the same machine as the database is hosted.
 
Thanks for your reply RHD!

So for replication or for ai-rollforward, we need to stop this database and start it again with -S parameter.

Is my understanding correct?

Regards,
Rajat
 

RealHeavyDude

Well-Known Member
I am not really into OpenEdge Replication. As far as I know the replaction is handled by a dedicated agent. But - I think you need to stop the database anyway to enable replication.
 
Yes along with the site replication. can we add ports with these databases. I hope it won't interrupt current running user application.

Can you please describe this a bit “In that case the database is started without network capabilities and can only be accessed via shared memory from processes that run on the same machine as the database is hosted.”

This server/application is accessed from various locations and what is the difference between with shared memory access and without.

Regards,
 

Cringer

ProgressTalk.com Moderator
Staff member
Replication can be configured and switched on without stopping the database. The only thing you can't do online is to change the AI Blocksize, which you may want to do at some point if AI isn't running yet.

Shared memory connections have to occur on the same machine as the database is running. The process connects to the shared memory segment of the database directly. This usually provides significant performance benefits as you don't need to go over the TCP transport.

Client/Server you use a hostname (can be localhost) and a port (-S) to connect to the database. Even local connections have to go over TCP, but it has the advantage of being able to connect to the database from a remote machine.

If your -S is 0, and you connect to the databases from other machines, then you must be using an AppServer connection, otherwise it just won't work. The AppServer then connects to the database over shared memory. This is a very common architecture as you get the benefits of a shared memory connection from a remote machine.

I've never tried running Replication without -S set on the database. But from my understanding, the db.repl.properties on the target side needs to know the hostname and port number of the database on the source side. So you'll need to set -S. In order to set -S you need to stop and start the databases.
 

Cringer

ProgressTalk.com Moderator
Staff member
By the way, it might be a good idea to reach out to QAD for assistance in this - they have some good DBA resources lurking around! If not, then you may wish to employ the services of a consultant to help get this all set up. I can recommend a couple ;)
 
Thanks for the replies!

As we are able to access application remotely without -S parameter via accessing the shared memory (through Appserver) then why should we use -S at all because working with shared memory is faster than TCP/IP connection (with -S) and TCP/IP may cause some network issues as well, as per my understanding.

Is there any disadvantage of working without -S?

Please Suggest.

Regards
 

RealHeavyDude

Well-Known Member
Other than that you cannot connect remotely ( via TCP ) to a database that is not started with the -S startup parameter, there is no disadvantage.
 

Cringer

ProgressTalk.com Moderator
Staff member
Just because you have -S doesn't mean you have to use it in your application. You can still connect to it using shared memory over the AppServer. But having the -S set is a requirement for making Replication work. So you'll have to set it to get Replication working.
 

TomBascom

Curmudgeon
OE Replication requires a -S.

QAD's default configuration tools do not support OE Replication. So you will likely end up having to modify some of the scripts.

Along with -S you will need to add "-pica 1000000" and "-DBService replserv" on the source and "-DBService replagent" on the target. (The value of -pica might not need to be 1,000,000 but it is as good a guess as any...)

As James says, other than -S you can indeed enable replication and get it going without an outage. The -DBService parameters just automate the starting of the replication server and agent. Without them you need to manually run dsrutil. You often can get away with a default -pica value too.
 
Thanks for the replies!

I am fine with OpenEdge replication and agree that we have to use -S for making it enable. I have few related quires:

If database is started with -S parameter than can a user remotely access the application with Shared memory.
Is there any benefit of using TCP/IP connection? because if shared memory performance is better than TCP/IP than why to connect user via TCP/IP.

Regards,
 

TomBascom

Curmudgeon
If -S is enabled for replication then remote users will be able to use that port to connect. IMHO Progress really ought to add a "-ServerType Repl" so that this would not be a problem.

It is true that shared memory is generally faster than client/server connections. But speed isn't always everything. (I can't quite believe that I said that...) Some potential benefits of client/server connections:

1) If your application is a Windows "fat GUI" application the clients are almost certainly not local to the db and you have no option. (You could re-write it to use app servers but I will assume that you can't really do that.)

2) Once you get to a certain size you probably need most of the machine's resources to support the db. Diverting resources to shared memory clients will hurt overall performance. Possibly by forcing you to cross NUMA boundaries and other unsavory things.

3) With a little bit of attention paid to tuning the client/server penalty might not be very noticeable to most of the application. Tuning -Mm and -prefetch* can go along ways. Especially if you write good queries that follow the rules for client/server performance.

4) If you have parts of your application that work with very large result sets and you are essentially "streaming" data rather than a chatty back and forth with the server you might get *better* performance with client/server (for those bits of the application).

5) If you have rogue sys admins that insist on using kill -9 willy nilly then client/server connections can help you to protect yourself from some of the database crashes that those people are causing (although my preferred solution to that problem is to permanently revoke their root login credentials...).
 

Rob Fitzpatrick

ProgressTalk.com Sponsor
If database is started with -S parameter than can a user remotely access the application with Shared memory.
No. A user can either access the database via shared memory (only if it is a 4GL user on the database server) or via TCP (-S) but not both.

If you want to prevent remote connections while using -S, you can use LAN segmentation and put a firewall in front of the database server.
Is there any benefit of using TCP/IP connection? because if shared memory performance is better than TCP/IP than why to connect user via TCP/IP.
Shared memory connections require users to run on the database server. In many cases this is not desirable, not permitted by security policy, or not possible (e.g. cross-platform, like Win32 client accessing DB on Unix).

TCP connections allow an application to scale out, e.g. adding clustered terminal servers or app servers for higher availability.

Also, if a shared memory client dies, it can affect the database. In certain cases it can cause an abnormal shutdown of the database. This won't happen if the client is remote.
 

Rob Fitzpatrick

ProgressTalk.com Sponsor
When the rpserver process starts, for each control-agent defined in <source>.repl.properties, it connects to the target broker, requesting the port number of the rpagent. It then disconnects from the target broker and connects to the rpagent on the provided port number.

So it seems to me that OE Replication only makes -S a requirement for a target broker, not the source broker. Am I incorrect?
 

TomBascom

Curmudgeon
@Rob: I have not tested it to that level of detail. Did you find some documentation? Or are your conclusions the result of testing?
 

Rob Fitzpatrick

ProgressTalk.com Sponsor
But if you fail over you're going the other way?
True. But during a fail over, the DB on the primary system is now the target and the DB on the secondary system is now the source, so the DB where you need -S is still the target. ;)

I don't know if people typically use their production broker configuration when the primary's DB is the target, but I would think it makes more sense to have a configuration specific to each role.
@Rob: I have not tested it to that level of detail. Did you find some documentation? Or are your conclusions the result of testing?
I didn't look for anything in the docs; more just a thought. But I was doing OE Repl testing with two targets and thought again of this thread. I wondered why the source DB would require -S so I tested it with and without. Nothing too comprehensive but the DBs all came up and the targets synchronized. I captured network traffic between the source and target to demonstrate to myself that the connection mechanics between rpserver and target DB broker/rpagent are similar to those between a remote 4GL client and a DB broker/4GL server.

I know that doesn't prove anything which is why I posted here, to see if this idea holds water.

I also found, doing small changes to the source, that the targets remained slightly behind for a disturbing amount of time. That surprised me. But it sounds like a topic for another thread.
 
Top