tag:blogger.com,1999:blog-88601424886952334052024-02-08T03:24:57.478-08:00WebSphere MQJayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-8860142488695233405.post-55813770261218749702016-11-17T11:01:00.002-08:002016-11-17T11:13:59.459-08:00Weak or broken cipher spec's are blocked - PTF UI29471 - MQ V8.0<span style="font-size: large;">Let's talk about cipher spec's......</span><br />
<br />
For MQ V8 on z/OS...a PTF was released (UI29471 - Oct. 8th 2015) that when installed...will prohibit the use of weak or broken ciphers as well as SSLv3.<br />
<br />
The following ciphers will be affected:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">RC4_SHA_US (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">RC4_MD5_US (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">TRIPLE_DES_SHA_US (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">RC4_MD5_EXPORT (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">RC2_MD5_EXPORT (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DES_SHA_EXPORT (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">NULL_SHA (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">NULL_MD5 (SSL 3.0)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">TLS_RSA_WITH_DES_CBC_SHA (TLS 1.0)</span><br />
<br />
<span style="font-family: inherit;">In order to check if you have any of these ciphers running in your z/OS environment, the following commands can be issued:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ RC4_SHA_US)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ RC4_MD5_US)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ TRIPLE_DES_SHA_US)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ RC4_MD5_EXPORT)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ RC2_MD5_EXPORT)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ DES_SHA_EXPORT)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ NULL_SHA)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ NULL_MD5)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DISPLAY CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_DES_CBC_SHA)</span><br />
<br />
<br />
<span style="font-family: inherit;">In the event that you have one of these installed and still want to install the current set of z/OS MQ maintenance....there is a work around.</span><br />
<br />
To allow weak cipher spec's, the following DD statement can be added to your CHIN address space PROC:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">//CSQXWEAK DD DUMMY</span><br />
<br />
To allow SSLv3 based cipher spec's, the following DD statement can be added to you CHIN address space:<br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">//CSQXSSL3 DD DUMMY</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: inherit;">If you are wanting to allow both weak as well as SSLv3 ciphers, both of these DD statements need to be added to the CHIN PROC.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Once these have been added, and your channel initiator has been restarted....you will see the following messages in the JESOUT:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">CSQX691I +MQQM CSQXSSLI Cipher specifications based on the SSLv3 protocol are
enabled <br /> <br />CSQX693I +MQQM CSQXSSLI Weak or broken SSL cipher specifications are enabled </span><br />
<br />
<span style="font-family: inherit;">Please remember.....it is better to get all of your channels using the current stronger ciphers, but it some cases with older version of MQ...using these cannot be avoided.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Happy messaging!!</span>Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com0tag:blogger.com,1999:blog-8860142488695233405.post-65650121119357078612016-03-16T08:32:00.000-07:002016-04-13T07:03:10.027-07:00WebSphere MQ Version 8, z/OS 8 byte log RBA - Converting your bootstraps.In previous versions of WebSphere MQ, the LOG RBA was limited to 6 bytes, leaving enterprises to monitor the RBA so as not to exhaust the RBA and have the queue manager crash. In order to reset the RBA, new bootstraps and logs needed to be allocated followed by running the CSQUTIL program using the RESETPAGE FORCE option.<br />
<br />
Now, with version 8, the RBA has been extended to 8 bytes, virtually eliminating the possibility of running out of RBA log range. Using a 6 byte RBA gave us a 256 terabyte log range. Now, with 8 bytes, we have 16 exabytes of log range, or 64K times more. A queue manager running at 100MB per second, would take over 5000 years to run out of RBA log range.<br />
<br />
So how do we convert to the 8 byte RBA. If you are a standalone queue manager, you just need to be on MQ version 8 running in the NEWFUNC OPMODE. If you are a queue manager running in a Queue Sharing Group (QSG), <b>all</b> of the members of the QSG need to be running version 8 using the NEWFUNC OPMODE.<br />
<br />
Steps to convert your bootstrap to version 2 (8 byte):<br />
<br />
1.) Stop queue manager cleanly.<br />
<br />
2). Allocate a new bootstrap or set of bootstrap data sets using a different name than the currently used by the queue manager..<br />
<br />
3). Run the CSQJUCNV conversion utility using the correct PARM.<br />
<br />
Standalone Queue Manager:<br />
PARM=('NOQSG')<br />
Queue Sharing Group Queue Manager:<br />
PARM=('INQSG,<i><span style="color: red;">QSGroupName</span></i>,<i><span style="color: red;">DataSharingGroupName</span></i>,<i><span style="color: red;">DB2Member</span></i>')<br />
<br />
4). Rename the current bootstraps to another name...i.e. V1.<br />
<br />
5). Rename the new V2 bootstraps to the names used by the queue manager.<br />
<br />
6). Start the queue manager.<br />
<br />
7). Verify that the new RBA range is shown in the JES.<br />
<br />
<span style="font-family: "courier new"; font-size: 9.0pt;"> CSQJ034I <MQM1 CSQJW007 END OF LOG RBA RANGE IS <span style="color: red;">FFFF</span>FFFFFFFFFFFF</span><span style="font-family: "courier new"; font-size: 11.0pt;"> </span><br />
<span style="font-family: "courier new"; font-size: 9.0pt;"><br /></span>
<span style="font-family: "courier new"; font-size: 9.0pt;"> The previous message showed the RBA as <span style="color: red;">0000</span>FFFFFFFFFFFF</span><br />
<span style="font-family: "courier new"; font-size: 9.0pt;"><br /></span>
Below is some sample JCL using just a single bootstrap dataset.<br />
<br />
Step 1: Allocate a new bootstrap with a different name:<br />
<br />
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;">//STEP1 EXEC PGM=IDCAMS<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;">//SYSPRINT DD SYSOUT=*<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;">//SYSIN DD *<o:p></o:p></span></div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; line-height: 13.5pt; margin-left: 0.5in;">
<span style="font-family: "courier new"; font-size: 9pt;"><span style="background-color: white; color: #222222;"> DELETE (COM.MQM1.</span><span style="background-color: white;"><span style="color: red;">V8</span></span><span style="background-color: white; color: #222222;">.BSDS01) <=== </span><span style="background-color: white;"><span style="color: red;">NOTICE V8, New name</span></span></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> DEFINE CLUSTER -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> (NAME(COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt;"><span style="color: red;">V8</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;">.BSDS01) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> VOLUMES(DCPSMS) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> UNIQUE -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> SHAREOPTIONS(2 3) ) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> DATA -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> (NAME(COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt;"><span style="color: red;">V8</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;">.BSDS01.DATA) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> RECORDS(850 60) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> RECORDSIZE(4089 4089) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> CONTROLINTERVALSIZE(4096) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> FREESPACE(0 20) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> KEYS(4 0) ) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> INDEX -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> (NAME(COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt;"><span style="color: red;">V8</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;">.BSDS01.INDEX) -<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"> RECORDS(5 5) -</span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> CONTROLINTERVALSIZE(1024) )</span></div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: .5in; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"><br /></span></div>
If you have 2 bootstraps....you would also allocate a V8.BSDS02<br />
<br />
Step 2: Run the bootstrap conversion utility:<br />
<br />
<span style="background-color: white;"> </span><span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">//STEP3 EXEC PGM=CSQJUCNV,REGION=32M</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //* PARM=('INQSG,++QSGNAME++,++DSGNAME++,++DB2SSID++')
*QSG*</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> // PARM=('NOQSG') *NOQSG*</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSPRINT DD SYSOUT=*</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSUT1 DD DSN=COM.MQM1.BSDS01,DISP=SHR <== current BSDS01</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //*SYSUT2 DD DSN=COM.MQM1.BSDS02,DISP=SHR <== current BSDS02 </span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSUT3 DD DSN=COM.MQM1.V8.BSDS01,DISP=OLD <== new BSDS01</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //*SYSUT4 DD DSN=COM.MQM1.V8.BSDS02,DISP=OLD <== new BSDS02</span><br />
<br />
<div class="MsoNoSpacing">
<br /></div>
<div>
In the above JCL, SYSUT2 and SYSUT 4 are commented out </div>
<div>
since we are only doing a queue manager with a single BSDS. </div>
<div>
If you are converting a queue manager running DUAL bootstraps, </div>
<div>
then all 4 SYSUT# will be used.</div>
<br />
Step 3: Rename the current bootstraps to a <span style="color: red;">V71</span> name to move them out of the way:<br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><br /></span>
<span style="background-color: white;"> </span><span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">//STEP4 EXEC PGM=IDCAMS</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSPRINT DD
SYSOUT=*</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSIN DD
*</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="background-color: white;"> </span>ALTER 'COM.MQM1.BSDS01' NEWNAME('COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="color: red;">V71</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">.BSDS01')</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> ALTER 'COM.MQM1.BSDS01.DATA' NEWNAME('COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="color: red;">V71</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">.BSDS01.DATA')</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> ALTER 'COM.MQM1.BSDS01.INDEX'
NEWNAME('COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="color: red;">V71</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">.BSDS01.INDEX')</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //*</span><br />
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: 45.8pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9.0pt;"><br /></span></div>
Step 4: Rename the new bootstraps (8 byte RBA) to the name the queue manager uses:<br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><br /></span>
<span style="background-color: white;"> </span><span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">//STEP4 EXEC PGM=IDCAMS</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSPRINT DD SYSOUT=*</span><br />
<span style="background-color: white; color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //SYSIN DD *</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="background-color: white;"> </span>ALTER 'COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="color: red;">V8</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">.BSDS01' NEWNAME('COM.MQM1.BSDS01')</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> ALTER 'COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="color: red;">V8</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">.BSDS01.DATA' NEWNAME('COM.MQM1.BSDS01.DATA')</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> ALTER 'COM.MQM1.</span><span style="font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"><span style="color: red;">V8</span></span><span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;">.BSDS01.INDEX' NEWNAME('COM.MQM1.BSDS01.INDEX')</span><br />
<span style="color: #222222; font-family: "courier new"; font-size: 9pt; line-height: 13.5pt;"> //*</span><br />
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: 45.8pt;">
<span style="color: #222222; font-family: "courier new"; font-size: 9pt;"><br /></span></div>
Step 5: Start queue manager and check for new LOG RBA RANGE:<br />
<br />
<span style="font-family: "courier new"; font-size: 12px;"> CSQJ034I <MQM1 CSQJW007 END OF LOG RBA RANGE IS <span style="color: red;">FFFF</span>FFFFFFFFFFFF</span><br />
<div>
<br /></div>
<div>
<br /></div>
<div>
That's it!!</div>
<div>
<br /></div>
<div>
Happy messaging.</div>
<div class="MsoNormal" style="background: white; line-height: 13.5pt; margin-left: 45.8pt;">
<br /></div>
Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com4tag:blogger.com,1999:blog-8860142488695233405.post-85979877038438592662014-12-26T10:51:00.001-08:002014-12-26T10:51:12.796-08:00Using "Shared Channels" in a Queue Sharing GroupWhen IBM introduced the notion of "shared queues" in WebSphere MQ....this allowed organizations the ability for a more fault tolerant, continuously available environment. Along with this, is the ability to have shared channels. In this post, I will be going over the set-up of using shared "sender" as well as shared "receiver" channels.<br />
<br />
<b>Shared Sender Channels:</b><br />
<br />
In order to have a shared sender channel.....there are three/four items that need to be set-up.<br />
<br />
1. Define a transmission queue (XMITQ) that is shared within the QSG (Queue Sharing Group).<br />
<br />
2. Define a Group/Copy remote queue that uses the shared transmission queue defined in step 1.<br />
<br />
3. Define a Group/Copy Sender channel using the shared transmission queue defined in step 1.<br />
<br />
Optional: (For triggering)<br />
<br />
4. In the transmission queue definition, set trigger type to "<b>F</b>"irst, trigger set to "<b>Y</b>". In the <br />
Initiation Queue name put SYSTEM.CHANNEL.INITQ and finally put the channel name in<br />
the Trigger Data.<br />
<br />
Now, when a message arrives on the transmission queue, this channel will start on any queue manager in the QSG that has a channel initiator running. Message sequence numbers will be tracked and stored on the SYSTEM.QSG.CHANNEL.SYNCQ...which is a shared queue in the QSG.<br />
<br />
For sender channels....that is all that is needed to make them "shared".<br />
<br />
<b>Shared Receiver Channels:</b><br />
<br />
Shared receiver channels will require a little more set-up, as we will need a separate listener started with a Inbound Disposition, INDISP set to GROUP. This listener will need to be listening on a separate port than the listener task started with the INDISP of QMGR...the normal listener task for each queue manager.<br />
<br />
So in your CHINIT task PROC, for the CSQINPX input dataset, you will have two start listener commands. One for the QMGR and one for the GROUP.<br />
<br />
START LISTENER PORT(1414) TRPTYPE(TCP) INDISP(QMGR)<br />
START LISTENER PORT(1415) TRPTYPE(TCP) INDISP(GROUP)<br />
<br />
Now, since each queue manager in the QSG will be listening on a different IP address, you will need to set-up a group IP (DVIPA) in Communications Server to be used by Sysplex Distributor, and have this group IP spray the connections across the channel initiators listening on the GROUP port.<br />
<br />
Sample Set-up: (These are all fictitious IP addresses)<br />
<span style="font-family: 'Courier New'; font-size: 9pt;"><br /></span>
<span style="font-family: 'Courier New'; font-size: 9pt;">VIPADEFINE</span><span style="font-family: 'Courier New'; font-size: 9pt;"> </span><span style="font-family: 'Courier New'; font-size: 9pt;">MOVE IMMEDIATE
255.255.255.0 57.202.125.200</span><span style="font-family: 'Courier New'; font-size: 9pt;"> </span><br />
<span style="font-family: 'Courier New'; font-size: 9pt;"> VIPADISTRIBUTE DISTMETHOD SERVERWLM</span><span style="font-family: 'Courier New'; font-size: 9pt;"> </span><br />
<span style="font-family: 'Courier New'; font-size: 9pt;"> 57.202.125.200 PORT 1415 DESTIP 57.202.125.1</span><span style="font-family: 'Courier New'; font-size: 9pt;"> 57</span><span style="font-family: 'Courier New'; font-size: 9pt;">.202.125.2</span><span style="font-family: 'Courier New'; font-size: 9pt;"> </span><span style="font-family: 'Courier New'; font-size: 9pt;"> 57</span><span style="font-family: 'Courier New'; font-size: 9pt;">.202.125.3</span><span style="font-family: 'Courier New'; font-size: 9pt;"> 57</span><span style="font-family: 'Courier New'; font-size: 9pt;">.202.125.4</span><span style="font-family: 'Courier New'; font-size: 9pt;"> </span><br />
<span style="font-family: 'Courier New'; font-size: 9pt;"> </span><br />
In the sample above, we have a DVIPA (Dynamic VIPA) address of 57.202.125.200 created...and we have selected to have the connections coming on a 57.202.125.200 port 1415 distributed based on WLM rules to the four IP addresses listed after the DESTIP tag. These four IP's are where the GROUP listener for each queue managers channel initiator are listening on port 1415.<br />
<br />
For more specifics on the DVIPA options you can use, see the <a href="http://www-01.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.halz001/vdyvipadistributestatement.htm">IBM Information Center</a>.<br />
<br />
When in incoming connection for a shared receiver channel comes in, it will get distributed to the least used channel initiator, and since we have a shared channel, the SYNCQ used for message sequence number tracking will be SYSTEM.QSG.CHANNEL.SYNCQ. This SYNCQ is also a shared queue and can be seen by all queue managers in the QSG.<br />
<br />
That is all there is to setting up shared sender and receiver channels.<br />
<br />
Happy messaging!!!<br />
<br />
<span style="font-size: xx-small;"><br /></span>
<br />
<br />
<br />
<br />
<b><br /></b>Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com1tag:blogger.com,1999:blog-8860142488695233405.post-36064345854071668602014-12-23T14:14:00.002-08:002017-12-13T03:11:30.149-08:00Spinning off your JES Log dataIf you have z/OS queue managers that are up and running for a long time between recycles or system IPL's...you have probably seen the JES spool usage for these tasks grow quite large, especially if you have SVRCONN client connections connecting and disconnecting at a high rate.<br />
<br />
Well....there is a way to have your JES spin off at predetermined intervals....and it is really quite easy. Now this is not just for WebSphere MQ started tasks.....this can be used for IMS, CICS, DB2....or virtually any started task that ends up producing a lot of JES messages and using up spool space.<br />
<br />
Step one will be to ensure that the dataset that includes the queue manager and channel initiator JCL is included in the MASTER JCL IEFPDSI concatenation. This can be found in the 'SYS1.PARMLIB' member MSTJCLxx. If a change to this member needs to be made...an IPL will be required. It might be easier to place queue manager and chinit JCL in a dataset already in the concatenation.<br />
<br />
Once you have these PROC's in a MASTER JCL library, you will need to edit them to add some entries to allow the spin off. The spin off can be set by a number of lines, or set to spin at a specific time.<br />
<br />
We will be changing the PROC statement to a JOB statement. Make sure your MSGCLASS is one that goes to a JHS...or other storage software so you will have the JES for possible troubleshooting or historical purposes.<br />
<br />
Before:<br />
<br />
//MQ1AMSTR PROC<br />
<br />
After:<br />
<br />
//MQ1AMSTR JOB JESLOG=(SPIN,1K),MSGCLASS=U,MSGLEVEL=1<br />
<br />
If you are using any JCL variables in your PROC....these will need to done by a SET= command when changing to the JOB format.<br />
<br />
Now, for the SPIN options.....you can have the following formats:<br />
<br />
JESLOG=(SPIN,15:00) - SPIN off at 3:00 PM every day<br />
JESLOG=(SPIN,4000) - SPIN off every 4000 lines of output<br />
JESLOG=(SPIN,2K) - SPIN off every 2000 lines of output<br />
<br />
You can decide based on your organizations needs...what the appropriate number would be for line count....or maybe just spin every day at midnight.<br />
<br />
I hope this helps some of you that have long running queue managers that eat up a lot of spool space.<br />
<br />
Have fun!!!<br />
<br />
<br />
<br />
<br />
<br />Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com1tag:blogger.com,1999:blog-8860142488695233405.post-13275868770031554032014-09-22T04:19:00.001-07:002014-09-22T04:19:41.471-07:00Problem in MQ v7.1 using permanent dynamic queues IBM just release a "Flash Alert" on page set zero chain corruption using permanent dynamic queues.<br />
<br />
After applying UI11858 or its superseded UI13085...some users may experience a chain corruption in PSID(0) causing a loop in a queue manager SRB.<br />
<br />
Full details of the problem and its symptoms as well as abend details can be found here:<br />
<br />
<span style="font-size: x-small;"><a href="http://www-01.ibm.com/support/docview.wssuid=swg21684118&myns=swgws&mynp=OCSSFKSJ&mync=E">http://www-01.ibm.com/support/docview.wssuid=swg21684118&myns=swgws&mynp=OCSSFKSJ&mync=E</a></span><br />
<br />
Happy messaging.Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com0tag:blogger.com,1999:blog-8860142488695233405.post-44920468587666686312013-02-17T08:01:00.000-08:002013-02-17T15:52:58.387-08:00Extending Shared Queues using Shared Message Datasets<br />
<div class="MsoNormal">
In this blog entry I will talk about what Shared Message Datasets (SMDS)
are, what problem(s) they solve and how to implement and manage SMDS in your Queue
Sharing Group (QSG).<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>What are Shared
Message Datasets?<o:p></o:p></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Currently, shared message queues and their message data are
stored in structures that are built in the Coupling Facility. These structures are defined with a fixed
size, so all message queues assigned to a particular structure, are constrained
by this size. Once a CF structure is
full, the reason code 2192 is issued, indicating that the storage medium for
that queue is full. In V7.1 new function mode, a new construct called a Shared
Message Dataset has been introduced to prevent CF structures from filling
up. The SMDS is a linear VSAM dataset much like a pageset for non-shared queues today, but is associated with a CF
structure.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>Implementing Shared
Message Datasets<o:p></o:p></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Before we can implement a SMDS architecture all queue
managers in the queue sharing group need to have the OPMODE=(NEWFUNC ,710) set
in the ZPARM. Once this has been set,
and the queue managers have been restarted we can now allocate the Shared
Message Datasets.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Each Queue Manager in the queue sharing group will have its
own copy of the SMDS for a coupling facility structure. This is designated by the use of an * in the
DSGROUP parameter of the CFSTRUCT definition. </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
See below:<o:p></o:p></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><!--[if gte vml 1]><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:6in;
height:124.5pt' o:ole="">
<v:imagedata src="file:///C:\Users\jhlang\AppData\Local\Temp\msohtmlclip1\01\clip_image001.emz"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1025"
DrawAspect="Content" ObjectID="_1422594131">
</o:OLEObject>
</xml><![endif]--></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><!--[if gte vml 1]><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:6in;
height:124.5pt' o:ole="">
<v:imagedata src="file:///C:\Users\jhlang\AppData\Local\Temp\msohtmlclip1\01\clip_image001.emz"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><img src="file:///C:/Users/jhlang/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif" v:shapes="_x0000_i1025" /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> Queue Manager Queue Manager</span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> QMA1 QMB1</span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> / \</span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> / Queue Sharing Group \</span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> / (QM01) \</span></div>
<div class="MsoNormal">
<span style="font-size: x-small;"><span style="font-family: 'Times New Roman', serif;"> 'MQVS.QM01.QMA1.SHAREQ.SMDS' </span><span style="font-family: 'Times New Roman', serif;">'MQVS.QM01.QMB1.SHAREQ.SMDS'</span></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> CFSTRUCT</span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> (SHAREQ)</span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"> </span></div>
<div class="MsoNormal">
<span style="font-family: 'Times New Roman', serif;"><span style="font-size: x-small;"> DSGROUP('MQVS.QM01.*.SHAREQ.SMDS')</span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
You can see the DSGROUP attribute is
MQVS.QM01.*.SHAREQ.SMDS. The queue manager will take the * and substitute its
name for the SMDS it is to use.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Now, let’s create and format the shared message datasets we
want to use. This is done using two
utilities, IDCAMS and CSQJUFMT.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//CRESMDSA JOB (ABCD,1234),'J LANG',CLASS=C,MSGCLASS=H<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//***********************************************************<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//* Allocate the SMDSs<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//***********************************************************<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//DEFINE EXEC PGM=IDCAMS,REGION=4M<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SYSPRINT
DD SYSOUT=*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SYSIN DD *<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DELETE 'MQVS.QM01.<span style="color: red;">QMA1</span>.SHAREQ.SMDS'
ERASE CLUSTER<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> SET MAXCC=0<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DEFINE CLUSTER -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> (NAME(MQVS.QM01.<span style="color: red;">QMA1</span>.SHAREQ.SMDS) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> MEGABYTES(200 300) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> LINEAR -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> <span style="color: blue;">DATACLAS(DCXVSM)</span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> SHAREOPTIONS(2 3) ) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DATA -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> (NAME(MQVS.QM01.<span style="color: red;">QMA1</span>.SHAREQ.SMDS.DATA) )</span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">/*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//***********************************************************<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//* Format the SMDS<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//***********************************************************<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//FORM EXEC PGM=CSQJUFMT,COND=(0,NE),REGION=0M<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//STEPLIB DD
DSN=MQM.SCSQANLE,DISP=SHR<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">// DD
DSN=MQM.SCSQAUTH,DISP=SHR<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SYSUT1 DD
DISP=OLD,DSN=MQVS.QM01.<span style="color: red;">QMA1</span>.SHAREQ.SMDS<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SYSPRINT
DD SYSOUT=*<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
The job above is for the <span style="color: red;">QMA1</span>
queue manager…you will also need to change the <span style="color: red;">QMA1</span>
to QMB1 and run the job again. Also you will notice a <span style="color: blue;">DATACLAS</span>
above, this is telling IDCAMS that this VSAM file has extended addressability
and can be expanded past the 4GB limit.
It can actually grow to 16TB given that you have that amount of DASD
available.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
So now we have our shared message datasets for each of our
queue managers in the queue sharing group, and we also have each queue manager
running with the OPMODE=(NEWFUNC ,710). So we have two options, we can alter
our current CTSTRUCT to Level 5 and set the appropriate variables, or we can
create a new CFSTRUCT set to Level 5. If
we are creating a new struct, work will need to be done in the coupling
facility policy to allocate this new structure, and the new policy will need to
be started to become active. For the
second option you can get with your z/OS systems programmer and they will
handle that portion.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
For now, let’s look at altering a current CFSTRUCT.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
It is easiest to do this in a batch job since several new
attributes need to be set at the same time.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SMDSJOBA JOB (ABCD,1234),'J LANG',<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">// CLASS=C,<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">// MSGCLASS=H</span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//EXTRACT
EXEC PGM=CSQUTIL,PARM='QMA1'<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//STEPLIB DD DSN=MQM.SCSQANLE,DISP=SHR<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">// DD DSN=MQMQ.QMA1.SCSQAUTH,DISP=SHR<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">// DD DSN=MQM.SCSQAUTH,DISP=SHR<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SYSPRINT
DD SYSOUT=*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//SYSIN DD *<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">COMMAND
DDNAME(INPUT)<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">/*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//INPUT DD *<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">ALTER -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> CFSTRUCT('SHAREQ') -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DESCR('Level 5 CFSTRUCT') -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> CFLEVEL(5) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> RECOVER(YES) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLOAD(SMDS) <span style="color: blue;">see
note 1</span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLD1TH(70)
<span style="color: red;">see note 2</span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLD1SZ(32K) <span style="color: red;">“</span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLD2TH(80) <span style="color: red;">“ </span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLD2SZ(4K) <span style="color: red;">“ </span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLD3TH(90) <span style="color: red;">“</span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> OFFLD3SZ(0K) <span style="color: red;">“ </span> -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DSGROUP('MQVS.QM01.*.SHAREQ.SMDS') -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DSBLOCK(256K) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DSBUFS(100) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> DSEXPAND(YES) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> RECAUTO(NO) -<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;"> CFCONLOS(TERMINATE)<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">/*<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New"; font-size: 10.0pt;">//*<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="color: blue;">Note 1: When changing the level of
a CFSTRUCT to 5, the OFFLOAD parameter must be set to DB2 or SMDS. In our case, we are using shared message
datasets due to the performance impact of using DB2. (this topic is for another
paper)<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="color: red;">Note 2: There are three sets of
offload rules that the queue manager uses. These contain the percentage that the
coupling facility structure must reach before the rule kicks in. In our listing above, we have the following:<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
OFFLD1TH(70)
– When the coupling facility reaches 70% full<o:p></o:p></div>
<div class="MsoNormal">
OFFLD1SZ(32K)
– New messages greater than 32K go to the SMDS<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
OFFLD2TH(80)
– When the coupling facility reaches 80% full<o:p></o:p></div>
<div class="MsoNormal">
OFFLD2SZ(4K)
– New messages greater than 4K go to the SMDS<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
OFFLD3TH(90)
– When the coupling facility reaches 90% full<o:p></o:p></div>
<div class="MsoNormal">
OFFLD3SZ(32K)
– New messages greater than 0K go to the SMDS<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="color: red;">Special Note: There is still some
data stored in the coupling facility for a message that is offloaded to the
SMDS, so the larger your messages are, the more benefit you will get from using
SMDS. The 3<sup>rd</sup> rule here, says
that if the CF is 90% full, all new messages go to the SMDS. For messages that are under 140 bytes, you
will not benefit from this rule, and the CF will still become 100% full because
while it is moving let’s say 100 bytes messages to the SMDS, it is using more
space than that to control the pointers to these messages. <o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
So now we have our CF at level 5, and we have our SMDS
allocated. You need to make sure the
that the queue manager started task ID’s have UPDATE access to the SMDS VSAM
datasets. (RACF Rules). The owning queue manager will have its SMDS open for
UPDATE, other queue managers in the group will have all other SMDS’s open for
READONLY.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
There are several new commands that system programmers have
available to them to aid in the management of the SMDS. Below are a few of the
most common: (you will use your own queue manager name)<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: x-small;">/-QMA1 DIS
SMDSCONN(QMA1) CFSTRUCT(SHAREQ)</span></div>
<div class="MsoNormal">
<span style="font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
<span style="font-size: x-small;">Display the status and </span><span style="font-size: x-small;">availability to the </span><span style="font-size: x-small;">SMDS by the queue </span><span style="font-size: x-small;">m</span><span style="font-size: x-small;">anager.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Output:<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">CSQM201I –QMA1
CSQMDRTC DIS SMDSCONN DETAILS</span></span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;">SMDSCONN(QMA1)</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;">CFSTRUCT(SHAREQ)</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;">OPENMODE(UPDATE)</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;">STATUS(OPEN)</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;">AVAIL(</span><st1:place style="font-family: 'Courier New'; font-size: small;" w:st="on"><st1:city w:st="on">NORMAL</st1:city></st1:place><span style="font-family: 'Courier New'; font-size: x-small;">)</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;">EXPANDST(</span><st1:place style="font-family: 'Courier New'; font-size: small;" w:st="on"><st1:city w:st="on">NORMAL</st1:city></st1:place><span style="font-family: 'Courier New'; font-size: x-small;">)</span></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New'; font-size: x-small;"> </span><span style="font-family: 'Courier New'; font-size: x-small;">END SMDSCONN DETAILS</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: x-small;">/-QMA1 START SMDSCONN(QMA1) CFSTRUCT(SHAREQ)</span></div>
<div class="MsoNormal">
<span style="font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
<span style="font-size: x-small;">Start the
connection</span><span style="font-size: x-small;"> </span><span style="font-size: x-small;">to
the SMDS from the</span><span style="font-size: x-small;"> </span><span style="font-size: x-small;">queue
manager. This</span><span style="font-size: x-small;"> </span><span style="font-size: x-small;">will
allocate and open</span></div>
<div class="MsoNormal">
<span style="font-size: x-small;">the
SMDS if it is new,</span><span style="font-size: x-small;"> </span><span style="font-size: x-small;">otherwise
it </span><span style="font-size: x-small;">automatically</span><span style="font-size: x-small;"> </span><span style="font-size: x-small;">happens.</span></div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<span style="font-size: x-small;"><br /></span></div>
<div class="MsoNormal">
Output:<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: 'Courier New';"><span style="font-size: x-small;">-QMA1
CSQMSSMD ' START SMDSCONN' <st1:place w:st="on">NORMAL</st1:place> COMPLETION</span><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
The change you will see from the
start will be shown by displaying the connection.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
While running a job to load the
queue, you will see expansion messages in the queue manager address space if it
is allocating more space for the SMDS…this is much like normal page set
expansion.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">CSQE213I -QMA1
CSQEDSS2 SMDS(QMA1) CFSTRUCT(SHAREQ) <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">data set
MQVS.QM01.QMA1.SHAREQ.SMDS is now 98% full<o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">CSQE239I -QMA1
CSQEDSS2 SMDS(QMA1) CFSTRUCT(SHAREQ) <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">data set
MQVS.QM01.QMA1.SHAREQ.SMDS has become full so new large </span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">messages can no longer
be stored in it<o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">CSQE212I -QMA1
CSQEDSI1 Formatting is complete for <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">SMDS(QMA1)
CFSTRUCT(SHAREQ) data set MQVS.QM01.QMA1.SHAREQ.SMDS<o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">CSQE217I -QMA1
CSQEDSI1 Expansion of SMDS(QMA1) <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">CFSTRUCT(SHAREQ) data
set MQVS.QM01.QMA1.SHAREQ.SMDS was successful</span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;"> 76860 pages added, total pages
128160</span><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
While this is happening, your job, or channels will be
paused until the expansion completes.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Other SMDS commands: (for a complete list of parameters, see
MQ Command Reference)<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">ALTER SDMS (qmgr|*)
CFSTRUCT(cfname) DSBUFS(number) <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;"> DSEXPAND(yes|no|)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">DISPLAY SMDS (qmgr|*)
CFSTRUCT(cfname) <span style="color: red;">WHERE(filter)</span> <o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">DISPLAY SMDSCONN (qmgr|*)
CFSTRUCT(cfname) <span style="color: red;">WHERE(filter)</span><o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">RESET SMDS (qmgr or
*) CFSTRUCT(cfname) ACCESS(enabled|disabled)
STATUS(failed|recovered)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">START SMDSCONN (qmgr
or *) CFSTRUCT(cfname) <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;"> <span style="color: red;">CMDSCOPE(‘
‘|qmgr|*)<o:p></o:p></span></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;">STOP SMDSCONN (qmgr
or *) CFSTRUCT(cfname)<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: "Courier New";"><span style="font-size: x-small;"> </span><span style="color: red;"><span style="font-size: x-small;">CMDSCOPE(‘
‘|qmgr|*)</span><o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="color: red;">Optional parameter<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>Testing:<o:p></o:p></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
I had two CF structures
established of the same size. One was at
Level 4, one was at Level 5 with a SMDS assigned to the CFSTRUCT. I attempted to put 50,000 messages that were
40,000 bytes each. In the Level 4
CFSTRUCT, I was able to load 4710 messages in the queue before the RC 2192 was
returned stating that the CF was full.
In the Level 5 structure with the SMDS assigned, once the CF level
reached 70%, the data started going to the SMDS and I was able to put all
50,000 messages on the shared queue.<o:p></o:p></div>
<br />
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: "Times New Roman","serif"; font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US;"><br /></span></div>
Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com1tag:blogger.com,1999:blog-8860142488695233405.post-54175323666309090512011-05-21T07:18:00.000-07:002011-05-27T05:31:02.220-07:00MQ Version 7 "gotcha" on z/OSI have gone over the "WebSphere MQ V7.0 Features and Enhancements", the "Migration Guide"....and this was not mentioned once. I did find reference to this in SupportPac MP1G...but it was after the fact and I had already converted to V7.01. <br />
<br />
In version 7.01 of MQ for z/OS....IBM changed the way messages are stored on the pageset. If a message is under 2K....it is stored 1 message per page. This was huge for one of my applications.....as they kept filling the pageset, and overflowing to the dead letter queue. It took a little while to figure this out. Regardless of the design implications....this application would get data all day, and then process it at night. Well it didn't take long to fill the pageset up to the 4GB limit. These messages are 153 bytes each.......so we use a 4K page to store 153 bytes. We went from approximately 20 messages per page....to one.<br />
<br />
The solution was to allocate a new "extended" VSAM dataset to be able to go over the 4GB limit. Once this was allocated and formatted......I then dynamically added the pageset to the queue manager:<br />
<br />
-<span style="color: red;">qmgr</span> DEFINE PSID(9) BUFFPOOL(3) DSN('MQM.<span style="color: red;">qmgr</span>.PSID09') EXPAND(USER)<br />
<br />
Then I created a new STORAGE CLASS called EXPANDED to use this pageset...and finally, I had the application process all of the data...stopped all incoming channels so the queue stayed empty, and then reassigned the queue to the new storage class.<br />
<br />
Remember when you add a pageset dynamically, you will still need to change the PROC to include the new DD statement for the pageset, as well as to update the CSQINP1 input dataset to include the pageset to buffer pool entry:<br />
<br />
DEFINE PSID( 09 ) BUFFPOOL( 3 )<br />
<br />
as well as the input for CSQINP2, where you assign the storage class:<br />
<br />
DEFINE STGCLASS( 'EXTENDED') +<br />
PSID( 09 )<br />
<br />
There is also another work around that is talked about in the MP1G Performance SupportPac...and it is having this statement in your CSQINP2 DD statement:<br />
<br />
REC QMGR (TUNE MAXSHORTMSGS 0)<br />
<br />
This will have the queue manager store messages in the pre v7.01 way....more than one on a page.<br />
It seems to me that this should have been pointed out in the migration guide, as well as mentioned in the features and enhancements book. Having to search for information on this after the fact, was not really what I had in mind.Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com4tag:blogger.com,1999:blog-8860142488695233405.post-50109298909971132742011-04-09T17:32:00.000-07:002017-03-29T10:29:48.769-07:00Don't Ignore your FDC Probes.I cannot tell you how many client sites I have been at where they seem to have unexplainable behavior in their WebSphere MQ environments. The first question I ask them is "Have you looked at your FDC probes?" Most of the time they do not know what I am talking about. So I explain, that MQ will tell you when it does not like something in the environment, or is having some type of trouble. In some of my engagements, the MQ servers are running fine, at least there is no apparent problem, but when I look....I usually find some area where tuning is needed.<br />
<br />
What I am referring to is the FDC files that MQ cuts when it has experienced a failure. On the distributed platforms..ie. Unix, Linux..etc. these are stored in /var/mqm/errors. Most of the time when an FDC event happens, the programs, services and channels will keep running, so it it not readily noticeable that a problem has occurred.<br />
<br />
As MQ administrators, one of our functions is to monitor these files, trying to detect a pattern, or at least cataloging and quantifying what has happened. Armed with this information, we can make adjustments to our environments and get them running to full capacity.<br />
So let's look at getting at the probes...and how many of which type occurred. To do this, we will use some simple Unix/Linux commands.<br />
<br />
First off, change to the /var/mqm/errors directory:<br />
<br />
$ <span style="color: blue; font-family: "courier new" , "courier" , monospace;">cd /var/mqm/errors</span><br />
<br />
Now, lets get the probe number, and a count of how many times each has happened:<br />
<br />
$ <span class="066160113-07042011"><span style="font-family: "courier new";"><span style="color: blue;"><span class="465184311-05042011">grep "Probe Id" *.FDC|cut -c 38-47 </span>| sort | uniq -c</span></span></span><br />
<br />
This is just an example, but your output might look something like this:<br />
<span style="font-family: "courier new";"><br />
9 HL047028<br />
4 HL049110</span><br />
<span style="font-family: "courier new";"> 9 HL077070<br />
47 XC307070<br />
43 XC308010</span><br />
<br />
<span style="font-family: inherit;">You might have some lines that are offset and duplicates...but that is due to your FDC file name length and this is based on the process ID number. You can add them together for a total occurrence count.</span><br />
<br />
Okay...these "Probe Id's" are coded based on the first two characters as to which MQ component had the failure. In our case, we have HL and XC. The HL is the "Logger" component and the XC is "Common Services". A partial list of these probe codes can be found on my website, <a href="http://www.tpmq-experts.com/FDC-Probes.html">http://www.tpmq-experts.com/FDC-Probes.html</a>.<br />
<br />
Okay...as we can see, we had 37 XC307070 (Long Lock Wait) probes and 43 XC308010 (Mutex Release) probes. This is not a catastrophic failure....but does indicate that you are using linear logging and are taking media images at a time when your queues are at a high depth. This does affect the speed of processing for your applications, so it would be good to have a check in your record image script to check the queue depth....if it is high, then it would be wise to wait to perform the record image.<br />
<br />
Looking at the other probes, we had 9 HL047028 (Logger problem), 4 HL049110 (Logger problem) and 9 HL077070 (disk full). The last probe, is self explanatory...the disc was full. So if you are using Linear logging...you clean-up script needs to be adjusted, or more disk space allocated. The other two probes point at kernel parameters msgmnb, msgtql and msgseg..which can all be adjusted to handle the load that your current environment needs.<br />
<br />
These are just a few examples of probes that can be corrected, which will have a positive impact on the running of your environment and the throughput of your applications.<br />
<br />
Have a look at your probes...and really see what's going on.Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com4tag:blogger.com,1999:blog-8860142488695233405.post-88688743619428693082011-03-26T08:00:00.000-07:002011-03-26T08:06:49.747-07:00Sending, reading and receiving a WebSphere MQ message using SQL.A little understood and exploited feature of WebSphere MQ and DB2, is the ability to send, read and receive a message using a simple SQL statement. The validity of using this feature we will leave for the systems architects and application developers. The purpose of this post is to explain how it works and how to configure the set-up.<br />
<br />
During the installation of DB2, job DSNTIJSG creates several user defined functions. Some of these functions are the AMI interface from DB2 to WebSphere MQ.<br />
<br />
To see which functions were created, you can issue the following SQL statement in SPUFI or QMF:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">SELECT DISTINCT(NAME) FROM SYSIBM.SYSROUTINES WHERE SCHEMA = 'DB2MQ';</span><br />
<br />
You should see the following:<br />
<br />
MQREAD<br />
MQREADALL<br />
MQREADALLCLOB<br />
MQREADCLOB<br />
MQRECEIVE<br />
MQRECEIVEALL<br />
MQRECEIVEALLCLOB<br />
MQRECEIVECLOB<br />
MQSEND<br />
<br />
In this post we will specifically be dealing with the MQSEND, MQREAD and MQRECEIVE user defined functions.<br />
<br />
There are two tables that control the MQ Services within DB2:<br />
<br />
SYSIBM.MQSERVICE_TABLE<br />
SYSIBM.MQPOLICY_TABLE<br />
<br />
The MQSERVICE_TABLE contains the service name, queue manager name, queue name, CCSID, encoding and a description of the service.<br />
<br />
The MQPOLICY_TABLE contains items that are specific to the message itself and its delivery. You can think of the policy table as a mapping of a lot of the fields in the MQ Message Descriptor (MQMD). Items like, priority, persistence, expiry, message ID, correlation ID, COA, COD, reply to queue, reply to queue manager...and so on.<br />
<br />
Let's define a service we can test with. Using SPUFI or QMF, execute the following:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">INSERT INTO SYSIBM.MQSERVICE_TABLE VALUES('TEST_DB2_SEND','<span style="color: red;">qmgrName</span>','<span style="color: red;">queueName</span>',500,785,</span><br />
<span style="font-family: "Courier New", Courier, monospace;"> 'A TEST SERVICE');</span><br />
<br />
Looking at the values, we have:<br />
<br />
TEST_DB2_SEND - The service name<br />
<span style="color: red;">qmgrName</span> - The name of the Queue Manager that you DB2 can access<br />
<span style="color: red;">queueName</span> - The name of a local, remote or alias queue define on that queue manager<br />
500 - Code character set ID (z/OS)<br />
785 - Encoding (z/OS)<br />
A TEST SERVICE - Description of the service<br />
<br />
Now we will need a policy to govern the delivery of this message. For our example, we will keep it simple and specify that the message is to be persistent. So using SPUFI or QMF, execute<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">INSERT INTO SYSIBM.MQPOLICY_TABLE (POLICYNAME, SEND_PERSISTENCE, DESC)</span><br />
<span style="font-family: "Courier New", Courier, monospace;">VALUES('TEST_PERSIST_POLICY','Y','TEST POLICY FOR PERSISTENT MESSAGES');</span><br />
<span style="font-family: "Courier New", Courier, monospace;"><br />
</span><br />
In this statement, we specify the COLUMN names because there are a lot of columns on the table, and we only want these updated. The others will assume a default value. For the default values you can checkout the DB2 Information Center:<br />
<br />
<a href="http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.apsg/db2z_db2mqtables.htm"><span style="font-size: x-small;">http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.apsg/db2z_db2mqtables.htm</span></a><br />
<br />
So now we have a "service" as well as a "policy" defined, but before we can test the MQSEND function, we will need a Workload Manager (WLM) Application Environment established. Your z/OS systems programmer can set this up for you. Here are the values:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;"> Application Environment</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Name DB21MQ</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Description TEST</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Procedure Name DB21MQ Subsystem DB2</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Server Limit No Limit</span><br />
<span style="font-family: "Courier New", Courier, monospace;">Start Parameters DB2SSN=&IWMSSNM,NUMTCB=20,APPLENV=DB21MQ</span><br />
<br />
In the above example, we have a DB2 subsystem named DB21. Now we need a procedure in a system PROCLIB called DB21MQ..(see procedure name above).<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">DB21MQ PROC RGN=0M,APPLENV=DB21MQ,DB2SSN=DB21,NUMTCB=20<br />
IEFPROC EXEC PGM=DSNX9WLM,REGION=&RGN,TIME=NOLIMIT,<br />
PARM='&DB2SSN,&NUMTCB,&APPLENV'<br />
STEPLIB DD DISP=SHR,DSN=<span style="color: red;">db2hlq</span>.SDSNEXIT<br />
DD DISP=SHR,DSN=<span style="color: red;">db2hlq</span>.SDSNLOAD<br />
DD DISP=SHR,DSN=<span style="color: red;">mqhlq</span>.SCSQLOAD<br />
DD DISP=SHR,DSN=<span style="color: red;">mqhlq</span>.SCSQAUTH<br />
DD DISP=SHR,DSN=<span style="color: red;">mqhlq</span>.SCSQANLE<br />
DSSPRINT DD SYSOUT=*<br />
SYSTSPRT DD SYSOUT=*<br />
CEEDUMP DD SYSOUT=*<br />
SYSPRINT DD SYSOUT=*<br />
SYSABEND DD DUMMY</span><br />
<br />
<span style="font-family: inherit;">The <span style="color: red;">db2hlq</span> and <span style="color: red;">mqhlq</span> need to be replaced with your high level qualifier for your DB2 and MQ libraries. Okay..we should now be set to give this a test.</span><br />
<br />
To test this we will using SPUFI and issuing a SQL statement to demonstrate the execution.<br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt;"><b style="mso-bidi-font-weight: normal;"><span style="color: black;"></span></b></div><div class="MsoNormal" style="margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="color: black; font-family: "Courier New", Courier, monospace;">SELECT DB2MQ.MQSEND('TEST_DB2_SEND', 'TEST_PERSIST_POLICY',</span></div><div class="MsoNormal" style="margin: 0in 0in 0pt; mso-layout-grid-align: none;"><span style="color: black; font-family: "Courier New", Courier, monospace;">'TEST MESSAGE WITH NEW POLICY')</span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: black; font-family: "Courier New", Courier, monospace;">FROM SYSIBM.SYSDUMMY1;</span></div><br />
This SQL statement should have put the message, "TEST MESSAGE WITH NEW POLICY" on the queue you specified with the INSERT statement of the SYSIBM.MQSERVICE table.<br />
<br />
Now let's define a service to read the queue. Using the same structure as before:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">INSERT INTO SYSIBM.MQSERVICE_TABLE VALUES('TEST_DB2_READ','<span style="color: red;">qmgrName</span>','<span style="color: red;">queueName</span>',500,785,'A TEST READ SERVICE');</span><br />
<br />
And now a policy. For this policy, we will just take the default values. You can tailor your policy to control your specific needs, but for this example..the defaults will work:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">INSERT INTO SYSIBM.MQPOLICY_TABLE (POLICYNAME, DESC)</span><br />
<span style="font-family: "Courier New", Courier, monospace;">VALUES('TEST_READ_POLICY', 'POLICY FOR MQREAD');</span><br />
<br />
We can now read the message from the queue using the following SQL statement:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">SELECT DB2MQ.MQREAD('TEST_DB2_READ', 'TEST_READ_POLICY')</span><br />
<span style="font-family: "Courier New", Courier, monospace;">FROM SYSIBM.SYSDUMMY1;</span><br />
<br />
Your output should display the contents of the message we placed on the queue. Using the MQREAD function, the message is still on the queue. To remove the message we will use the MQRECEIVE function.<br />
So using the same policy as we did in the MQREAD...we can issue the statement:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">SELECT DB2MQ.MQRECEIVE('TEST_DB2_READ', 'TEST_READ_POLICY')</span><br />
<span style="font-family: "Courier New", Courier, monospace;">FROM SYSIBM.SYSDUMMY1;</span><br />
<br />
Your output should show the contents of the message, and the message is now removed from the queue.<br />
<br />
You will probably want to name your services and policies something that makes sense based on the queue names and the specific behavior you are looking for. But this gives you an idea of what you are capable of doing. One practical use for these features would be to send and receive messages from a JDBC client without having the z/OS WebSphere MQ Client Attach Facility installed.<br />
<br />
Keep messaging!!!!!Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com0tag:blogger.com,1999:blog-8860142488695233405.post-89375447721827114192011-02-27T10:36:00.000-08:002011-02-27T10:36:52.771-08:00WebSphere MQ V7 for z/OS and MQ Explorer....One of the nice offerings in WebSphere MQ V7 on z/OS is the ability <br />
for MQ Explorer to client attach without having to purchase the z/OS <br />
Client Attachment Facility.<br />
<br />
In version 7 on z/OS you are now allowed up to 5 client attachments <br />
for use with MQ Explorer. This will allow administrators and enterprise <br />
monitoring groups to view, monitor and alter z/OS Queue Managers using <br />
the nice Windows interface that MQ Explorer offers. <br />
<br />
To download the new version of MQ Explorer, go to: <a href="http://www01.ibm.com/software/integration/wmq/explorer/">http://www01.ibm.com/software/integration/wmq/explorer/</a><br />
<br />
The set-up for this is seemingly simple. On the z/OS side, you will need the <br />
SYSTEM.ADMIN.SVRCONN channel defined. If you have the Client <br />
Attach Facility installed, the MAXINST attribute on this channel can be set <br />
between 0 and 999,999,999, without the Client Attach Facility the value for <br />
MAXINST is limited to 5. The only other MQ object you will need is the SYSTEM.MQEXPLORER.REPLY.MODEL model queue.<br />
<br />
Once these are set-up, your connection from MQ Explorer can be established. You will notice in thenew version of MQ Explorer there is a logon area for your z/OS ID and password. If you are the z/OS MQ administrator, you probably already have the necessary access to the queue manager and all of the objects, so no additional RACF (or ACF2, TopSecret) changes will be needed. However, if you are allowing others to use MQ Explorer who do not currently have access to the queue manager and objects, the following will be needed:<br />
<br />
- RACF UPDATE authority to the system queue <br />
SYSTEM.MQEXPLORER.REPLY.MODEL<br />
- RACF UPDATE authority to the queues, AMQ.MQEXPLORER.*<br />
- CONNECT authority to the target queue manager<br />
- Correct authority for the action they specify. This can be different, <br />
for different types of users.<br />
- READ authority to all of the hlq.DISPLAY.object profiles in the MQCMDS <br />
class<br />
<br />
Enjoy!!Jayhttp://www.blogger.com/profile/10562244767926464299noreply@blogger.com1