Microsoft SQL Server Licensing Simplified into 7 Rules

http://www.brentozar.com/archive/2015/04/microsoft-sql-server-licensing-simplified-into-7-rules/?utm_content=buffer5387c&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

Microsoft SQL Server Licensing Simplified into 7 Rules


DB2 licensing checks

DB2 License compliance report returns a VIOLATION status against a certain feature

http://www-01.ibm.com/support/docview.wss?uid=swg21700656&myns=swgimgmt&mynp=OCSSEPGG&mync=E&cm_sp=swgimgmt-_-OCSSEPGG-_-E

Run license compliant report

db2licm -g /tmp/report.out ; cat /tmp/report.out

LIC1440I License compliance report generated successfully.

License Compliance Report
DB2 Enterprise Server Edition In compliance

DB2 Database Partitioning: “Not used”
DB2 Performance Optimization ESE: “Not used”
DB2 Storage Optimization: “Violation”
DB2 Advanced Access Control: “Not used”
DB2 Geodetic Data Management: “Not used”
IBM Homogeneous Replication ESE: “Not used”

So the DB2 Storage Optimization feature is in “VIOLATION”

Check if violation item is licensed

db2licm -l
Product name: “DB2 Enterprise Server Edition”
License type: “CPU Option”
Expiry date: “Permanent”
Product identifier: “db2ese”
Version information: “9.7”
Enforcement policy: “Soft Stop”
Features:
DB2 Performance Optimization ESE: “Not licensed”
DB2 Storage Optimization: “Not licensed”
DB2 Advanced Access Control: “Not licensed”
DB2 Geodetic Data Management: “Not licensed”
IBM Homogeneous Replication ESE: “Not licensed”

It would mean that the license for the feature in “Violation” has not been applied.

Run queries to check what is using the features in violation

For the DB2 Advanced Access Control Feature:

Check for tables that use label based access control (LBAC).
Run the following command against every database in every instance in the DB2 copy:

SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE SECPOLICYID>0

For the DB2 Performance Optimization Feature:

Check whether there are any materialized query tables.
Run the following command against every database in every instance in the DB2 copy:

    SELECT OWNER, TABNAME
FROM SYSCAT.TABLES WHERE TYPE=’S’

Check whether there are any multidimensional cluster tables.
Run the following command against every database in every instance in the DB2 copy:

SELECT A.TABSCHEMA, A.TABNAME, A.INDNAME, A.INDSCHEMA
FROM SYSCAT.INDEXES A, SYSCAT.TABLES B
WHERE (A.TABNAME=B.TABNAME AND A.TABSCHEMA=B.TABSCHEMA)
AND A.INDEXTYPE=’BLOK’

Check whether any of your instances use query parallelism (also known as interquery parallelism).
Run the following command once in each instance in the DB2 copy:

    SELECT NAME, VALUE
FROM SYSIBMADM.DBMCFG
WHERE NAME IN (‘intra_parallel’)

Check if connection concentrator is enabled. Run the following command against every instance in the DB2 copy:

    db2 get dbm cfg

This command displays the current values of database manager configuration parameters including
MAX_CONNECTIONS and MAX_COORDAGENTS. If the value of the MAX_CONNECTIONS is greater than the
value of the MAX_COORDAGENTS then connection concentrator is enabled. If you are not using
DB2 Enterprise Server Edition, DB2 Advanced Enterprise Server Edition, or DB2 Connect™ Server
products, ensure that connection concentrator is disabled. This is because connection concentrator
is only supported for DB2 Enterprise Server Edition, DB2 Advanced Enterprise Server Edition, or
DB2 Connect Server products.

For the DB2 Storage Optimization Feature:

Check if any tables have row level compression enabled.
Run the following command against every database in every instance in the DB2 copy:

SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE COMPRESSION IN (‘R’, ‘B’)

Check if any indexes have compression enabled.
Run the following command against every database in every instance in the DB2 copy:

SELECT TABSCHEMA, TABNAME, INDNAME, COMPRESSION
FROM SYSCAT.INDEXES
WHERE COMPRESSION = ‘Y’

Check if any compression dictionary still exists for a table that has row level compression deactivated.
Run the following command against every database in every instance in the DB2 copy:

SELECT TABSCHEMA, TABNAME
FROM SYSIBMADM.ADMINTABINFO
WHERE DICTIONARY_SIZE <> 0 OR XML_DICTIONARY_SIZE <> 0

Note: This query might be resource intensive and might take a long time to run.
Run this query only if Storage Optimization license violations are being reported
even though there are no tables that have row level compression enabled.