Client Definition Question
I asked this question in another forum here, got some helpful feedback and a recommendation to post the question here as it might be more fitting for some in this group.
In getting ready to teach a class, I've been putting together my set of SAP terms and getting ready to explain them to the class. I've been cross referencing the SAP Glossary and other sources to try to give as correct a definition as possible. In looking at these, one element I've been wondering about is the SAP definition of a client within SAP ERP.
The SAP glossary defines client as "In commercial, organizational, and technical terms, a self-contained unit in an SAP system with separate master records and its own set of tables." I find the last phrase in that definition (which I've italicized) to be puzzling. In an instance where multiple clients are sharing the same underlying database, each client does not have its own set of tables. To my knowledge that's not a required element of a client. (That's why the mandt field is so common in tables.)
So...why is that phrase a part of the definition and what is SAP intending it to mean? Is a distinction being drawn here between logical segregation of content (vs. actual segregation)? Or is there something here that I'm just not understanding?
As an example of what I'm talking about, if we have one instance of SAP ERP that has multiple activie clients, and If we were to take table T001 which contains company code information mapped to a particular client, wouldn't all the clients in that instance be sharing that same table?
I realize that logically if one uses transaction SE16 to view the table from within SAP ERP, only the information for the client one is working within is shown. My thinking had been that if one were to look at this table directly in the DBMS, the table would show all of the clients active within this instance. So in that sense each client is using the same set of tables with logical segregation of data based on the MANDT field. (i.e. if I had 3 clients running on one SAP instance tied to an Oracle backend, the backend would not have 3 totally independent databases for each client.)
Am I missing something here, or is the definition of client a bit misleading?
Pity that your question did not get a reply in more than two weeks.
I am happy to say that I have never come across the "its own set of tables" statement. Whoever wrote that is either ignorant or a victim of a very bad mistranslation. A client is a logical "subdivision" of the data stored in a SAP database. I'm not old enough to confirm this, but when I started at SAP I was told that the client concept came from the time when several companies shared a single database on some large central mainframe and obviously could not be allowed to see each other's business data. Today the use of a client is different, e.g. it provides for separation between customizing and sandbox clients in a development system, or between say test and training clients in a QA system.
Technically all clients share the same set of tables. A "client-dependent" table has the characteristic that its first field (and the leading field of its primary key) is always the client number. The "client-dependent" attribute is maintained in the SAP dictionary. When an ABAP program contains a statement like "SELECT * FROM TAB" and TAB is client-dependent, the DB interface in the kernel will automatically convert this to "SELECT * FROM TAB WHERE MANDT = "<client>". An SQL trace (ST05) of a simple business transaction will reveal this behaviour immediately.
Not all tables are client-dependent, some are cross-client, i.e. their data is visible to and shared by all clients in the system. As a rule, all master/transaction tables are client-dependent, while system tables containing instance-specific rather than business-specific data (e.g. the list of printers) are cross-client. Customizing tables are mostly client-dependent but some are cross-client (I'm a technical consultant so I can't really tell you why that is).
You are perfectly correct that if you look at a table at database level rather than through SE16, you would see records for all clients residing in the same table. Incidentally the same can be achieved in ABAP by adding the CLIENT SPECIFIED option to the SELECT statement but the code of business transactions must of course do no such thing.
Also, the client concept is not specific to Oracle so the advice to post the question on the SAP/Oracle forum seems a little misleading. SAP implements the client concept regardless of the underlying database.
Hope this clarifies things,