Yesterday I received an interesting question regarding licensed features in DB2 and how the license is enforced. Someone was able to create an MQT even though the DB2 edition does not include support for it. But why? I try to explain.
The DB2 Information Center has an overview of features by edition. DB2 utilizes a license management server to control what features can be used and for reporting and auditing of compliance. The db2licm tool is the interface to the server and is used to add licenses, list features, and much more. Traditionally, DB2 had a "soft stance" on license enforcement, e.g., unlicensed features could be used without the software complaining (only the lawyers).
By customer request that eventually changed, so that compliance could be enforced on company level (and lawyers and finance could focus on keeping the books clean). From my time as DB2 developer I remember discussions on how to implement certain hard stops. In DB2 V9.5 hard enforcement of license compliance was offered for the first time AFAIK. I found these two DB2 9.5 fixpack notes on FP2 and enforcement of pureXML and storage features (which I was involved in) and FP4 changes on enforcement of WLM, CPU, and memory usage.
When installing DB2, by default enforcement is set to SOFT as it seems:
hloeser@ems:~$ db2licm -l show detail
Product name: "IBM Database Enterprise Developer Edition"
License type: "Developer"
Expiry date: "Permanent"
Product identifier: "db2dede"
Version information: "10.1"
Product name: "DB2 Advanced Enterprise Server Edition"
License type: "Developer"
Expiry date: "Permanent"
Product identifier: "db2aese"
Version information: "10.1"
Enforcement policy: "Soft Stop"
The behavior can be changed using the "-e" (enforcement) option of db2licm:
hloeser@ems:~$ db2licm -e db2aese HARD
LIC1412W A hard stop enforcement policy has been set. This enforcement
policy stops unlicensed requests.
Explanation:
You issued the db2licm command with the -e parameter, to update the
enforcement policy, and specified the value HARD. (For example, db2licm
-e db2ese HARD.) The value HARD specifies that unlicensed requests will
not be allowed.
User response:
As a mechanism for you to keep track of, and differentiate, the DB2
database products and features installed on your system, it is
recommended that you register the license key for each DB2 database
product and feature.
If you want unlicensed requests to be logged but not restricted, change
the enforcement policy to SOFT. For example, db2licm -e db2ese SOFT
LIC1411I Enforcement policy type updated successfully.
As I have AESE installed, it does not really allow me to show you an example. But you could try to compress or create an MQT on DB2 Express-C. Here is the output after switching the enforcement:
hloeser@ems:~$ db2licm -l
Product name: "IBM Database Enterprise Developer Edition"
License type: "Developer"
Expiry date: "Permanent"
Product identifier: "db2dede"
Version information: "10.1"
Product name: "DB2 Advanced Enterprise Server Edition"
License type: "Developer"
Expiry date: "Permanent"
Product identifier: "db2aese"
Version information: "10.1"
Enforcement policy: "Hard Stop"
As mentioned, SOFT has been the traditional way and is the default in DB2. However, to be compliant and to be on the safe side for audits, switching to HARD is a good idea.
BTW: You can generate a compliance report using db2licm:
hloeser@ems:~$ db2licm -g comp.txt
LIC1440I License compliance report generated successfully.Anything troublesome in there...?