ODTUG Aggregator ODTUG Blogs http://localhost:8080 Tue, 20 Feb 2018 16:28:49 +0000 http://aggrssgator.com/ Questions to ask when migrating to a new database platform https://blog.pythian.com/questions-ask-migrating-new-database-platform/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>As systems come online and new technologies are made available, companies are faced with a decision point: Should we fragment our existing technology stack to attempt to take advantage of these new tools, or continue with our current environment at the risk of missing out on functionality? This post will give insight into the questions and concerns we often hear when a company is considering changing to a new database platform.</p> <p><img class="size-full wp-image-103447 aligncenter" src="https://blog.pythian.com/wp-content/uploads/Comparing-comparable-things-2.png" alt="" width="500" height="400" srcset="https://blog.pythian.com/wp-content/uploads/Comparing-comparable-things-2.png 500w, https://blog.pythian.com/wp-content/uploads/Comparing-comparable-things-2-465x372.png 465w, https://blog.pythian.com/wp-content/uploads/Comparing-comparable-things-2-350x280.png 350w" sizes="(max-width: 500px) 100vw, 500px" /></p> <h3><strong>New database platform</strong></h3> <p>The first set of questions are focused around answering our main question: What will be the primary benefit to the company by making this move to a new database platform?</p> <h4>Will there be significant cost savings?</h4> <p>At Pythian, this is often the case when we see companies <a href="https://services.pythian.com/migrate-oracle-to-sql-server">moving from Oracle to SQL Server</a>, as the licensing costs are dramatically lower (or free if they&#8217;re taking advantage of a deal.) Discussing yearly savings of millions of dollars will generally get the attention of most executives very quickly.</p> <h4>Is there a required feature in the new database?</h4> <p>As a SQL Server DBA, I do sometimes look at MySQL&#8217;s master-master replication or Oracle&#8217;s Materialized View scheduling feature with envy. In the case of a killer feature, there&#8217;s a benefit to using the built-in processes. These will be better supported, more wide-spread knowledge will be available, and it may be easier to manage once in Production.</p> <h4>Is this an attempt to standardize the stack?</h4> <p>Occasionally, a company will decide to move to a new database and find it doesn&#8217;t meet their needs, or the new platform isn&#8217;t worth the hassle of supporting it long-term. In this case, moving back to a database you have plenty of experience in may be worth the cost of redoing the process.</p> <h4>What&#8217;s the roadmap for this move?</h4> <p>Even if the answer to all of the above questions are resoundingly positive, there&#8217;s little benefit to a change that will take a decade to implement. The amount of time to convert any required application/database code, jobs, processes, and training needs to be carefully weighed against the perceived benefit.</p> <p>&nbsp;</p> <h3><strong>Application architecture</strong></h3> <p>The next area of concern is the architecture of the applications that are running on this system.</p> <p>First, we have to define which applications are in scope. Depending on the reason for the move, it may make sense to only move a subset of the applications that are running on the current data platform, while leaving the remainder where they are.</p> <p>Next, developing (or re-using existing) use cases with the Application Users allows us to ensure we have the right plan in mind, and that the new data platform will actually fit our needs. For example, if we need real-time reporting from a high volume stream of data then it won&#8217;t do any good to move to a MySQL System that can&#8217;t handle it. This is also a great way to shake out how exactly the application will need to change in order to meet the use cases.</p> <p>Finally, if the applications are making use of an ORM or other third-party systems, then ensuring they are supported on the new data platform is obviously critical.</p> <p>&nbsp;</p> <h3><strong>Database stuff</strong></h3> <p>Our final check is mapping out how the database features match up between the data platforms, and how they will need to change after the cut over. Some of the major areas we always check are:</p> <ul> <li>High availability</li> <li>Disaster recovery</li> <li>Advanced feature usage</li> <li>Security options</li> <li>Auditing</li> </ul> <p>Sometimes it&#8217;s as simple as comparing Oracle RAC to SQL Server Availability Groups and defining what features the company will lose or gain. Sometimes a deep dive into the feature sets of the new data platform is needed, and maybe custom coding, in order to ensure functionality is maintained or grown. Regardless, this section almost always requires an expert in the new data platform so nothing is missed.</p> <p>If you&#8217;re exploring new database platforms, feel free to reach out to us with any questions you have. We&#8217;re able to provide expertise in both the database platform you&#8217;re currently using, as well as the ones you&#8217;re considering moving to, both on-premise and in the cloud.</p> <h3><strong>Additional resources</strong></h3> <ul> <li><strong>White paper:</strong> <a href="https://resources.pythian.com/white-paper/the-data-warehouse-is-dead/">The data warehouse is dead. Long live the data platform.</a></li> <li><strong>White paper:</strong> <a href="https://resources.pythian.com/choosing-a-dbaas-offering-white-paper">Choosing a database-as-a-service offering.</a></li> <li><strong>White paper:</strong> <a href="https://resources.pythian.com/evolving-role-of-dbas-in-the-cloud-whitepaper">The evolving role of DBAs in the cloud.</a></li> <li><a href="https://services.pythian.com/migrate-oracle-to-sql-server">Pythian&#8217;s Oracle to SQL Server/Azure Migration Services</a></li> </ul> </div></div> Scott McCormick https://blog.pythian.com/?p=103386 Tue Feb 20 2018 15:57:06 GMT-0500 (EST) RMOUG, Feb. 20th, 2018 #td18 http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/ <p>So its the first day of RMOUG Training Days 2018 in Westminster, CO, (just NW of Denver, between Denver and Boulder) and we&#8217;re enjoying the winter weather after spring temperatures on Sunday, which dropped almost 50F degrees in a single day.  The change in temperatures was accompanied by about 8 inches of snow for Denver and most of those in summer gear were faced with only one choice&#8230;.</p> <p><a href="http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/diving_snow/" rel="attachment wp-att-7812"><img class="alignnone size-full wp-image-7812" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2018/02/diving_snow.gif?resize=282%2C274" alt="" width="282" height="274" data-recalc-dims="1" /></a></p> <p>Actually they were left with two-  They *could* go for a swim in the snow or they could register for the workshops at RMOUG Training Days, braving the roads, (which due to our lacking humidity weren&#8217;t as bad as they could be&#8230;)</p> <p>We had a great group of instructors this year for our four offered sessions, Mike Dietrich, Kent Graziano, John King, and Peter Koletzke who offered some incredible workshop/deed dive sessions to kick off the event.</p> <p>After lunch we&#8217;ll begin the one house sessions with our fantastic presenters and the schedule can be found <a href="https://training-days-2018.rmoug.org/agenda">here!</a></p> <p>With that, I&#8217;ll get back to performing my duties of welcoming folks, social media and being the loveliest User Group president in the land&#8230; <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>&nbsp;</p> <br><br><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/ico-tag.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/rmoug/" rel="tag">RMOUG</a>, <a href="http://dbakevlar.com/tag/td18/" rel="tag">td18</a>, <a href="http://dbakevlar.com/tag/training-days/" rel="tag">Training Days</a><br><br><div style="width:100%"><table align="left" width="100%" cellspacing="0" cellpadding="0" bgcolor="#f1f1f1" border="0px;"> <tbody> <tr bgcolor="#ffffff"><td align="center" width="17%" valign="top"> <span class="sb_title">Del.icio.us</span><br> <a href="http://del.icio.us/post?url=http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/&title=RMOUG, Feb. 20th, 2018 #td18"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">TweetThis</span><br> <a href="http://twitthis.com/twit?url=http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/&title=RMOUG, Feb. 20th, 2018 #td18"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Digg</span><br> <a href="http://digg.com/submit?phase=2&url=http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/&title=RMOUG, Feb. 20th, 2018 #td18"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">StumbleUpon</span><br> <a href="http://www.stumbleupon.com/submit?url=http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/&title=RMOUG, Feb. 20th, 2018 #td18"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td></tr> </tbody></table></div><br><div style="clear:both"></div><div style="background:#EEEEEE; padding:0px 0px 0px 15px; margin:10px 0px 0px 0px;"><div style="padding:5px 0px 5px 0px;"><b>Comments:</b>&nbsp;&nbsp;<a href="http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/#respond">0 (Zero), Be the first to leave a reply!</a></div><br><div style="clear:both"></div><div style="padding:13px 0px 5px 0px;"><span style="border-bottom:1px dashed #003399;padding-bottom:4px;"><strong>You might be interested in this:</strong></span>&nbsp;&nbsp;<br><ul style="margin:0; padding:0; padding-top:10px; padding-bottom:5px;"><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2012/07/kscope-2012-san-antonio-in-june-yippee-ki-yea/" >KSCOPE 2012, San Antonio in June, Yippee-Ki-Yea!</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/05/sql-id-specific-performance-information/" >SQL ID Specific Performance Information</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/11/oracle-open-world-2015-survival-of-the-fittest/" >Oracle Open World 2015, Survival of the Fittest!</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/11/why-all-tools-in-at-your-disposal-are-important/" >Why ALL Tools in at Your Disposal ARE IMPORTANT</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2012/06/kscope-2012-and-other-happenings/" >KSCOPE 2012 and Other Happenings</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/">RMOUG, Feb. 20th, 2018 #td18</a>], All Right Reserved. 2018.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2018/02/rmoug-feb-20th-2018-td18/">RMOUG, Feb. 20th, 2018 #td18</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=7811 Tue Feb 20 2018 14:46:40 GMT-0500 (EST) ODTUG Kscope Community Service Day Renamed to Honor Its Founder https://www.odtug.com/p/bl/et/blogaid=769&source=1 ODTUG Community Service Day Renamed ‘Kathleen McCasland Community Service Day’. User group honors its founder and reflects on past 10 years of community service across the nation. ODTUG https://www.odtug.com/p/bl/et/blogaid=769&source=1 Tue Feb 20 2018 14:07:41 GMT-0500 (EST) 3 Quick SQL Developer Tips to Kick off 2018 https://www.thatjeffsmith.com/archive/2018/02/3-quick-sql-developer-tips-to-kick-off-2018/ <p>I&#8217;m in Denver today, to present one of my favorite talks, SQL Developer Tips &amp; Tricks.</p> <p>Since I know most of you won&#8217;t be here today, I thought I&#8217;d share 3, super-quick tips.</p> <p>I get asked &#8216;how to do this&#8217; type stuff, all the time.</p> <h3>Copying Column Headers with your Data</h3> <p>Ctrl+Shift+C</p> <p>&nbsp;</p> <div id="attachment_6516" style="max-width: 1290px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/ctrl-shift-c.gif"><img class="size-full wp-image-6516" src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/ctrl-shift-c.gif" alt="" width="1280" height="720" /></a><p class="wp-caption-text">It&#8217;s all in the&#8230;keyboard?</p></div> <h3>Showing Line Numbers</h3> <p>Right-click in the gutter, turn it on. It&#8217;ll remember this going forward. You&#8217;ll need to do it for the SQL Worksheet and Code (PLSQL) Editor.</p> <div id="attachment_2412" style="max-width: 250px" class="wp-caption alignleft"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2012/01/line_gutter2.png"><img class="size-full wp-image-2412" src="https://www.thatjeffsmith.com/wp-content/uploads/2012/01/line_gutter2.png" alt="" width="240" height="89" /></a><p class="wp-caption-text">Right-mouse in the gutter</p></div> <p>It&#8217;s also a preference, if you forget to right-click.</p> <!-- Easy AdSense V7.43 --> <!-- [midtext: 1 urCount: 1 urMax: 0] --> <div class="ezAdsense adsense adsense-midtext" style="float:left;margin:12px;"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 336-rectangle --> <ins class="adsbygoogle" style="display:inline-block;width:336px;height:280px" data-ad-client="ca-pub-1495560488595385" data-ad-slot="5904412551"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> <!-- Easy AdSense V7.43 --> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <h3>Setting Defaults for Exports</h3> <p>Always setting your grid exports to &#8216;Inserts&#8217; and to the Clipboard? Tired of clicking? You can fix that.</p> <div id="attachment_6517" style="max-width: 783px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/export-pref1.png"><img class="size-full wp-image-6517" src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/export-pref1.png" alt="" width="773" height="573" /></a><p class="wp-caption-text">You can also set particular export format preferences here as well.</p></div> <p>Run your query, or browse your table/view &#8211; right click, Export.</p> <div id="attachment_6518" style="max-width: 961px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/export-pref2.png"><img class="size-full wp-image-6518" src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/export-pref2.png" alt="" width="951" height="669" /></a><p class="wp-caption-text">Now I can just click &#8216;Ok&#8217; &#8211; unless I want to change things up from normal.</p></div> <p>&nbsp;</p> <h3>Hungry for More?</h3> <p><a href="https://www.thatjeffsmith.com/archive/tag/tips/">Keep reading here</a>, check out my <a href="https://www.youtube.com/user/ThatJeffSmith/videos?view_as=subscriber">YouTube videos</a>, or <a href="https://www.slideshare.net/hillbillyToad/presentations">Slideshare ppt decks</a>.</p> thatjeffsmith https://www.thatjeffsmith.com/?p=6515 Tue Feb 20 2018 13:49:43 GMT-0500 (EST) Using Kerberos Configuration Manager to resolve Microsoft SQL Server SPN issues https://blog.pythian.com/using-kerberos-configuration-manager-to-resolve-microsoft-sql-server-spn-issues/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>It’s not uncommon to have authentication issues with <a href="https://pythian.com/sql-server-consulting/">Microsoft SQL Server</a>. Not only with users trying to access the server, but problems related to the connection between instances, like AlwaysOn Availability Groups.</p> <p>The traditional way to solve it is well known, but not simple, as you need to work with the “setspn” command, and its syntax is not that intuitive.</p> <p>Here&#8217;s an example:</p> <p><strong>setspn –A MSSQLSvc/&lt;SQL Server computer name&gt;:1433 &lt;Domain\Account&gt;</strong></p> <p>This week I was working on a SQL Server AG build, and guess what? I was not able to connect from one replica to another. The error message is not very intuitive:</p> <p><strong>“The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server)”</strong></p> <p>This message could mean a lot of things, but there’s one thing that may help us: the target instance ERRORLOG. If you find the following messages, you have a SPN registration problem:</p> <p><strong>The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ MSSQLSvc/abc. domain:&lt;Instance&gt; ] for the SQL Server service. Windows return code: 0x2098, state: 20. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.</strong></p> <p>Ok, so let’s solve it… Fortunately, Microsoft has a tool called “Kerberos Configuration Manager”, that makes everything easier. The “Kerberos Configuration Manager” is a diagnostic tool, to be used with SQL Server, that helps troubleshooting Kerberos related issues. You can download the tool <a href="https://www.microsoft.com/en-us/download/details.aspx?id=39046&amp;WT.mc_id=soc-n-%5bTR%5d-loc-%5bServices%5d-%5bfarukc%5d">here</a>.</p> <p>After the installation, go the application folder and execute “KerberosConfigMgr.exe” binary. Once the application is opened, click on connect, on the right top corner:</p> <p><img class="alignnone size-full wp-image-103472" src="https://blog.pythian.com/wp-content/uploads/Picture1-1.png" alt="" width="583" height="402" srcset="https://blog.pythian.com/wp-content/uploads/Picture1-1.png 583w, https://blog.pythian.com/wp-content/uploads/Picture1-1-465x321.png 465w, https://blog.pythian.com/wp-content/uploads/Picture1-1-350x241.png 350w" sizes="(max-width: 583px) 100vw, 583px" /></p> <p>Connect to the desired SQL Server instance.<br /> Note: for the local instance, just leave all the fields empty and click on connect.</p> <p><img class="alignnone size-full wp-image-103473" src="https://blog.pythian.com/wp-content/uploads/Picture2-1.png" alt="" width="585" height="297" srcset="https://blog.pythian.com/wp-content/uploads/Picture2-1.png 585w, https://blog.pythian.com/wp-content/uploads/Picture2-1-465x236.png 465w, https://blog.pythian.com/wp-content/uploads/Picture2-1-350x178.png 350w" sizes="(max-width: 585px) 100vw, 585px" /></p> <p>If you want to connect to a remote instance, to like the following (you can leave the “User Name” and “Password” fields empty for Windows Authentication:</p> <p><img class="alignnone size-full wp-image-103474" src="https://blog.pythian.com/wp-content/uploads/Picture3-1.png" alt="" width="537" height="272" srcset="https://blog.pythian.com/wp-content/uploads/Picture3-1.png 537w, https://blog.pythian.com/wp-content/uploads/Picture3-1-465x236.png 465w, https://blog.pythian.com/wp-content/uploads/Picture3-1-350x177.png 350w" sizes="(max-width: 537px) 100vw, 537px" /></p> <p>After successfully connecting to the instance, all the related SPN will be shown. You can use the checkboxes on the top to filter the results. For the following case, I’m just showing the SQL Server related ones.</p> <p><img class="alignnone size-full wp-image-103475" src="https://blog.pythian.com/wp-content/uploads/Picture4.png" alt="" width="575" height="449" srcset="https://blog.pythian.com/wp-content/uploads/Picture4.png 575w, https://blog.pythian.com/wp-content/uploads/Picture4-465x363.png 465w, https://blog.pythian.com/wp-content/uploads/Picture4-350x273.png 350w" sizes="(max-width: 575px) 100vw, 575px" /></p> <p>By scrolling right, you can see the status of each one of the registered SPNs. For the example below, both SPNs are “Misplaced”, so we need to fix it.</p> <p><img class="alignnone size-full wp-image-103476" src="https://blog.pythian.com/wp-content/uploads/Picture5.png" alt="" width="575" height="454" srcset="https://blog.pythian.com/wp-content/uploads/Picture5.png 575w, https://blog.pythian.com/wp-content/uploads/Picture5-465x367.png 465w, https://blog.pythian.com/wp-content/uploads/Picture5-350x276.png 350w" sizes="(max-width: 575px) 100vw, 575px" /></p> <p>To have the situation corrected, just click on “Fix All” button, and confirm (click “yes”) on the pop-up:</p> <p><img class="alignnone size-full wp-image-103477" src="https://blog.pythian.com/wp-content/uploads/Picture6.png" alt="" width="608" height="431" srcset="https://blog.pythian.com/wp-content/uploads/Picture6.png 608w, https://blog.pythian.com/wp-content/uploads/Picture6-465x330.png 465w, https://blog.pythian.com/wp-content/uploads/Picture6-350x248.png 350w" sizes="(max-width: 608px) 100vw, 608px" /></p> <p><span style="font-weight: 400;">After that, the tool is going to refresh the SPN status: All good here!</span></p> <p><img class="alignnone size-full wp-image-103478" src="https://blog.pythian.com/wp-content/uploads/Picture7.png" alt="" width="620" height="187" srcset="https://blog.pythian.com/wp-content/uploads/Picture7.png 620w, https://blog.pythian.com/wp-content/uploads/Picture7-465x140.png 465w, https://blog.pythian.com/wp-content/uploads/Picture7-350x106.png 350w" sizes="(max-width: 620px) 100vw, 620px" /></p> <p>That’s it! All you need to do is install the tool, run the SPN scan and fix the problematic ones. As soon as the situation is normal, you will be able to connect to remote instances without problems and without learning how to use with the “setspn” command.</p> <hr /> <p>Learn more about Pythian Services for <a href="https://pythian.com/sql-server-consulting/">Microsoft SQL Server</a>.</p> </div></div> Murilo Miranda https://blog.pythian.com/?p=103469 Tue Feb 20 2018 10:51:08 GMT-0500 (EST) Introducing Elastic Search NoSQL to Oracle SQL developers – comparing dozens of ElasticSearch and SQL operations (a bit like Rosetta) https://technology.amis.nl/2018/02/20/introducing-elastic-search-nosql-to-oracle-sql-developers-comparing-dozens-of-elasticsearch-and-sql-operations-a-bit-like-rosetta/ <p>Even for organizations with strong roots in relational databases such as Oracle RDBMS, there may be valuable opportunities for leveraging additional data sources, for example to support special (search) use cases. Elastic Search (Index) is one of those data stores that can add value – for example to provide powerfur search capabilities to web applicaties, to handle metrics and logging output from live applications or to collect and analyze any data set in your landacape. The Elastic Stack also consists of Kibana (visualizations/dashboards), Log Stash &amp; Beats (gathering data, for example through harvesting log files).</p> <p>For developers with SQL at their fingerprints, after sometimes decades of relational querying, it can be a little challenging to get started with Elastic Search. Especially for these developers, I have compiled a Postman collection (the interface to Elastic Search is a REST API) and a Powerpoint Presentation. These two cover over two dozen of operations – index management (DDL) and data manipulation (DML) as well as searches – with the familiar Employees and Departments data set. The presentation lists these operations side by side: the left hand side of the slide shows the action in Elastic Search and the right hand side the more familiar Oracle SQL syntax. By showing equivalent statements in a well known language and the new to be grasped language, I hope to help Oracle SQL developers get kick-started with Elastic Search.</p> <p>The searches make use of stored scripts, geo_point and geospatal operators, text searches, aggregations, highlighting, sorting, limiting, etc. </p> <p>Note: the GitHub repository (<a title="https://github.com/lucasjellema/sig-elasticsearch-february-2018" href="https://github.com/lucasjellema/sig-elasticsearch-february-2018">https://github.com/lucasjellema/sig-elasticsearch-february-2018</a>) also contains hands-on labs that you could make use of to get more acquainted with both Elastic Search and Kibana.</p> <p><iframe src="//www.slideshare.net/slideshow/embed_code/key/wNRxYDpMQvxr98" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> </p> <h2>Resources</h2> <p>Sources: <a title="https://github.com/lucasjellema/sig-elasticsearch-february-2018" href="https://github.com/lucasjellema/sig-elasticsearch-february-2018">https://github.com/lucasjellema/sig-elasticsearch-february-2018</a></p> <p>Slides: <a title="https://www.slideshare.net/lucasjellema/comparing-30-elastic-search-operations-with-oracle-sql-statements" href="https://www.slideshare.net/lucasjellema/comparing-30-elastic-search-operations-with-oracle-sql-statements">https://www.slideshare.net/lucasjellema/comparing-30-elastic-search-operations-with-oracle-sql-statements</a></p> </div> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/20/introducing-elastic-search-nosql-to-oracle-sql-developers-comparing-dozens-of-elasticsearch-and-sql-operations-a-bit-like-rosetta/">Introducing Elastic Search NoSQL to Oracle SQL developers &ndash; comparing dozens of ElasticSearch and SQL operations (a bit like Rosetta)</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Lucas Jellema https://technology.amis.nl/?p=47703 Tue Feb 20 2018 08:47:45 GMT-0500 (EST) Taking Notes – 2 https://jonathanlewis.wordpress.com/2018/02/20/taking-notes-2/ <p>[Originally written August 2015, but not previously published]</p> <p>If I&#8217;m taking notes in a presentation that you&#8217;re giving there are essentially four possible reasons:</p> <ul> <li>You&#8217;ve said something interesting that I didn&#8217;t know and I&#8217;m going to check it and think about the consequences</li> <li>You&#8217;ve said something that I knew but you&#8217;ve said it in a way that made me think of some possible consequences that I need to check</li> <li>You&#8217;ve said something that I think is wrong or out of date and I need to check it</li> <li>You&#8217;ve said something that has given me a brilliant idea for solving a problem I&#8217;ve had to work around in the past and I need to work out the details</li> </ul> <p>Any which way, if I&#8217;m taking notes it means I&#8217;ve probably just added a few more hours of work to my todo list.</p> <h3>Footnote</h3> <p>&#8220;Checking&#8221; can include:</p> <ul> <li>having a chat</li> <li>reading the manuals</li> <li>finding a recent Oracle white-paper</li> <li>searching MoS</li> <li>building some models</li> </ul> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=14701 Tue Feb 20 2018 06:08:25 GMT-0500 (EST) Philosophy https://jonathanlewis.wordpress.com/2018/02/20/philosophy-19/ <p>Here&#8217;s a note I&#8217;ve just re-discovered &#8211; at the time I was probably planning to extend it into a longer article but I&#8217;ve decided to publish the condensed form straight away.</p> <p>In a question to the Oak Table a couple of years ago (May 2015) <a href="http://carymillsap.blogspot.co.uk/"><em><strong>Cary Millsap</strong></em></a> asked the following:</p> <p style="padding-left:30px;"><em>If you had an opportunity to tell a wide audience of system owners, users, managers, project leaders, system architects, DBAs, and developers <strong>&#8220;The most important things you should know about Oracle&#8221;</strong> what would you tell them?</em></p> <p>I imagine that since then Cary has probably discussed the pros and cons of some of the resulting thoughts in one of his excellent presentations on how to do the right things, but this was my quick response:</p> <p style="padding-left:30px;"><em>If I had to address them all at once it would be time to go more philosophical than technical.</em></p> <p style="padding-left:30px;"><em>The single most important point: Oracle is a very large, complex, and flexible product. It doesn&#8217;t matter where you are approaching it from you will not have enough information on your own to make best use of it. You have to talk to your peer group to get alternative ideas, and you have to talk to the people at least one step either side of you on the technology chain (dev to dba, dba to sysadmin, Architect to dev, dba to auditor etc.) to understand options and consequences. Create 4 or 5 scenarios of how your system should behave and then get other people &#8211; and not just your peer group &#8211; to identify their advantages and threats.</em></p> <p style="padding-left:30px;"> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=14385 Tue Feb 20 2018 06:03:11 GMT-0500 (EST) Assumptions https://jonathanlewis.wordpress.com/2018/02/20/assumptions/ <p>As the years roll on I&#8217;ve found it harder and harder to supply quick answers to &#8220;simple&#8221; questions on the Oracle-L list server and OTN/ODC forum because things are constantly changing and an answer that may have been right the last time I checked could now be wrong. A simple example of the consequences of change showed up recently on the OTN/ODC forum where one reply to a question started:</p> <p style="padding-left:30px;"><em>Just why do you need distinct in a subquery??? That&#8217;s the first thing that appears really shocking to me. If it&#8217;s a simple in (select &#8230;) adding a distinct to the subquery would just impose a sort unique(as you can see in the explain plan), which may be quite costly.</em></p> <p>Three question-marks is already tip-toeing its way to <a href="https://wiki.lspace.org/mediawiki/Multiple_exclamation_marks"><em><strong>the Pratchett limit</strong></em></a> &#8211; but <em>&#8220;really shocking&#8221; ?</em> It&#8217;s bad enough that the comment goes operatic, but going operatic in order to introduce an error pushes the thing into tragedy (or possibly comedy &#8211; or maybe both). To make the self-inflicted injury worse, there were two execution plans supplied in the original post anyway of which <em><strong>only one</strong></em> showed any attempt to achieve uniqueness.</p> <p>Bottom line &#8211; when you&#8217;re about to correct someone for doing something that is <em>&#8220;obviously&#8221;</em> wrong, be a little bit kind about it and then be kind to yourself and do a quick sanity check that your attempt at correction is itself correct. A good guideline would be to ask yourself: <em>&#8220;How do I know what I know &#8211; and am I about to make myself look like an idiot.&#8221;</em></p> <h3>Check It</h3> <p>Question: Does a  &#8220;distinct&#8221; in a subquery impose a sort (or hash) unique ?</p> <p>Answer: No &#8211; a uniqueness operation may appear, but it&#8217;s not guaranteed to appear.</p> <p>Here&#8217;s a quick example which does not result in any attempt at imposing uniqueness (running 11.2.0.4):</p> <pre class="brush: plain; title: ; notranslate"> drop table t2 purge; drop table t1 purge; create table t1 as select * from all_objects where rownum &lt;= 100; create table t2 as select * from all_objects where rownum &lt;= 100; create index t1_i1 on t1(owner); create index t2_i2 on t2(object_type); set autotrace traceonly explain select * from t1 where owner = 'OUTLN' and object_name in ( select distinct object_name from t2 where object_type = 'TABLE' ) ; Execution Plan ---------------------------------------------------------- Plan hash value: 3169044451 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 558 | 4 (0)| 00:00:01 | |* 1 | HASH JOIN SEMI | | 3 | 558 | 4 (0)| 00:00:01 | | 2 | TABLE ACCESS BY INDEX ROWID| T1 | 3 | 474 | 2 (0)| 00:00:01 | |* 3 | INDEX RANGE SCAN | T1_I1 | 3 | | 1 (0)| 00:00:01 | | 4 | TABLE ACCESS BY INDEX ROWID| T2 | 12 | 336 | 2 (0)| 00:00:01 | |* 5 | INDEX RANGE SCAN | T2_I2 | 12 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access(&quot;OBJECT_NAME&quot;=&quot;OBJECT_NAME&quot;) 3 - access(&quot;OWNER&quot;='OUTLN') 5 - access(&quot;OBJECT_TYPE&quot;='TABLE') Note ----- - dynamic sampling used for this statement (level=2) </pre> <p>There&#8217;s no sign of a sort unique or hash unique. The optimizer has decided that the IN subquery can be transformed into an EXISTS subquery, which can then be transformed into a semi-join.</p> <p>I can think of three other execution plan strategies that might have appeared depending on the data, indexing, and statstics:</p> <p>a) Transform the IN subquery to an EXISTS subquery then operate as a filter subquery (with no uniqueness imposed):</p> <pre class="brush: plain; title: ; notranslate"> -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 158 | 5 (0)| 00:00:01 | |* 1 | FILTER | | | | | | | 2 | TABLE ACCESS BY INDEX ROWID| T1 | 3 | 474 | 2 (0)| 00:00:01 | |* 3 | INDEX RANGE SCAN | T1_I1 | 3 | | 1 (0)| 00:00:01 | |* 4 | TABLE ACCESS BY INDEX ROWID| T2 | 1 | 28 | 2 (0)| 00:00:01 | |* 5 | INDEX RANGE SCAN | T2_I2 | 12 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- </pre> <p>b) Simple unnest with sort/hash unique and join</p> <pre class="brush: plain; title: ; notranslate"> --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 175 | 9 | |* 1 | HASH JOIN | | 1 | 175 | 9 | | 2 | TABLE ACCESS BY INDEX ROWID | T1 | 4 | 632 | 1 | |* 3 | INDEX RANGE SCAN | T1_I1 | 2 | | 1 | | 4 | VIEW | VW_NSO_1 | 4 | 68 | 7 | | 5 | SORT UNIQUE | | 4 | 112 | 7 | | 6 | TABLE ACCESS BY INDEX ROWID| T2 | 4 | 112 | 1 | |* 7 | INDEX RANGE SCAN | T2_I2 | 2 | | 1 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access(&quot;OBJECT_NAME&quot;=&quot;OBJECT_NAME&quot;) 3 - access(&quot;OWNER&quot;='OUTLN') 7 - access(&quot;OBJECT_TYPE&quot;='TABLE') </pre> <p>For this data set I actually had to take the <em><strong>optimizer_features_enable</strong></em> back to &#8216;8.1.7&#8217; to get this plan &#8211; but you can see that there&#8217;s a SORT UNIQUE at operation 5, but that would have been there whether or not the DISTINCT keyword had appeared in the SQL. Effectively the query has been transformed to:</p> <pre class="brush: plain; title: ; notranslate"> select t1.* from ( select distinct t2.object_name object_name from t2 where t2.object_type='TABLE' ) vw_nso_1, t1 where t1.owner = 'OUTLN' and t1.object_name = vw_nso_1.object_name / </pre> <p>c) Unnest, then &#8220;place group by&#8221; so that the distinct is applied after the join</p> <pre class="brush: plain; title: ; notranslate"> -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3 | 474 | 5 (20)| 00:00:01 | | 1 | VIEW | VM_NWVW_1 | 3 | 474 | 5 (20)| 00:00:01 | | 2 | HASH UNIQUE | | 3 | 594 | 5 (20)| 00:00:01 | |* 3 | HASH JOIN | | 3 | 594 | 4 (0)| 00:00:01 | | 4 | TABLE ACCESS BY INDEX ROWID| T1 | 3 | 510 | 2 (0)| 00:00:01 | |* 5 | INDEX RANGE SCAN | T1_I1 | 3 | | 1 (0)| 00:00:01 | | 6 | TABLE ACCESS BY INDEX ROWID| T2 | 12 | 336 | 2 (0)| 00:00:01 | |* 7 | INDEX RANGE SCAN | T2_I2 | 12 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access(&quot;T1&quot;.&quot;OBJECT_NAME&quot;=&quot;T2&quot;.&quot;OBJECT_NAME&quot;) 5 - access(&quot;T1&quot;.&quot;OWNER&quot;='OUTLN') 7 - access(&quot;T2&quot;.&quot;OBJECT_TYPE&quot;='TABLE') Note ----- - dynamic sampling used for this statement (level=2) </pre> <p>Again, the plan would be the same whether or not the original subquery had a redundant DISTINCT. (Again, with this data set, I had to be a bit devious to get this lan).</p> <p>The things you think you know may have been true 10 years ago &#8211; but maybe they&#8217;re not true any longer, or maybe they&#8217;re still true on your version of the database but not every  version of the database. So I often end up looking at a question, thinking the poster&#8217;s claim can&#8217;t be right, and then working out and modelling the circumstances that might make the poster&#8217;s observations appear (and learning something new).</p> <p>Remember: <em>&#8220;I&#8217;ve never seen it before&#8221;</em> doesn&#8217;t mean <em>&#8220;It doesn&#8217;t happen&#8221;</em>.</p> <p>&nbsp;</p> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17941 Tue Feb 20 2018 03:57:34 GMT-0500 (EST) The Definition of Done http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/gF2UWIvBafs/ <p><img class="alignleft wp-image-7905" src="https://oracle-base.com/blog/wp-content/uploads/2018/02/checklist-1622517_640.png" alt="" width="200" height="200" />One of things I find myself getting increasingly frustrated with is the definition of done by some people and companies.</p> <p>For context, I&#8217;m speaking about work that is allegedly entirely complete, not necessarily what I expect out of the first sprint on a project. Sorry for stating the obvious, but someone will try to explain to me what the &#8220;Definition of Done&#8221; is from an agile perspective and I&#8217;ll get cranky&#8230; <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Just off the top of my head I can think some things I think are important.</p> <ul> <li><strong>It has to work</strong> : I mean actually work! It needs to do what I need it to do, and it needs to do it without falling over every 5 minutes.</li> <li><strong>Functional Testing</strong> * : It should have some defined functional testing to prove it works. That should preferably be automated, but manual will do. Either way there should be a definition of what has been tested and the known limitations of that testing.</li> <li><strong>Load Testing</strong> * : Just because it works on your PC with one row in the database, that is no reflection on how it will react in a multi-user system with lots of data.</li> <li><strong>Tooling/Automation</strong> : There needs to be enough automation and/or tooling to allow the day-to-day operations to happen without having to refer back to the code or run SQL directly on the database to fix things.</li> <li><strong>Documentation</strong> : There must be some concise and accurate documentation so people know how to use the product, and what operational tasks, if any, need to happen in order to stop the thing falling in a heap after a few days, weeks, months.</li> <li><strong>Support</strong> : I need to know who to fall back on if I&#8217;m stuck.</li> </ul> <p>* These may not be fully transparent to you if it is a 3rd party product, but you will soon know if it is happening when you use the product. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>It&#8217;s surprising how many things I encounter on a daily basis that don&#8217;t seem to live up to this off-the-cuff list. This is not just internal developments, but work produced by expensive consultancy firms and 3rd party products.</p> <p>Please, please, please finish the darn stuff before you give it to me!</p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/20/the-definition-of-done/">The Definition of Done</a> was first posted on February 20, 2018 at 8:52 am.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/gF2UWIvBafs" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7851 Tue Feb 20 2018 02:52:07 GMT-0500 (EST) European Indexing Internals Seminar Events: Please Help Me Select (Station To Station) https://richardfoote.wordpress.com/2018/02/20/european-indexing-internals-seminar-events-please-help-me-select-station-to-station/ I&#8217;m currently determining which European countries to initially target for a series of my 2 day Oracle Indexing Internals and Best Practices seminars tentatively scheduled for the late May / early June time frame. The cost for the 2 day seminar is to be confirmed but will be approximately 1200 Euros (plus any local taxes), [&#8230;] Richard Foote http://richardfoote.wordpress.com/?p=5525 Mon Feb 19 2018 20:35:51 GMT-0500 (EST) Safe Harbor Statement – Oracle http://oracle-help.com/articles/safe-harbor-statement-oracle/ <h1><strong>Safe Harbor Statement </strong></h1> <p>The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/articles/safe-harbor-statement-oracle/">Safe Harbor Statement &#8211; Oracle</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3487 Sun Feb 18 2018 10:35:08 GMT-0500 (EST) Dynamic number of columns revisited https://laurentschneider.com/wordpress/2018/02/dynamic-number-of-columns-revisited.html <blockquote class="twitter-tweet" data-width="525" data-dnt="true"> <p lang="en" dir="ltr">Itching to start playing with 18c?</p> <p>Now you can on <a href="https://twitter.com/oraclelivesql?ref_src=twsrc%5Etfw">@oraclelivesql</a> !</p> <p>Here&#39;s a script to get you started: a dynamic CSV-to-columns converter using polymorphic table functions<a href="https://t.co/UfddLQ2tn5">https://t.co/UfddLQ2tn5</a> <a href="https://t.co/BxnXeIKoCx">pic.twitter.com/BxnXeIKoCx</a></p> <p>&mdash; Chris Saxon (@chrisrsaxon) <a href="https://twitter.com/chrisrsaxon/status/964786338150191104?ref_src=twsrc%5Etfw">February 17, 2018</a></p></blockquote> <p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><br /> The ingenious solution of Anton Scheffer using Data Cartridge is now beaten in 18c using polymorphic table function</p> <p>Anthologic post of Anton : <a href="https://forums.oracle.com/forums/message.jspa?messageID=1297717#1297717">forums.oracle.com</a><br /> Chris magic with Oracle 18c :<br /> <a href="https://livesql.oracle.com/apex/oracle_livesql/file/content_F99JG73Z169WENDTTQFDQ0J09.html">livesql.oracle.com</a></p> Laurent Schneider https://laurentschneider.com/?p=2572 Sat Feb 17 2018 12:33:03 GMT-0500 (EST) First login to Oracle 18c http://oracle-help.com/oracle-18c/first-login-oracle-18c/ <p>Database administrators have specific responsibilities and must understand how to complete database administration tasks. To get started with database administration, you must understand basic database concepts, such as the types of database users, database security, and privileges. You must also be able to complete basic tasks, such as submitting commands and SQL to the database and creating a password file</p> <p>Below is first login Oracle Database 18c.</p> <p><a href="https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg"><img data-attachment-id="3484" data-permalink="http://oracle-help.com/oracle-18c/first-login-oracle-18c/attachment/18c/" data-orig-file="https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?fit=1156%2C201" data-orig-size="1156,201" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;skagupta&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1518898628&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="18c" data-image-description="" data-medium-file="https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?fit=300%2C52" data-large-file="https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?fit=980%2C170" class="alignnone size-full wp-image-3484" src="https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?resize=980%2C170" alt="" width="980" height="170" srcset="https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?w=1156 1156w, https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?resize=300%2C52 300w, https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?resize=768%2C134 768w, https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?resize=1024%2C178 1024w, https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?resize=60%2C10 60w, https://i0.wp.com/oracle-help.com/wp-content/uploads/2018/02/18c.jpg?resize=150%2C26 150w" sizes="(max-width: 980px) 100vw, 980px" data-recalc-dims="1" /></a></p> <p>Stay Tuned for<strong> More Information on Oracle 18c<br /> </strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-18c/first-login-oracle-18c/">First login to Oracle 18c</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3483 Sat Feb 17 2018 09:52:30 GMT-0500 (EST) Oracle Database 18c Released : How to Get Started http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/4VcpP3NW3Bk/ <p>Just in case you missed it, Oracle Database 18c was released on Friday. You can read the announcement in this post.</p> <ul> <li><a href="https://blogs.oracle.com/database/oracle-database-18c-%3a-now-available-on-the-oracle-cloud-and-oracle-engineered-systems">Oracle Database 18c : Now available on the Oracle Cloud and Oracle Engineered Systems</a></li> </ul> <h2>How to Get Started</h2> <p>You might be a bit disappointed if you don&#8217;t have an Oracle Cloud account, or an engineered system. Not to worry. You can try Oracle Database 18c on <a href="https://livesql.oracle.com">Live SQL</a>.</p> <p><a href="https://livesql.oracle.com"><img class="alignnone size-full wp-image-7900" src="https://oracle-base.com/blog/wp-content/uploads/2018/02/livesql-18c.jpg" alt="" width="750" height="337" /></a></p> <p>The documentation is already available. You should probably take a look at the new features doc.</p> <ul> <li><a href="https://docs.oracle.com/en/database/oracle/oracle-database/18/index.html">Oracle Database 18c</a></li> <li><a href="https://docs.oracle.com/en/database/oracle/oracle-database/18/newft/new-features.html">Oracle Database Release 18c New Features</a></li> </ul> <p>Just a few things to manage your expectations.</p> <h2>Oracle Database 18c is Oracle 12c Release 2 (12.2.0.2)</h2> <p>In the old terms, Oracle Database 18c is a patchset for Oracle 12.2. For quite some time it&#8217;s been known Oracle have moved to a new release model for most products, including the database, with the version number now including the year and the quarter etc. How the version numbers now work is explained in <a href="https://support.oracle.com/epmos/faces/DocContentDisplay?id=2285040.1">MOS Doc ID 2285040.1</a>. The release schedule for these database versions is shown in <a href="https://support.oracle.com/epmos/faces/DocContentDisplay?id=742060.1">MOS Doc ID 742060.1</a>.</p> <p>So before you lose your mind about how few new features there arfor a &#8220;6 number jump in version&#8221;, just think for a second! All this has been reported for months. <a href="https://mikedietrichde.com/">Mike Dietrich</a> first wrote about the new versioning system in <a href="https://mikedietrichde.com/2017/08/09/news-new-oracle-database-release-schedule/">August last year</a>. Many of the announcements at OpenWorld 2017 mentioned 18c was 12.2.0.2 with a different name. None of this is a surprise if you&#8217;ve been following the news. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <h2>Oracle Database 18c is Not an Autonomous Database</h2> <p>If you follow me you will have seen these posts.</p> <ul> <li><a href="/blog/2018/01/03/oracle-database-18c-is-not-an-autonomous-database/">Oracle Database 18c is NOT an Autonomous Database!</a></li> <li><a href="/blog/2018/01/05/oracle-database-18c-is-not-an-autonomous-database-update/">Oracle Database 18c is NOT an Autonomous Database! (Update)</a></li> </ul> <p>I can&#8217;t believe I&#8217;m still seeing this confusion. What has been released in the Oracle 18c database, not the Autonomous Data Warehouse Cloud Service. The product that&#8217;s been released is a DBaaS release of 18c, so it&#8217;s pretty much what you will get to run on-prem. It&#8217;s not autonomous! Once again, none of this is a surprise if you&#8217;ve been following the news. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <h2>Oracle Database 18c : Cloud First</h2> <p>The debate about &#8220;cloud first&#8221; has been going on for some time. I wrote a couple of pieces about it in 2016.</p> <ul> <li><a href="https://oracle-base.com/blog/2016/09/20/cloud-first-what-does-it-mean-to-me/">Cloud First : What does it mean to me?</a></li> <li><a href="https://oracle-base.com/blog/2016/11/09/cloud-first-again/">Cloud First (again)</a></li> </ul> <p>I think the cloud first approach worked out well for 12.2. I don&#8217;t remember a release that has been this stable before the first patchset for ages. I think some of that is down to the fact it was released to the cloud first, and the first on-prem release contained a bunch of bug fixes found during that cloud first release.</p> <p>Another gripe I&#8217;ve heard is we aren&#8217;t getting 18c until part way through the year, so we will probably get 18.2 or 18.3. By the time we get 18c, the 19c release will practically be due. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> My thoughts on this are:</p> <ul> <li>If the first on-prem release is 18.2 or 18.3, but it is stable and usable because a load of bugs have been fixed, and hopefully few new ones have been added, that&#8217;s great. I don&#8217;t want to use a beta for production.</li> <li>It&#8217;s going to be a yearly release, so even if the on-prem version of 18c were to be released on 31st December 2018, you&#8217;ve still only got a year before the December 2019 on-prem release of 19c. Obviously I&#8217;ve made those dates up to prove a point. That point being it&#8217;s a yearly release cycle, so complaining about it coming at &#8220;X&#8221; months into the year is a bit stupid. The focus should be on the quality of the release.</li> </ul> <h2>Personal Feelings About the Release</h2> <p>It couldn&#8217;t have come at a better time for me.</p> <p>You may have noticed I&#8217;ve seemed a little quiet on the website front. In fact I&#8217;ve recently written 19 articles that are live on the site, but haven&#8217;t made it to the front page. Most of them are covering older subjects, or what I call backfill. Many of those articles are covering features that have been available since Oracle 8i, but still relevant now. Since they are not &#8220;new&#8221;, they&#8217;ve not been promoted to the front page of the website, and I&#8217;ve not pushed them out on social media. I like to stay in the habit of writing, even if I&#8217;m struggling to find things I care to write about. I&#8217;m not saying I&#8217;ve written everything there is to write about 12.2, but I&#8217;ve written about pretty much everything I care to write about at this point.</p> <p>The new release should give me an opportunity to write about something I can promote without feeling stupid. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/17/oracle-database-18c-released-how-to-get-started/">Oracle Database 18c Released : How to Get Started</a> was first posted on February 17, 2018 at 12:20 pm.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/4VcpP3NW3Bk" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7899 Sat Feb 17 2018 06:20:49 GMT-0500 (EST) Display the sql_id for a query in Oracle 18c http://oracle-help.com/oracle-18c/display-sql_id-query-oracle-18c/ <p>The <strong>SET FEEDBACK</strong> command has an <strong>SQL_ID</strong> option to display the sql_id for the currently executed SQL or PL/SQL statements. The sql_id will be assigned to the predefined variable <strong>SQL_ID</strong>.</p> <p>Displays the number of records returned by a script when a script selects at least <em>n</em> records. <strong>SQL_ID</strong> returns the sql_id for the SQL or PL/SQL statements that are executed. The sql_id will be assigned to the predefined variable <strong>SQL_ID</strong>.</p><pre class="crayon-plain-tag">SQL&gt; SET FEEDBACK ON SQL_ID SQL&gt; SELECT * FROM DUAL; D - X 1 row selected. SQL_ID: f8gs92dg6vc</pre><p><strong>Reference </strong><a href="https://docs.oracle.com/en/database/oracle/oracle-database/18/sqpug/sqlplus-users-guide-and-reference.pdf"><strong>SQL*Plus User’s Guide and Reference</strong></a></p> <p>Stay Tuned for<strong> More Information on Oracle 18c<br /> </strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-18c/display-sql_id-query-oracle-18c/">Display the sql_id for a query in Oracle 18c</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3477 Fri Feb 16 2018 14:16:58 GMT-0500 (EST) Announcing Breakout with Blockchain – Emerging Technology at ODTUG Kscope18 https://kscope18.odtug.com/p/bl/et/blogaid=768&source=1 ODTUG is excited to announce new content coming to ODTUG Kscope18! This year, we will be introducing our members to Blockchain and the new Oracle Blockchain Cloud Service. If you're curious about leveraging distributed ledger technology in an enterprise environment, ODTUG Kscope has you covered! ODTUG https://kscope18.odtug.com/p/bl/et/blogaid=768&source=1 Fri Feb 16 2018 14:10:40 GMT-0500 (EST) Announcing Breakout with Blockchain – Emerging Technology at ODTUG Kscope18 https://www.odtug.com/p/bl/et/blogaid=768&source=1 ODTUG is excited to announce new content coming to ODTUG Kscope18! This year, we will be introducing our members to Blockchain and the new Oracle Blockchain Cloud Service. If you're curious about leveraging distributed ledger technology in an enterprise environment, ODTUG Kscope has you covered! ODTUG https://www.odtug.com/p/bl/et/blogaid=768&source=1 Fri Feb 16 2018 14:10:40 GMT-0500 (EST) SET LINESIZE window in Oracle 18c http://oracle-help.com/oracle-18c/set-linesize-window-oracle-18c/ <p>Sets the total number of characters that <strong>SQL*Plus</strong> displays on one line before beginning a new line.</p> <p><strong>WINDOW</strong> adjusts the linesize and pagesize for the formatted output according to the width and height of the screen. If the output is longer than the screen width, then the output is wrapped accordingly</p><pre class="crayon-plain-tag">Example To set the linesize for the output to 30, enter SQL&gt; SET LINESIZE 30 SQL&gt; SHOW LINESIZE linesize 30</pre><p>To dynamically change the output display after manually resizing the screen, enter</p><pre class="crayon-plain-tag">SQL&gt; SET LINESIZE Window SQL&gt; SHOW LINESIZE linesize 210 WINDOW</pre><p><strong>Note:</strong><br /> The <strong>SET LINESIZE WINDOW</strong> command is ignored in a script and the output will not be displayed according to the screen size.</p> <p><strong>Reference </strong><a href="https://docs.oracle.com/en/database/oracle/oracle-database/18/sqpug/sqlplus-users-guide-and-reference.pdf"><strong>SQL*Plus User&#8217;s Guide and Reference</strong></a></p> <p>Stay Tuned for<strong> More Information on Oracle 18c<br /> </strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-18c/set-linesize-window-oracle-18c/">SET LINESIZE window in Oracle 18c</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3474 Fri Feb 16 2018 14:10:07 GMT-0500 (EST) SQL Server Operations Studio http://dbakevlar.com/2018/02/sql-server-ops-studio/ <p>Since I reformatted my Surface Pro 4 so I could have my Docker running again, I also needed to recover my local SQL Server instance I like to have available on my PC.</p> <p>This was a perfect time to get everything up and running, but instead of my standard way of doing this, use <a href="https://docs.microsoft.com/en-us/sql/sql-operations-studio/download">SQL Server Operations Studio</a>, (SSOS).</p> <p><a href="http://dbakevlar.com/2018/02/sql-server-ops-studio/excellent/" rel="attachment wp-att-7806"><img class="alignnone wp-image-7806" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/excellent.gif?resize=331%2C172" alt="" width="331" height="172" data-recalc-dims="1" /></a></p> <h3>The Lesson</h3> <p>Most SQL Server DBAs have a GUI took to assist in managing their database environment and unlike Oracle DBAs, (at least before multi-tenant and the cloud) it was common for SQL Server DBAs, (on average) to have considerably more databases to manage on average than Oracle DBAs have.  Some of this is due to the architectural differences, such as a single SQL Server having many user databases vs. Oracle having one database instance with many schemas inside a database.  If you visualize this difference, you realize that the maintenance and backups of each user database would be higher than the single database instance for the Oracle DBA.  These types of differences required the SQL Server DBA to rely on automation and tools to ease their day-to-day demands.</p> <p>From Microsoft, the <a href="https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms">SQL Server Management Studio</a>, (aka SSMS and who&#8217;s ancestor was called Enterprise Manager) is provided with the installation or as an add on in recent versions.  Numerous vendors have provided incredible products to monitor, manage and support 100&#8217;s to 1000&#8217;s of databases, including <a href="https://www.idera.com/productssolutions/sqlserver/sqldiagnosticmanager/best-sql-monitoring-tools?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=sqldm&amp;utm_content=search+comp&amp;utm_term=idera%20monitoring%20tool&amp;gclid=cjwkcaian5rubra3eiwaucwb29z_t-bndt3cauzy1cfzehslkf0ltj372pv0eaoxprbf5sjbq0xfcrocsseqavd_bwe">Idera,</a> who I proudly serve as a 2018 ACE.</p> <p>There are still presentations offered at SQL Saturdays offering tips and tricks with SSMS, even though it&#8217;s a 32-bit product, which tells you how important a management tool is to a DBAs sanity, (remember, I made my name on the Oracle side with their Enterprise Manager, so Oracle DBAs may be hesitant to admit it, but they depend on one almost as often!)  With the fact that it is a 32-bit tool and the importance of the tool, Microsoft launched SQL Server Ops Studio.  It reminds me of the love child between SSMS and the original Oracle SQL Developer, which isn&#8217;t a bad thing.  Consider what Oracle SQL Developer is today, so that&#8217;s where I&#8217;m going here.</p> <h3>Not Your Father&#8217;s SSMS</h3> <p>The first thing you notice is that you are now working with a modern application that is 64-bit and built for extensibility.  No, it doesn&#8217;t have the legacy features that many DBAs will require to get them to transition over immediately, but you can build metrics and widgets to do much of it right now.  It also supports today&#8217;s hybrid-  both Azure and On-premises environments, which is something SSMS just isn&#8217;t prepared for.</p> <p>I&#8217;ve already reached out to the SSOS group on Twitter to find out how I can offer my feedback to help.  I was part of the Customer Advisory Board for Enterprise Manager before I joined Oracle on the EM team, so I&#8217;m aware that this experience could be exceptionally helpful.  It is crucial to have customer feedback to build a product to fulfill what an cloud management and infrastructure tool features.</p> <p>So, if you haven&#8217;t downloaded it and tested it out, consider it.  I&#8217;ll be blogging a few posts here and there to offer some insight on my own experiences with the product going forward.</p> <br><br><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/ico-tag.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/idera/" rel="tag">IDera</a>, <a href="http://dbakevlar.com/tag/sql-server-operations-studio/" rel="tag">SQL Server Operations Studio</a>, <a href="http://dbakevlar.com/tag/ssms/" rel="tag">SSMS</a>, <a href="http://dbakevlar.com/tag/ssos/" rel="tag">SSOS</a><br><br><div style="width:100%"><table align="left" width="100%" cellspacing="0" cellpadding="0" bgcolor="#f1f1f1" border="0px;"> <tbody> <tr bgcolor="#ffffff"><td align="center" width="17%" valign="top"> <span class="sb_title">Del.icio.us</span><br> <a href="http://del.icio.us/post?url=http://dbakevlar.com/2018/02/sql-server-ops-studio/&title=SQL Server Operations Studio"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2018/02/sql-server-ops-studio/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">TweetThis</span><br> <a href="http://twitthis.com/twit?url=http://dbakevlar.com/2018/02/sql-server-ops-studio/&title=SQL Server Operations Studio"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Digg</span><br> <a href="http://digg.com/submit?phase=2&url=http://dbakevlar.com/2018/02/sql-server-ops-studio/&title=SQL Server Operations Studio"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">StumbleUpon</span><br> <a href="http://www.stumbleupon.com/submit?url=http://dbakevlar.com/2018/02/sql-server-ops-studio/&title=SQL Server Operations Studio"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td></tr> </tbody></table></div><br><div style="clear:both"></div><div style="background:#EEEEEE; padding:0px 0px 0px 15px; margin:10px 0px 0px 0px;"><div style="padding:5px 0px 5px 0px;"><b>Comments:</b>&nbsp;&nbsp;<a href="http://dbakevlar.com/2018/02/sql-server-ops-studio/#comments">1 (One) on this item</a></div><br><div style="clear:both"></div><div style="padding:13px 0px 5px 0px;"><span style="border-bottom:1px dashed #003399;padding-bottom:4px;"><strong>You might be interested in this:</strong></span>&nbsp;&nbsp;<br><ul style="margin:0; padding:0; padding-top:10px; padding-bottom:5px;"><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/01/apples-vs-oranges-vs-jelly-bean/" >Apples vs. Oranges vs. Jelly Bean</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2011/08/tempfile-read-writes-and-asm/" >Tempfile Read /Writes and ASM</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/07/tuning-em12c-the-oms-part-ii/" >Tuning EM12c, the OMS, Part II</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2009/12/the-makings-of-a-great-dba-team/" >The Makings of a Great DBA Team</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/05/virtualizing-big-data-cloud/" >Virtualizing Big Data in the Cloud</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2018/02/sql-server-ops-studio/">SQL Server Operations Studio</a>], All Right Reserved. 2018.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2018/02/sql-server-ops-studio/">SQL Server Operations Studio</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=7805 Fri Feb 16 2018 14:07:34 GMT-0500 (EST) Oracle Database 18c and it’s features http://oracle-help.com/articles/oracle-database-18c-and-its-features/ <p>Finally, <strong>Oracle</strong> officially released <strong>Oracle Database 18c</strong> with <strong>Oracle Documentation</strong> available on <strong>Oracle Public Cloud(OPC)</strong>.  To get more detailed on <strong>Oracle 18c</strong> release read Oracle Support <a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id2285040.1">Document 2285040.1.</a></p> <p><strong>List of some new features in Oracle 18c:</strong></p> <p><strong>Data Guard</strong></p> <ul> <li>Oracle Data Guard Multi-Instance Redo Apply Supports Use of Block Change Tracking Files for RMAN Backups</li> <li>Automatic Correction of Non-logged Blocks at a Data Guard Standby Database</li> </ul> <p><strong>Application Continuity</strong></p> <ul> <li>Server Draining ahead of relocating or stopping services or PDB</li> <li>Oracle Database sees Request Boundaries</li> <li>Transparent Application Continuity (TAC)</li> </ul> <p><strong>General RMAN</strong></p> <ul> <li>Shadow Lost Write Protection</li> <li>Duplicate PDBs between encrypted and non-encrypted CDBs</li> <li>RMAN recover standby simplification</li> <li>PDB backups usable after plugging into a new CDB</li> <li>Backups from non-CDBs are usable after migration to CDB</li> <li>RMAN duplicate PDB into existing CDB</li> <li>Backup to archive storage</li> </ul> <p><strong>Install, config, and patch</strong></p> <ul> <li>Engineered Systems support</li> <li>Zero-Downtime Database Upgrade</li> <li>Gold Image Distribution among RHP Servers</li> <li>Local Switch Home for Applying Updates</li> <li>Authentication Plug-in</li> <li>Configuration Drift Reporting and Resolution</li> <li>Command Scheduler and Bulk Operations</li> <li>Dry Run Command Validation</li> <li>New Default Location of Oracle Database Password File</li> <li>Read-Only Oracle Home</li> <li>RPM-based Database Installation</li> </ul> <p><strong>Container Database Architecture</strong></p> <ul> <li>Copying a PDB in an Oracle Data Guard Environment</li> <li>DBCA PDB Clone</li> <li>PDB Lockdown Profile Enhancements</li> <li>Refreshable PDB Switchover</li> <li>CDB Fleet Management</li> <li>PDB Snapshot Carousel</li> </ul> <p><strong>RAC General</strong></p> <ul> <li>Shared Single Client Access Names</li> <li>NodeVIP-Less Cluster</li> <li>Cluster Domain Proxies</li> <li>gridSetup-based Management</li> <li>Reader Nodes Performance Isolation</li> <li>UCP Support for RAC Affinity Sharding</li> </ul> <p>To Get the <strong>Oracle Database 18c</strong> Documentation:</p> <p>https://docs.oracle.com/en/database/oracle/oracle-database/18/books.html</p> <p>Stay Tuned for<strong> More Information on Oracle 18c<br /> </strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/articles/oracle-database-18c-and-its-features/">Oracle Database 18c and it&#8217;s features</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3467 Fri Feb 16 2018 13:03:16 GMT-0500 (EST) Network link in expdp http://oracle-help.com/oracle-11g/network-link-expdp/ <p>The export operation is performed with data that is consistent up to the specified SCN. If the <code>NETWORK_LINK</code> parameter is specified, then the SCN refers to the SCN of the source dase.</p> <p>Follow following steps to the export database using network-link.</p> <p>Source database: demo</p> <p>Target database: uat</p> <p>Database platform : 11.2.0.4.0</p> <p>Step 1 : Create a tnsnames.ora entry with source database.</p><pre class="crayon-plain-tag">demo = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.101.153)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = demo) ) )</pre><p>Step 2 : Connect to target database</p><pre class="crayon-plain-tag">[oracle@localhost admin]$ export ORACLE_SID=uat [oracle@localhost admin]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Feb 15 15:52:21 2018 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL&gt; select name,open_mode from v$database; NAME OPEN_MODE --------- -------------------- UAT READ WRITE SQL&gt;</pre><p>Step 3: Create a directory in target database server where you want to put your dump file and give read-write permission to the oracle user with which you want to take expdp backup.</p><pre class="crayon-plain-tag">SQL&gt; create directory testdir as '/appndb/demo'; Directory created. SQL&gt; grant read,write on directory testdir to scott; Grant succeeded. SQL&gt;</pre><p>Step 4 : Create a database link with tnsnames.ora entry we mentioned earlier.</p><pre class="crayon-plain-tag">SQL&gt; conn scott/tiger Connected. SQL&gt; create database link test connect to "bank" identified by "123" using 'demo'; Database link created.</pre><p>Step 5 : Take backup using expdp with netwok_link parameter</p><pre class="crayon-plain-tag">[oracle@localhost admin]$ expdp scott/tiger directory=testdir dumpfile=testt.dmp logfile=testt.log network_link=test</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-11g/network-link-expdp/">Network link in expdp</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Jagruti Jasleniya http://oracle-help.com/?p=3426 Fri Feb 16 2018 11:07:13 GMT-0500 (EST) MySQL 5.7 Multi-threads replication operation tips https://blog.pythian.com/mysql-5-7-multi-threads-replication-operation-tips/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>With support of multi-threads replication starting from MySQL 5.7, the operations on slave are slightly different from single-thread replication. Here is a list of some operation tips for the convenience of use as below:</p> <h3><strong>1. Skip a statement for a specific channel.</strong></h3> <p>Sometimes, we might find out that one of the channels stop replication due to some error, and we may want to skip the statement for that channel so that we can restart a slave for it. We need to be very careful not to skip the statement from the other channel, since the command SET GLOBAL sql_slave_skip_counter = N is for global. How can we make sure the global sql_slave_skip_counter is applied to a specific channel and not to the other channel? Here are the steps:</p> <p>1.1: Stop all slaves by: stop slave;</p> <pre style="white-space: -moz-pre-wrap; word-wrap: break-word; resize: vertical; overflow: auto; height: 40px; color: #ffffff; background-color: #000000; border: solid 1px gray;">stop slave;</pre> <p>1.2: Set up the count of statement to skip by: SET GLOBAL sql_slave_skip_counter = N;</p> <pre style="white-space: -moz-pre-wrap; word-wrap: break-word; resize: vertical; overflow: auto; height: 40px; color: #ffffff; background-color: #000000; border: solid 1px gray;">SET GLOBAL sql_slave_skip_counter = 1;</pre> <p>1.3: Start slave on the channel we want to skip the statement on. The command will use the setting for global sql_slave_skip_counter = 1 to skip one statement and start slave on that channel (for example &#8216;main&#8217;) by: starting slave for channel &#8216;channel-name&#8217;;</p> <pre style="white-space: -moz-pre-wrap; word-wrap: break-word; resize: vertical; overflow: auto; height: 40px; color: #ffffff; background-color: #000000; border: solid 1px gray;">start slave for channel 'main';</pre> <p>1.4: Start slave on all the other channels by: start slave;</p> <pre style="white-space: -moz-pre-wrap; word-wrap: break-word; resize: vertical; overflow: auto; height: 40px; color: #ffffff; background-color: #000000; border: solid 1px gray;">start slave;</pre> <h3><strong>2. Check the status of replication with detailed messages in the table performance_schema.replication_applier_status_by_worker through select * from the table</strong>:</h3> <pre style="white-space: -moz-pre-wrap; word-wrap: break-word; resize: both; overflow: auto; height: 300px; color: #ffffff; background-color: #000000; border: solid 1px gray;">mysql&gt; select * from performance_schema.replication_applier_status_by_worker; | CHANNEL_NAME | WORKER_ID | THREAD_ID | SERVICE_STATE | LAST_SEEN_TRANSACTION | LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE | LAST_ERROR_TIMESTAMP | | metrics | 1 | 1784802 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | | accounting | 1 | 1851760 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | | main | 1 | NULL | OFF | ANONYMOUS | 1051 | Worker 0 failed executing transaction 'ANONYMOUS' at master log mysql-bin.019567, end_log_pos 163723076; Error 'Unknown table 'example.accounts'' on query. Default database: 'pythian'. Query: 'DROP TABLE `example`.`accounts` /* generated by server */' | 2018-02-14 23:57:52 | | log | 1 | 1784811 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | mysql&gt; select * from performance_schema.replication_applier_status_by_worker; | CHANNEL_NAME | WORKER_ID | THREAD_ID | SERVICE_STATE | LAST_SEEN_TRANSACTION | LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE | LAST_ERROR_TIMESTAMP | | metrics | 1 | 1965646 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | | accounting | 1 | 1965649 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | | main | 1 | 1965633 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | | log | 1 | 1965652 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | </pre> <h3><strong>3. Check the status for a specific channel by: show slave status for channel &#8216;channel-name&#8217;\G </strong>:</h3> <pre style="white-space: -moz-pre-wrap; word-wrap: break-word; overflow: auto; height: 600px; color: #ffffff; background-color: #000000; border: solid 1px gray;">mysql&gt; show slave status for channel 'main'\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: db-test-01.int.example.com Master_User: replicator Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.019567 Read_Master_Log_Pos: 869255591 Relay_Log_File: db-test-02-relay-bin-example.000572 Relay_Log_Pos: 45525401 Relay_Master_Log_File: mysql-bin.019567 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: test.sessions,test.metrics Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 869255591 Relay_Log_Space: 869256195 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 4118338212 Master_UUID: b8cee5b1-3161-11e7-8109-3ca82a217b08 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: insight Master_TLS_Version: </pre> <p>I hope this short list of tips helps you enjoy multi-threads replication.</p> </div></div> Edwin Wang https://blog.pythian.com/?p=103449 Fri Feb 16 2018 10:44:49 GMT-0500 (EST) Log Buffer #539: A Carnival of the Vanities for DBAs https://blog.pythian.com/log-buffer-539-carnival-vanities-dbas/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>This Log Buffer covers Cloud, Oracle, and PostgreSQL.</p> <p><span id="more-103454"></span></p> <h3><strong>Cloud:</strong></h3> <ul> <li><a href="https://blog.cloudthat.com/3-types-of-cluster-networking-in-kubernetes/">3 Types of Cluster Networking in Kubernetes</a></li> <li><a href="https://aws.amazon.com/blogs/security/how-to-patch-linux-workloads-on-aws/">How to Patch Linux Workloads on AWS</a></li> <li><a href="https://aws.amazon.com/blogs/compute/applying-the-twelve-factor-app-methodology-to-serverless-applications/">Applying the Twelve-Factor App Methodology to Serverless Applications</a></li> <li><a href="https://azure.microsoft.com/en-us/blog/azure-cosmosdb-graph-api-now-generally-available/">Azure CosmosDB Graph API now generally available</a></li> <li><a href="https://cloudplatform.googleblog.com/2018/02/96-vCPU-Compute-Engine-instances-are-now-generally-available.html">96 vCPU Compute Engine instances are now generally available</a></li> </ul> <h3><strong>Oracle:</strong></h3> <ul> <li><a href="https://connor-mcdonald.com/2018/02/16/asktom-office-hours-for-dbas/">AskTOM Office Hours for DBA’s</a></li> <li><a href="https://technology.amis.nl/2018/02/16/publish-events-from-any-web-application-in-iframe-to-adf-application/">Publish Events from any Web Application in IFRAME to ADF Applications</a></li> <li><a href="http://db-oriented.com/2018/02/15/adding-a-unique-constraint-in-an-online-way/">Adding a Unique Constraint in an Online Way</a></li> <li><a href="https://technology.amis.nl/2018/02/15/the-tale-of-the-ardent-springcleaning-maniac-asm/">The Tale of the Ardent SpringCleaning Maniac</a> (ASM)</li> </ul> <p>This item is, by a roundabout route, a follow-up to yesterday’s note on a critical difference in cardinality estimates that appeared if you used the <a href="https://jonathanlewis.wordpress.com/2018/02/14/join-factorization/">coalesce()</a> function in its simplest form as a substitute for the nvl() function.</p> <h3><strong>PostgreSQL:</strong></h3> <p>Thanks to Jeremy Schneider.</p> <p>Another busy two weeks in the database world. There&#8217;s certainly never a dull moment for me. Our work related to new versions &amp; features and our work directly with specific customers could easily take all of my time just by themselves! And it&#8217;s also that time of year for us to have<br /> conversations about team goals for the upcoming year, individual strengths and potential growth areas. Reminds me that I&#8217;m thankful to<br /> work with such a great group of people!</p> <p>So what has been noticeable recently in the world of blogging about PostgreSQL? We will start with the high level and work down. And don&#8217;t<br /> miss my final and favorite article.</p> <p>First, a few articles about PostgreSQL and databases in general. On Jan 19, Karl Brodowsky wrote an interesting perspective on the current<br /> database landscape. Compared with NoSQL, Propriatary and other OSS technologies, Karl explains <a href="https://brodowsky.it-sky.net/2018/01/19/postgresql/">why he recommends PostgreSQL so often</a>.</p> <p>On Feb 13, René Dudfield wrote a fascinating perspective on many aspects of the current development landscape and shows <a href="https://renesd.blogspot.com.au/2017/02/is-postgresql-good-enough.html">how PostgreSQL can be good enough</a> for all sorts of different use cases where developers typically reach into another toolbox.</p> <p>Finally, one of my favorite articles I saw over the last two weeks &#8211; Craig Kerstiens&#8217; short compilation of &#8220;<a href="http://www.craigkerstiens.com/2018/01/31/postgres-hidden-gems/">Postgres Hidden Gems</a>&#8221; that he<br /> published on Jan 31!</p> <p>And while this isn&#8217;t an article, I noticed a few weeks ago that Toad World now has a PostgreSQL Community. I can&#8217;t easily tell from their<br /> website, but I wonder if their Development <a href="https://www.toadworld.com/platforms/postgres">Software</a> and Benchmark Factory support PostgreSQL as well yet?</p> <p>Next up, I saw a nice collection of feature-specific articles over the past few weeks. First off is arguably one of the defining and most<br /> distinctive features of relational databases: constraints. The ability to define invariant rules about your data. In our modern &#8220;big data&#8221; days<br /> of Twitter sentiment analysis and customer recommendation engines, many of us work on systems where fuzzy answers and margins of error are normal. But let&#8217;s not forget that correctness still matters for many business problems, and it&#8217;s more than just the cliche bank account application. On Jan 8, David Signer wrote a great article about tree inspectors in Switzerland. But actually, the article was about<br /> <a href="http://www.opengis.ch/2018/01/08/postgresql-back-end-solution-for-quality-assurance-and-data-archive/">PostgreSQL and data quality/integrity.</a> And our age-old constraints really shine!</p> <p>A few people this week were retweeting CEO and Java Champion Vlad Mihalcea&#8217;s old post on <a href="https://vladmihalcea.com/how-do-postgresql-advisory-locks-work/">PostgreSQL Advisory Locks</a>. This is a useful<br /> feature that allows applications to directly use PostgreSQL&#8217;s locking infrastructure even when there&#8217;s no data directly involved.</p> <p>On Feb 12, Jonathan Katz (from Crunchy) published a nice piece on <a href="http://info.crunchydata.com/blog/a-postgresql-row-level-security-primer-creating-large-policies">PostgreSQL Row-Level Security and large policies</a>. Perhaps it&#8217;s not<br /> widely known that this has been available in PostgreSQL since version 9.5 and you don&#8217;t need an extra license to use it!</p> <p>Are you familiar with <a href="https://www.cybertec-postgresql.com/en/detecting-performance-problems-easily-in-postgresql/">pg_stat_statements</a>? If not, then you should be; it&#8217;s probably one of the most important performance tools available on<br /> PostgreSQL. Hans-Jürgen Schönig from CyberTec wrote a nice introduction on Feb 12 which is worth glancing at.</p> <p>Finally, on Jan 23 Class Method Co. in Japan published an article on the little-known <a href="https://dev.classmethod.jp/server-side/db/play-with-sql-filter-clause-from-postgresql-presto-athena/">SQL &#8220;filter&#8221; clause</a>. The article is written in Japanese but can be read in English with Google Translate.</p> <p>Am I including too many articles this week? Are you wondering if you&#8217;ll ever have time to read all of this? But I still have more! In fact, my<br /> favorite part: three good internals articles!</p> <p>First up is Nawaz Ahmed on Jan 30 with an articles about <a href="http://www.postgresql.fastware.com/blog/back-to-basics-with-postgresql-memory-components">PostgreSQL memory components</a>. I actually haven&#8217;t seen many articles about memory in PostgreSQL—it would be great to see more of these.</p> <p>Franck Pachot took a quick look at <a href="https://blog.dbi-services.com/server-process-name-in-postgres-and-oracle/">PostgreSQL process names</a> and compared then with Oracle process names on Feb 10.</p> <p>It&#8217;s always worthwhile to include an article about vacuum—and this week we have a real gem. Lei Zeng from Amazon recently migrated a set of OLTP (online transaction processing) databases from Oracle to Amazon RDS for PostgreSQL version 9.6.3 and on Feb 12 he published a <a href="https://aws.amazon.com/blogs/database/a-case-study-of-tuning-autovacuum-in-amazon-rds-for-postgresql/">case study of tuning autovacuum</a>. This is a quality article worth reading!</p> <p>Before I wrap up, I want to mention two good follow-up articles to the Spectre and Meltdown sagas. I&#8217;ve gotten so many kernel update emailsvfrom my Linux distro mailing lists that I completely lost track. There&#8217;s a lot happening to patch Linux kernels. And lots of good discussion about performance.</p> <p>If you&#8217;re tracking with this conversation, then you might be interested in Michael Larabel&#8217;s article on Feb 10 where he was able to <a href="https://www.phoronix.com/scan.php?page=article&amp;item=ec2-december-february&amp;num=1">compare Amazon EC2 compute performance</a> between December and February.</p> <p>Secondly, the inimitable <a href="http://www.brendangregg.com/blog/2018-02-09/kpti-kaiser-meltdown-performance.html">Brendan Gregg</a> came out with his own blog post on Feb 9 about the same subject.</p> <p>Well I have one final article to highlight. PostgreSQL is an open source and community driven database. Its survival depends on volunteer effort and cooperation, as well as support from the many businesses who benefit from its continued development. Have you ever wondered what it&#8217;s like to be the person that keeps the community functioning? I really like Magnus Hagander and his article from Feb 7 is one of my favorite that he&#8217;s ever written: <a href="https://blog.hagander.net/what-does-it-mean-to-be-on-the-board-of-postgresql-europe-240/">What does it mean to be on the board of PostgreSQL Europe?</a> Now you can find out what all these people do, and maybe you can join them to help support the movement!</p> <p>And on that note, have a great week and keep learning!</p> </div></div> Fahd Mirza https://blog.pythian.com/?p=103454 Fri Feb 16 2018 10:39:16 GMT-0500 (EST) Increasing functional testing velocity with pt-query-digest https://blog.pythian.com/increasing-functional-testing-velocity-pt-query-digest/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Whenever we do upgrades for our clients from one major version of MySQL to another we strongly recommend to test in two forms.</p> <p>First, it would be a performance test between the old version and the new version to make sure there aren’t going to be any unexpected issues with the query processing rates. Secondly, do a functional test to ensure all queries that are running on the old version will not have syntactic errors or problems with <a href="https://dev.mysql.com/doc/refman/5.7/en/keywords.html">reserved words</a> in the new version that we’re upgrading to.</p> <p>If a client doesn’t have an appropriate testing platform to perform these types of tests, we will leverage available tools to test to the best of our ability. More often than not this includes using <a href="https://www.percona.com/doc/percona-toolkit/LATEST/pt-upgrade.html">pt-upgrade</a> after capturing slow logs with <a href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_long_query_time">long_query_time</a> set to 0 in order to catch everything that’s running on the server for a period of time.</p> <p>One of the issues you can run into with this sort of test is it has to run the queries one at a time. If you have a query that takes much longer to run in the new version this can slow things down considerably. This also gets a little frustrating if you have that long running query listed thousands of times in your slow query log.</p> <p>If your objective is to run a functional test and just ensure that you’re not going to run into a syntax error in the new version, it makes no sense to run a query more than once. If it ran okay the first time, it should run okay every time assuming that the litterals in the query are also properly enclosed. So instead of replaying the entire log against the target server, we can first use <a href="https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html">pt-query-digest</a> to create a slow log that contains one of each type of query.</p> <p>Let’s take a look at the example below where I created a slow log with 5 identical write queries and 5 identical read queries.</p> <pre lang="bash">[root@cent5 slowlog]# cat ./testslow.log ...... use ptupgrade; ...... # Time: 180207 12:55:05 # User@Host: root[root] @ localhost [] # Query_time: 0.000134 Lock_time: 0.000051 Rows_sent: 0 Rows_examined: 0 SET timestamp=1518026105; insert into t1 (c1) values (1); # Time: 180207 12:55:06 # User@Host: root[root] @ localhost [] # Query_time: 0.000126 Lock_time: 0.000049 Rows_sent: 0 Rows_examined: 0 SET timestamp=1518026106; insert into t1 (c1) values (2); # Time: 180207 12:55:08 # User@Host: root[root] @ localhost [] # Query_time: 0.000125 Lock_time: 0.000051 Rows_sent: 0 Rows_examined: 0 SET timestamp=1518026108; insert into t1 (c1) values (3); # Time: 180207 12:55:10 # User@Host: root[root] @ localhost [] # Query_time: 0.000130 Lock_time: 0.000052 Rows_sent: 0 Rows_examined: 0 SET timestamp=1518026110; insert into t1 (c1) values (4); # Time: 180207 12:55:12 # User@Host: root[root] @ localhost [] # Query_time: 0.000126 Lock_time: 0.000050 Rows_sent: 0 Rows_examined: 0 SET timestamp=1518026112; insert into t1 (c1) values (5); # Time: 180207 12:55:17 # User@Host: root[root] @ localhost [] # Query_time: 0.000134 Lock_time: 0.000055 Rows_sent: 2 Rows_examined: 10 SET timestamp=1518026117; select c1 from t1 where c1 = 1; # Time: 180207 12:55:19 # User@Host: root[root] @ localhost [] # Query_time: 0.000121 Lock_time: 0.000053 Rows_sent: 2 Rows_examined: 10 SET timestamp=1518026119; select c1 from t1 where c1 = 2; # Time: 180207 12:55:20 # User@Host: root[root] @ localhost [] # Query_time: 0.000118 Lock_time: 0.000052 Rows_sent: 2 Rows_examined: 10 SET timestamp=1518026120; select c1 from t1 where c1 = 3; # Time: 180207 12:55:22 # User@Host: root[root] @ localhost [] # Query_time: 0.000164 Lock_time: 0.000074 Rows_sent: 2 Rows_examined: 10 SET timestamp=1518026122; select c1 from t1 where c1 = 4; # Time: 180207 12:55:24 # User@Host: root[root] @ localhost [] # Query_time: 0.000121 Lock_time: 0.000052 Rows_sent: 2 Rows_examined: 10 SET timestamp=1518026124; select c1 from t1 where c1 = 5;</pre> <p>I then used pt-query-digest to create a new version of this slow query log with only 1 of each type of query.</p> <pre lang="bash">[root@cent5 slowlog]# pt-query-digest --limit=100% --sample 1 --no-report --output slowlog ./testslow.log # Time: 180207 12:55:05 # User@Host: root[root] @ localhost [] # Query_time: 0.000134 Lock_time: 0.000051 Rows_sent: 0 Rows_examined: 0 use ptupgrade; insert into t1 (c1) values (1); # Time: 180207 12:55:17 # User@Host: root[root] @ localhost [] # Query_time: 0.000134 Lock_time: 0.000055 Rows_sent: 2 Rows_examined: 10 use ptupgrade; select c1 from t1 where c1 = 1;</pre> <p>You’ll notice that not only did we get 1 query of each type, it also added a use statement before each query so MySQL knows what schema to run the query against when being replayed.</p> <p>You can now take this new slow log and run it via pt-upgrade against your target servers.</p> <h3><b>Conclusion</b></h3> <p>If you have a large slow query log file that you are trying to test against your server using a log replay tool like pt-upgrade, you can make your life a lot simpler by getting one sample of each query using pt-query-digest. In the field we’ve seen this reduce log file sizes from hundreds of gigs to less than a meg and have reduced log replay times from weeks to minutes.</p> <p>Please note that this is mainly something you’ll want to consider for functional testing as you may want to have a lot of variety with your litterals when doing a performance test.</p> </div></div> Peter Sylvester https://blog.pythian.com/?p=103429 Fri Feb 16 2018 10:14:19 GMT-0500 (EST) Docker and Windows 10 1709 Patch, The End http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/ <p>So if you read my <a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/">last post</a> on my challenges with Docker containers running on Windows 10 after the 1709 patch, I thought I was close to solving it once I was granted the admin password to disable and uninstall Sophos Endpoint.</p> <p><a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/nice_try/" rel="attachment wp-att-7802"><img class="alignnone wp-image-7802" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/nice_try.gif?resize=372%2C209" alt="" width="372" height="209" data-recalc-dims="1" /></a></p> <p>Once I uninstalled Sophos, I noted I ended up with a different line number error.  The question was, has the problem shifted from Sophos to a new issue or is it more complex than just the one application?  We&#8217;d already seen that it was complicated, including the Hyper-V with the 1709 patch that was part of the problem.</p> <p>As I researched the network issue farther, noticed that, although I&#8217;d uninstalled Docker and Sophos, there were considerable files leftover and registry entries that had roots throughout the system.  I also became aware of how many changes were cross referencing and sharing the same DLLs.</p> <p>I&#8217;m an expert of scouring Oracle from a Windows server, but there&#8217;s nothing like a reminder of the ease of management with Linux and power of an &#8220;rm -rf&#8221; command vs. the challenges of shared files and registry entries.</p> <p>In the end, it became apparent that I could be shooting myself in the foot trying to find the trip wire that caused the complex problem that I was experiencing, (along with lacking logging from Docker) as well as the time it was taking to get me back up and running my containers.</p> <p>At 4pm last night, I decided to backup my files to my external SSD and then reformat my Microsoft Surface Pro 4.  All my licensing is stored for my PC in my account when I simply run a erase and reload the same machine.  I chose to erase all of my data and apps.</p> <p>Once I reloaded, I chose the following:</p> <ol> <li> Locked the Windows updates before the 1709 patch and I&#8217;m not letting any patches be applied until a new patch comes out that fixes this.  Trust me, after all this research, I know where to look&#8230; <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li> <li>Only enabled Hyper-V and installed Docker.  I left VMWare and Virtualbox off.  I&#8217;ve used this machine for quite some time.</li> <li>Kept Sophos Endpoint off and chose a different anti-virus.</li> </ol> <p>Docker started without the issues immediately.  The next was to get my containers going.  That&#8217;s when I ran into an issue.  I wasn&#8217;t able to do port binding in a container.  To get around this, I did the following:</p> <p>1. Created a Dockerfile to expose the ports with the following entries:</p> <pre>FROM microsoft/mssql-server-linux:2017-latest <span style="color: #ff0000;">EXPOSE 1403:1433</span> WORKDIR C:\Projects ENV ACCEPT_EULA=Y ENV MSSQL_SA_PASSWORD=&lt;Password&gt; LABEL maintainer "Kellyn Gorman"</pre> <p>2.  Created my image based off this dockerfile and then start your container from it:</p> <pre>docker build . -t sql1 docker run -it -d -p 1401:1433 sql1</pre> <p>Back up and running!</p> <pre>C:\WINDOWS\system32&gt;docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 355c08b87b2d microsoft/mssql-server-linux:2017-latest "/bin/sh -c /opt/mss…" 7 hours ago Up 7 hours 0.0.0.0:15777-&gt;1433/tcp sql1</pre> <p>So, long story longer-  This was the fix to getting my containers back to use with my demos/workshops.  The problem is so complex between so many applications-  VMWae, Docker, Virtualbox, Hyper-V, VPN clients, anti-virus&#8217; and Windows patch 1709.  Instead of days of me trying to untangle it, it was easier for me to reload and not put the challenges into the new load.</p> <p>&nbsp;</p> <p>&nbsp;</p> <br><br><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/ico-tag.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/containers/" rel="tag">Containers</a>, <a href="http://dbakevlar.com/tag/docker/" rel="tag">docker</a>, <a href="http://dbakevlar.com/tag/sql-server/" rel="tag">SQL Server</a>, <a href="http://dbakevlar.com/tag/windows-1709/" rel="tag">windows 1709</a><br><br><div style="width:100%"><table align="left" width="100%" cellspacing="0" cellpadding="0" bgcolor="#f1f1f1" border="0px;"> <tbody> <tr bgcolor="#ffffff"><td align="center" width="17%" valign="top"> <span class="sb_title">Del.icio.us</span><br> <a href="http://del.icio.us/post?url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/&title=Docker and Windows 10 1709 Patch, The End"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">TweetThis</span><br> <a href="http://twitthis.com/twit?url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/&title=Docker and Windows 10 1709 Patch, The End"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Digg</span><br> <a href="http://digg.com/submit?phase=2&url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/&title=Docker and Windows 10 1709 Patch, The End"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">StumbleUpon</span><br> <a href="http://www.stumbleupon.com/submit?url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/&title=Docker and Windows 10 1709 Patch, The End"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td></tr> </tbody></table></div><br><div style="clear:both"></div><div style="background:#EEEEEE; padding:0px 0px 0px 15px; margin:10px 0px 0px 0px;"><div style="padding:5px 0px 5px 0px;"><b>Comments:</b>&nbsp;&nbsp;<a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/#comments">2 comments on this item</a></div><br><div style="clear:both"></div><div style="padding:13px 0px 5px 0px;"><span style="border-bottom:1px dashed #003399;padding-bottom:4px;"><strong>You might be interested in this:</strong></span>&nbsp;&nbsp;<br><ul style="margin:0; padding:0; padding-top:10px; padding-bottom:5px;"><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2010/12/ugliest-query-in-the-world/" >Ugliest Query In the World</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/" >Where in the World is Goth Girl- Week 20, 2017</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/01/delphix-trial-aws-get-hot/" >The Delphix Trial on AWS- Get It While Its HOT!</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/09/data-gravity-network/" >Data Gravity and the Network</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/03/oracle-buffer-busy-wait/" >Oracle : buffer busy wait</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/">Docker and Windows 10 1709 Patch, The End</a>], All Right Reserved. 2018.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-end/">Docker and Windows 10 1709 Patch, The End</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=7801 Thu Feb 15 2018 21:53:49 GMT-0500 (EST) What’s Wrong With My Code? We Try to Help You https://www.thatjeffsmith.com/archive/2018/02/whats-wrong-with-my-code-we-try-to-help-you/ <p>I see questions like this on StackOverflow and related websites like, ALL THE TIME:</p> <p>I have some code, what&#8217;s wrong with it? </p> <p>Something I wish I could do, other than physically hold the person&#8217;s hand, is show them how our IDE tries to point them in the right direction of their syntax issues. But since I can&#8217;t do that, I&#8217;ll write a quick blog post and help the Google gods can help folks going forward.</p> <p>I borrowed this statement <a href="https://stackoverflow.com/questions/41282610/ora-907-missing-right-parenthesis-when-using-as-keyword" rel="noopener" target="_blank">from an actual question</a>.</p> <div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1"><span class="kw1">SELECT</span> easbwaredgs_t<span class="sy0">.</span>id<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>fk_easbware_id<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>mandant<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>reg_code_mc<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>hazard_code_ident<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>add_hazard_code<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>haz_code_version<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>undg_number<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>ship_flashpoint<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>flashpoint_type<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>cont_dopc<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>cont_dop<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>cont_phone<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>verpack_grp_mc<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>ems_nr<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>trem_card_nr<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>secondimo<span class="sy0">,</span> easbwaredgs_t<span class="sy0">.</span>thirdimo<span class="sy0">,</span> <span class="br0">&#40;</span> <span class="kw1">SELECT</span> <span class="kw1">COUNT</span><span class="br0">&#40;</span><span class="sy0">*</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> easbwaredgs_t <span class="kw1">AS</span> k <span class="kw1">LEFT</span> <span class="kw1">OUTER</span> <span class="kw1">JOIN</span> easbdgstn_t <span class="kw1">AS</span> p <span class="kw1">ON</span> k<span class="sy0">.</span>id <span class="sy0">=</span> p<span class="sy0">.</span>fk_easbwaredgsid <span class="kw1">WHERE</span> k<span class="sy0">.</span>mandant <span class="sy0">=</span> <span class="st0">'001'</span> <span class="kw1">AND</span> k<span class="sy0">.</span>fk_easbware_id <span class="sy0">=</span> <span class="nu0">1</span> <span class="kw1">AND</span> p<span class="sy0">.</span>type_mc <span class="sy0">=</span> <span class="st0">'TRANSPORT_DGS_LIM_QUANT'</span> <span class="br0">&#41;</span> <span class="kw1">AS</span> cc_is_limited_quantities <span class="kw1">FROM</span> easbwaredgs_t <span class="kw1">WHERE</span> easbwaredgs_t<span class="sy0">.</span>mandant <span class="sy0">=</span> <span class="st0">'001'</span> <span class="kw1">AND</span> EASBWAREDGS_T<span class="sy0">.</span>FK_EASBWARE_ID <span class="sy0">=</span> <span class="nu0">1</span></pre></div></div></div></div></div></div></div> <p>So, starting out from &#8216;scratch&#8217;, you might want some help with finding out where your problem is.</p> <p>Sure, you could run the query and get the error line and cursor position, but generally our parser will identify problems AS YOU TYPE THEM.</p> <p>It&#8217;s &#8216;all in the squiggle.&#8217; </p> <div id="attachment_6504" style="max-width: 1071px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser1.png"><img src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser1.png" alt="" width="1061" height="591" class="size-full wp-image-6504" /></a><p class="wp-caption-text">The offending code is underline with a pink &#8216;squiggle&#8217;.</p></div> <p>If you mouse over the underlined-text, we try to help you out with some doc links and expected &#8216;next&#8217; words from the parser.</p> <p>Can&#8217;t see the line? Let&#8217;s zoom in again.</p> <div id="attachment_6505" style="max-width: 919px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser2.png"><img src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser2.png" alt="" width="909" height="461" class="size-full wp-image-6505" /></a><p class="wp-caption-text">Don&#8217;t like the color/style scheme? <a href="https://www.thatjeffsmith.com/archive/2014/09/30-sql-developer-tips-in-30-days-day-3-syntax-highlighting/" rel="noopener" target="_blank">You can change that</a>.</p></div> <p>If you have a LOT of code, you don&#8217;t have to scan the editor looking for squiggles. You can pop open the Code outline. Any errors will be listed, and if you double-click on the items, they&#8217;ll take you to the offending line/curpos.</p> <div id="attachment_6506" style="max-width: 787px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser3.png"><img src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser3.png" alt="" width="777" height="442" class="size-full wp-image-6506" /></a><p class="wp-caption-text">right-click in your worksheet or code editor and select &#8216;Code Outline&#8217;</p></div> <p>And don&#8217;t forget, <strong>you can <a href="https://www.thatjeffsmith.com/archive/2014/08/oracle-sql-developer-code-insight-syntax-examples/" rel="noopener" target="_blank">click on the &#8216;book&#8217; to go straight to the online docs</a>! </p> <div id="attachment_6508" style="max-width: 1034px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser4.png"><img src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/so-parser4.png" alt="" width="1024" height="586" class="size-full wp-image-6508" /></a><p class="wp-caption-text">click on the &#8216;book&#8217;</p></div> <h3>A Bug Fix for 18.1</h3> <p>We used to show the errors/indicators in the sql worksheet gutters. So again, if you had hundreds of lines of code, you could zoom in and see what was what, where. That&#8217;s fixed AND enhanced for 18.1.</p> <div id="attachment_6507" style="max-width: 627px" class="wp-caption aligncenter"><a href="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/parser-18.png"><img src="https://www.thatjeffsmith.com/wp-content/uploads/2018/02/parser-18.png" alt="" width="617" height="390" class="size-full wp-image-6507" /></a><p class="wp-caption-text">In the right-gutter, parser hints and errors are shown. You can mouse over to get a &#8216;zoom&#8217; on the code.</p></div> <!-- Easy AdSense Unfiltered [count: 3 is not less than 3] --> thatjeffsmith https://www.thatjeffsmith.com/?p=6503 Thu Feb 15 2018 21:24:17 GMT-0500 (EST) Publish Events from any Web Application in IFRAME to ADF Applications https://technology.amis.nl/2018/02/16/publish-events-from-any-web-application-in-iframe-to-adf-application/ <p>Even though ADF does not always play nice with guests, it is becoming increasingly common to have ADF applications – pure ADF or WebCenter Portal – that are the host to embedded user interfaces, created in technologies such as Oracle JET, Vue.js, Angular or React. This is not the ideal green field technology mix of course. However, if either WebCenter Portal (heavily steeped in ADF) or an existing enterprise ADF application are the starting point for new UI requirements, you are bound to end up with a combination of ADF and the latest and greatest technology used for building those requirements.</p> <p>It is quite likely that an IFRAME is used as a container for the new UI components <a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-7.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-7.png?resize=702%2C334&#038;ssl=1" alt="image" width="702" height="334" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>The UI components created in ADF and those built in other technologies are fairly well isolated from each other, through the use of the IFRAME. However, in certain instances, the isolation has to be pierced. When a user performs an action in one UI component, it is quite possible that is action should have an effect in another UI area in the same page. The other area may need to refresh (get latest data), synchronize (align with the selection), navigate, etc. We need a solid, decoupled way of taking an event in the embedded IFRAME area of the latest UI technology and bring it all the way to the other (regular) ADF taskflows in the page.</p> <p>This article describes such an appoach – that allows our JET, React or Angular UI component to send events in a well defined way to the ADF side of the User Interface and thus make these areas play nice with each other after all. The visualization of the end to end flow is shown below:</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-8.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-8.png?resize=684%2C412&#038;ssl=1" alt="image" width="684" height="412" border="0" data-recalc-dims="1" /></a></p> <p>Note: where it says JET, it could also say Angular, Vue or React – or even plain HTM5.</p> <p>The steps are:</p> <ol> <li>The event to be published is identified in the next gen UI, client side in JavaScript. A JavaScript function is invoked. This function uses the postMessage method on the parent window (the one that contains the IFRAME) to send an event to the enclosing page (see for example: <a title="https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage" href="https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage">https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage</a>)</li> <li>The ADF JET Container Taskflow that embeds the IFRAME references a JavaScript library that attaches an event listener to the window, to listen for messages posted from within the IFRAME. When a message is received, this library locates the &lt;af:inlineFrame&gt; component, and queues a custom event on its serverListener element</li> <li>The custom event is sent asynchronously (AJAX style) from the browser to a managed bean, defined in the context of the JET Container Taskflow. This managed bean gets hold of the binding container for the current view in the ADF JET Container Taskflow, gets hold of the <em>publishEvent</em> method binding and executes that binding</li> <li>The <em>publishEvent</em> method binding is specified in the page definition for the current page. It invokes method <em>publishEvent</em> on the Data Control <em>EventPublisherBean</em> that was created for the POJO <em>EventPublisherBean</em>. The method binding in the page definition contains an <em>events </em>element that specifies that execution of this method binding will result in the publication of a contextual event called <em>ClientAppEvent</em> that takes the result from the method publishEvent as its payload. <p>At this point, we leave the ADF JET Container Taskflow. It has done its duty by reporting the event that took place in the client. It is available at the heart of the ADF framework, ready to be processed by one or more consumers – that each have to take care of refreshing their own UI if so desired.</li> <li>The contextual event <em>ClientAppEvent</em> is consumed in method <em>handleEvent</em> in POJO <em>EventHandlerBean</em>. A Data Control is created for this POJO. A method action is configured for <em>handleEvent </em>in the page definition for the view in ADF Taskflow X. This page definition also contains an <em>eventMap</em> element that specifies that the ClientAppEvent event is to be handled by method binding <em>handleEvent</em>. The method binding specifies a single parameter that will receive the payload of the event (from the EL Expression ${payLoad} for attribute NDValue)</li> <li>The EventHandlerBean receives the payload of the event and enlists the managed <em>detailsBean </em>to do the actual work for this event</li> <li>DetailsBean will derive relevant data from the payload, update bean properties, add UI components as partial targets (to be refreshed in the client) and adds some JavaScript to be executed in the browser once the request completes – the request that started with the custom event queued via the serverListener in response to the postMessage from within the IFRAME</li> <li>Upon completing the request, ADF will refresh the partial targets in the browser and will execute the JavaScript provided by DetailsBean. <p>At this point, all effects that the action in the IFRAME should have in the ADF Application – both server side as well as client side – have been achieved.</li> </ol> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-9.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-9.png?resize=702%2C410&#038;ssl=1" alt="image" width="702" height="410" border="0" data-recalc-dims="1" /></a></p> <p>And now for some real code.</p> <p>Starting point:</p> <ul> <li>ADF Web Application (may have Model, such as ADF BC, not necessarily) <ul> <li>an index.jsf page – home of the application</li> <li>the ADF JET Container Taskflow with a JETView.jsff that has the embedded IFRAME that loads the index.xhtml</li> <li>a jet-web-app folder with an index.html – to represent the JET application (note: for now it is just a plain HTML5 application)</li> <li>the ADF X Taskflow with a view.jsff page – representing the existing WC Portal or ADF ERP application</li> </ul> </li> </ul> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-10.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-10.png?resize=240%2C412&#038;ssl=1" alt="image" width="240" height="412" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Adding:</p> <p>JavaScript function callParent in index.html; this function is invoked to post a message to the parent window.</p> <pre class="brush: jscript; title: ; notranslate"> function callParent() { console.log('send message from Web App to parent window'); var jetinputfield = document.getElementById('jetinputfield'); var inputvalue = jetinputfield.value; var message = { &quot;message&quot; : { &quot;value&quot; : inputvalue }, &quot;mydata&quot; : { &quot;param1&quot; : 42, &quot;param2&quot; : &quot;train&quot; } }; // here we can restrict which parent page can receive our message // by specifying the origin that this page should have var targetOrigin = '*'; parent.postMessage(message, targetOrigin); } </pre> <p>JavaScript library adf-jet-client-app.js, associated with JETView.jsff – registers a message listener on the window and handles incoming events (by queueing a custom event on server listener)</p> <pre class="brush: jscript; title: ; notranslate"> var jetIframeClientId =&quot;&quot;; function init() { window.addEventListener(&quot;message&quot;, function (event) { console.log(&quot;Parent receives message from iframe &quot; + event); sendMessageFromJetToServer(event.data); }, false); // jetIframe.contentWindow.postMessage(&quot;hello tyhere&quot;, '*'); } document.addEventListener(&quot;DOMContentLoaded&quot;, function (event) { init(); }); function sendMessageFromJetToServer(message) { var jetIframeADF = AdfPage.PAGE.findComponentByAbsoluteId(jetIframeClientId); AdfCustomEvent.queue(jetIframeADF, &quot;messageRouter&quot;, message, true); } </pre> <p>The page JETView.jsff contains the inlineFrame element that has a serverListener that provides the connection to the server – managed bean client2serverBean</p> <pre class="brush: xml; title: ; notranslate"> &lt;?xml version='1.0' encoding='UTF-8'?&gt; &lt;ui:composition xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot; xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot; xmlns:f=&quot;http://java.sun.com/jsf/core&quot;&gt; &lt;af:resource type=&quot;javascript&quot; source=&quot;resources/js/adf-jet-client-app.js&quot;/&gt; &lt;af:panelStretchLayout id=&quot;psl1&quot; styleClass=&quot;AFStretchWidth&quot; bottomHeight=&quot;0px&quot; topHeight=&quot;40px&quot; endWidth=&quot;0px&quot; startWidth=&quot;0px&quot; dimensionsFrom=&quot;parent&quot;&gt; &lt;f:facet name=&quot;top&quot;&gt; &lt;af:panelHeader text=&quot;JET Client&quot; id=&quot;ph1&quot;&gt; &lt;!-- we do not really care about this client attribute; however, by rendering it we force execution of method getJetInlineFrameClientId() on Client2Server that also writes a little snippet of JavaScript to set the JavaScript variable jetIframeClientId with the actual client side id for the iframe --&gt; &lt;af:clientAttribute name=&quot;inlineFrameId&quot; value=&quot;#{client2serverBean.jetInlineFrameClientId}&quot;/&gt; &lt;/af:panelHeader&gt; &lt;/f:facet&gt; &lt;f:facet name=&quot;center&quot;&gt; &lt;af:panelGroupLayout id=&quot;pg1&quot;&gt; &lt;af:inlineFrame source=&quot;jet-web-app/index.xhtml?token=yuweyuweyu&quot; id=&quot;jetIframe&quot; sizing=&quot;preferred&quot; styleClass=&quot;AFStretchWidth&quot; binding=&quot;#{client2serverBean.jetIframe}&quot;&gt; &lt;af:serverListener type=&quot;messageRouter&quot; method=&quot;#{client2serverBean.handleMessageFromJet}&quot;/&gt; &lt;/af:inlineFrame&gt; &lt;/af:panelGroupLayout&gt; &lt;/f:facet&gt; &lt;/af:panelStretchLayout&gt; &lt;/ui:composition&gt; </pre> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-11.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-11.png?resize=702%2C346&#038;ssl=1" alt="image" width="702" height="346" border="0" data-recalc-dims="1" /></a></p> <p>Note the binding attribute on inlineFrame that ties this component to the jetIframe property on the managed bean. We use this component binding in Client2Server to extract the real client id for the IFrame component and make that available in JavaScript; this happens in method getJetInlineFrameClientId() that is invoked when rendering the (utterly useless) clientAttribute inlineFrameId on the panelHeader (we only create this clientAttribute in order to force execution of method getJetInlineFrameClientId().</p> <p>Java Class Client2Server – handles server side of server listener: processing incoming custom events from client, i.e. JETView.jsff.</p> <pre class="brush: java; title: ; notranslate"> package nl.amis.frontend.jet2adf.view.adfjetclient; import javax.faces.context.FacesContext; import oracle.adf.model.BindingContext; import oracle.adf.view.rich.component.rich.output.RichInlineFrame; import oracle.adf.view.rich.render.ClientEvent; import oracle.binding.BindingContainer; import oracle.binding.OperationBinding; import org.apache.myfaces.trinidad.render.ExtendedRenderKitService; import org.apache.myfaces.trinidad.util.ComponentReference; import org.apache.myfaces.trinidad.util.Service; public class Client2Server { public Client2Server() { super(); } public String getJetInlineFrameClientId() { FacesContext ctx = FacesContext.getCurrentInstance(); String id = this.getJetIframe().getClientId(ctx); writeJavaScriptToClient(&quot;console.log('Inline Frame Id = &quot;+id+&quot;'); jetIframeClientId ='&quot;+id+&quot;'&quot;); return id; } //generic, reusable helper method to call JavaScript on a client private void writeJavaScriptToClient(String script) { FacesContext fctx = FacesContext.getCurrentInstance(); ExtendedRenderKitService erks = null; erks = Service.getRenderKitService(fctx, ExtendedRenderKitService.class); erks.addScript(fctx, script); } // this method is called from the serverListener in client-to-server.jsf; it receives an event with a payload that contains a key helpTopic public void handleMessageFromJet(ClientEvent clientEvent) { System.out.println(&quot;handleMessageFromJet in Server!&quot; + clientEvent); String message = clientEvent.getParameters() .get(&quot;message&quot;) .toString(); System.out.println(&quot;String from JET = &quot; + message); // find operation binding publishEvent and execute in order to publish contextual event BindingContainer bindingContainer = BindingContext.getCurrent().getCurrentBindingsEntry(); OperationBinding method = bindingContainer.getOperationBinding(&quot;publishEvent&quot;); method.getParamsMap().put(&quot;payload&quot;, message); method.execute(); } private ComponentReference jetInlineFrame; public void setJetIframe(RichInlineFrame jetIframe) { this.jetInlineFrame = ComponentReference.newUIComponentReference(jetIframe); } public RichInlineFrame getJetIframe() { if (this.jetInlineFrame != null) { return (RichInlineFrame) this.jetInlineFrame.getComponent(); } else { return null; } } } </pre> <p>configured as Managed Bean client client2serverBean in ADF JET Container Taskflow</p> <pre class="brush: xml; title: ; notranslate"> &lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1252&quot; ?&gt; &lt;adfc-config xmlns=&quot;http://xmlns.oracle.com/adf/controller&quot; version=&quot;1.2&quot;&gt; &lt;task-flow-definition id=&quot;ADF-JET-Container-taskflow&quot;&gt; &lt;default-activity&gt;JETView&lt;/default-activity&gt; &lt;data-control-scope&gt; &lt;shared/&gt; &lt;/data-control-scope&gt; &lt;managed-bean id=&quot;__1&quot;&gt; &lt;managed-bean-name&gt;client2serverBean&lt;/managed-bean-name&gt; &lt;managed-bean-class&gt;nl.amis.frontend.jet2adf.view.adfjetclient.Client2Server&lt;/managed-bean-class&gt; &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt; &lt;/managed-bean&gt; &lt;view id=&quot;JETView&quot;&gt; &lt;page&gt;/JETView.jsff&lt;/page&gt; &lt;/view&gt; &lt;use-page-fragments/&gt; &lt;/task-flow-definition&gt; &lt;/adfc-config&gt; </pre> <p>Java Class EventPublisherBean – a simple POJO that will publish the contextual event – by virtue of being a data control and having its method configured in the page definition as method action with contextual event effect <em>ClientAppEvent</em></p> <pre class="brush: java; title: ; notranslate"> package nl.amis.frontend.jet2adf.view.adfjetclient; public class EventPublisherBean { public EventPublisherBean() { super(); } public Object publishEvent(Object payload) { System.out.println(&quot;&lt;&lt;&lt; Publish Event: &quot;+payload); return payload; } } </pre> <p>Create Data Control for this Java Class.</p> <p>Create the Page Definition for JETViewPageDef. Create method action for EventPublisherBean.publishEvent with event element for ClientAppEvent in JETViewPageDef (page definition for JETView.jsff):</p> <pre class="brush: xml; title: ; notranslate"> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;pageDefinition xmlns=&quot;http://xmlns.oracle.com/adfm/uimodel&quot; version=&quot;12.2.1.9.14&quot; id=&quot;JETViewPageDef&quot; Package=&quot;nl.amis.frontend.jet2adf.view.pageDefs&quot;&gt; &lt;parameters/&gt; &lt;executables&gt; &lt;variableIterator id=&quot;variables&quot;/&gt; &lt;/executables&gt; &lt;bindings&gt; &lt;methodAction id=&quot;publishEvent&quot; RequiresUpdateModel=&quot;true&quot; Action=&quot;invokeMethod&quot; MethodName=&quot;publishEvent&quot; IsViewObjectMethod=&quot;false&quot; DataControl=&quot;EventPublisherBean&quot; InstanceName=&quot;bindings.publishEvent.dataControl.dataProvider&quot; ReturnName=&quot;data.EventPublisherBean.methodResults.publishEvent_publishEvent_dataControl_dataProvider_publishEvent_result&quot;&gt; &lt;NamedData NDName=&quot;payload&quot; NDType=&quot;java.lang.Object&quot;/&gt; &lt;events xmlns=&quot;http://xmlns.oracle.com/adfm/contextualEvent&quot;&gt; &lt;event name=&quot;ClientAppEvent&quot;/&gt; &lt;/events&gt; &lt;/methodAction&gt; &lt;/bindings&gt; &lt;/pageDefinition&gt; </pre> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-12.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-12.png?resize=702%2C293&#038;ssl=1" alt="image" width="702" height="293" border="0" data-recalc-dims="1" /></a></p> <h3>Consume Event and Update ADF X Client</h3> <p>The ClientAppEvent should be consumed in TaskFlow ADF-X-taskflow’s view.jsff page. This done by defining an event-map entry for that event in the page definition for view.jsff:</p> <pre class="brush: xml; title: ; notranslate"> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;pageDefinition xmlns=&quot;http://xmlns.oracle.com/adfm/uimodel&quot; version=&quot;12.2.1.9.14&quot; id=&quot;viewPageDef&quot; Package=&quot;nl.amis.frontend.jet2adf.view.pageDefs&quot;&gt; &lt;parameters/&gt; &lt;executables&gt; &lt;variableIterator id=&quot;variables&quot;/&gt; &lt;/executables&gt; &lt;bindings&gt; &lt;methodAction id=&quot;handleEvent&quot; RequiresUpdateModel=&quot;true&quot; Action=&quot;invokeMethod&quot; MethodName=&quot;handleEvent&quot; IsViewObjectMethod=&quot;false&quot; DataControl=&quot;EventHandlerBean&quot; InstanceName=&quot;bindings.handleEvent.dataControl.dataProvider&quot;&gt; &lt;NamedData NDName=&quot;payload&quot; NDValue=&quot;${payLoad}&quot; NDType=&quot;java.lang.Object&quot;/&gt; &lt;/methodAction&gt; &lt;/bindings&gt; &lt;eventMap xmlns=&quot;http://xmlns.oracle.com/adfm/contextualEvent&quot;&gt; &lt;event name=&quot;ClientAppEvent&quot;&gt; &lt;producer region=&quot;*&quot;&gt; &lt;consumer handler=&quot;handleEvent&quot;/&gt; &lt;/producer&gt; &lt;/event&gt; &lt;/eventMap&gt; &lt;/pageDefinition&gt; </pre> <p>The consumer for the event references the handleEvent method action that is created for the handleEvent method in the EventHandlerBean POJO for which a data control is created.</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-13.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-13.png?resize=702%2C411&#038;ssl=1" alt="image" width="702" height="411" border="0" data-recalc-dims="1" /></a></p> <pre class="brush: java; title: ; notranslate"> package nl.amis.frontend.jet2adf.view.adfX; import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.ValueExpression; import javax.faces.context.FacesContext; public class EventHandlerBean { public EventHandlerBean() { super(); } public void handleEvent(Object payload) { System.out.println(&quot;&gt;&gt;&gt;&gt;&gt;&gt; Consume Event: &quot; + payload); DetailsBean db = (DetailsBean)evaluateEL(&quot;#{pageFlowScope.detailsBean}&quot;); db.process(payload); } public static Object evaluateEL(String el) { FacesContext fc = FacesContext.getCurrentInstance(); ELContext elContext = fc.getELContext(); ExpressionFactory ef = fc.getApplication().getExpressionFactory(); ValueExpression exp = ef.createValueExpression(elContext, el, Object.class); Object obj = exp.getValue(elContext); return obj; } } </pre> <p>CODE eventhandlerbean</p> <p>&nbsp;</p> <p>The EventHandlerBean leverages the DetailsBean – a POJO that is setup as pageflow scope managed bean in the ADF-X-taskflow:</p> <pre class="brush: xml; title: ; notranslate"> &lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1252&quot; ?&gt; &lt;adfc-config xmlns=&quot;http://xmlns.oracle.com/adf/controller&quot; version=&quot;1.2&quot;&gt; &lt;task-flow-definition id=&quot;ADF-X-taskflow&quot;&gt; &lt;default-activity&gt;view&lt;/default-activity&gt; &lt;data-control-scope&gt; &lt;shared/&gt; &lt;/data-control-scope&gt; &lt;managed-bean id=&quot;__1&quot;&gt; &lt;managed-bean-name&gt;detailsBean&lt;/managed-bean-name&gt; &lt;managed-bean-class&gt;nl.amis.frontend.jet2adf.view.adfX.DetailsBean&lt;/managed-bean-class&gt; &lt;managed-bean-scope&gt;pageFlow&lt;/managed-bean-scope&gt; &lt;/managed-bean&gt; &lt;view id=&quot;view&quot;&gt; &lt;page&gt;/view.jsff&lt;/page&gt; &lt;/view&gt; &lt;use-page-fragments/&gt; &lt;/task-flow-definition&gt; &lt;/adfc-config&gt; </pre> <p>The POJO DetailsBean:</p> <pre class="brush: java; title: ; notranslate"> package nl.amis.frontend.jet2adf.view.adfX; import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.ValueExpression; import javax.faces.context.FacesContext; public class EventHandlerBean { public EventHandlerBean() { super(); } public void handleEvent(Object payload) { System.out.println(&quot;&gt;&gt;&gt;&gt;&gt;&gt; Consume Event: &quot; + payload); DetailsBean db = (DetailsBean)evaluateEL(&quot;#{pageFlowScope.detailsBean}&quot;); db.process(payload); } public static Object evaluateEL(String el) { FacesContext fc = FacesContext.getCurrentInstance(); ELContext elContext = fc.getELContext(); ExpressionFactory ef = fc.getApplication().getExpressionFactory(); ValueExpression exp = ef.createValueExpression(elContext, el, Object.class); Object obj = exp.getValue(elContext); return obj; } } </pre> <p>This bean’s <em>process </em>method is called by the EventHandlerBean when it consumes the ClientAppEvent. This method does several things:</p> <ul> <li>it updates the message property (that provides the value for the inputText comonent)</li> <li>it adds the inputText component as partial target to be updated in the client</li> <li>it writes a JavaScript snippet to be executed in the client (that writes a simple line of logging to the console – and potentially could do all kinds of wild stuff)</li> </ul> <p>The view.jsff file defines the inputText element that is bound to the detailsBean and also takes its value from that bean. This component will be updated in client when the event consumption is completed.</p> <pre class="brush: xml; title: ; notranslate"> &lt;?xml version='1.0' encoding='UTF-8'?&gt; &lt;ui:composition xmlns:ui=&quot;http://java.sun.com/jsf/facelets&quot; xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot;&gt; &lt;af:panelHeader text=&quot;Classic ADF X Taskflow&quot; id=&quot;ph1&quot;&gt; &lt;af:inputText label=&quot;Message&quot; id=&quot;it1&quot; binding=&quot;#{pageFlowScope.detailsBean.messageComponent}&quot; value=&quot;#{pageFlowScope.detailsBean.message}&quot; columns=&quot;120&quot; rows=&quot;1&quot;/&gt; &lt;/af:panelHeader&gt; &lt;/ui:composition&gt; </pre> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-14.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-14.png?resize=702%2C169&#038;ssl=1" alt="image" width="702" height="169" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>The full project:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-15.png?ssl=1"><img style="margin: 0px auto; float: none; display: block; background-image: none;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-15.png?resize=225%2C412&#038;ssl=1" alt="image" width="225" height="412" border="0" data-recalc-dims="1" /></a></p> <p>And the event exchange in action:</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/Webp.net-gifmaker-3.gif?ssl=1"><img style="margin-right: auto; margin-left: auto; float: none; display: block;" title="Webp.net-gifmaker (3)" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/Webp.net-gifmaker-3_thumb.gif?resize=590%2C541&#038;ssl=1" alt="Webp.net-gifmaker (3)" width="590" height="541" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <h2>Resources</h2> <p>Sources for this article: <a title="https://github.com/lucasjellema/WebAppIframe2ADFSynchronize" href="https://github.com/lucasjellema/WebAppIframe2ADFSynchronize">https://github.com/lucasjellema/WebAppIframe2ADFSynchronize</a>.</p> <p>Docs on postMessage: <a title="https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage" href="https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage">https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage</a></p> <p>Blog ADF: (re-)Introducing Contextual Events in several simple steps  : <a title="https://technology.amis.nl/2013/03/14/adf-re-introducing-contextual-events-in-several-simple-steps/" href="https://technology.amis.nl/2013/03/14/adf-re-introducing-contextual-events-in-several-simple-steps/">https://technology.amis.nl/2013/03/14/adf-re-introducing-contextual-events-in-several-simple-steps/</a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/16/publish-events-from-any-web-application-in-iframe-to-adf-application/">Publish Events from any Web Application in IFRAME to ADF Applications</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Lucas Jellema https://technology.amis.nl/?p=47211 Thu Feb 15 2018 17:04:00 GMT-0500 (EST) Fast Application Notification [FAN] overview http://oracle-help.com/oracle-rac/fast-application-notification-fan-overview/ <p>As the <strong>Oracle docs</strong> say,</p> <p>The Oracle <strong>RAC,</strong> FAN, Oracle 12c <strong>Fast Application Notification</strong> (FAN) feature provides a simplified API for accessing FAN events through a callback mechanism. This mechanism enables third-party drivers, connection pools, and containers to subscribe, receive and process FAN events. These APIs are referred to as Oracle RAC FAN APIs.</p> <p>If we simplify it, <strong>FAN</strong>[Fast Application Notification] is a mechanism that Oracle RAC uses to notify ONS about service status changes, like <strong>UP and DOWN</strong> events, Instance state changes etc.</p> <p><strong>Oracle RAC notifies the cluster about FAN events the minutes any changes have occurred.</strong> So the benefit is instead of waiting for the application to check on individual nodes to detect an anomaly , the applications are notified by FAN events and are able to react immediately.</p> <p>Any changes that occur in a cluster configuration will be notified by Fast Application Notification to ONS.</p> <p>We can also use server callouts scripts to catch FAN events.</p> <p><strong>FAN</strong> also publishes load balancing advisory (<strong>LBA</strong>) events. Applications are in a position to take full advantage of the LBA FAN events to facilitate a smooth transition of connections to healthier nodes in a cluster. One can take advantage of <strong>FAN</strong> is the following ways:</p> <ol> <li>When using integrated Oracle Client, the applications can use <strong>FAN</strong> with no programming whatsoever. Oracle 120g <strong>JDBC, ODP.NET, and OCI</strong> would be considered as the components of the integrated clients.</li> <li>Programmatic changes in <strong>ONS API</strong> make it possible for applications to still subscribe to the <strong>FAN</strong> events and can execute the event handling actions appropriately.</li> <li>We can also use server callouts scripts to catch <strong>FAN</strong> events at a database level.</li> </ol> <p>In next article, we will learn about <strong>Benefits of FAN</strong> and supported event types.</p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-rac/fast-application-notification-fan-overview/">Fast Application Notification [FAN] overview</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Jagruti Jasleniya http://oracle-help.com/?p=3396 Thu Feb 15 2018 11:51:19 GMT-0500 (EST) A Team Manager’s perspective on success at Pythian https://blog.pythian.com/success-team-managers-perspective/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><h2><b>Success in today&#8217;s constantly evolving business world</b></h2> <div id="attachment_103421" style="max-width: 470px" class="wp-caption aligncenter"><img class="wp-image-103421" title="Teamwork" src="https://blog.pythian.com/wp-content/uploads/collaboration-hacks-624x357.png" alt="Teamwork" width="460" height="263" srcset="https://blog.pythian.com/wp-content/uploads/collaboration-hacks-624x357.png 624w, https://blog.pythian.com/wp-content/uploads/collaboration-hacks-624x357-465x266.png 465w, https://blog.pythian.com/wp-content/uploads/collaboration-hacks-624x357-350x200.png 350w" sizes="(max-width: 460px) 100vw, 460px" /><p class="wp-caption-text">Rowing together towards the same goal while achieving personal satisfaction.</p></div> <p>In the competitive world we live in right now, the employee has become a key element to organizational success—which at Pythian means delivering the best technical and transformational services to our clients. Organizations today are increasingly working in a &#8220;team&#8221; configuration in order to reach the same goal. But even though top-down bureaucracy is tending to disappear, people often still pay more attention on developing processes and strategies that will help achieve the organization&#8217;s goals, and putting less emphasis on what the team and team member goals are. At the end of the day, the ones that make a project or a task successful are the people doing the work.</p> <p>Simply put, you can have all the tools, strategies and procedures in place in order to be successful but if there is one person in the team who is disengaged, achieving success will become more difficult. In order to reach organizational success, businesses and their managers need to balance and align three areas: organizational, team and personal (the employee&#8217;s self-space.)</p> <p>&nbsp;</p> <h2><strong>Getting to know your team</strong></h2> <p>In 9 years as a Team Manager at Pythian, I&#8217;ve been focusing on developing an environment where my team&#8217;s goals and the personal goals of each of my team members support our overall goal of excelling on every single task we have with our clients.</p> <p>Being a manager in the IT sector doesn&#8217;t necessarily mean you have to be the most technically savvy person on the team. We work in a team configuration where diversity is our biggest strength, so I surround myself with team members who are the technical experts. As a team manager I see my role as being the person that glues everything and everyone together, which is what makes this role so important. So how do I do it?</p> <p>By listening to my team members, collaborating with them, coaching them, guiding them and understanding what their professional goals are. By knowing that, I can align them to the goals we have as a team and as a company.</p> <div id="attachment_103441" style="max-width: 510px" class="wp-caption aligncenter"><img class="size-full wp-image-103441" src="https://blog.pythian.com/wp-content/uploads/shutterstock_625125821.jpg" alt="" width="500" height="334" srcset="https://blog.pythian.com/wp-content/uploads/shutterstock_625125821.jpg 500w, https://blog.pythian.com/wp-content/uploads/shutterstock_625125821-465x311.jpg 465w, https://blog.pythian.com/wp-content/uploads/shutterstock_625125821-180x120.jpg 180w, https://blog.pythian.com/wp-content/uploads/shutterstock_625125821-350x234.jpg 350w" sizes="(max-width: 500px) 100vw, 500px" /><p class="wp-caption-text">Each Team member brings with him/her a different set of skills, experience, expertise and goals; all the pieces together conform the puzzle (the team). This consequently leads us to the image we see on the puzzle, which is the organization itself.</p></div> <p>&nbsp;</p> <h2><strong>Everything starts with the employee</strong></h2> <p>A mistake that many companies do is to try to force-fit people into processes, ignoring the fact that the employee is an individual with professional goals and aspirations. When a company decides to open up a position, the candidate is the first to choose the company (among many others), well before the hiring manager makes any decisions.</p> <p>As a manager, one of the first things I work on is to get to know each employee. I try understand their motivations, aspirations, and professional goals so that I can guide them and coach them along the way. By understanding their goals, I can quickly align them to our team goals.Then, by helping them meet their now-aligned personal goals and team goals, at the end everything will translate into achieving the goals for our clients.</p> <div id="attachment_103442" style="max-width: 510px" class="wp-caption aligncenter"><img class="size-full wp-image-103442" src="https://blog.pythian.com/wp-content/uploads/shutterstock_559490515.jpg" alt="" width="500" height="334" srcset="https://blog.pythian.com/wp-content/uploads/shutterstock_559490515.jpg 500w, https://blog.pythian.com/wp-content/uploads/shutterstock_559490515-465x311.jpg 465w, https://blog.pythian.com/wp-content/uploads/shutterstock_559490515-180x120.jpg 180w, https://blog.pythian.com/wp-content/uploads/shutterstock_559490515-350x234.jpg 350w" sizes="(max-width: 500px) 100vw, 500px" /><p class="wp-caption-text">Get to know your team members, recognize the importance of the regular one on one discussions with your direct reports</p></div> <p>One example I have is with a database administrator on my team who needed help with communication skills. He told me he needed help in this area, and he was hesitant about getting in front of our clients and speaking with them. Since it&#8217;s our job to provide expert recommendations to our clients, we need to show that we believe in our solutions with confidence and no doubt in our abilities. I coached and guided his personal goal of becoming a stronger communicator, and I also assigned a technical lead role with that client. I knew that this client would be accommodating, and over time as my team member became more confident, he became so critical to the account that the clients couldn&#8217;t live without him. Now this DBA no longer feels intimidated to speak with clients, and our clients also love working with him. All of our goals have been aligned, and everyone wins.</p> <p>To all managers out there, especially in the IT sector, to be truly successful you don&#8217;t need to be the most technical savvy person on your team. Going back to diversity, you&#8217;re there to help technical experts with the non-technical things they might need help with. You&#8217;re the glue that holds all the pieces together, and in order to achieve that, you can&#8217;t just focus on processes, which converts the team into a bureaucratic structure. That is definitely not where the management world is shifting.</p> <p>Being a non-technical manager on a technical team is your greatest strength, and you should be striving to make your team as diverse as possible. Creating a technically strong team means you need to remove yourself from being the &#8220;know it all&#8221; manager, and instead focus on helping your team members achieve their personal goals so they can successfully contribute to your organizational goals.</p> </div></div> Isabel Gratton https://blog.pythian.com/?p=103420 Thu Feb 15 2018 09:42:49 GMT-0500 (EST) Datascape Podcast Episode 22 – Moving 10,000 servers to the public cloud https://blog.pythian.com/datascape-podcast-episode-22-moving-10000-servers-public-cloud/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Today’s guest is Pierig Le Saux, an expert in Service Reliability Engineering and Systems Administration, providing architectural guidance on complex issues and leading technical projects here at Pythian. Pierig joins us to talk to us about his experience in a massive cloud migration, which he managed recently for Blackberry Messenger and Emtec. This process included migrating a 10,000 server database across continents, in addition to all sorts of challenges which were only amplified by the scale of the project.</p> <p>During our chat we go through some background to the work, how it was made possible and some of the lessons and methodologies that were learned and implemented by Pierig and his team. Most listeners will not be undertaking a migration of this magnitude, but the information and lessons are applicable to any data transfer, and its scale and difficulty only serve to amplify the lessons. And for those of you who might approach a task similar to this, well it helps to have heard from someone who has done it before!</p> <p><iframe src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/398976675&amp;color=%23ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&amp;visual=true" width="100%" height="300" frameborder="no" scrolling="no"></iframe></p> <h3><strong>Key points from this episode:</strong></h3> <ul> <li>A little about the huge migration that was made for Blackberry Messenger.</li> <li>The size of the infrastructure of the database that was moved.</li> <li>Dividing the task into smaller units to make it possible.</li> <li>The fail safes and updates that were necessary for this particular project.</li> <li>The human resources and time constraints of the whole migration.</li> <li>Tools and DevOps technology that assisted the team with these tasks.</li> <li>Challenges and hurdles that constrained the work.</li> <li>Google Cloud technologies and how they came into the project.</li> <li>Using Google BigQuery in this process and the size of the load it can handle.</li> <li>The realm of language and how a multi-language application poses its own problems.</li> <li>The methodology that arose in the process and finding the path of least resistance.</li> <li>Highlights of the process for Pierig.</li> <li>Pierig does the Lightning Round</li> <li>And much more!</li> </ul> <h3><strong>Links Mentioned in Today’s Episode:</strong></h3> <p><a href="https://www.linkedin.com/in/pierig-le-saux-6bb82539/">Pierig LeSaux on LinkedIn</a><br /> <a href="http://www.emtec-international.com/">Emtec</a><br /> <a href="https://blackberry-messenger.en.softonic.com/blackberry">Blackberry Messenger</a><br /> <a href="https://corp.dataflowgroup.com/">Data Flow</a><br /> <a href="https://cloud.google.com/dataproc/">Google Dataproc</a><br /> <a href="https://cloud.google.com/bigquery/">Google BigQuery</a><br /> <a href="https://azure.microsoft.com/en-us/">Microsoft Azure</a></p> </div></div> Chris Presley https://blog.pythian.com/?p=103437 Thu Feb 15 2018 09:02:30 GMT-0500 (EST) A week with my Windows 10 desktop… http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/ExdAOrzflr4/ <p><img class="alignleft wp-image-7885" src="https://oracle-base.com/blog/wp-content/uploads/2018/02/window-2005298_640.png" alt="" width="200" height="217" />I mentioned in a <a href="/blog/2018/02/04/mac-updates-disaster-again-and-a-return-to-windows-desktop/">previous post </a>I was done with the MacBook Pro, but the combination of it no longer being a brick and my inherent laziness has meant I&#8217;ve lost momentum on the switch and I&#8217;ve not ordered a new laptop (pause for dramatic effect) yet&#8230; Even so I&#8217;ve been using a Windows 7 PC at work for nearly six years and last week it got swapped out for a new PC with Windows 10 on it. The new machine is a pretty standard desktop machine (i7, 16G RAM and 500G SSD), so a similar spec to my MBP.</p> <p>These are the go-to things I must have on my work computer. There are a bunch of other things as well, but these are the mainstays.</p> <ul> <li><a href="https://www.dropbox.com">DropBox</a> : I use this to hold my personal KeePass file on Windows at work, and Mac and Linux boxes at home.</li> <li><a href="https://keepass.info/">KeePass</a> : Each system I log into has a strong unique password. I don&#8217;t know any of them. Without KeePass I would be screwed. I use <a href="https://keepassxc.org/download/">KeePassXC</a> on Mac and <a href="https://play.google.com/store/apps/details?id=keepass2android.keepass2android&amp;hl=en_GB">KeePass2Android</a> on my phone. I used to run KeePass with Wine on my Linux desktop, but <a href="https://keepassxc.org/download/">KeePassXC</a> is a better alternative now.</li> <li><a href="https://www.google.co.in/chrome/">Chrome</a> : Other browsers are available. I don&#8217;t dislike Edge, but Chrome syncs on all my machines, so I don&#8217;t have to mess about maintaining bookmarks.</li> <li><a href="https://mobaxterm.mobatek.net/">MobaXTerm</a> : My go-to shell. IMHO it&#8217;s much better than anything else on Windows, Mac or Linux.</li> <li><a href="https://www.ultraedit.com/">UltraEdit</a> : I have a multi-platform unlimited upgrades license, so I use this on all operating systems. If I hadn&#8217;t already bought the license I would probably use NotePad++ on Windows, or maybe one of those editors the cool kids use&#8230;</li> <li><a href="https://www.virtualbox.org/">VirtualBox</a> : I run this on my Windows PC at work, on my MBP at home and on my Linux servers at home. I don&#8217;t mind Hyper-V or KVM, but having one product on all three operating systems I use is nice.</li> <li><a href="http://www.oracle.com/technetwork/developer-tools/sqlcl/overview/index.html">SQLcl</a> : I recently wrote about my <a href="/blog/2018/01/25/sqlcl-going-cold-turkey-from-sqlplus/">switch from SQL*Plus to SQLcl</a>.</li> <li><a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html">SQL Developer</a> : I don&#8217;t use this a lot because I am a command line kid, but it&#8217;s good to have just in case.</li> <li><a href="https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms">SQL Server Management Studio</a> : I don&#8217;t write about it a lot, but I do look after a bunch of SQL Server databases, so this is really handy.</li> <li><a href="https://portableapps.com/">PortableApps</a> : This is a neat way to run a load of different apps and utils on a Windows box without having to install them. It works great on a memory stick, but if there is a PortableApps version of an application, I will often pick it over a regular install and just have it sitting on my PC.</li> <li><a href="https://github.com/gitextensions/gitextensions/releases">Git Extensions</a> : On my Mac and Linux boxes I use the command line for Git, but on Windows I use Git Extensions. I don&#8217;t know why I use a GUI on Windows when I could just use the command line. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Of all the clients I&#8217;ve tried, this is the one that suits me the best. Some of the more popular clients, like GitHub Desktop and SourceTree, drive me nuts.</li> <li><a href="https://www.techsmith.com/screen-capture.html">SnagIt</a> : Great for screen/window/region captures, delayed and auto captures,  and annotations when producing docs. I use it on my Windows PC at work and MBP at home. Could use the free &#8220;Snipping Tool&#8221; on Windows, or the built in stuff on MBP, but I like SnagIt. On Linux I used to use Shutter, but it&#8217;s not great.</li> <li><a href="https://open.spotify.com/browse">Spotify</a> : Don&#8217;t judge me! <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li> </ul> <p>By looking at this list you can probably see why I don&#8217;t have too many problems doing my job on any OS. Most of the tools I use are available on the big two desktop operating systems, and Linux in some form. There are just a lot more options for Windows in the non-work arena, which is why I&#8217;m interested in switching back to it at home too&#8230;</p> <p>A week in and I&#8217;m really happy with Windows 10. I support family members who&#8217;ve used it for a long time, so it wasn&#8217;t a big shock to me. If anything, this experience has strengthened my resolve to ditch the Mac when I eventually replace my home desktop/laptop. Windows 10 is quick, responsive and it looks nice.</p> <p>Cheers</p> <p>Tim&#8230;</p> <p><strong>Update</strong>: Someone pointed out I didn&#8217;t mention AV. I just assume all Windows PCs, Macs and Linux Desktops are running VM and probably malware stuff. I know I do on all devices. In this case we are talking about a corporate PC, so it&#8217;s definitely there.</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/15/a-week-with-my-windows-10-desktop/">A week with my Windows 10 desktop&#8230;</a> was first posted on February 15, 2018 at 9:18 am.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/ExdAOrzflr4" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7882 Thu Feb 15 2018 03:18:19 GMT-0500 (EST) The Tale of the Ardent SpringCleaning Maniac (ASM) https://technology.amis.nl/2018/02/15/the-tale-of-the-ardent-springcleaning-maniac-asm/ <p>or</p> <h3><em>If you want to get rid of stuff, you can always do a good spring-cleaning. Or you can do what I do. Move. </em></h3> <p>&#8211; <a href="http://www.quotemaster.org/author/Ellen+DeGeneres">Ellen DeGeneres</a></p> <p>In order to prepare for a network reorganization we needed to move our current Oracle Enterprise Manager machine into another network segment. So we grabbed the chance, and instead of just moving the existing OEM12c Rel.3 machine we decided to install a new Oracle Enterprise Manager 13(.2.2.0.0) onto two Linux RedHat 6.9 machines and get rid of the SPOF (single point of failure) as well in one elegant movement.</p> <p>Little did we know that we would almost cripple our RAC-clusters by just preparing for the new agents.<br /> <span id="more-47686"></span><br /> Here comes the story of this little adventure.</p> <p>When we were finally ready to move the monitored targets into the new OMS, I started to install second agents on all the hosts, so we still could quickly switch back to EM12c in case we hit a major road block with 13c. Starting with our single instance development- and test machines and then tentatively I began to install on some acceptance machines. Most of our acceptance and production databases are 2-node RAC 11.2.0.4 with (active) DataGuard, meaning each database consisting of 4 instances on four different machines. Except for some connectivity problems in the network, so far all went smoothly.</p> <p>In order to install the new agents I had to check each machine upfront for the required 1Gb free space in /tmp. Often, I had to clean out a lot of old stuff from years ago like long-forgotten Oracle install logs, spoolfiles from SQL adhoc-queries of the developers, downloaded rpm&#8217;s of the Linux administrators, never-checked Puppet logs and so on. I was intrigued that in all cases node 2 was more cluttered than node 1.</p> <blockquote><p>BTW: 1G was not even enough, I would advise to go for at least 1,3G free space in /tmp for the 13c-agents.</p></blockquote> <p>At first, I removed only all old files of user oracle before I even considered removing root files or stuff other users had left years ago. And I did not touch Oracle files and directories younger than 4 weeks. Often that was sufficient to clear enough space to be able to install the agent.</p> <p>But there were machines which were particularly cluttered and I was happily cleaning away until I had enough free space in /tmp freed to install the agent via the GUI. The first node of the first cluster I installed, was ready at about 2018-01-29 15:10h, followed by Node2, due to the necessary cleanup in /tmp, at about 15:45h. The newly installed agents on the cluster worked fine and produced entries about &#8220;Compliance …&#8221;  which were quickly suppressed for the target. Everything seemed fine and I went home quite contently.</p> <p>The next morning we noted that one of the databases on this cluster behaved strangely and complained about not being able to complete the backup due to unrecognized files in the FRA. What?! Some hours later, other databases on this node suddenly began likewise to issue events in OMS13c and slowly hell broke loose which reminded us about ASM issues we had some weeks earlier after some updates. But the only change this machine had undergone lately was the new EM agent. No releation with ASM, forget about that idea….</p> <p>We took a look into the alert log of the first complaining database (primary) and it looked like this (DB and instance names changed):</p> <blockquote><p>…</p> <p>2018-01-29 22:00:00.031000 +01:00</p> <p>Setting Resource Manager plan SCHEDULER[0x32D9]:DEFAULT_MAINTENANCE_PLAN via scheduler window</p> <p>Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter</p> <p>Starting background process VKRM</p> <p>VKRM started with pid=43, OS id=13348</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_m000_13400.trc:</p> <p>ORA-01114: IO error writing block to file (block # )</p> <p>2018-01-29 22:18:11.242000 +01:00</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_m001_35726.trc:</p> <p>ORA-01114: IO error writing block to file (block # )</p> <p>2018-01-29 22:28:11.814000 +01:00</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_m001_53927.trc:</p> <p>ORA-01114: IO error writing block to file (block # )</p> <p>2018-01-29 22:38:12.346000 +01:00</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_m001_65572.trc:</p> <p>ORA-01114: IO error writing block to file (block # )</p> <p>2018-01-29 22:48:12.872000 +01:00</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_m001_75911.trc:</p> <p>ORA-01114: IO error writing block to file (block # )</p> <p>2018-01-29 22:58:13.371000 +01:00</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_m001_86086.trc:</p> <p>ORA-01114: IO error writing block to file (block # )</p> <p>2018-01-29 23:05:10.655000 +01:00</p> <p>Thread 2 advanced to log sequence 917 (LGWR switch)</p> <p>Current log# 3 seq# 917 mem# 0: +DATA01/db1_prim/onlinelog/group_3.294.918479161</p> <p>Current log# 3 seq# 917 mem# 1: +FRA01/db1_prim/onlinelog/group_3.306.918479161</p> <p>2018-01-29 23:08:02.093000 +01:00</p> <p>WARNING: ASM communication error: op 11 state 0x50 (3113)</p> <p>ERROR: slave communication error with ASM</p> <p>Unable to create archive log file &#8216;+FRA01&#8217;</p> <p>Errors in file /u01/oracle/diag/rdbms/db1_prim/DB1_PRIM2/trace/DB1_PRIM2_arc0_18470.trc:</p> <p>ORA-19816: WARNING: Files may exist in db_recovery_file_dest that are not known to database.</p> <p>ORA-17502: ksfdcre:4 Failed to create file +FRA01</p> <p>ORA-03113: end-of-file on communication channel</p> <p>Process ID:</p> <p>Session ID: 708 Serial number: 1895</p> <p>*************************************************************</p> <p>WARNING: A file of type ARCHIVED LOG may exist in</p> <p>db_recovery_file_dest that is not known to the database.</p> <p>Use the RMAN command CATALOG RECOVERY AREA to re-catalog</p> <p>any such files. If files cannot be cataloged, then manually</p> <p>delete them using OS command. This is most likely the</p> <p>result of a crash during file creation.</p> <p>*************************************************************</p> <p>ARC0: Error 19504 Creating archive log file to &#8216;+FRA01&#8217;</p> <p>ARCH: Archival stopped, error occurred. Will continue retrying</p> <p>ORACLE Instance DB1_PRIM2 &#8211; Archival Error</p> <p>ORA-16038: log 4 sequence# 916 cannot be archived</p> <p>ORA-19504: failed to create file &#8220;&#8221;</p> <p>ORA-00312: online log 4 thread 2: &#8216;+DATA01/db1_prim/onlinelog/group_4.295.918479161&#8217;</p> <p>ORA-00312: online log 4 thread 2: &#8216;+FRA01/db1_prim/onlinelog/group_4.307.918479163&#8217;RNING: A file of type ARCHIVED LOG may exist in …</p></blockquote> <p>Remember the installation of the agent was in the afternoon at about 4 o&#8217;clock and the trouble seemed to have started at 22:00h and not all databases on the cluster seem to have a problem with ASM or their FRA&#8217;s. The connection between FRA-trouble and agent was not obvious, I would say.</p> <p>At that moment we did not &#8216;see&#8217; the <em>WARNING: ASM communication error: op 11 state 0x50 (3113)</em> but reacted to the archival error. But of course, that did not solve the problem.</p> <p>When we had a look into the ASM-log on node2 of this cluster, it revealed that its ASM instance had crashed with ORA-29701… while node1 still functioned normally!</p> <p>A quick search on MOS for &#8220;ORA-29701&#8221; resulted in nothing that seem to fit our problem, until I widened the search on the net and almost accidentally found a website about <a href="https://exastuff.blogspot.nl/2017/05/aware-of-network-socket-files-before.html">EXADATA</a>, describing an ORA-29701 error of ASM and giving advice about &#8220;<strong>restoring a lost socket file</strong>&#8221; by trying to restart the complete CRS stack on the node. And if that didn&#8217;t do the trick, try rebooting the server. The last was in this environment a little tricky and takes some time to get approval, so I was prepared to do whatever necessary, as long as it did not involve a reboot of the server to solve this problem.</p> <p>But a lost socket file?!? They used to be in /var/tmp on Linux, if I was not mistaken, but I only touched /tmp…</p> <p>I decided to go along with this advice and stopped the CRS stack on the unhealthy node and therefore all database instances on it, which were still limping on as good or bad as they could on one node, as grid owner with <em>crsctl stop crs</em>.<br /> Then I checked if all processes were really down, which they weren&#8217;t. Therefore I wielded the kill-9–sword until everything which had anything to do with CRS or oracle was gone from the process list (Do I hear some deep groans about this?). And started anew with<em> crsctl start crs</em>.<br /> Luckily, the result was a node with CRS, ASM, listeners and all database instances started as if the machine just came back from a successful and smooth reboot. And even a new <em>/tmp/.oracle </em>directory … one of the older directories I had cleaned up in /tmp to make room for the agent installs!<br /> Pfew, blessed are the innocent! It all worked again.</p> <p>But what had caused all this trouble? According to this article, the socket files for Linux can be found in a hidden directory called .oracle. Depending on the *NIX dialect that could be under <strong>/tmp/.oracle</strong>, <strong>/usr/tmp/.oracle</strong> or <strong>/var/tmp/.oracle</strong>. Under Linux86_64 this directory is officially under /var/tmp but Oracle also hides a copy under /tmp/.oracle and also stores socket files of the Oracle Net Listener or Cluster Healthy Monitor in there (see DOC ID 1322234.1).</p> <p>The article also cited DOC ID 391790.1, which is not among the first 10 documents presented when you query MOS for &#8220;ORA-29701&#8221;, which would have helped to find the culprit far quicker!</p> <p>What an irony – that later that day, Jan 30<sup>th </sup>2018, Oracle released <a href="https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=400040098795491&amp;id=370605.1&amp;_adf.ctrl-state=9mm1ahoal_314">DOC ID 370605.1</a> …. which tries to remind us all again:<br /> <strong><em>Never delete any hidden </em></strong><strong><em>.oracle</em></strong><strong><em> directory you come across or fear for your cluster!</em></strong></p> <p><em>Have fun!</em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/15/the-tale-of-the-ardent-springcleaning-maniac-asm/">The Tale of the Ardent SpringCleaning Maniac (ASM)</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Karin Kriebisch https://technology.amis.nl/?p=47686 Wed Feb 14 2018 18:55:11 GMT-0500 (EST) High Water Mark USAGE http://oracle-help.com/scripts/high-water-mark-usage/ <p><span style="font-family: arial, helvetica, sans-serif; font-size: 10pt;">Before start this article we must know about &#8220;<strong>HWM&#8221; . </strong>After did lots of R&amp;D i found the technical definition </span></p> <p><strong><span style="font-family: arial, helvetica, sans-serif; font-size: 10pt;">Explanation in Detail: </span></strong><span style="font-family: arial, helvetica, sans-serif; font-size: 10pt;"><strong>(http://www.dba-oracle.com/t_high_water_mark.html)</strong> .</span></p> <p><span style="font-family: arial, helvetica, sans-serif; font-size: 10pt;"><a href="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg"><img data-attachment-id="3392" data-permalink="http://oracle-help.com/scripts/high-water-mark-usage/attachment/images-2-4/" data-orig-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?fit=318%2C159" data-orig-size="318,159" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="images (2)" data-image-description="" data-medium-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?fit=300%2C150" data-large-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?fit=318%2C159" class="wp-image-3392 alignleft" src="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?resize=150%2C75" alt="" width="150" height="75" srcset="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?resize=300%2C150 300w, https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?resize=60%2C30 60w, https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?resize=150%2C75 150w, https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-2.jpg?w=318 318w" sizes="(max-width: 150px) 100vw, 150px" data-recalc-dims="1" /></a>The high water mark (HWM) for an Oracle table is a construct that shows the table at its greatest size.  Just as a lake has a high-water mark after a draught, an Oracle table has a high water mark that shows the greatest size of the table, the point at which it consumed the most extents.</span></p> <p>&nbsp;</p> <p><strong>Why do we need HWM ?</strong></p> <p>The high water mark (HWM) has a function that comes into play with tables that have heavy insert, update and delete activity. Every time data is changed in a table, the HWM moves to a setting in each table that shows how much free space is left in terms of blocks used and free in the segment object.</p> <p>To resize any datafile to reclaim some space on the datafile. Need to check for the High water mark usage and based on that Water mark we may have to resize the respective datafile to get the space reclaimed.</p> <p>We had an critical space issue on the datawarehouse environment to reclaim the space identified the datafiles using below query and resized the respective datafiles where we can get some space through this process.</p> <p>Note: This is for a temporary Fix and have to plan for a better storage.</p><pre class="crayon-plain-tag">set verify off column file_name format a60 word_wrapped column smallest format 9999,990 heading "Smallest|Size|Poss." column currsize format 9999,990 heading "Current|Size" column savings format 9999,990 heading "Poss.|Savings" set pages 100 break on report compute sum of savings on report column value new_val blksize select value from v$parameter where name = 'db_block_size'; / SELECT FILE_NAME, CEIL( (NVL(HWM,1)*&amp;&amp;BLKSIZE)/1024/1024 ) SMALLEST, CEIL( BLOCKS*&amp;&amp;BLKSIZE/1024/1024) CURRSIZE, CEIL( BLOCKS*&amp;&amp;BLKSIZE/1024/1024) - CEIL((NVL(HWM,1)*&amp;&amp;BLKSIZE)/1024/1024 ) SAVINGS FROM DBA_DATA_FILES DBADF, ( SELECT FILE_ID, MAX(BLOCK_ID+BLOCKS-1) HWM FROM DBA_EXTENTS where tablespace_name ='USERS' GROUP BY FILE_ID ) DBAFS WHERE DBADF.TABLESPACE_NAME='USERS' and DBADF.FILE_ID = DBAFS.FILE_ID(+) and (CEIL( BLOCKS*&amp;&amp;BLKSIZE/1024/1024) - CEIL( (NVL(HWM,1)*&amp;&amp;BLKSIZE)/1024/1024 )) &gt; 300; FILE_NAME Poss. Size Savings --------------------------------------------------------------------------------- --------- --------- --------- +DATA_PRD_1/PROD/datafile/users_data.363.82556482999 31,396 31,744 348 +DATA_PRD_1/PROD/datafile/users_data.1042.86668970799 16,076 16,512 436 --------- sum 784</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/scripts/high-water-mark-usage/">High Water Mark USAGE</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3390 Wed Feb 14 2018 11:14:44 GMT-0500 (EST) Join Factorization https://jonathanlewis.wordpress.com/2018/02/14/join-factorization/ <p>This item is, by a roundabout route, a follow-up to <a href="https://jonathanlewis.wordpress.com/2018/02/13/coalesce-v-nvl/"><em><strong>yesterday&#8217;s note</strong></em></a> on a critical difference in cardinality estimates that appeared if you used the <em><strong>coalesce()</strong></em> function in its simplest form as a substitute for the <em><strong>nvl()</strong></em> function. Connor McDonald wrote <a href="https://connor-mcdonald.com/2018/02/13/nvl-vs-coalesce/"><em><strong>a followup note</strong></em></a> about how using the <em><strong>nvl()</song></em> function in a suitable predicate could lead to Oracle splitting a query into a UNION ALL (in version 12.2), which led me to go back to <a href="https://jonathanlewis.wordpress.com/2007/01/09/conditional-sql/"><em><strong>a note I&#8217;d written</strong></em></a> on the same topic about 10 years earlier where the precursor of this feature already existed but used CONCATENATION instead of OR-EXPANSION. The script I&#8217;d used for my earlier article was actually one I&#8217;d written in February 2003 and tested fairly regularly since &#8211; which brings me to this article, because I finally tested my script against 12.2.0.1 to discover a very cute bit of optimisation.</p> <p>The business of splitting a query into two parts can be used even when the queries are more complex and include joins &#8211; this doesn&#8217;t always happen automatically and sometimes has to be hinted, but that can be a costs/statistics thing) for example, from 12.1.0.2 &#8211; a query and its execution plan:</p> <pre class="brush: plain; title: ; notranslate"> select * from t1, t2 where t1.v1 = nvl(:v1,t1.v1) and t2.n1 = t1.n1 ; --------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1001 | 228K| 11 (0)| 00:00:01 | | 1 | CONCATENATION | | | | | | |* 2 | FILTER | | | | | | |* 3 | HASH JOIN | | 1000 | 228K| 8 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL | T2 | 1000 | 106K| 4 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL | T1 | 1000 | 122K| 4 (0)| 00:00:01 | |* 6 | FILTER | | | | | | | 7 | NESTED LOOPS | | 1 | 234 | 3 (0)| 00:00:01 | | 8 | NESTED LOOPS | | 1 | 234 | 3 (0)| 00:00:01 | | 9 | TABLE ACCESS BY INDEX ROWID BATCHED| T1 | 1 | 125 | 2 (0)| 00:00:01 | |* 10 | INDEX RANGE SCAN | T1_IDX1 | 1 | | 1 (0)| 00:00:01 | |* 11 | INDEX UNIQUE SCAN | T2_PK | 1 | | 0 (0)| 00:00:01 | | 12 | TABLE ACCESS BY INDEX ROWID | T2 | 1 | 109 | 1 (0)| 00:00:01 | --------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter(:V1 IS NULL) 3 - access(&quot;T2&quot;.&quot;N1&quot;=&quot;T1&quot;.&quot;N1&quot;) 5 - filter(&quot;T1&quot;.&quot;V1&quot; IS NOT NULL) 6 - filter(:V1 IS NOT NULL) 10 - access(&quot;T1&quot;.&quot;V1&quot;=:V1) 11 - access(&quot;T2&quot;.&quot;N1&quot;=&quot;T1&quot;.&quot;N1&quot;) </pre> <p>You can see in this plan how Oracle has split the query into two queries combined through concatenation with FILTER operations at lines 2 <em>(:v1 is null)</em> and 6 <em>(:v1 is not null)</em> to allow the runtime engine to execute only the appropriate branch. You&#8217;ll also note that each branch can be optimised separately and in this case the two branches get dramatically different paths because of the enormous difference in the estimated volumes of data.</p> <p>So let&#8217;s move up to 12.2.0.1 and see what happens to this query &#8211; but first I&#8217;m going to execute a naughty <em>&#8220;alter session&#8230;&#8221;</em>:</p> <pre class="brush: plain; title: ; notranslate"> ------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1001 | 180K| 11 (0)| 00:00:01 | | 1 | VIEW | VW_ORE_F79C84EE | 1001 | 180K| 11 (0)| 00:00:01 | | 2 | UNION-ALL | | | | | | |* 3 | FILTER | | | | | | | 4 | NESTED LOOPS | | 1 | 234 | 3 (0)| 00:00:01 | | 5 | NESTED LOOPS | | 1 | 234 | 3 (0)| 00:00:01 | | 6 | TABLE ACCESS BY INDEX ROWID BATCHED| T1 | 1 | 125 | 2 (0)| 00:00:01 | |* 7 | INDEX RANGE SCAN | T1_IDX1 | 1 | | 1 (0)| 00:00:01 | |* 8 | INDEX UNIQUE SCAN | T2_PK | 1 | | 0 (0)| 00:00:01 | | 9 | TABLE ACCESS BY INDEX ROWID | T2 | 1 | 109 | 1 (0)| 00:00:01 | |* 10 | FILTER | | | | | | |* 11 | HASH JOIN | | 1000 | 228K| 8 (0)| 00:00:01 | | 12 | TABLE ACCESS FULL | T2 | 1000 | 106K| 4 (0)| 00:00:01 | |* 13 | TABLE ACCESS FULL | T1 | 1000 | 122K| 4 (0)| 00:00:01 | ------------------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter(:V1 IS NOT NULL) 7 - access(&quot;T1&quot;.&quot;V1&quot;=:V1) 8 - access(&quot;T2&quot;.&quot;N1&quot;=&quot;T1&quot;.&quot;N1&quot;) 10 - filter(:V1 IS NULL) 11 - access(&quot;T2&quot;.&quot;N1&quot;=&quot;T1&quot;.&quot;N1&quot;) 13 - filter(&quot;T1&quot;.&quot;V1&quot; IS NOT NULL) </pre> <p>There&#8217;s nothing terribly exciting about the change &#8211; except for the disappearence of the CONCATENATION operator and the appearance of the VIEW and UNION ALL operators to replace it (plus you&#8217;ll see that the two branches appear in the opposite order in the plan). But let&#8217;s try again, without doing that <em>&#8220;alter session&#8230;&#8221;</em>:</p> <pre class="brush: plain; title: ; notranslate"> -------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1001 | 229K| 10 (0)| 00:00:01 | |* 1 | HASH JOIN | | 1001 | 229K| 10 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL | T2 | 1000 | 106K| 4 (0)| 00:00:01 | | 3 | VIEW | VW_JF_SET$A2355C8B | 1001 | 123K| 6 (0)| 00:00:01 | | 4 | UNION-ALL | | | | | | |* 5 | FILTER | | | | | | |* 6 | TABLE ACCESS FULL | T1 | 1000 | 122K| 4 (0)| 00:00:01 | |* 7 | FILTER | | | | | | | 8 | TABLE ACCESS BY INDEX ROWID BATCHED| T1 | 1 | 125 | 2 (0)| 00:00:01 | |* 9 | INDEX RANGE SCAN | T1_IDX1 | 1 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access(&quot;T2&quot;.&quot;N1&quot;=&quot;ITEM_1&quot;) 5 - filter(:V1 IS NULL) 6 - filter(&quot;T1&quot;.&quot;V1&quot; IS NOT NULL) 7 - filter(:V1 IS NOT NULL) 9 - access(&quot;T1&quot;.&quot;V1&quot;=:V1) </pre> <p>The plan now shows a VIEW which is a UNION ALL involving only table t1 in both its branches. The result set from the view is then used as the probe table of a hash join with <em><strong>t2</strong></em>. You&#8217;ll note that the name of the view is now <em><strong>VW_JF_SET$A2355C8B</strong></em> &#8211; that&#8217;s JF for <a href="https://blogs.oracle.com/optimizer/optimizer-transformations:-join-factorization"><em><strong>&#8220;Join Factorization&#8221;</strong></em></a>, and the alter session I excecuted to get the first plan was to disable the feature: <em>&#8216;alter session set &#8220;_optimizer_join_factorization&#8221;= false;&#8217;</em>.</p> <p>Join factorization can occur when the optimizer sees a union all view with some tables that are common to both (all) branches of the query, and finds that it can move those tables outside the query while getting the same end result at a lower cost. In this case it happens to be a nice example of how the optimizer can transform and transform again to get to the lowest cost plan.</p> <p>It&#8217;s worth noting that Join Factorization has been around since 11.2.x.x, and Or Expansion has been around for even longer &#8211; but it&#8217;s not until 12.2 that <em><strong>nvl()</strong></em> transforms through Or Expansion, which allows it to transform through Join Factorization.</p> <p>You&#8217;ll note, by the way that with this plan we always do a full tablescan of <em><strong>t2</strong></em>, whereas with just Or-Expansion it&#8217;s a potential threat that may never (or hardly ever) be realised.  That&#8217;s a point to check if you find that the transformation starts to appear inappropriately on an upgrade. There is a hint to disable the feature for a query, but it&#8217;s not trivial to get it right so if you do need to block the feature the smart hint (or <a href="https://jonathanlewis.wordpress.com/2017/06/12/dbms_sqldiag/"><em><strong>SQL Patch</strong></em></a>) would be <em>&#8220;opt_param(&#8216;_optimizer_join_factorization&#8217; &#8216;false&#8217;)&#8221;</em>.</p> <h3>Footnote:</h3> <p>If you want to run the experiments yourself, here&#8217;s the script I used to generate the data. It&#8217;s more complicated than it needs to be because I use the same tables in several different tests:</p> <pre class="brush: plain; title: ; notranslate"> rem rem Script: null_plan_122.sql rem Author: Jonathan Lewis rem Dated: February 2018 rem Purpose: rem rem Last tested rem 12.2.0.1 Join Factorization rem 12.1.0.2 Concatenation rem rem drop table t2; drop table t1; -- @@setup -- various set commands etc. create table t1 ( n1 number(5), n2 number(5), v1 varchar2(10), v2 varchar2(10), v3 varchar2(10), v4 varchar2(10), v5 varchar2(10), padding varchar2(100), constraint t1_pk primary key(n1) ); insert into t1 select rownum, rownum, rownum, trunc(100 * dbms_random.value), trunc(100 * dbms_random.value), trunc(100 * dbms_random.value), trunc(100 * dbms_random.value), rpad('x',100) from all_objects where rownum &lt;= 1000 -- &gt; comment to avoid WordPress format mess ; create unique index t1_n2 on t1(n2); create index t1_idx1 on t1(v1); create index t1_idx2 on t1(v2,v1); create index t1_idx3 on t1(v3,v2,v1); create table t2 ( n1 number(5), v1 varchar2(10), padding varchar2(100), constraint t2_pk primary key(n1) ); insert into t2 select rownum, rownum, rpad('x',100) from all_objects where rownum &lt;= 1000 -- &gt; comment to avoid WordPress format mess ; create index t2_idx on t2(v1); begin dbms_stats.gather_table_stats( ownname =&gt; user, tabname =&gt;'T1', method_opt =&gt; 'for all columns size 1' ); dbms_stats.gather_table_stats( ownname =&gt; user, tabname =&gt;'T2', method_opt =&gt; 'for all columns size 1' ); end; / variable n1 number variable n2 number variable v1 varchar2(10) variable v2 varchar2(10) variable v3 varchar2(10) exec :n1 := null exec :n2 := null exec :v1 := null exec :v2 := null exec :v3 := null spool null_plan_122 set autotrace traceonly explain prompt ============================================ prompt One colx = nvl(:b1,colx) predicate with join prompt ============================================ select * from t1, t2 where t1.v1 = nvl(:v1,t1.v1) and t2.n1 = t1.n1 ; alter session set &quot;_optimizer_join_factorization&quot; = false; select * from t1, t2 where t1.v1 = nvl(:v1,t1.v1) and t2.n1 = t1.n1 ; alter session set &quot;_optimizer_join_factorization&quot; = true; set autotrace off spool off </pre> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17909 Wed Feb 14 2018 10:38:58 GMT-0500 (EST) Sosreport on Oracle Linux http://oracle-help.com/oracle-database/sosreport-oracle-linux/ <p>The &#8220;<strong>sosreport</strong>&#8221; is a tool to collect troubleshooting data on an <strong>Oracle Linux system</strong>. It generates a compressed tarball of debugging information that gives an overview of the most important logs and configuration of a Linux system, to be sent to<strong> Oracle Support</strong>.</p> <p>Among other things, the <strong>sosreport</strong> includes information about the installed rpm versions, syslog, network configuration, mounted filesystems, disk partition details, loaded kernel modules and status of all services</p> <p>It has a plugin-based architecture that enables features to be enabled or disabled, and additional functionality added.</p> <p><span id="kmPgTpl:r1:ot71" class="kmContent">To create the <strong>sosreport</strong> can be as simple as running the command in a terminal, without arguments, as root:</span></p><pre class="crayon-plain-tag"># sosreport sosreport (version 3.2) This utility will collect some detailed information about the hardware and setup of your Enterprise Linux system. The information is collected and an archive is packaged under /tmp, which you can send to a support representative. This information will be used for diagnostic purposes ONLY and it will be considered confidential information. This process may take a while to complete. No changes will be made to your system. Press ENTER to continue, or CTRL-C to quit. Please enter your first initial and last name [fname]: skant Please enter the case number that you are generating this report for: 3-1234567890</pre><p>On completion, a bzip2-compressed tarball will be created in <strong>/tmp (/var/tmp on Oracle Linux 7)</strong>, along with a file containing the md5sum so that the file&#8217;s integrity can be verified by the support representative. The filename will be printed to the terminal:</p><pre class="crayon-plain-tag">Progress [###################100%##################][03:15/03:15] Creating compressed archive... Your sosreport has been generated and saved in: /tmp/sosreport-skant.3123456789-182843-6a3d9a.tar.bz2 The md5sum is: 17be8be4266b06efd9726825ff6a3d9a Please send this file to your support representative.</pre><p>To get more parameter for sosreport</p><pre class="crayon-plain-tag"># sosreport -h Usage: sosreport [options] Options: -h, --help show this help message and exit -l, --list-plugins list plugins and available plugin options -n NOPLUGINS, --skip-plugins=NOPLUGINS disable these plugins -e ENABLEPLUGINS, --enable-plugins=ENABLEPLUGINS enable these plugins -o ONLYPLUGINS, --only-plugins=ONLYPLUGINS enable these plugins only -k PLUGOPTS, --plugin-option=PLUGOPTS plugin options in plugname.option=value format (see -l) --log-size=LOG_SIZE set a limit on the size of collected logs -a, --alloptions enable all options for loaded plugins --all-logs collect all available logs regardless of size --batch batch mode - do not prompt interactively --build preserve the temporary directory and do not package results -v, --verbose increase verbosity --verify perform data verification during collection --quiet only print fatal errors --debug enable interactive debugging using the python debugger --ticket-number=CASE_ID specify ticket number --case-id=CASE_ID specify case identifier -p PROFILES, --profile=PROFILES enable plugins selected by the given profiles --list-profiles --name=CUSTOMER_NAME specify report name --config-file=CONFIG_FILE specify alternate configuration file --tmp-dir=TMP_DIR specify alternate temporary directory --no-report Disable HTML/XML reporting -z COMPRESSION_TYPE, --compression-type=COMPRESSION_TYPE compression technology to use [auto, gzip, bzip2, xz] (default=auto) Some examples: enable cluster plugin only and collect dlm lockdumps: # sosreport -o cluster -k cluster.lockdump disable memory and samba plugins, turn off rpm -Va collection: # sosreport -n memory,samba -k rpm.rpmva=off</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-database/sosreport-oracle-linux/">Sosreport on Oracle Linux</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3429 Wed Feb 14 2018 06:45:15 GMT-0500 (EST) How businesses are using blockchain today https://blog.pythian.com/businesses-using-blockchain-today/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p><span style="font-weight: 400;">Despite the hype surrounding the fluctuating prices of cryptocurrencies, their underlying technology, blockchain, is driving innovation and generating real value. According to an </span><a href="https://www.forbes.com/sites/laurashin/2018/02/13/forbes-fintech-50-2018-the-future-of-blockchain-and-crypto/#7c189c1a1036"><span style="font-weight: 400;">article published today in Forbes</span></a><span style="font-weight: 400;">, there are nine blockchain startups on the </span><a href="https://www.forbes.com/sites/janetnovack/2018/02/13/the-forbes-fintech-50-for-2018"><span style="font-weight: 400;">Forbes Fintech 50 list for 2018</span></a><span style="font-weight: 400;"> that are building infrastructure to support both cryptocurrency markets and initiatives that could impact how financial transactions are processed. </span></p> <p><span style="font-weight: 400;">In our blog post </span><a href="https://blog.pythian.com/discovering-potential-blockchain-business/"><span style="font-weight: 400;">The Key Concepts of Blockchain for Business</span></a><span style="font-weight: 400;">, we introduced the key concepts of the business blockchain. And our more recent post </span><a href="https://blog.pythian.com/blockchain-7-areas-disruption/"><span style="font-weight: 400;">Blockchain: 7 Areas of Disruption</span></a><span style="font-weight: 400;"> explored the areas where this technology can make the biggest impact. In this post, we’re exploring real-world applications of blockchain that are being developed or experimented with by real companies, today. </span></p> <p><span style="font-weight: 400;">Blockchain is driving innovation and efficiencies everywhere—both within startups and more traditional, established companies, and in both the private and public sectors. It’s becoming widespread across many industries—from financial services and real estate to healthcare, utilities and retail. All of these markets are taking advantage of blockchain applications like Digital Ledger Technology (DLT) and smart contracts.</span></p> <h3><b>Financial services</b></h3> <p><span style="font-weight: 400;">Given that a recently released report by Accenture claims DLT could reduce infrastructure costs for most of the largest investment banks by an average of 30 percent (</span><a href="http://www.computerworld.com/article/3191077/security/faq-what-is-blockchain-and-how-can-it-help-business.html"><span style="font-weight: 400;">translating to $8 billion to $12 billion in annual cost savings)</span></a><span style="font-weight: 400;"> it makes sense that financial institutions are interested in blockchain. The Bank of England is investigating DLT to improve the speed and efficiency of the UK settlements system—and also save tens of billions of dollars in the process.</span></p> <p><span style="font-weight: 400;">The accounting industry is also interested in DLT because it eliminates massive amounts of record keeping. Angus Champion de Crespigny, <a href="http://www.computerworld.com/article/3190698/data-storage/for-enterprises-blockchain-isn-t-necessarily-a-good-fit.html">blockchain leader at Ernst &amp; Young</a>—one of the “Big Four” global accounting firms—says, &#8220;We&#8217;re seeing interest in using it to propagate security policies and identity access management, but it&#8217;s early days. We&#8217;re seeing more vendors producing business-specific products, which is really what&#8217;s needed.&#8221; One example is a service for finance and accounting recently released by IT services company Genpact, which uses smart contracts for orders between a customer and an organization.</span></p> <h3><b>Real estate</b></h3> <p><span style="font-weight: 400;">The real estate sector is looking to blockchain to expedite processes as well as reduce fraud. With blockchain, they can eliminate the time of third-party verification by escrow and title companies—and also eliminate the related costs.</span></p> <p><span style="font-weight: 400;">Blockchain digital ownership certificates, which are almost impossible to replicate, may also make false property listings and forged ownership documents <a href="https://techcrunch.com/2016/02/06/3-ways-that-blockchain-will-change-the-real-estate-market/">a thing of the past</a>. And products are already being developed. Ubitquity is a </span><a href="https://www.ubitquity.io/web/index.html"><span style="font-weight: 400;">Software-as-a-Service (SaaS) platform</span></a><span style="font-weight: 400;"> for recording and tracking property by e-recording companies, title companies and municipalities.</span></p> <p><span style="font-weight: 400;">Deloitte claims that &#8220;</span><span style="font-weight: 400;">blockchain-based smart contracts could </span><a href="https://www2.deloitte.com/us/en/pages/financial-services/articles/blockchain-in-commercial-real-estate.html"><span style="font-weight: 400;">revolutionize commercial real estate.</span></a>&#8220;<span style="font-weight: 400;"> And the International Blockchain Real Estate Association (</span><a href="http://www.ibtcrea.org/"><span style="font-weight: 400;">IBREA</span></a><span style="font-weight: 400;">), founded 2013, already has nearly 3,000 members in 17 countries, showing that the real estate industry has many early adopters. </span></p> <h3><b>Healthcare</b></h3> <p><span style="font-weight: 400;">In the healthcare sector, blockchain has </span><a href="https://blockgeeks.com/guides/smart-contracts/"><span style="font-weight: 400;">multiple implementations</span></a><span style="font-weight: 400;">, including storing personal health records, supervising drugs, ensuring regulatory compliance and managing healthcare supplies.</span></p> <p><span style="font-weight: 400;">The U.S. Department of Health and Human Services (HSS) is exploring how blockchain can be used in the area of digital health. Their competition, the Blockchain Challenge, solicited ideas on ways to manage, protect and exchange medical information with blockchain. In response, <a href="https://www.computerworld.com/article/3137490/enterprise-applications/article.html">70 white papers were received</a> by individuals, companies and organizations.</span></p> <h3><b>Power utilities</b></h3> <p><span style="font-weight: 400;">In the public realm, power utilities are already using blockchain. In an area of Brooklyn, New York City, residents are able to sell excess power generated by rooftop solar panels to a local utility through a microgrid. <a href="http://www.computerworld.com/article/3191256/sustainable-it/blockchain-used-to-power-brooklyn-microgrid-for-solar-energy-re-sale.html">The process is enabled by blockchain DLT</a>, which records every transaction.</span></p> <p><span style="font-weight: 400;">The microgrid was set up by Siemens Digital Grid Division, one of the world’s major telecommunications companies—and it’s a safe bet that their competitors in high tech are also investing heavily in blockchain research and implementations.</span></p> <h3><b>Retail</b></h3> <p><span style="font-weight: 400;">Retail companies initially jumped on the Bitcoin bandwagon but they’re now exploring other uses of the technology. One example is online retailer Overstock.com. In late 2014, the company decided to start accepting payments in Bitcoin—but they soon realized that another area of potential use was in the settlement of trades.</span></p> <p><span style="font-weight: 400;">Overstock set up a subsidiary called t0 Inc. (tee-zero) to develop blockchain technologies for commercial use. Its distributed ledger platform for capital markets is <a href="http://www.computerworld.com/article/3137490/enterprise-applications/article.html">the world’s first blockchain-based trading platform</a>.</span></p> <p><span style="font-weight: 400;">Blockchain uber-expert William Mougayar also mentions startup </span><a href="http://loyyal.com/"><span style="font-weight: 400;">Loyyal</span></a><span style="font-weight: 400;">, whose universal loyalty and rewards platform is built with blockchain’s smart contract technology.</span></p> <h3><b>What does this mean for your business?</b></h3> <p><span style="font-weight: 400;">Whether you’re in a startup or an established company, private industry or the public sector—and regardless of your vertical market—if you’re not looking at blockchain, you probably should be.</span></p> </div></div> Beth Johnson https://blog.pythian.com/?p=103430 Tue Feb 13 2018 18:06:57 GMT-0500 (EST) Coalesce v. NVL https://jonathanlewis.wordpress.com/2018/02/13/coalesce-v-nvl/ <p>&#8220;Modern&#8221; SQL should use the <em><strong>coalesce()</strong></em> function rather than the <em><strong>nvl()</strong></em> function &#8211; or so the story goes &#8211; but do you always want to do that to an Oracle database ? The answer is &#8220;maybe not&#8221;. Although the <em><strong>coalesce()</strong></em> function can emulate the <em><strong>nvl()</strong></em> function (in many cases) there are significant differences in behaviour, some that suggest <a href="https://jonathanlewis.wordpress.com/2014/01/01/nvl-2/"><em><strong>it&#8217;s a good idea</strong></em></a> to use the substitution and others that suggest otherwise. Different decisions may be appropriate for different circumstances, and this note highlights one case <b>against</b> the substitution. We&#8217;ll start with a simple data set:</p> <pre class="brush: plain; title: ; notranslate"> rem rem Script: nvl_coalesce_2.sql rem Author: Jonathan Lewis rem Dated: Feb 2018 rem create table t1 as with generator as ( select rownum id from dual connect by level comment to avoid wordpress format mess ) select rownum id, case mod(rownum,4) when 0 then 'Y' else 'N' end yes_no, case mod(rownum,5) when 0 then 'Y' when 1 then null else 'N' end yes_null_no, lpad('x',100,'x') padding from generator ; begin dbms_stats.gather_table_stats( ownname =&gt; user, tabname =&gt;'T1', method_opt =&gt; 'for all columns size 1 for columns size 5 yes_no yes_null_no' ); end; / </pre> <p>I&#8217;ve created a table with 10,000 rows which two columns with a highly skewed data distribution. Because I know that the skew is supposed to have a significant effect I&#8217;ve used a non-standard <em><strong>method_opt</strong></em> when gathering stats &#8211; in a production system I would have the packaged procedure <em><strong>dbms_stats.set_table_prefs()</strong></em> to associate this with the table.</p> <p>The difference between the <em><strong>yes_no</strong></em> and the <em><strong>yes_null_no</strong></em> columns is that the latter is null for a significant fraction of the rows.</p> <ul> <li>yes_no has: 7,500 N, 2,500 Y</li> <li>yes_null_no has: 6,000 N, 2,000 null, 2,000 Y</li> </ul> <p>Let&#8217;s now try to count the <em>&#8220;N or null&#8221;</em> rows using two different functions and see what estimates the optimizer produces for the counts. First counting the <em><strong>yes_no</strong></em> column &#8211; using <em><strong>nvl()</strong></em> then <em><strong>coalesce()</strong></em></p> <pre class="brush: plain; title: ; notranslate"> set autotrace traceonly explain select * from t1 where nvl(yes_no,'N') = 'N'; select * from t1 where coalesce(yes_no,'N') = 'N'; set autotrace off -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 7500 | 798K| 24 (5)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T1 | 7500 | 798K| 24 (5)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(NVL("YES_NO",'N')='N') -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | 10900 | 25 (8)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T1 | 100 | 10900 | 25 (8)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(COALESCE("YES_NO",'N')='N') </pre> <p>The estimate for the <em><strong>nvl()</strong> </em>is accurate; the estimate for the <em><strong>coalesce()</strong></em> query is 100 rows.</p> <p>Let&#8217;s repeat the test using the <em><strong>yes_null_no</strong></em> column, again starting with <em><strong>nvl()</strong></em> followed by <em><strong>coalesce()</strong></em>:</p> <pre class="brush: plain; title: ; notranslate"> set autotrace traceonly explain select * from t1 where nvl(yes_null_no,'N') = 'N'; select * from t1 where coalesce(yes_null_no,'N') = 'N'; set autotrace off -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 8000 | 851K| 24 (5)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T1 | 8000 | 851K| 24 (5)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(NVL("YES_NULL_NO",'N')='N') -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | 10900 | 25 (8)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T1 | 100 | 10900 | 25 (8)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(COALESCE("YES_NULL_NO",'N')='N') </pre> <p>Again we get the right result for the <em><strong>nvl()</strong></em> estimate (8,000 = 6,000 N + 2,000 null) and 100 for the <em><strong>coalesce()</strong></em> estimate.</p> <p>By now you&#8217;ve probably realised that the <em><strong>coalesce()</strong></em> estimate is simply the <em>&#8220;1% guess for equality&#8221;</em> that applies to most cases of <strong><em>function(column)</em></strong>. So, as we saw in the previous post, <em><strong>coalesce()</strong> </em>gives us the benefits of &#8220;short-circuiting&#8221; but now we see it also threatens us with damaged cardinality estimates. The latter is probably less important than the former in many cases (especially since we might ne able to address the problem very efficiently using <a href="https://jonathanlewis.wordpress.com/2009/04/16/virtual-columns/"><em><strong>virtual columns</strong></em></a>), but it&#8217;s probably worth remembering.</p> <p>&nbsp;</p> <p>&nbsp;</p> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17898 Tue Feb 13 2018 06:23:57 GMT-0500 (EST) The curious case of the blank plugin page in OEM13c https://technology.amis.nl/2018/02/12/the-curious-case-of-the-blank-plugin-page-in-oem13c/ <p>After an upgrade of Oracle Enterprise Manager from 12.1.0.5 to 13.2, I wanted to deploy  a new version of the plugin oracle.sysman.db. Downloaded the new version and got to the plugin-management page to apply the patch. But all I got was a blank page. Cost me quite a while to figure out what the – almost humiliating – workaround / solution eventually was.</p> <p><span id="more-47557"></span></p> <p>Which page am I talking about:  Setup—&gt; Extensibility –&gt; Plug-ins.</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image-1.png?ssl=1"><img title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image_thumb-1.png?resize=427%2C449&#038;ssl=1" alt="image" width="427" height="449" border="0" data-recalc-dims="1" /></a></p> <p>And the blank page appears.</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image-2.png?ssl=1"><img title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image_thumb-2.png?resize=668%2C361&#038;ssl=1" alt="image" width="668" height="361" border="0" data-recalc-dims="1" /></a></p> <p>But.. it could be Microsoft Explorer.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image-3.png?ssl=1"><img style="margin: 0px" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image_thumb-3.png?resize=486%2C241&#038;ssl=1" alt="image" width="486" height="241" border="0" data-recalc-dims="1" /></a></p> <p>Tried it in Firefox:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image-4.png?ssl=1"><img title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image_thumb-4.png?resize=495%2C203&#038;ssl=1" alt="image" width="495" height="203" border="0" data-recalc-dims="1" /></a></p> <p>Had no Google Chrome to test it out (working in a Citrix client environment, can&#8217;t install stuff ).</p> <p>Examined the html-page source: there is some content, but nothing is shown. Checked the enablement of Java script (unlikely cause, rest is working.  Put the browsers in compatibility mode (yes it can): didn’t help either.</p> <p>Googled, searched My Oracle Support and the community, got 1 good hit, no solution.</p> <p>Took too much time, back to the command-line for deploying my plugin.</p> <p>So, checked the plugins through EMCLI.</p> <blockquote><p><span style="font-family: 'Courier New';font-size: xx-small">$ ./emcli list_plugins_on_server<br /> OMS name is &lt;server&gt;:4889_Management_Service<br /> Plug-in Name                                 Plugin-id                     Version [revision]</span></p> <p><span style="font-family: 'Courier New';font-size: xx-small"><br /> </span></p> <p><span style="font-family: 'Courier New';font-size: xx-small">Oracle Database Appliance                    oracle.dba.odba               13.1.1.1.0<br /> Oracle Cloud Framework                       oracle.sysman.cfw             13.2.1.0.0<br /> Oracle Database                              oracle.sysman.db              13.2.1.0.0<br /> Oracle Fusion Middleware                     oracle.sysman.emas            13.2.1.0.0<br /> Systems Infrastructure                       oracle.sysman.si              13.2.1.0.0<br /> Oracle Exadata                               oracle.sysman.xa              13.2.1.0.0</span></p></blockquote> <p>Deployed the plugin by first exporting the config, deploy the plugin, checked the status (requires downtime):</p> <blockquote><p>./emctl exportconfig oms -sysman_pwd &#8220;Oracle123#&#8221; -dir /home/oracle/job<br /> ./emcli deploy_plugin_on_server -plugin=&#8221;oracle.sysman.db:13.2.2.0.0&#8243; -repo_backup_taken<br /> ./emcli get_plugin_deployment_status -plugin=oracle.sysman.db</p></blockquote> <p>So, I moved on, but it really bothers me, back to the browser… must be the browser…</p> <p>And really, astonished is the right word I think: when zooming out (ctrl – scrolling wheel), the following appears:</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image-5.png?ssl=1"><img title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image_thumb-5.png?resize=625%2C289&#038;ssl=1" alt="image" width="625" height="289" border="0" data-recalc-dims="1" /></a></p> <p>Pulled the bar down, scrolled back to the original format, and voilà:</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image-6.png?ssl=1"><img title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/image_thumb-6.png?resize=626%2C349&#038;ssl=1" alt="image" width="626" height="349" border="0" data-recalc-dims="1" /></a></p> <p>Worked for both browsers. Incredible simple workaround in the end, quite an unexpected feature&#8230;.</p> <p>Regardz</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/12/the-curious-case-of-the-blank-plugin-page-in-oem13c/">The curious case of the blank plugin page in OEM13c</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Job Oprel https://technology.amis.nl/?p=47557 Mon Feb 12 2018 05:05:05 GMT-0500 (EST) Systemd Timers as a Replacement for Cron https://blog.pythian.com/systemd-timers-replacement-cron/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><h3><strong>Cron is not standard!</strong></h3> <p>Most distributions treat cron as if it were a standard, but almost no two distributions actually use the same cron daemon. Debian uses Dillon’s Cron which places an emphasis on being lightweight. CentOS uses Vixie Cron for its SELinux support. Fedora, despite being in the REHL family, forked Vixie Cron to make Cronie, which is the recommended cron for Archlinux also. There are even more with their own unique use cases such as Bcron which tries to be more secure or the not-so-cronlike Anacron, which makes assumptions that the computer will be off.</p> <p>Some might be tempted to note that most cron daemons are mostly compatible, but there are quite a few differences between them. For instance, Debian’s Dillon’s Cron doesn’t even run the jobs with a shell or environment variables, which can easily break quite a few &#8220;standard&#8221; jobs. Beyond this, there are more specific things related to SELinux that have to be specified in order to work if Vixie Cron or Cronie are used.</p> <p>Due to this, we obviously need another cron implementation that satisfies everyone’s needs to become standard.</p> <h3><strong>Systemd Timers</strong></h3> <p>Systemd is the new standard for init systems, intended to replace the aging SysV init system. Since then it has added a ton of features that start to encroach on other Linux utilities. Systemd timers are one of those features.</p> <p>Systemd timers are a way of running service units based on time. These timer units have quite a bit of flexibility, leading them to be a potential replacement for cron. Here we will explore some potential setups with Systemd timers, pitfalls, and how they improve on traditional cron.</p> <p>Traditional cron has all jobs for a user in a single file called the crontab. This has a few problems with configuration management, such as multiple services that require cron entries have to coordinate between themselves to prevent stepping on each other. Also any changes are non-trivial to implement since it can be difficult to determine which line is the old version and if the line exists at all.</p> <p>Systemd timers are implemented in twp files per job: one file describing the timing of the job, and one describing the actual job to be executed. The timing is in a .timer file, and the job is in a .service file. Timer files are special within systemd, but the .service files associated with them are written in the same way as any other .service file.</p> <p>Here is an example, really simple timer job that implements running clamscan:</p> <table> <tbody> <tr> <td><strong>clamscan.timer</strong></td> <td><strong>clamscan.service</strong></td> </tr> <tr> <td><span style="font-weight: 400;">[Unit]</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">Description=Run clamscan every day at 3:30AM</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">[Timer]</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">OnCalendar=*-*-* 03:30:00</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">[Install]</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">WantedBy=timers.target</span></td> <td><span style="font-weight: 400;">[Unit]</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">Description=Run a clamscan scan</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">[Service]</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">Type=oneshot</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">ExecStart=/usr/bin/ionice -c 3 /usr/bin/nice \     -n 19 /usr/bin/clamscan &#8211;recursive \ &#8211;infected &#8211;exclude-dir=&#8217;^/sys|^/dev&#8217; / \</span><span style="font-weight: 400;"><br /> </span><span style="font-weight: 400;">User=root</span></td> </tr> </tbody> </table> <p>To enable the job, run systemctl enable clamscan.timer. Note that you do not enable the .service, nor does the .service file have an install section. An administrator can run the job ad-hoc by running systemctl start clamscan.service.</p> <p>This is much easier for configuration management to maintain since there are separate files per job, and packages can install their own jobs and ensure they are enabled with no chance of stepping on existing jobs, or running the risk of double scheduling jobs. Since they are services, one can also have dependency resolution. For instance, a job that requires Apache to be running can add Requisite=apache2.service to the job, where the job will instantly fail of Apache is not started. The opposite can also be done with WantedBy=, making sure that a job runs when a service is started. This allows for easy management of periodic events, such as making sure clamscan runs when postfix is started, but the timer will be disabled alongside the postfix service when postfix is stopped. User units can be utilized to enable adding jobs without privileged access. They work the exact same as normal units, but are placed in ~/.config/systemd/user instead of /etc/systemd/system/.</p> <table> <tbody> <tr> <td><strong>Requisite Service</strong></td> <td><strong>WantedBy Timer</strong></td> </tr> <tr> <td><span style="font-weight: 400;">[Unit]</span></p> <p><span style="font-weight: 400;">Description=Fails when apache is not runnning</span></p> <p><span style="font-weight: 400;">Requisite=apache.service</span></p> <p><span style="font-weight: 400;">[Service]</span></p> <p><span style="font-weight: 400;">Type=oneshot</span></p> <p><span style="font-weight: 400;">ExecStart=/usr/bin/echo “Apache is running!”</span></td> <td><span style="font-weight: 400;">[Unit]</span></p> <p><span style="font-weight: 400;">Description=Scheduled when apache is started</span></p> <p><span style="font-weight: 400;">WantedBy=apache.service</span></p> <p><span style="font-weight: 400;">[Timer]</span></p> <p><span style="font-weight: 400;">OnCalendar=*-*-* 00:00:00</span></p> <p><span style="font-weight: 400;">[Install]</span></p> <p><span style="font-weight: 400;">WantedBy=timers.target</span></td> </tr> </tbody> </table> <p>Logging is also changed quite a bit. By default, any output from a cronjob is mailed to support logging. In systemd, the jobs are units, so they are logged to the syslog. This enables any integration that would normally be possible using Logstash or journalctl for instance. Logging to the syslog also means that the powerful features of journalctl can be used. Let’s assume that an admin is investigating a job that is suspected to have crashed the server 2 reboots ago. The admin can get granular access through a command like journalctl &#8211;boot=-2 &#8211;unit=thejob.service.</p> <p>Another common issue with cron is that similarly scheduled jobs need a gap between them to prevent overloading the system. In traditional cron, this requires the administrator to manually place the jobs far enough apart so that they will probably not be run at the same time. With systemd timers, a Conflicts= section can be added to ensure that this does not happen. Furthermore, a randomized delay can be added with RandomizedDelaySec= added to the timer file in the [Timer] section. This adds a randomized delay to the start of the job so that similarly scheduled jobs are further separated. Some cron allows for this using the RANDOM_DELAY environment variable, but that is a global value for all jobs. This gives Systemd timers more flexibility.</p> <p>Systemd timers do not only support time of day scheduling; they also support relative scheduling, allowing for jobs to be scheduled relative to other events such as boot or timer activation. This is done by specifying a relative time like 15min or 1y 12month on the relevant Sec entry such as OnBootSec or OnUnitActiveSec.</p> <p>Systemd timers also have more specific specification abilities, including precision down to the second and specification from the end of months allowing for more flexibility in time specifications.</p> <p>Since timers are also services, they get their own cgroup, meaning they can get all the features that come with it such as memory and cpu limits, and even more features such as IP accounting or IP blocklists. These are documented in systemd.resource-control(5) and are specified in the [Service] section.</p> <table> <tbody> <tr> <td><strong>A Systemd timer with memory limits</strong></td> </tr> <tr> <td><span style="font-weight: 400;">[Unit]</span></p> <p><span style="font-weight: 400;">Description=Fails when apache is not runnning</span></p> <p><span style="font-weight: 400;">Requisite=apache.service</span></p> <p><span style="font-weight: 400;">[Service]</span></p> <p><span style="font-weight: 400;">Type=oneshot</span></p> <p><span style="font-weight: 400;">ExecStart=/usr/bin/echo “I and all my children can only use 100M of memory!”</span></p> <p><span style="font-weight: 400;">MemoryLimit=100M</span></td> </tr> </tbody> </table> <p>All in all these features make Systemd’s timers a powerful potential replacement for traditional cron. It offers several benefits for modern cloud deployments, and has enhanced management techniques. It supports a wide range of modern accounting and limitation features which help your system remain stable, even in the face of bugs and failures. Its cross distribution support means that jobs are portable, unlike traditional Cron. Although there is a learning curve, it is a powerful tool for any sysadmin in the modern cloud.</p> </div></div> Zachary Winnerman https://blog.pythian.com/?p=103424 Sun Feb 11 2018 16:06:53 GMT-0500 (EST) LEAP#378 BJT Phase Splitter https://blog.tardate.com/2018/02/leap378-bjt-phase-splitter.html <p>Simple unity-gain phase splitter in a little breadboard-compatible package. It uses a common-emmiter amplifier with a gain of -1.</p> <p>As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/BJT/PhaseSplitter">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a> <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/BJT/PhaseSplitter"><img src="https://leap.tardate.com/Electronics101/BJT/PhaseSplitter/assets/PhaseSplitter_build.jpg" alt="hero_image" /></a></p> https://blog.tardate.com/2018/02/leap378-bjt-phase-splitter.html Sun Feb 11 2018 09:26:08 GMT-0500 (EST) LEAP#377 DIY Nokia 5110 Shield https://blog.tardate.com/2018/02/leap377-diy-nokia-5110-shield.html <p>Wiring it up a Nokia 5110 display every time I want a little LCD output is getting a bit tiresome. I have a spare prototyping shield, so A + B = a handy thing to have lying around for the next time.</p> <p>As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/Lcd5110/DIYShield">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a> <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/Lcd5110/DIYShield"><img src="https://leap.tardate.com/playground/Lcd5110/DIYShield/assets/DIYShield_build.jpg" alt="hero_image" /></a></p> https://blog.tardate.com/2018/02/leap377-diy-nokia-5110-shield.html Sun Feb 11 2018 04:05:48 GMT-0500 (EST) Calling the Oracle Apiary Mock Server from Java code (via JUnit and Maven) https://technology.amis.nl/2018/02/10/calling-the-oracle-apiary-mock-server-from-java-code-via-junit-and-maven/ <p>In my article “Oracle API Platform Cloud Service: Design-First approach and using Oracle Apiary”, I talked about using <b>Oracle Apiary</b> and interacting with its <b>Mock Server</b> by using code examples.<br /> <a href="https://technology.amis.nl/2018/01/31/oracle-api-platform-cloud-service-design-first-approach-using-oracle-apiary/" target="_blank" rel="noopener"><sub>[https://technology.amis.nl/2018/01/31/oracle-api-platform-cloud-service-design-first-approach-using-oracle-apiary/]</sub></a></p> <p>One of the examples for the “HumanResourceService” API is about the action “Get all employees” in combination with “Java” as language. With that example, also the dependencies to be used in a <b>Maven pom.xml</b> (java6+) are given. This example triggered me to try out the Oracle JDeveloper, Maven and Java combination.</p> <p>In this article the focus will there for be on calling the Oracle Apiary Mock Server from Java code, with the help of Oracle JDeveloper (in combination with JUnit and Maven).</p> <p>For more information about using Maven, see: <a href="https://maven.apache.org" target="_blank" rel="noopener">https://maven.apache.org</a></p> <p><span id="more-47582"></span></p> <p>So this time I needed a recent version of Oracle JDeveloper and fortunately I already had a pre-built Oracle VM VirtualBox appliance, named: “Oracle SOA Suite VirtualBox Appliance [May 2016]”, available which contains the following:</p> <ul> <li>Oracle Linux (64-bit) EL 6 Update 7</li> <li>Oracle Database, Enterprise Edition 12.1.0.2</li> <li>Oracle SOA Suite 12.2.1 (includes Service Bus, B2B, Oracle Enterprise Scheduler (ESS) and Business Activity Monitoring)</li> <li>NEW: Oracle Real-Time Integration Business Insight 12.2.1</li> <li>Oracle Managed File Transfer 12.2.1</li> <li>Oracle Stream Explorer 12.2.1</li> <li>Oracle JDeveloper 12.2.1</li> <li>Java JDK 1.8.0_51-b16 (64-bit)</li> </ul> <p>For this appliance see:<br /> <a href="http://www.oracle.com/technetwork/middleware/soasuite/learnmore/soa-vm-2870913.html" target="_blank" rel="noopener">http://www.oracle.com/technetwork/middleware/soasuite/learnmore/soa-vm-2870913.html</a><br /> and<br /> <a href="http://www.oracle.com/technetwork/middleware/soasuite/learnmore/soasuite1221vbox-readme-2870943.pdf" target="_blank" rel="noopener">http://www.oracle.com/technetwork/middleware/soasuite/learnmore/soasuite1221vbox-readme-2870943.pdf</a></p> <p>For a newer version of an appliance with Oracle JDeveloper 12.2.1.1.0 and Java JDK 1.8.0_92(64-bit) [July 2016], take a look at for example:<br /> <a href="http://www.oracle.com/technetwork/middleware/soasuite/learnmore/prebuiltvm-soasuite122110-3070567.html" target="_blank" rel="noopener">http://www.oracle.com/technetwork/middleware/soasuite/learnmore/prebuiltvm-soasuite122110-3070567.html</a><br /> or<br /> <a href="http://www.oracle.com/technetwork/community/developer-vm/index.html" target="_blank" rel="noopener">http://www.oracle.com/technetwork/community/developer-vm/index.html</a></p> <p>For the latest version of Oracle JDeveloper see:<br /> <a href="http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html" target="_blank" rel="noopener">http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html</a></p> <p>After importing (Integration_12.2.1_OTN.ova) and starting the appliance in VirtualBox, the desktop looks like:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_1.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <p>Before starting the appliance I included a SharedFolder (visible on the desktop as sf_MySharedFolder).</p> <h2>Interacting with the Mock Server by using code examples</h2> <p>In <b>Oracle Apiary,</b> for the “HumanResourceService” API, one of the code examples for interacting with its <b>Mock Server</b> is about the action “Get all employees” in combination with “Java” as language.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_2.jpg?resize=702%2C668&#038;ssl=1" alt="" width="702" height="668" data-recalc-dims="1" /></p> <pre class="brush: xml; title: ; notranslate"> // Maven : Add these dependecies to your pom.xml (java6+) // &lt;dependency&gt; // &lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt; // &lt;artifactId&gt;jersey-client&lt;/artifactId&gt; // &lt;version&gt;2.8&lt;/version&gt; // &lt;/dependency&gt; // &lt;dependency&gt; // &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt; // &lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt; // &lt;version&gt;2.8&lt;/version&gt; // &lt;/dependency&gt; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; Client client = ClientBuilder.newClient(); Response response = client.target(&quot;https://private-b4874b1-humanresourceservice.apiary-mock.com/employees&quot;) .request(MediaType.TEXT_PLAIN_TYPE) .get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); </pre> <p> With that example, also the dependencies to be used in a <b>Maven pom.xml</b> (java6+) are given.</p> <h2>Maven implementation in Oracle JDeveloper</h2> <p>I started Oracle JDeveloper and first I took a closer look at the Maven implementation.</p> <p>Via menu Tools | Preferences.. | Maven you can manage the Maven implementation.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_3.jpg?resize=702%2C503&#038;ssl=1" alt="" width="702" height="503" data-recalc-dims="1" /></p> <p>The first time, click on button “Load Extension”.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_4.jpg?resize=702%2C505&#038;ssl=1" alt="" width="702" height="505" data-recalc-dims="1" /></p> <p>Then you can see that the JDeveloper Embedded Version (3.2.5) is used. Next I took a look at the other Maven preferences.</p> <p><u>Logging/Error:</u></p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_5.jpg?resize=702%2C503&#038;ssl=1" alt="" width="702" height="503" data-recalc-dims="1" /></p> <p><u>Phases/Goals:</u></p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_6.jpg?resize=702%2C505&#038;ssl=1" alt="" width="702" height="505" data-recalc-dims="1" /></p> <p>The “Default” Goal Profile is used with the following phases:</p> <ul> <li><b>clean</b> (<i>project cleaning</i>)</li> <li><b>compile</b> (<i>compile the source code of the project</i>)</li> <li><b>test</b> (<i>test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed</i>)</li> <li><b>package</b> (<i>take the compiled code and package it in its distributable format, such as a JAR</i>)</li> <li><b>install</b> (<i>install the package into the local repository, for use as a dependency in other projects locally</i>)</li> <li><b>site</b> (<i>project site documentation</i>)</li> </ul> <p><a href="https://docs.oracle.com/middleware/1221/jdev/user-guide/GUID-609458B4-79BD-4F5E-8ABE-C5C616576E7D.htm%23OJDUG5847" target="_blank" rel="noopener"><sub>[https://docs.oracle.com/middleware/1221/jdev/user-guide/GUID-609458B4-79BD-4F5E-8ABE-C5C616576E7D.htm#OJDUG5847]</sub></a></p> <p>For more information about Maven build lifecycles and phases, see:<br /> <a href="https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html" target="_blank" rel="noopener">https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html</a></p> <p><u>Repositories:</u></p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_7.jpg?resize=702%2C503&#038;ssl=1" alt="" width="702" height="503" data-recalc-dims="1" /></p> <p>Here you can see which repositories are used.<br /> <i>A Maven repository holds build artifacts and dependencies of varying types. </i></p> <p><i>The <b>local repository</b> refers to a copy on your own installation that is a cache of the remote downloads. It also contains the temporary build artifacts that you have not yet released.</i></p> <p><i>By default the local repository is located at </i><i>${user.home}/.m2/repository/</i><i>. You can change the path and repository name by clicking the Edit button</i><br /> <a style="color: red"><sub>[Oracle JDeveloper Help, Maven: Repositories Dialog]</sub></a></p> <p><i>The “Maven Central” repository is a <b>remote repository</b>. The URL for the Maven central repository is <a href="http://repo1.Maven.org/Maven2" target="_blank" rel="noopener">http://repo1.Maven.org/Maven2</a></i><i></i><i></i><br /> <a style="color: red"><sub>[Oracle JDeveloper Help, Maven: Repositories Dialog]</sub></a></p> <p>For more information about Maven repositories, see:<br /> <a href="https://maven.apache.org/guides/introduction/introduction-to-repositories.html" target="_blank" rel="noopener">https://maven.apache.org/guides/introduction/introduction-to-repositories.html</a></p> <p><u>Settings:</u></p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_8.jpg?resize=702%2C503&#038;ssl=1" alt="" width="702" height="503" data-recalc-dims="1" /></p> <p>Here you can specify the location of the Maven settings.xml file and specify command line options for Maven.</p> <p>The content of file <a style="font-family: Courier New;color: black">/home/oracle/.m2/setting.xml</a> is:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt; &lt;proxies&gt; &lt;proxy&gt; &lt;port&gt;80&lt;/port&gt; &lt;host&gt;www-proxy.us.oracle.com&lt;/host&gt; &lt;nonProxyHosts&gt;localhost|127.0.0.0/8|integration|integration.oracle.com|*.us.oracle.com|localhost.localdomain|127.0.0.1|[::1]|127.0.0.1&lt;/nonProxyHosts&gt; &lt;/proxy&gt; &lt;/proxies&gt; &lt;/settings&gt; </pre> <p>For more information about Maven Settings, see:<br /> <a href="https://maven.apache.org/settings.html" target="_blank" rel="noopener">https://maven.apache.org/settings.html</a></p> <h2>Maven standard directory layout</h2> <p><i>Having a common directory layout would allow for users familiar with one Maven project to immediately feel at home in another Maven project. The advantages are analogous to adopting a site-wide look-and-feel.</i><br /> <a href="https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html"><sub>[https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html]</sub></a></p> <p>For calling the Oracle Apiary Mock Server from Java code, I used the following maven standard directory layout:</p> <ul> <li><a style="font-family: Courier New;color: green"><b>src/main/java</b></a> (Application/Library sources)</li> <li><a style="font-family: Courier New;color: black"><b>src/main/resources</b></a> (Application/Library resources)</li> <li><a style="font-family: Courier New;color: purple"><b>src/test/java</b></a> (Test sources)</li> <li><a style="font-family: Courier New;color: black"><b>src/test/resources</b></a> (Test resources)</li> <li><a style="font-family: Courier New;color: black"><b>target</b></a> (All output of the build)</li> </ul> <p>To match the default maven structure in JDeveloper I created a <b>Custom Application</b>.</p> <p>Be aware that there are other options in JDeveloper to work with Maven projects. For example by using Maven Archetypes.<br /> <a href="https://docs.oracle.com/middleware/1221/jdev/user-guide/GUID-609458B4-79BD-4F5E-8ABE-C5C616576E7D.htm%23OJDUG6528%5d"><sub>[https://docs.oracle.com/middleware/1221/jdev/user-guide/GUID-609458B4-79BD-4F5E-8ABE-C5C616576E7D.htm#OJDUG6528%5d]</sub></a></p> <h2>Creating a Custom Application</h2> <p>Via menu File | New | Application.. | Custom Application an application can be created that matches the default maven structure (maven standard directory layout).<br /> <a href="https://docs.oracle.com/middleware/1221/jdev/user-guide/GUID-609458B4-79BD-4F5E-8ABE-C5C616576E7D.htm%23OJDUG6874"><sub>[https://docs.oracle.com/middleware/1221/jdev/user-guide/GUID-609458B4-79BD-4F5E-8ABE-C5C616576E7D.htm#OJDUG6874]</sub></a></p> <p>In the wizard, I created application “ServicesApplication” with Application Package Prefix “nl.xyz.services”.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_9.jpg?resize=646%2C486&#038;ssl=1" alt="" width="646" height="486" data-recalc-dims="1" /></p> <p>After clicking on the button “Next &gt;” I filled in the Project Name “HumanResourceServiceProject” and as Project Features, selected “Maven”.</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_10.jpg?resize=702%2C410&#038;ssl=1" alt="" width="702" height="410" data-recalc-dims="1" /></p> <p>In the next screen, I changed the default Group ID from <a style="font-family: Courier New;color: black">nl.xyz.services</a> to <a style="font-family: Courier New;color: black">nl.xyz.services.humanresourceservice</a>.</p> <p>Also the checkbox was checked, to modify the normal project structure to match the default maven structure.</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_11.jpg?resize=646%2C485&#038;ssl=1" alt="" width="646" height="485" data-recalc-dims="1" /></p> <p>In the next screen, “Use Maven” was chosen.</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_12.jpg?resize=702%2C414&#038;ssl=1" alt="" width="702" height="414" data-recalc-dims="1" /></p> <p>After finishing the wizard, the Applications window for the “ServicesApplication” looked like:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_13.jpg?resize=390%2C133&#038;ssl=1" alt="" width="390" height="133" data-recalc-dims="1" /></p> <p>The Project level Maven POM file overview screen looks like:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_14.jpg?resize=702%2C431&#038;ssl=1" alt="" width="702" height="431" data-recalc-dims="1" /></p> <p>The “HumanResourceServiceProject”, Project Properties look like:</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_15.jpg?resize=702%2C391&#038;ssl=1" alt="" width="702" height="391" data-recalc-dims="1" /></p> <p>In the “Project Source Paths” screen, I changed the Default Package from <a style="font-family: Courier New;color: black">nl.xyz.services</a> to <a style="font-family: Courier New;color: black">nl.xyz.services.humanresourceservice</a>.</p> <p>Here you can see that the Project Source Path settings are set in the Project level Maven POM file. The Java Source Path (matching the default maven structure) is set to:<br /> <a style="font-family: Courier New;color: black">/u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/</a><a style="font-family: Courier New;color: green"><b>src/main/java</b></a></p> <p>After finishing the wizard, the Application level pom.xml content is:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;nl.xyz.services&lt;/groupId&gt; &lt;artifactId&gt;ServicesApplication&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;description&gt;Super POM for ServicesApplication&lt;/description&gt; &lt;modules&gt; &lt;module&gt;HumanResourceServiceProject&lt;/module&gt; &lt;/modules&gt; &lt;packaging&gt;pom&lt;/packaging&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;nl.xyz.services.humanresourceservice&lt;/groupId&gt; &lt;artifactId&gt;HumanResourceServiceProject&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;type&gt;jar&lt;/type&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/project&gt; </pre> <p>After finishing the wizard, the Project level pom.xml content is:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;nl.xyz.services.humanresourceservice&lt;/groupId&gt; &lt;artifactId&gt;HumanResourceServiceProject&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;description&gt;Project for HumanResourceServiceProject&lt;/description&gt; &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;${basedir}&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;/resources&gt; &lt;/build&gt; &lt;/project&gt; </pre> <h2>Creating Java classes “Employee” and “Department”</h2> <p>As described in my previous article, the “Human Resource Service” API contains actions for “Employees” and “Departments”.</p> <p>So there for I decided to create two Java classes corresponding with them.</p> <p>Via menu File | New | Java Class…, I created a Java class called “Employee” and in the wizard, I unchecked “Implement Abstract Methods”.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_16.jpg?resize=435%2C583&#038;ssl=1" alt="" width="435" height="583" data-recalc-dims="1" /></p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; public class Employee { public Employee() { super(); } } </pre> <p>In the same way I created a Java class called “Department”.</p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; public class Department { public Department() { super(); } } </pre> <p>After creating the Java classes, the Applications window for the “ServicesApplication” looked like:</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_17.jpg?resize=388%2C212&#038;ssl=1" alt="" width="388" height="212" data-recalc-dims="1" /></p> <p>The two Java classes (with extension .java) where created in directory:<br /> <a style="font-family: Courier New;color: black">/u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/</a><a style="font-family: Courier New;color: green"><b>src/main/java</b></a><a style="font-family: Courier New;color: black">/nl/xyz/services/humanresourceservice</a></p> <h2>Apache Maven – compile</h2> <p>So far so good. In JDeveIoper, I created an Application, Project and two Java classes. Time to put Maven to work.</p> <p>Via a right-click on the pom.xml | Run Maven, the Phases/Goals you can choose from, become visible:</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_18.jpg?resize=540%2C612&#038;ssl=1" alt="" width="540" height="612" data-recalc-dims="1" /></p> <p>After choosing “compile”, the following popped-up:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_19.jpg?resize=407%2C184&#038;ssl=1" alt="" width="407" height="184" data-recalc-dims="1" /></p> <p>Here I clicked the button “Yes”. After this, the content of file <a style="font-family: Courier New;color: black">/home/oracle/.m2/setting.xml</a> is:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt; &lt;proxies/&gt; &lt;/settings&gt; </pre> <p><u>Remark:</u><br /> The JDeveloper proxy settings (see Tools | Preferences | Web Browser and Proxy) were set on: Use System Default Proxy Settings.</p> <p><i>With this option, the server uses the default proxy settings on your machine. These are taken from the operation system (in the case of Windows and MacOS) or from the window manager (in the case of Linux).</i><br /> <a style="color: red"><sub>[Oracle JDeveloper Help, Preferences Dialog &#8211; Web Browser and Proxy Page &#8211; Proxy Settings]</sub></a></p> <p>The content of <b>Apache Maven – compile – Log</b> is:<br /> <a style="font-family: Courier New;color: black"><br /> [INFO] Compiling 2 source files to /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/classes<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD SUCCESS<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 7.375 s<br /> [INFO] Finished at: 2018-02-06T13:23:45-08:00<br /> [INFO] Final Memory: 14M/133M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> Process exited with exit code 0.<br /> </a></p> <p>The two compiled Java classes (with extension .class) where created in directory:<br /> <a style="font-family: Courier New;color: black">/u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/<b>target</b>/classes/nl/xyz/services/humanresourceservice</a></p> <h2>Java class “Employee” interacting with the Mock Server</h2> <p>In <b>Oracle Apiary,</b> for the “HumanResourceService” API, one of the code examples for interacting with its <b>Mock Server</b> is about the action “Get all employees”.</p> <p>There for I changed the code for Java class “Employee” and used the Java code example from Oracle Apiary.</p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; public class Employee { public Employee() { super(); } public Response getAllEmployees() { Client client = ClientBuilder.newClient(); Response response = client.target(&quot;https://private-b4874b1-humanresourceservice.apiary-mock.com/employees&quot;) .request(MediaType.TEXT_PLAIN_TYPE) .get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } } </pre> <p>Of course then there were several issues found.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_20.jpg?resize=702%2C407&#038;ssl=1" alt="" width="702" height="407" data-recalc-dims="1" /></p> <p>In line with the comment (<a style="font-family: Courier New;color: black">// Maven : Add these dependecies to your pom.xml (java6+)</a>) in the Java code example from Oracle Apiary, dependencies had to be added in the Project level Maven POM file.</p> <p>Based on the following comment:<br /> <a style="font-family: Courier New;color: black"><br /> // Maven : Add these dependecies to your pom.xml (java6+)<br /> <b>// &lt;dependency&gt;<br /> //&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt;<br /> //&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;jersey-client&lt;/artifactId&gt;<br /> //&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;2.8&lt;/version&gt;<br /> // &lt;/dependency&gt;</b><br /> // &lt;dependency&gt;<br /> //&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt;<br /> //&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt;<br /> //&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;2.8&lt;/version&gt;<br /> // &lt;/dependency&gt;<br /> </a></p> <p>I added the dependency in the Project level Maven POM file overview screen, tab “Dependencies” (by using the icon +):</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_21.jpg?resize=702%2C410&#038;ssl=1" alt="" width="702" height="410" data-recalc-dims="1" /></p> <p>After doing that, the Project level pom.xml content was:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;nl.xyz.services.humanresourceservice&lt;/groupId&gt; &lt;artifactId&gt;HumanResourceServiceProject&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;description&gt;Project for HumanResourceServiceProject&lt;/description&gt; &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;${basedir}&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;/resources&gt; &lt;/build&gt; <b>&lt;dependencies&gt; <a style="font-family: Courier New;color: brown">&lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt; &lt;artifactId&gt;jersey-client&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;/dependency&gt;</a> &lt;/dependencies&gt;</b> &lt;/project&gt; </pre> <p>The other comment part I copied / pasted in the tab Source of the pom.xml:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;nl.xyz.services.humanresourceservice&lt;/groupId&gt; &lt;artifactId&gt;HumanResourceServiceProject&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;description&gt;Project for HumanResourceServiceProject&lt;/description&gt; &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;${basedir}&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;/resources&gt; &lt;/build&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt; &lt;artifactId&gt;jersey-client&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;/dependency&gt; <a style="font-family: Courier New;color: blue"><b>&lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt; &lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;/dependency&gt;</b></a> &lt;/dependencies&gt; &lt;/project&gt; </pre> <p>After saving the pom.xml, the dependencies where being resolved.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_22.jpg?resize=702%2C20&#038;ssl=1" alt="" width="702" height="20" data-recalc-dims="1" /></p> <p>The Maven local repository was updated, with among others, the following two jar files:</p> <ul> <li><a style="font-family: Courier New;color: brown"><b>/home/oracle/.m2/repository/org/glassfish/jersey/core/jersey-client/2.8/jersey-client-2.8.jar</b></a></li> <li><a style="font-family: Courier New;color: blue"><b>/home/oracle/.m2/repository/org/glassfish/jersey/media/jersey-media-json-jackson/2.8/ jersey-media-json-jackson-2.8.jar</b></a></li> </ul> <p>See also:<br /> <a href="http://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-client/2.8/" target="_blank" rel="noopener">http://repo1.maven.org/maven2/org/glassfish/jersey/core/jersey-client/2.8/</a><br /> respectively:<br /> <a href="http://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson/2.8/" target="_blank" rel="noopener">http://repo1.maven.org/maven2/org/glassfish/jersey/media/jersey-media-json-jackson/2.8/</a></p> <h2>JUnit</h2> <p>In order to invoke the Oracle Apiary Mock Server for the action “Get all employees” from the Java class “Employee”, I decided to use a JUnit TestCase class.</p> <p>For this I had to install an Oracle Extension for Oracle JDeveloper. Via menu Help | Check for Updates…, from the list of Available Updates, I choose “JUnit Integration” and installed it.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_23.jpg?resize=702%2C527&#038;ssl=1" alt="" width="702" height="527" data-recalc-dims="1" /></p> <p>After the install, a JDeveloper restart was done.</p> <p>For more information about JUnit, see:<br /> <a href="https://junit.org/junit4" target="_blank" rel="noopener">https://junit.org/junit4</a></p> <h2>Creating Java class “EmployeeTest”</h2> <p>In the Applications window for the “ServicesApplication”, after a right-click on package <a style="font-family: Courier New;color: black">nl.xyz.services.humanresourceservice</a>, via the menu File | New | From gallery… | General | Unit Tests | Test Case, a wizard was started.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_24.jpg?resize=647%2C487&#038;ssl=1" alt="" width="647" height="487" data-recalc-dims="1" /></p> <p>In the dropdown box I selected the Java class “Employee”, checked the check box for method getAllEmployees() and clicked on button “Next &gt;”.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_25.jpg?resize=649%2C490&#038;ssl=1" alt="" width="649" height="490" data-recalc-dims="1" /></p> <p>After clicking on Next and then Finish (in the screen above) a Java class “EmployeeTest” was created.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_26.jpg?resize=702%2C431&#038;ssl=1" alt="" width="702" height="431" data-recalc-dims="1" /></p> <p>There were several issues found. The needed JUnit library seemed not to be part of the classpath.<br /> A right-click on Java class “EmployeeTest” followed by <a style="font-family: Courier New;color: black">Make</a> and then followed by <a style="font-family: Courier New;color: black">Reformat</a> fixed the problem and the issues disappeared.</p> <p>After creating the JUnit TestCase class, the Project level pom.xml content was:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;nl.xyz.services.humanresourceservice&lt;/groupId&gt; &lt;artifactId&gt;HumanResourceServiceProject&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;description&gt;Project for HumanResourceServiceProject&lt;/description&gt; &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;${basedir}&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;/resources&gt; &lt;/build&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt; &lt;artifactId&gt;jersey-client&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;type&gt;jar&lt;/type&gt; &lt;scope&gt;compile&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt; &lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;type&gt;jar&lt;/type&gt; &lt;scope&gt;compile&lt;/scope&gt; &lt;/dependency&gt; <b>&lt;dependency&gt; &lt;groupId&gt;com.oracle.adf.library&lt;/groupId&gt; &lt;artifactId&gt;JUnit-4-Runtime&lt;/artifactId&gt; &lt;version&gt;12.2.1-0-0&lt;/version&gt; &lt;type&gt;pom&lt;/type&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt;</b> &lt;/dependencies&gt; &lt;/project&gt; </pre> <p>Notice that a dependency for JUnit was automatically added to the Project level POM file.</p> <p>After creating the JUnit TestCase class, the Applications window for the “ServicesApplication” looked like:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_27.jpg?resize=387%2C240&#038;ssl=1" alt="" width="387" height="240" data-recalc-dims="1" /></p> <p><u>Remark:</u><br /> Of course you can also create a dedicated project in the application for testing. See also the tab “Test Settings” in the Project level Maven POM file overview screen.</p> <h2>Apache Maven – test</h2> <p>After a right-click on the pom.xml | Run Maven | test, the content of Apache Maven – test – Log is:<br /> <a style="font-family: Courier New;color: black"><br /> …<br /> INFO] &#8212; maven-surefire-plugin:2.12.4:test (default-test) @ HumanResourceServiceProject &#8212;<br /> <b>[INFO] No tests to run.</b><br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD SUCCESS<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 1.160 s<br /> [INFO] Finished at: 2018-02-08T12:10:12-08:00<br /> [INFO] Final Memory: 9M/191M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> Process exited with exit code 0.<br /> </a></p> <p>There were no test classes found! This is because the Java class “EmployeeTest” is not in the correct default maven structure (maven standard directory layout).<br /> To fix this, the JUnit TestCase class has to be in the right subdirectory under the <a style="font-family: Courier New;color: purple"><b>src/test/java</b></a> (Test sources) directory. This can be done in several ways, but I used File | Save As… .</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_28.jpg?resize=607%2C475&#038;ssl=1" alt="" width="607" height="475" data-recalc-dims="1" /></p> <p>In the Save As screen, via repeated use of the icon “Create new subdirectory”, I created the following subdirectory: <a style="font-family: Courier New;color: purple"><b>src/test/java</b></a><a style="font-family: Courier New;color: black">/nl/xyz/services/humanresourceservice</a> and then clicked on button “Save”.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_29.jpg?resize=406%2C140&#038;ssl=1" alt="" width="406" height="140" data-recalc-dims="1" /></p> <p>In the “Save Warning” pop-up I clicked on button “Yes”.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_30.jpg?resize=702%2C339&#038;ssl=1" alt="" width="702" height="339" data-recalc-dims="1" /></p> <p>In the “Add to Project Content” pop-up, I selected “Java Paths” and clicked on button “OK”.</p> <p>Then the Java class “EmployeeTest” was deleted, via right-click | Delete.</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_31.jpg?resize=466%2C298&#038;ssl=1" alt="" width="466" height="298" data-recalc-dims="1" /></p> <p>In the “Confirm Delete” pop-up, I clicked on button “OK”.</p> <p>After a right-click on the pom.xml | Run Maven | test, the content of Apache Maven – test – Log is:<br /> <a style="font-family: Courier New;color: black"><br /> [INFO] &#8212; maven-surefire-plugin:2.12.4:test (default-test) @ HumanResourceServiceProject &#8212;<br /> [INFO] Surefire report directory: /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/surefire-reports</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> T E S T S<br /> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> Running nl.xyz.services.humanresourceservice.EmployeeTest<br /> Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.013 sec &lt;&lt;&lt; FAILURE!<br /> nl.xyz.services.humanresourceservice.EmployeeTest.testGetAllEmployees() Time elapsed: 0.008 sec &lt;&lt;&lt; FAILURE!<br /> java.lang.AssertionError: Unimplemented<br /> at org.junit.Assert.fail(Assert.java:88)<br /> at nl.xyz.services.humanresourceservice.EmployeeTest.testGetAllEmployees(EmployeeTest.java:15)</p> <p>Results :</p> <p><b>Failed tests: nl.xyz.services.humanresourceservice.EmployeeTest.testGetAllEmployees(): Unimplemented</b></p> <p>Tests run: 1, Failures: 1, Errors: 0, Skipped: 0</p> <p>[INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD FAILURE<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 2.473 s<br /> [INFO] Finished at: 2018-02-08T12:42:57-08:00<br /> [INFO] Final Memory: 15M/200M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project HumanResourceServiceProject: There are test failures.<br /> [ERROR]<br /> [ERROR] Please refer to /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/surefire-reports for the individual test results.<br /> [ERROR] -&gt; [Help 1]<br /> [ERROR]<br /> [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.<br /> [ERROR] Re-run Maven using the -X switch to enable full debug logging.<br /> [ERROR]<br /> [ERROR] For more information about the errors and possible solutions, please read the following articles:<br /> [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException<br /> Process exited with exit code 1.<br /> </a></p> <p>There was a test class found, but it failed. This was an expected outcome, because of the <a style="font-family: Courier New;color: black">org.junit.Assert.fail(String message)</a> method, which fails a test with the given message.<br /> <a href="https://junit.org/junit4/javadoc/4.12/org/junit/Assert.html%23fail(java.lang.String)"><sub>[https://junit.org/junit4/javadoc/4.12/org/junit/Assert.html#fail(java.lang.String)]</sub></a></p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import static org.junit.Assert.*; import org.junit.Test; public class EmployeeTest { public EmployeeTest() { } /** * @see Employee#getAllEmployees() */ @Test public void testGetAllEmployees() { fail(&quot;Unimplemented&quot;); } } </pre> <h2>Making Java class “EmployeeTest” visible in the Applications window</h2> <p>In order to make the Java class “EmployeeTest” visible in the Applications window for the “ServicesApplication”, the Project level POM file had to be modified.</p> <p>I added a resource directory in the Project level Maven POM file overview screen, tab “Source Paths”, part “Resources | Resource Directories” (by using the icon +):</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_32.jpg?resize=607%2C476&#038;ssl=1" alt="" width="607" height="476" data-recalc-dims="1" /></p> <p>Where I selected the <a style="font-family: Courier New;color: purple"><b>src/test/java</b></a> subdirectory.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_33.jpg?resize=702%2C391&#038;ssl=1" alt="" width="702" height="391" data-recalc-dims="1" /></p> <p>After adding the resource directory, the Project level pom.xml content is:</p> <pre style="font-family: Courier New;border:none;padding: 5px;margin-top: 10px;margin-bottom: 10px"> &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;nl.xyz.services.humanresourceservice&lt;/groupId&gt; &lt;artifactId&gt;HumanResourceServiceProject&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;description&gt;Project for HumanResourceServiceProject&lt;/description&gt; &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;${basedir}&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/&lt;/directory&gt; &lt;includes&gt; &lt;include&gt;*&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; <b>&lt;resource&gt;</b> <b>&lt;directory&gt;<a style="font-family: Courier New;color: purple"><b>src/test/java</b></a>/&lt;/directory&gt;</b> <b>&lt;/resource&gt;</b> &lt;/resources&gt; &lt;/build&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt; &lt;artifactId&gt;jersey-client&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;type&gt;jar&lt;/type&gt; &lt;scope&gt;compile&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt; &lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt; &lt;version&gt;2.8&lt;/version&gt; &lt;type&gt;jar&lt;/type&gt; &lt;scope&gt;compile&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.oracle.adf.library&lt;/groupId&gt; &lt;artifactId&gt;JUnit-4-Runtime&lt;/artifactId&gt; &lt;version&gt;12.2.1-0-0&lt;/version&gt; &lt;type&gt;pom&lt;/type&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/project&gt; </pre> <p>After adding the resource directory, the Applications window for the “ServicesApplication” looked like:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_34.jpg?resize=389%2C305&#038;ssl=1" alt="" width="389" height="305" data-recalc-dims="1" /></p> <h2>Modifying Java class “EmployeeTest”</h2> <p>Then I modified the Java class “EmployeeTest” in order the make it call the Java class “Employee”:</p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import javax.ws.rs.core.Response; import static org.junit.Assert.*; import org.junit.Test; public class EmployeeTest { public EmployeeTest() { } private Employee employee = new Employee(); /** * @see Employee#getAllEmployees() */ @Test public void testGetAllEmployees() { Response response = employee.getAllEmployees(); } } </pre> <p>After a right-click on the pom.xml | Run Maven | test, the content of Apache Maven – test – Log:<br /> <sub>(Remark: I shortened the response list of employees)</sub></p> <p><a style="font-family: Courier New;color: black"><br /> …<br /> [INFO] &#8212; maven-surefire-plugin:2.12.4:test (default-test) @ HumanResourceServiceProject &#8212;<br /> [INFO] Surefire report directory: /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/surefire-reports</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> T E S T S<br /> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> Running nl.xyz.services.humanresourceservice.EmployeeTest<br /> <b>status</b>: 200<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Thu, 08 Feb 2018 21:29:12 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7cc1282efcd107002bce05], Content-Length=[15519], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[119], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;items&#8221;: [<br /> {<br /> &#8220;employee_id&#8221;: 100,<br /> &#8220;first_name&#8221;: &#8220;Steven&#8221;,<br /> &#8220;last_name&#8221;: &#8220;King&#8221;,<br /> &#8220;email&#8221;: &#8220;SKING&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;515.123.4567&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1987-06-17T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;AD_PRES&#8221;,<br /> &#8220;salary&#8221;: 24000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: null,<br /> &#8220;department_id&#8221;: 90,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/100&#8221;<br /> }<br /> ]<br /> },<br /> {<br /> &#8220;employee_id&#8221;: 101,<br /> &#8220;first_name&#8221;: &#8220;Neena&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Kochhar&#8221;,<br /> &#8220;email&#8221;: &#8220;NKOCHHAR&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;515.123.4568&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1989-09-21T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;AD_VP&#8221;,<br /> &#8220;salary&#8221;: 17000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 100,<br /> &#8220;department_id&#8221;: 90,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/101&#8221;<br /> }<br /> ]<br /> },<br /> …<br /> {<br /> &#8220;employee_id&#8221;: 123,<br /> &#8220;first_name&#8221;: &#8220;Shanta&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Vollman&#8221;,<br /> &#8220;email&#8221;: &#8220;SVOLLMAN&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;650.123.4234&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1997-10-10T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;ST_MAN&#8221;,<br /> &#8220;salary&#8221;: 6500,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 100,<br /> &#8220;department_id&#8221;: 50,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/123&#8221;<br /> }<br /> ]<br /> },<br /> {<br /> &#8220;employee_id&#8221;: 124,<br /> &#8220;first_name&#8221;: &#8220;Kevin&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Mourgos&#8221;,<br /> &#8220;email&#8221;: &#8220;KMOURGOS&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;650.123.5234&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1999-11-16T05:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;ST_MAN&#8221;,<br /> &#8220;salary&#8221;: 5800,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 100,<br /> &#8220;department_id&#8221;: 50,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/124&#8221;<br /> }<br /> ]<br /> }<br /> ],<br /> &#8220;hasMore&#8221;: true,<br /> &#8220;limit&#8221;: 25,<br /> &#8220;offset&#8221;: 0,<br /> &#8220;count&#8221;: 25,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;edit&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;describedby&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/metadata-catalog/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;first&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;next&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/?offset=25&#8221;<br /> }<br /> ]<br /> }<br /> Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.147 sec</p> <p>Results :</p> <p>Tests run: 1, Failures: 0, Errors: 0, Skipped: 0</p> <p>[INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD SUCCESS<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 4.570 s<br /> [INFO] Finished at: 2018-02-08T13:33:14-08:00<br /> [INFO] Final Memory: 16M/246M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> Process exited with exit code 0.<br /> </a></p> <p>Looking at this output it was obvious that interacting with the Oracle Apiary MockServer action “Get all employees” from Java class “Employee” via the Java class “EmployeeTest” worked correctly.</p> <h2>API Inspector</h2> <p>I then started Oracle Apiary, via: <a href="https://apiary.io/%20" target="_blank" rel="noopener">https://apiary.io/</a> , where I signed in and looked at the API Inspector.</p> <p><i>Each request and response from the Mock Server is logged in the API Inspector, which can be found by clicking “Inspector” in the Apiary header. There you will see each request received, each response given, and any validation errors that were found.</i><br /> <a href="https://help.apiary.io/tools/api-inspector/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/api-inspector/]</sub></a></p> <p>There I could see, the request that was made from the Java class “EmployeeTest”:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_35.jpg?resize=702%2C126&#038;ssl=1" alt="" width="702" height="126" data-recalc-dims="1" /></p> <p>For that request (by clicking on it) more details are available:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_36.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <h2>Completing the HumanResourceServiceProject</h2> <p>So now a successful call to the Oracle Apiary MockServer action “Get all employees” was made, from Java class “Employee” via the Java class “EmployeeTest”.</p> <p>There were other actions that had to be implemented, and also in the Java class “Department”. So, in the same way as Java class “EmployeeTest”, I created Java class “Department Test”.</p> <p>After adding the Java class, the Applications window for the “ServicesApplication” looks like:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_37.jpg?resize=390%2C319&#038;ssl=1" alt="" width="390" height="319" data-recalc-dims="1" /></p> <p>Below you can find the code for the Java classes.</p> <p><u>Remark:</u><br /> All the Java code in this article is not suitable for a production environment, but meant as simple examples.</p> <p><u>Java class “Employee”:</u></p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; public class Employee { private String mockServerURI; public Employee(String mockServerURI) { this.mockServerURI = mockServerURI; } public Response getAllEmployees() { Client client = ClientBuilder.newClient(); String requestURI = this.mockServerURI + &quot;/employees&quot;; System.out.println(&quot;requestURI: &quot; + requestURI); Response response = client.target(requestURI).request(MediaType.TEXT_PLAIN_TYPE).get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } public Response getEmployee(int id) { Client client = ClientBuilder.newClient(); String requestURI = this.mockServerURI + &quot;/employees/&quot; + id; System.out.println(&quot;requestURI: &quot; + requestURI); Response response = client.target(requestURI).request(MediaType.TEXT_PLAIN_TYPE).get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } public Response createEmployee() { Client client = ClientBuilder.newClient(); String requestURI = this.mockServerURI + &quot;/employees&quot;; System.out.println(&quot;requestURI: &quot; + requestURI); Entity payload = Entity.json(&quot;{ 'LAST_NAME': 'TESTINSERT', 'FIRST_NAME': 'TESTFIRST', 'EMAIL': 'TESTMAIL', 'HIRE_DATE': '25-JUN-15', 'JOB_ID': 'IT_PROG', 'SALARY': 6000, 'MANAGER_ID': 103, 'DEPARTMENT_ID': 60}&quot;); Response response = client.target(requestURI).request(MediaType.APPLICATION_JSON_TYPE).post(payload); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } public Response updateEmployee(int id) { Client client = ClientBuilder.newClient(); String requestURI = this.mockServerURI + &quot;/employees/&quot; + id; System.out.println(&quot;requestURI: &quot; + requestURI); Entity payload = Entity.json(&quot;{ 'LAST_NAME': 'TESTUPDATE', 'JOB_ID': 'SA_REP', 'SALARY': 8000, 'DEPARTMENT_ID': 80}&quot;); Response response = client.target(requestURI).request(MediaType.APPLICATION_JSON_TYPE).put(payload); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } } </pre> <p><u>Java class “EmployeeTest”:</u></p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import javax.ws.rs.core.Response; import static org.junit.Assert.*; import org.junit.Test; public class EmployeeTest { private static final String HTTP_STATUS_CODE = &quot;HTTP status code&quot;; private static final int HTTP_STATUS_CODE_OK = 200; private static final int HTTP_STATUS_CODE_CREATED = 201; private Employee employee = new Employee(&quot;https://private-b4874b1-humanresourceservice.apiary-mock.com&quot;); public EmployeeTest() { } /** * @see Employee#getAllEmployees() */ @Test public void testGetAllEmployees() { Response response = employee.getAllEmployees(); assertEquals(HTTP_STATUS_CODE, HTTP_STATUS_CODE_OK, response.getStatus()); } /** * @see Employee#getEmployee() */ @Test public void testGetEmployee() { int id = 100; Response response = employee.getEmployee(id); assertEquals(HTTP_STATUS_CODE, HTTP_STATUS_CODE_OK, response.getStatus()); } /** * @see Employee#createEmployee() */ @Test public void testCreateEmployee() { Response response = employee.createEmployee(); assertEquals(HTTP_STATUS_CODE, HTTP_STATUS_CODE_CREATED, response.getStatus()); } /** * @see Employee#updateEmployee() */ @Test public void testUpdateEmployee() { int id = 220; Response response = employee.updateEmployee(id); assertEquals(HTTP_STATUS_CODE, HTTP_STATUS_CODE_OK, response.getStatus()); } } </pre> <p><u>Java class “Department”:</u></p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; public class Department { private String mockServerURI; public Department(String mockServerURI) { this.mockServerURI = mockServerURI; } public Response getDepartment(int id) { Client client = ClientBuilder.newClient(); String requestURI = this.mockServerURI + &quot;/department/&quot; + id; System.out.println(&quot;requestURI: &quot; + requestURI); Response response = client.target(requestURI).request(MediaType.TEXT_PLAIN_TYPE).get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } public Response getDepartmentEmployee(int department_id, int employee_id) { Client client = ClientBuilder.newClient(); String requestURI = this.mockServerURI + &quot;/departments/&quot; + department_id + &quot;/employees/&quot; + employee_id; System.out.println(&quot;requestURI: &quot; + requestURI); Response response = client.target(requestURI).request(MediaType.TEXT_PLAIN_TYPE).get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); return response; } } </pre> <p><u>Java class “DepartmentTest”:</u></p> <pre class="brush: xml; title: ; notranslate"> package nl.xyz.services.humanresourceservice; import javax.ws.rs.core.Response; import static org.junit.Assert.*; import org.junit.Test; public class DepartmentTest { private static final String HTTP_STATUS_CODE = &quot;HTTP status code&quot;; private static final int HTTP_STATUS_CODE_OK = 200; private Department department = new Department(&quot;https://private-b4874b1-humanresourceservice.apiary-mock.com&quot;); public DepartmentTest() { } /** * @see Department#getDepartment(int) */ @Test public void testGetDepartment() { int id = 30; Response response = department.getDepartment(id); assertEquals(HTTP_STATUS_CODE, HTTP_STATUS_CODE_OK, response.getStatus()); } /** * @see Department#getDepartmentEmployee(int,int) */ @Test public void testGetDepartmentEmployee() { int department_id = 30; int employee_id = 119; Response response = department.getDepartmentEmployee(department_id, employee_id); assertEquals(HTTP_STATUS_CODE, HTTP_STATUS_CODE_OK, response.getStatus()); } } </pre> <p>After a right-click on the pom.xml | Run Maven | test, the content of Apache Maven – test – Log:<br /> <sub>(Remark: I shortened the response list of employees)</sub><br /> <a style="font-family: Courier New;color: black"><br /> …<br /> [INFO] &#8212; maven-surefire-plugin:2.12.4:test (default-test) @ HumanResourceServiceProject &#8212;<br /> [INFO] Surefire report directory: /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/surefire-reports</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> T E S T S<br /> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> Running nl.xyz.services.humanresourceservice.DepartmentTest<br /> <b>requestURI</b>: https://private-b4874b1-humanresourceservice.apiary-mock.com/department/30<br /> <b>status</b>: 200<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Fri, 09 Feb 2018 20:10:55 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7e004fc5c2ab07003caec1], Content-Length=[112], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[119], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;department_id&#8221;: 30,<br /> &#8220;department_name&#8221;: &#8220;Purchasing&#8221;,<br /> &#8220;manager_id&#8221;: 114,<br /> &#8220;location_id&#8221;: 1700<br /> }<br /> <b>requestURI</b>: https://private-b4874b1-humanresourceservice.apiary-mock.com/departments/30/employees/119<br /> <b>status</b>: 200<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Fri, 09 Feb 2018 20:10:56 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7e005099b117070044215c], Content-Length=[146], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[118], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;department_id&#8221;: 30,<br /> &#8220;department_name&#8221;: &#8220;Purchasing&#8221;,<br /> &#8220;employee_id&#8221;: 119,<br /> &#8220;first_name&#8221;: &#8220;Karen&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Colmenares&#8221;<br /> }<br /> Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.909 sec<br /> Running nl.xyz.services.humanresourceservice.EmployeeTest<br /> <b>requestURI</b>: https://private-b4874b1-humanresourceservice.apiary-mock.com/employees<br /> <b>status</b>: 201<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Fri, 09 Feb 2018 20:10:57 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7e005179e3cd0700eedbb3], Content-Length=[301], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[117], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;employee_id&#8221;: 220,<br /> &#8220;first_name&#8221;: &#8220;TESTFIRST&#8221;,<br /> &#8220;last_name&#8221;: &#8220;TESTINSERT&#8221;,<br /> &#8220;email&#8221;: &#8220;TESTMAIL&#8221;,<br /> &#8220;phone_number&#8221;: null,<br /> &#8220;hire_date&#8221;: &#8220;2015-06-25T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;IT_PROG&#8221;,<br /> &#8220;salary&#8221;: 6000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 103,<br /> &#8220;department_id&#8221;: 60<br /> }<br /> <b>requestURI</b>: https://private-b4874b1-humanresourceservice.apiary-mock.com/employees/220<br /> <b>status</b>: 200<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Fri, 09 Feb 2018 20:10:58 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7e00520fb27c07004e4008], Content-Length=[300], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[116], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;employee_id&#8221;: 220,<br /> &#8220;first_name&#8221;: &#8220;TESTFIRST&#8221;,<br /> &#8220;last_name&#8221;: &#8220;TESTUPDATE&#8221;,<br /> &#8220;email&#8221;: &#8220;TESTMAIL&#8221;,<br /> &#8220;phone_number&#8221;: null,<br /> &#8220;hire_date&#8221;: &#8220;2015-06-25T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;SA_REP&#8221;,<br /> &#8220;salary&#8221;: 8000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 103,<br /> &#8220;department_id&#8221;: 80<br /> }<br /> <b>requestURI</b>: https://private-b4874b1-humanresourceservice.apiary-mock.com/employees/100<br /> <b>status</b>: 200<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Fri, 09 Feb 2018 20:10:59 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7e005399b117070044215f], Content-Length=[806], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[115], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;employee_id&#8221;: 100,<br /> &#8220;first_name&#8221;: &#8220;Steven&#8221;,<br /> &#8220;last_name&#8221;: &#8220;King&#8221;,<br /> &#8220;email&#8221;: &#8220;SKING&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;515.123.4567&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1987-06-17T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;AD_PRES&#8221;,<br /> &#8220;salary&#8221;: 24000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: null,<br /> &#8220;department_id&#8221;: 90,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/100&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;edit&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/100&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;describedby&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/metadata-catalog/employees/item&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;collection&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> }<br /> ]<br /> }<br /> <b>requestURI</b>: https://private-b4874b1-humanresourceservice.apiary-mock.com/employees<br /> <b>status</b>: 200<br /> <b>headers</b>: {Server=[Cowboy], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT], Connection=[keep-alive], X-Apiary-Ratelimit-Limit=[120], Date=[Fri, 09 Feb 2018 20:11:00 GMT], Via=[1.1 vegur], X-Apiary-Transaction-Id=[5a7e00540fb27c07004e400b], Content-Length=[15519], Access-Control-Max-Age=[10], X-Apiary-Ratelimit-Remaining=[119], Content-Type=[application/json]}<br /> <b>body</b>:{<br /> &#8220;items&#8221;: [<br /> {<br /> &#8220;employee_id&#8221;: 100,<br /> &#8220;first_name&#8221;: &#8220;Steven&#8221;,<br /> &#8220;last_name&#8221;: &#8220;King&#8221;,<br /> &#8220;email&#8221;: &#8220;SKING&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;515.123.4567&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1987-06-17T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;AD_PRES&#8221;,<br /> &#8220;salary&#8221;: 24000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: null,<br /> &#8220;department_id&#8221;: 90,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/100&#8221;<br /> }<br /> ]<br /> },<br /> {<br /> &#8220;employee_id&#8221;: 101,<br /> &#8220;first_name&#8221;: &#8220;Neena&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Kochhar&#8221;,<br /> &#8220;email&#8221;: &#8220;NKOCHHAR&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;515.123.4568&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1989-09-21T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;AD_VP&#8221;,<br /> &#8220;salary&#8221;: 17000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 100,<br /> &#8220;department_id&#8221;: 90,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/101&#8221;<br /> }<br /> ]<br /> },<br /> …<br /> {<br /> &#8220;employee_id&#8221;: 123,<br /> &#8220;first_name&#8221;: &#8220;Shanta&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Vollman&#8221;,<br /> &#8220;email&#8221;: &#8220;SVOLLMAN&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;650.123.4234&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1997-10-10T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;ST_MAN&#8221;,<br /> &#8220;salary&#8221;: 6500,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 100,<br /> &#8220;department_id&#8221;: 50,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/123&#8221;<br /> }<br /> ]<br /> },<br /> {<br /> &#8220;employee_id&#8221;: 124,<br /> &#8220;first_name&#8221;: &#8220;Kevin&#8221;,<br /> &#8220;last_name&#8221;: &#8220;Mourgos&#8221;,<br /> &#8220;email&#8221;: &#8220;KMOURGOS&#8221;,<br /> &#8220;phone_number&#8221;: &#8220;650.123.5234&#8221;,<br /> &#8220;hire_date&#8221;: &#8220;1999-11-16T05:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;ST_MAN&#8221;,<br /> &#8220;salary&#8221;: 5800,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 100,<br /> &#8220;department_id&#8221;: 50,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/124&#8221;<br /> }<br /> ]<br /> }<br /> ],<br /> &#8220;hasMore&#8221;: true,<br /> &#8220;limit&#8221;: 25,<br /> &#8220;offset&#8221;: 0,<br /> &#8220;count&#8221;: 25,<br /> &#8220;links&#8221;: [<br /> {<br /> &#8220;rel&#8221;: &#8220;self&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;edit&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;describedby&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/metadata-catalog/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;first&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/&#8221;<br /> },<br /> {<br /> &#8220;rel&#8221;: &#8220;next&#8221;,<br /> &#8220;href&#8221;: &#8220;http://localhost:9090/ords/hr/employees/?offset=25&#8221;<br /> }<br /> ]<br /> }<br /> Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.594 sec</p> <p>Results :</p> <p>Tests run: 6, Failures: 0, Errors: 0, Skipped: 0</p> <p>[INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD SUCCESS<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 8.834 s<br /> [INFO] Finished at: 2018-02-09T12:15:04-08:00<br /> [INFO] Final Memory: 15M/198M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> Process exited with exit code 0.<br /> </a></p> <p>In the Oracle Apiary API Inspector, I could see, the 6 request that were made in total from the Java classes “EmployeeTest” and “DepartementTest” during the last Maven test run:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/03/lameriks_201802_38.jpg?resize=702%2C180&#038;ssl=1" alt="" width="702" height="180" data-recalc-dims="1" /></p> <h2>Apache Maven – clean</h2> <p>After a right-click on the pom.xml | Run Maven | clean, the content of Apache Maven – clean – Log is:<br /> <a style="font-family: Courier New;color: black"><br /> INFO] &#8212; maven-clean-plugin:2.5:clean (default-clean) @ HumanResourceServiceProject &#8212;<br /> <b>[INFO] Deleting /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target</b><br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD SUCCESS<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 0.316 s<br /> [INFO] Finished at: 2018-02-09T07:51:02-08:00<br /> [INFO] Final Memory: 8M/151M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> Process exited with exit code 0.<br /> </a></p> <p>This results in subdirectory <a style="font-family: Courier New;color: black">target</a> being deleted from the file system.</p> <h2>Apache Maven – package</h2> <p>After a right-click on the pom.xml | Run Maven | package, the content of Apache Maven – package – Log is:<br /> <a style="font-family: Courier New;color: black"><br /> [INFO] Scanning for projects&#8230;<br /> [INFO]<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Building HumanResourceServiceProject 1.0-SNAPSHOT<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO]<br /> [INFO] &#8212; maven-resources-plugin:2.6:resources (default-resources) @ HumanResourceServiceProject &#8212;<br /> [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!<br /> [INFO] Copying 2 resources<br /> [INFO] Copying 0 resource<br /> [INFO] Copying 2 resources<br /> [INFO]<br /> [INFO] &#8212; maven-compiler-plugin:3.1:compile (default-compile) @ HumanResourceServiceProject &#8212;<br /> [INFO] Nothing to compile &#8211; all classes are up to date<br /> [INFO]<br /> [INFO] &#8212; maven-resources-plugin:2.6:testResources (default-testResources) @ HumanResourceServiceProject &#8212;<br /> [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!<br /> [INFO] skip non existing resourceDirectory /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/src/test/resources<br /> [INFO]<br /> [INFO] &#8212; maven-compiler-plugin:3.1:testCompile (default-testCompile) @ HumanResourceServiceProject &#8212;<br /> [INFO] Changes detected &#8211; recompiling the module!<br /> [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!<br /> [INFO] Compiling 2 source files to /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/test-classes<br /> [INFO]<br /> [INFO] &#8212; maven-surefire-plugin:2.12.4:test (default-test) @ HumanResourceServiceProject &#8212;<br /> [INFO] Surefire report directory: /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/surefire-reports</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br /> T E S T S<br /> …<br /> Results :</p> <p>Tests run: 6, Failures: 0, Errors: 0, Skipped: 0</p> <p>[INFO]<br /> [INFO] &#8212; maven-jar-plugin:2.4:jar (default-jar) @ HumanResourceServiceProject &#8212;<br /> [INFO] Building jar: /u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/HumanResourceServiceProject-1.0-SNAPSHOT.jar<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] BUILD SUCCESS<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> [INFO] Total time: 8.963 s<br /> [INFO] Finished at: 2018-02-09T12:36:23-08:00<br /> [INFO] Final Memory: 17M/201M<br /> [INFO] &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> Process exited with exit code 0.<br /> </a></p> <p>In the log above, you can see that after compiling code and running the tests, the following jar file is made:<br /> <a style="font-family: Courier New;color: black">/u02/oracle/developer/mywork/ServicesApplication/HumanResourceServiceProject/target/HumanResourceServiceProject-1.0-SNAPSHOT.jar</a></p> <h2>Summary</h2> <p>As a follow up from my previous article, in this article the focus is on calling the <b>Oracle Apiary Mock Server</b> from <b>Java code.</b></p> <p>One of the examples for the “HumanResourceService” API is about the action “Get all employees” in combination with “Java” as language. With that example, also the dependencies to be used in a <b>Maven pom.xml</b> (java6+) are given. This example triggered me to try out the Oracle JDeveloper, Maven and Java combination.</p> <p>This article shows you how, with the help of <b>Oracle JDeveloper 12.2.1</b> in combination with <b>JUnit</b> and <b>Maven,</b> a successful call to the Oracle Apiary MockServer action “Get all employees” from a Java class was made, and also to other actions for “Employees” and “Departments”.</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/10/calling-the-oracle-apiary-mock-server-from-java-code-via-junit-and-maven/">Calling the Oracle Apiary Mock Server from Java code (via JUnit and Maven)</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Marc Lameriks https://technology.amis.nl/?p=47582 Sat Feb 10 2018 16:47:00 GMT-0500 (EST) Using Ansible to distribute SQL Developer preferences https://ilmarkerm.eu/blog/2018/02/using-ansible-to-distribute-sql-developer-preferences/#utm_source=rss&utm_medium=rss <p>Some background info: We need to provide direct database access to many developers and data analysts. On database side managing so many different users securely means you have to use the same authentication source as all the other systems in the company, for example Active Directory. For databases we have implemented using Radius and for Oracle database this means users have to use thick Oracle client on their computers.<br /> Installing Oracle client is not a trivial task for many users and the MacOS instantclient that Oracle provides has been very dependent on the exact MacOS version. In order to provide some help to overcome these problems I decided to create a small Virtualbox VM, that users could just download and run. The VM would be based on Fedora Linux, have preconfigured Oracle Instantclient with common client tools like SQLPlus and SQL Developer.<br /> This kind of VM needs to be maintained and to push out changes I already set up a git respository containing ansible playbook. In VM, under root user I checked out this git respository and set up regular cron job to run one specified playbook locally.<br /> Hourly crontab job looks something like this:</p> <pre><code>cd ansible-sqldeveloper-vm &amp;&amp; git pull &amp;&amp; ansible-playbook local.yml </code></pre> <p>This playbook can be used to push out changes to application level also, for example maintaining common tnsnames.ora file to include newly created databases.</p> <p>It did not take long to discover first bug with the setup &#8211; SQL Developer under Linux &#8220;looses&#8221; text cursor in editor window very easily, it is just hidden. To change that users need to go to SQL Developer preferences and change how text cursor looks like. I don&#8217;t want users to fix this common error themselves.<br /> Another issue, new SQL Developer version came out. It is easy to push out new RPM using Ansible but SQL Developer does not start immediately after that, users have to configure there to find JDK first. Another thing I really don&#8217;t want my users to deal with.</p> <p>Ansible to the rescue. All I needed to do was commit the necessary changes to my local.yml playbook and update it in the git repository.</p> <p>Lets take the easier issue of telling newly installed SQL Developr where to find JDK first.<br /> SQL Developer 17.4 rads the JDK location from file <strong>$HOME/.sqldeveloper/17.4.0/product.conf</strong> so /home/sqldeveloper/.sqldeveloper/17.4.0/product.conf in my case. This file contains only one important line telling the location of JDK:</p> <pre><code>SetJavaHome /usr/lib/jvm/java-1.8.0-openjdk </code></pre> <p>All I need to do is use ansible copy module to create this file.</p> <p>Now the other problem, I need to change specific SQL Developer preferences. When I did the changes required on a test system I found out that SQL Developer wrote it preferences to XML file <strong>$HOME/.sqldeveloper/system17.4.0.355.2349/o.sqldeveloper/product-preferences.xml</strong>. The file location is SQL Developer version specific. The specific change was a newly added XML tag under root element:</p> <pre><code> &lt;hash n="CaretOptions"&gt; &lt;value n="caretColor" v="-31744"/&gt; &lt;value n="insertShape" v="8"/&gt; &lt;value n="overwriteShape" v="5"/&gt; &lt;/hash&gt; </code></pre> <p>This file contains all user preferences, so I don&#8217;t really want to overwrite this entire file, I only want to add this new XML tag. This is possible using Ansible xml module where I can give XPath as an argument and the module will make sure that the provided XPath expression is present in the file.<br /> Also I want this to work for all SQL Developer versions and not change the path every time SQL Developer is upgraded.</p> <p>The resulting Ansible playbook looks like this.</p> <p>First I&#8217;ll describe the needed changes in a separate Ansible parameters file just to make the playbook look cleaner.</p> <p><script src="https://gist.github.com/ilmarkerm/3f6b28d36f86a9384df804a43c0069ec.js?utm_source=rss&utm_medium=rss"></script></p> <p>The playbook itself:</p> <p><script src="https://gist.github.com/ilmarkerm/9cb40adb21f6404b1d580a2646971956.js?utm_source=rss&utm_medium=rss"></script></p> <div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/ilmarkerm?a=X9WO9_yXwGo:EbIzTIzDf4E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ilmarkerm?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ilmarkerm?a=X9WO9_yXwGo:EbIzTIzDf4E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/ilmarkerm?i=X9WO9_yXwGo:EbIzTIzDf4E:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ilmarkerm?a=X9WO9_yXwGo:EbIzTIzDf4E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/ilmarkerm?i=X9WO9_yXwGo:EbIzTIzDf4E:V_sGLiPBpWU" border="0"></img></a> </div><img src="http://feeds.feedburner.com/~r/ilmarkerm/~4/X9WO9_yXwGo" height="1" width="1" alt=""/> ilmarkerm https://ilmarkerm.eu/blog/?p=422 Sat Feb 10 2018 05:02:08 GMT-0500 (EST) Grid Naming Service in Oracle RAC http://oracle-help.com/oracle-rac/grid-naming-service-oracle-rac/ <p>When we use <strong>Oracle RAC</strong>, all clients must be able to reach the database. All public addresses, VIP addresses and SCAN addresses of Cluster must be resolved by the clients.And <strong>GNS</strong>[Grid Naming Service] helps us resolve this problem.</p> <p><strong>GNS</strong> is linked to the domain name server (<strong>DNS</strong>) so that clients can resolve these dynamic addresses and transparently connect to the cluster and the databases. Activating <strong>GNS</strong> in a cluster requires a <strong>DHCP</strong> service on the public network.</p> <p>Grid Naming Service uses one static address, which dynamically allocates VIP addresses using <strong>Dynamic Host Configuration Protocol[DHCP],</strong> which must be running on the network.</p> <p><strong>Grid Naming Service</strong> is in use with <strong>gnsd</strong>[grid naming service daemon].</p> <p><strong>Background Process of GNS</strong>: <strong>mDNS</strong>[Multicast Domain Name Service]: It allows DNS request.</p> <p><strong>GNS</strong>[Oracle Grid Naming Service]: It is a gateway between the cluster <strong>mDNS</strong> and external <strong>DNS</strong> servers. The GNS process performs name resolution within the cluster. The DNS delegates query the GNS virtual IP address and the GNS daemon responds to incoming name resolution requests at that address. Within the subdomain, the GNS uses multicast Domain Name Service (<strong>mDNS</strong>), included with Oracle Clusterware, to enable the cluster to map host names and IP addresses dynamically as nodes are added and removed from the cluster, without requiring additional host configuration in the <strong>DNS</strong>.</p> <p><span style="font-size: 10pt;"><strong>Note: </strong>From Oracle 12c, Oracle Flex Cluster requires Grid Naming Service (GNS).</span></p> <p>Stay tuned for <strong>Oracle GNS Configuration </strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-rac/grid-naming-service-oracle-rac/">Grid Naming Service in Oracle RAC</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Jagruti Jasleniya http://oracle-help.com/?p=3293 Fri Feb 09 2018 03:10:17 GMT-0500 (EST) Hey DBA, fix it, but don’t touch it! http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/M4cTHmSdyB0/ <p><img class="alignleft wp-image-7872" src="https://oracle-base.com/blog/wp-content/uploads/2018/02/plumber-35611_640.png" alt="" width="200" height="234" /><a href="https://twitter.com/martinberx">Martin Berger</a> posted an <a href="https://twitter.com/martinberx/status/961274490834571267">interesting tweet</a> the other day.</p> <blockquote><p>&#8220;what&#8217;s the expectation a DBA should do when &#8220;something is slow&#8221; &#8211; but HW and SW is ok and DBA is not responsible (and must not manipulate) schema or statement?&#8221;</p></blockquote> <p>The <a href="https://twitter.com/martinberx/status/961274490834571267">thread</a> includes some suggestions, but I want to come at it from a different angle&#8230;</p> <p>I have a lot of sympathy for this situation. In my current role I look after a lot of databases that sit behind 3rd party applications. In many cases, that means we can&#8217;t change the code. We can&#8217;t play around with the contents of the schema, for fear of losing support. Our hands are, to a greater or lesser extent, tied. This presents an interesting problem because you&#8217;re damned if you do, and damned if you don&#8217;t.</p> <h2>Thought 1</h2> <p>My attitude to databases behind 3rd party applications might surprise you. I try to stick closely to what the application vendor recommends, even if I know it to be stupid. Why?</p> <ul> <li>Support (1) : As soon as you do something that isn&#8217;t in the vendor&#8217;s recommendations they are going to blame that for the problem. They&#8217;ll ask you to switch it all back and test it, which is just a delaying tactic most of the time and really annoying.</li> <li>Support (2) : You want the system to be as familiar as possible to the support staff and any consultants they send on site.</li> <li>Support (3) : I would say go for the vendor&#8217;s preferred platform, even if it&#8217;s not your preferred platform. You want to be on the same platform as the majority of their customers. If most of their customers are using Oracle on Windows, I&#8217;m going to consider it. If most of their customers are on SQL Server, that&#8217;s what I want. Unless you&#8217;re a massive customer, you are going to be at the bottom of the food chain if you marginalise yourself. Having lived through the death of Oracle on Tru64 and HP-UX, I want to be on the &#8220;main platform&#8221; for the application thank you very much!</li> <li>Sometimes their crap application expects the DB to be crap. I had one case where the vendor&#8217;s approach to gathering stats was extremely poor. I revised it to bring it into this century and the application died. Their bad code needed bad stats to work.</li> </ul> <p>At this point I expect someone to say, &#8220;But Tim, you&#8217;re supposed to be good at this stuff. I would have expected more from you!&#8221; What&#8217;s my response? Walk a mile in my shoes. If you have hours to obsess over one system to make it perfect, great for you, just don&#8217;t come and work here! <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <h2>Thought 2</h2> <p>When you buy a product it should be fit for purchase. Part of that is the vendor should be able to give adequate guidance on getting the most out of their system. Also, when you purchase a system, you should be doing your due diligence. Having written this, I understand it is a complete fiction. Why?</p> <ul> <li>Everything works great on PowerPoint. Procurement seems to be swayed heavily by the quality of the presentations, not the quality of the products.</li> <li>I don&#8217;t think many people really know what they are letting themselves in for until they are so far down the line, backing out would be too embarrassing an option.</li> <li>Sometimes, the best product on the market is absolutely terrible. I have one in mind, which my colleagues will be able to guess, where we had a choice of two products, both of which were absolutely terrible, so we picked the least terrible. In a meeting with our IT director I said, you&#8217;ve heard the expression, &#8220;You can&#8217;t polish a turd, but you can roll it in glitter!&#8221; This product is the turd inside that glitter!</li> </ul> <h2>Thought 3</h2> <p>Even when it&#8217;s not a 3rd party app, you can&#8217;t always fix it easily. As an application grows it gets significantly harder to refactor pieces of it. Sure, you can change that little bit, but what are the knock-on effects? If you have good regression tests, great. If not, it can be a risky endeavour. I mentioned in another post it took about six months to find some of the performance issues brought about by an upgrade from 11.2.0.4 to 12.1.0.2. It was stuff that had been missed during the testing and only ran once a year. The bigger the application, the easier it is for something to hide.</p> <p>Even if you can refactor, do you have the time and resources to do it? Applications aren&#8217;t static. Sure, there is pressure to fix performance problems, but there is also pressure to add new functionality. What&#8217;s best for one group of people may not be good for others.</p> <h2>Thought 4</h2> <p>Martin&#8217;s tweet exemplifies the misunderstanding most managers (not him) have about databases. There&#8217;s rarely a magic button you can press that fixes performance problems. The vast majority of the time it comes down to bad database design and/or bad SQL. When you can&#8217;t change either, you don&#8217;t have much choice other than to wait for the next application patch/upgrade from the vendor that might fix it, or throw hardware at it on the DB layer or the App layer, depending where the problem is. {Insert &#8220;Run it on Exadata&#8221; comment here!} I really don&#8217;t think a lot of people outside the database world understand this!</p> <p>Oracle has a lot of goodies that can be used to mitigate terrible applications without having to touch them directly. <strong>Update</strong>: I&#8217;m not trying to make out all these features don&#8217;t come with their own set of issues too. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <ul> <li><a href="/articles/11g/sql-plan-management-11gr1">SQL Plan Management</a></li> <li><a href="/articles/misc/materialized-views">Materialized Views</a></li> <li><a href="/articles/11g/query-result-cache-11gr1">Query Result Cache</a></li> <li><a href="/articles/11g/cross-session-plsql-function-result-cache-11gr1">PL/SQL Function Result Cache</a></li> <li><a href="/articles/11g/sql-repair-advisor-11g">SQL Repair Advisor</a></li> <li><a href="/articles/12c/approximate-query-processing-12cr2">Approximate Query Processing</a></li> <li><a href="/articles/12c/adaptive-query-optimization-12cr1">Adaptive Query Optimization</a></li> <li><a href="/articles/11g/extended-statistics-enhancements-11gr2">Extended Statistics</a></li> <li><a href="/articles/misc/granular-control-of-optimizer-features-using-fix-control#_fix_control">_FIX_CONTROL</a></li> <li><a href="/articles/10g/dbms_advanced_rewrite">DBMS_ADVANCED_REWRITE</a></li> <li>SQL Translation Framework</li> </ul> <p>But the real solution is to do proper database design, write good SQL, and write good applications on top of that. Performance is a development issue, and we are all developers now. Yes, even you DBAs. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Anyway, just some thoughts on the situation Martin found himself in, and I find myself in all the time. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Cheers</p> <p>Tim&#8230; (Chief Presser of Magic Buttons)</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/09/hey-dba-fix-it-but-dont-touch-it/">Hey DBA, fix it, but don&#8217;t touch it!</a> was first posted on February 9, 2018 at 9:06 am.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/M4cTHmSdyB0" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7870 Fri Feb 09 2018 03:06:42 GMT-0500 (EST) Miscellaneous Oracle RAC wait events http://oracle-help.com/oracle-rac/miscellaneous-oracle-rac-wait-events/ <p><span style="font-size: 10pt;"><strong>Miscellaneous Oracle RAC wait events</strong></span></p> <p><span style="font-size: 10pt;"><strong>1. gc remaster :</strong></span><br /> <span style="font-size: 10pt;"> resource remastering happens based on 2 situation :</span><br /> <span style="font-size: 10pt;"> 1.When Instance leaves or joins cluster.</span><br /> <span style="font-size: 10pt;"> 2.Dynamic remastering from a less busy instance to an instance where demand for that object is too high.This is also called resource affinity.</span></p> <p><span style="font-size: 10pt;"><strong>2. gc cr grant busy :</strong></span><br /> <span style="font-size: 10pt;"> The gc cr grant busy event is a when a grant is received but there is a delay in loading the block This can be because there are many versions of the data block in the RAM buffers of the RAC database. The &#8220;gc cr grant busy&#8221; wait can also occur when using the insert with the APPEND hint, as Oracle may be busy formatting block headers and footers for a new insert.</span></p> <p><span style="font-size: 10pt;"><strong>3.gc cr grant congested :</strong></span><br /> <span style="font-size: 10pt;"> These wait events indicate that there were</span><br /> <span style="font-size: 10pt;"> CPU resource</span><br /> <span style="font-size: 10pt;"> starvation or higher global cache workload</span><br /> <span style="font-size: 10pt;"> issues.</span><br /> <span style="font-size: 10pt;"> For example, sudden spikes in global cache workload,</span><br /> <span style="font-size: 10pt;"> CPU/memory starvation etc.</span><br /> <span style="font-size: 10pt;"> Reducing CPU usage by tuning costly SQL statement.</span></p> <p><span style="font-size: 10pt;"><strong>4. gc cr multi block request :</strong></span><br /> <span style="font-size: 10pt;"> This event happends when using full table scan.</span><br /> <span style="font-size: 10pt;"> Reducing full table scan will reduce the time spent on this event.</span></p> <p><span style="font-size: 10pt;"><strong>5.gc freelist wait :</strong></span></p> <p><span style="font-size: 10pt;">Locks are not being closed fast enough ,resulting in gc freelist waits.</span><br /> <span style="font-size: 10pt;"> All releasable locks are used and a new one has been requested . To make a resource element available , a resource element is pinged.</span></p> <p><span style="font-size: 10pt;">Wait time : The duration of the resource get operation to ping the resource element.</span></p> <p><span style="font-size: 10pt;"><strong>6. gc current retry :</strong>Instance asks for a current block , and if requested block was not received either because , the block was corrupted or the block was lost during transmission over the interconnect .</span></p> <p><span style="font-size: 10pt;"><strong>7. gc cr failure:</strong><span class="css-gen5"> This is similar to the gc current retry event, but in this case, CR block was requested. However, a failure status </span></span></p> <div><span class="css-gen5" style="font-size: 10pt;"> was received either because the block was corrupted or the block was lost during transmission over the interconnect. </span></div> <div><span style="font-size: 10pt;"> </span></div> <div><span style="font-size: 10pt;"> </span></div> <div><span style="font-size: 10pt;"><strong>8.Wait for master scn :</strong></span></div> <div><span style="font-size: 10pt;">Each node in the cluster generates its own SCN and subsequently , using propagation method resynchronizes to the highest SCN in the cluster.</span><br /> <span style="font-size: 10pt;"> This wait indicates number of time foreground process waited for SCNs to be acknowledged from instances in the cluster.</span><br /> <span style="font-size: 10pt;"> This function is driven by underscore [hidden] parameter &#8220;_IMMEDIATE_COMMIT_PROPAGATION&#8221; having boolean value true or false.</span><br /> <span style="font-size: 10pt;"> When it is set to TRUE oracle uses the Block on Commit algorithm for messaging.In this case of BOC ,global high water mark for the SCNS sent and received is maintained, there by reducing traffic for global SCN synchronization and in turn improving overall performance.</span></div> <div><span style="font-size: 10pt;"> </span></div> <div><span style="font-size: 10pt;"><strong>9.gc disk read :</strong>LMS is a critical process and does not do heavy lifting tasks such as disk I/O etc. If LMS process has to initiate I/O, instead of initiating I/O, LMS will downgrade the block mode and send the block to the requesting foreground process (this is known as Light Works rule). Foreground process will apply undo records to the block to construct CR version of the block.</span></div> <div> <p><span style="font-size: 10pt;">Now, the Foreground process might not find the undo blocks in the <strong>local cache as the transactions happened in the remote cache</strong>. A request is sent to remote LMS process to access undo block. If the undo block is not in the remote cache either, remote LMS process will send a grant to the foreground process to read the undo block from the disk. Foreground process accounts this wait time for the undo segment block grants to the <strong>gc cr disk read</strong> wait event.</span></p> <p><strong><span style="font-size: 10pt;">10.gc cr/current block lost :</span></strong></p> <p><span style="font-size: 10pt;">gc cr/current block can get lost during transmission in interconnect.</span><br /> <span style="font-size: 10pt;">If a requested block is not received in the instance in 0.5 second , the block is considered to be lost block. And this block need to be resent , means wasting time for second transfer to complete.</span></p> <p><strong><span style="font-size: 10pt;">11.gc cr/current cancel </span></strong></p> <p><strong><span style="font-size: 10pt;">12.gc current split</span></strong></p> <p><strong><span style="font-size: 10pt;">13.gc prepare</span></strong></p> <p><strong><span style="font-size: 10pt;">14.gc claim</span></strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> </div> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-rac/miscellaneous-oracle-rac-wait-events/">Miscellaneous Oracle RAC wait events</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Jagruti Jasleniya http://oracle-help.com/?p=3062 Fri Feb 09 2018 02:53:30 GMT-0500 (EST) Docker and Windows 10h 1709 Patch aka Killing Me Slowly http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/ <p>So I transitioned in the last years from having a development lab, to VMs, to the cloud and now, tired of slow WiFi, been happily using Docker for most of my demos.  As of January, the latest upgrade to Windows 10, aka patch version 109, has been like a bad cat fight.</p> <p><a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/badcatfight/" rel="attachment wp-att-7791"><img class="alignnone size-full wp-image-7791" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/badcatfight.gif?resize=280%2C160" alt="" width="280" height="160" data-recalc-dims="1" /></a></p> <p>For anyone else using Docker on Windows, it&#8217;s very likely that the error &#8220;MobyLinuxVM failed to start worker process&#8221; is a bane of your existence.  After exhausting the standard attempt to uninstall whatever patches were applied by Microsoft, and post researching a solution, you&#8217;d discover its more of a perfect storm, than a single cause.  For me, it includes an anti-virus software that has a tamper-proof mechanism on it.  It&#8217;s one of those times I want to shoot myself for following company policy&#8230; <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>The problem isn&#8217;t really with Docker, for many it has to do with Windows now controlling the startup process for Hyper-V, (where previously it was started by Docker) and it failing due to numerous issues post the 1709 patch for Windows 10.  Some have changed permissions, some have disabled and reconfigured Windows Defenders protection, reinstalled products in a particular order, others, like me, also had issues with all the network drivers being corrupted, (which included the Hyper-V network driver.)</p> <p><a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/network_iss/" rel="attachment wp-att-7792"><img class="alignnone wp-image-7792" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/network_iss.png?resize=537%2C396" alt="" width="537" height="396" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/network_iss.png?resize=1024%2C755 1024w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/network_iss.png?resize=300%2C221 300w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/network_iss.png?resize=768%2C567 768w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/network_iss.png?w=1556 1556w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/network_iss.png?w=1300 1300w" sizes="(max-width: 537px) 100vw, 537px" data-recalc-dims="1" /></a></p> <p>As I had to reinstall my Wireless adapter, I ended up using my Mac to go to Microsoft&#8217;s download site and get the drivers, since corrupt drivers weren&#8217;t going to correct themselves.  The Code 56 error is a common one at least and took me immediately to the msi and zip files to transfer to a jump drive and get my Surface back online.</p> <p>I disabled/uninstalled Hyper-V and re-enabled/re-installed Hyper-V post the fix on the network adapters and removed a secondary Hyper-V network adapter added by the Windows patch.  All in all, I can say, this has been one mess of a patch that was pushed out starting in October and has continued to plague not just Docker users, but Virtualbox and VMWare.</p> <p>Needless to say, since I have a tamper proof Sophos Endpoint on my Surface, I worked through every scenario before finally able to mark them all off as culprits and now have a ticket in with my IT support to download the Sophos patch since the process c:\windows\system32\vmcompute.<wbr />exe is used by Hyper-V, and conflicts with the Intercept X/Exploit Prevention for Windows 10, patched to 1709. This process needs to be excluded from the Intercept X/Exploit prevention, so if you use Sophos Endpoint and have exhausted all other areas, know that this is your next step in the process to regaining your sanity&#8230; <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Wish me luck and I&#8217;ll update this post when my Docker is back up and running.</p> <p>&nbsp;</p> <br><br><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/ico-tag.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/docker/" rel="tag">docker</a>, <a href="http://dbakevlar.com/tag/mobylinux/" rel="tag">MobyLinux</a>, <a href="http://dbakevlar.com/tag/sophos/" rel="tag">Sophos</a><br><br><div style="width:100%"><table align="left" width="100%" cellspacing="0" cellpadding="0" bgcolor="#f1f1f1" border="0px;"> <tbody> <tr bgcolor="#ffffff"><td align="center" width="17%" valign="top"> <span class="sb_title">Del.icio.us</span><br> <a href="http://del.icio.us/post?url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/&title=Docker and Windows 10 with 1709 Patch aka Killing Me Slowly"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">TweetThis</span><br> <a href="http://twitthis.com/twit?url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/&title=Docker and Windows 10 with 1709 Patch aka Killing Me Slowly"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Digg</span><br> <a href="http://digg.com/submit?phase=2&url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/&title=Docker and Windows 10 with 1709 Patch aka Killing Me Slowly"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">StumbleUpon</span><br> <a href="http://www.stumbleupon.com/submit?url=http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/&title=Docker and Windows 10 with 1709 Patch aka Killing Me Slowly"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td></tr> </tbody></table></div><br><div style="clear:both"></div><div style="background:#EEEEEE; padding:0px 0px 0px 15px; margin:10px 0px 0px 0px;"><div style="padding:5px 0px 5px 0px;"><b>Comments:</b>&nbsp;&nbsp;<a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/#comments">1 (One) on this item</a></div><br><div style="clear:both"></div><div style="padding:13px 0px 5px 0px;"><span style="border-bottom:1px dashed #003399;padding-bottom:4px;"><strong>You might be interested in this:</strong></span>&nbsp;&nbsp;<br><ul style="margin:0; padding:0; padding-top:10px; padding-bottom:5px;"><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/06/em12c-rel-4-the-security-console/" >EM12c Rel. 4, the Security Console</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/05/enterprise-manager-12c-management-packs-and-licensing-information/" >Enterprise Manager 12c- Management Packs and Licensing Information</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/04/kickstarting-after-a-failed-addition-to-the-awr-warehouse/" >Kickstarting After a Failed Addition to the AWR Warehouse</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/11/considerations-using-sql-server-2016-dynamic-data-masking/" >Considerations When Using SQL Server 2016 Dynamic Data Masking</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2012/10/slides-from-oracle-open-world-and-other-schtuff/" >Slides from Oracle Open World and Other Schtuff!</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/">Docker and Windows 10 with 1709 Patch aka Killing Me Slowly</a>], All Right Reserved. 2018.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2018/02/docker-windows-10-1709-patch-aka-killing-slowly/">Docker and Windows 10 with 1709 Patch aka Killing Me Slowly</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=7790 Thu Feb 08 2018 20:20:13 GMT-0500 (EST) How to Enable Binary Logging on an Amazon RDS Read Replica https://blog.pythian.com/enabling-binary-logging-rds-read-replica/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>One of the more common struggles I’ve had to assist with in regard to Amazon RDS is enabling binary logging on read replicas, or forming multi-tier replication in instances using version 5.6 or later after seeing that multi-tier replication is not supported in version 5.5 (for a reason that will become clear by the end of this post.)</p> <p>First off, let’s have a look at the topology that I have in place in my AWS account. As you’ll see below I have a master, blog1, and a read replica that I created via the AWS console called blog2. You’ll also notice that, despite being supported, if I select instance actions while having blog2 highlighted the option to create a read replica is grayed out.</p> <p><img class="alignnone size-full wp-image-103336" src="https://blog.pythian.com/wp-content/uploads/EnablingBinaryLoggingOnRDSReplica1.png" alt="" width="1080" height="427" srcset="https://blog.pythian.com/wp-content/uploads/EnablingBinaryLoggingOnRDSReplica1.png 1080w, https://blog.pythian.com/wp-content/uploads/EnablingBinaryLoggingOnRDSReplica1-465x184.png 465w, https://blog.pythian.com/wp-content/uploads/EnablingBinaryLoggingOnRDSReplica1-350x138.png 350w" sizes="(max-width: 1080px) 100vw, 1080px" /></p> <p>Further, if we use the MySQL CLI to connect to blog2 and check the global variables for log_bin and binlog_format, you’ll see that binary logging is off and binlog_format is set to statement. This is strange considering that the parameter group that’s assigned to blog2 is the same as blog1 where binary logging is enabled and the format is set to mixed. In fact, when you try to change the binary logging format in the MySQL RDS parameter group you’ll see that statement isn’t even an option.</p> <pre lang="bash" escaped="true">mysql&gt; show global variables like 'log_bin'; show global variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | OFF | +---------------+-------+ 1 row in set (0.06 sec) +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+ 1 row in set (0.05 sec)</pre> <p>So what gives? The status of the variables in our instance clearly don’t reflect the intended configuration. The answer here is to enable automatic backups for blog2. When you first create a read replica in RDS you won’t have the option to enable automatic backups and, much like this situation, you’ll have to go back and modify the read replica instance after its creation to enable automatic backups. The supporting documentation for this can be found <a href="https://aws.amazon.com/rds/details/read-replicas/">here</a>. The appropriate text is as follows:</p> <p><em>When creating a Read Replica, there are a few things to consider. First, you must enable automatic backups on the source DB instance by setting the backup retention period to a value other than 0. This requirement also applies to a Read Replica that is the source DB instance for another Read Replica. For MySQL DB instances, automatic backups are supported only for Read Replicas running MySQL 5.6 and later, but not for MySQL versions 5.5. To enable automatic backups on an Amazon RDS MySQL version 5.6 and later Read Replica, first create the Read Replica, then modify the Read Replica to enable automatic backups.</em></p> <p>After you enable automatic backups by modifying your read replica instance to have a backup retention period greater than 0 days, you’ll find that the log_bin and binlog_format will align itself with the configuration specified in your parameter group dynamically and will not require the RDS instance to be restarted. You will also be able to create a read replica from your read replica instance with no further modification requirements.</p> <h3><strong>Conclusion</strong></h3> <p>To enable binary logging on an AWS RDS Read Replica, you must set backup retention period to something greater than 0 days. I like to explain this to people by saying that they need to look at this from the Database-as-a-Service (DBaaS) perspective. If you have a DBaaS instance that has no backup recovery requirements and has no read replicas, there is no reason for the cloud provider to waste clock cycles and storage on binary logs that won’t be used. By enabling the backup requirement, you’ve forced a position where binary logs are justified.</p> </div></div> Peter Sylvester https://blog.pythian.com/?p=103335 Thu Feb 08 2018 14:35:20 GMT-0500 (EST) Extract Data Guard Commands on Oracle 12.2 http://oracledba.blogspot.com/2018/02/extract-data-guard-commands-on-oracle.html <div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-Kn3ynyq-cgw/Wnx6NEWe7CI/AAAAAAAFn9Q/DtoOZtlNVkUq9Kakx7tuynTPfmeIGhkZACLcBGAs/s1600/newin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="266" data-original-width="345" height="246" src="https://2.bp.blogspot.com/-Kn3ynyq-cgw/Wnx6NEWe7CI/AAAAAAAFn9Q/DtoOZtlNVkUq9Kakx7tuynTPfmeIGhkZACLcBGAs/s320/newin.png" width="320" /></a></div><div class="tr_bq"><br /></div><div class="tr_bq">Hi,</div>These days I am starting to work on Oracle 12.2, leaving behind the old versions.<br />Since my main domain is Oracle Data Guard,&nbsp; I posted a blog about <a href="https://oracledba.blogspot.com/2016/09/oracle-12c-release-2-new-features-for_29.html">Oracle 12c Release 2 New Features for Active Data Guard</a>, one of a big new feature I missed is that the internal Data Guard broker configuration was changed dramatically on 12.2.<br />Last week, I tried to "<a href="https://oracledba.blogspot.com/2016/05/extract-data-guard-commands.html">Extract Data Guard Commands</a>", and realized it is not working as before :(<br />So I sat down and adjusted it to work on 12.2, this time I enhanced the output with some more important information.<br /><br />Run the following script as sysdba<br />displayconfig122.sql:<br /><br /><blockquote>PROMPT disable FAST_START FAILOVER;<br />PROMPT disable configuration;<br />PROMPT remove configuration;<br />DECLARE<br />&nbsp; &nbsp;rid&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INTEGER;<br />&nbsp; &nbsp;indoc&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2 (4000);<br />&nbsp; &nbsp;outdoc&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VARCHAR2 (4000);<br />&nbsp; &nbsp;p&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INTEGER;<br />&nbsp; &nbsp;z&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XMLTYPE;<br />&nbsp; &nbsp;y&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CLOB;<br />&nbsp; &nbsp;v_xml&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XMLTYPE;<br />&nbsp; &nbsp;tout&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VARCHAR2 (4000);<br />&nbsp; &nbsp;db_type&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2 (10);<br />&nbsp; &nbsp;db_headers_commands&nbsp; &nbsp; &nbsp; CLOB;<br />&nbsp; &nbsp;db_commands&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CLOB;<br />&nbsp; &nbsp;general_commands&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CLOB;<br />&nbsp; &nbsp;db_commands_RedoRoutes&nbsp; &nbsp;CLOB;<br />&nbsp; &nbsp;v_last_role&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2 (50) := NULL;<br />&nbsp; &nbsp;v_new_role&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VARCHAR2 (50);<br />&nbsp; &nbsp;v_protect_mode_no&nbsp; &nbsp; &nbsp; &nbsp; NUMBER;<br />&nbsp; &nbsp;protect_mode&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VARCHAR2 (50);<br />&nbsp; &nbsp;v_fast_start_failover&nbsp; &nbsp; VARCHAR2 (50);<br />&nbsp; &nbsp;v_enabled&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VARCHAR2 (50);<br />BEGIN<br />&nbsp; &nbsp;indoc := '<do_configure_drc><get_drc></get_drc></do_configure_drc>';<br />&nbsp; &nbsp;y := NULL;<br />&nbsp; &nbsp;rid := dbms_drs.do_control (indoc);<br />&nbsp; &nbsp;outdoc := NULL;<br />&nbsp; &nbsp;p := 1;<br />&nbsp; &nbsp;WHILE (outdoc IS NULL)<br />&nbsp; &nbsp;LOOP<br />&nbsp; &nbsp; &nbsp; outdoc := dbms_drs.get_response (rid, p);<br />&nbsp; &nbsp; &nbsp; y := y || TO_CLOB (outdoc);<br />&nbsp; &nbsp;END LOOP;<br />&nbsp; &nbsp;BEGIN<br />&nbsp; &nbsp; &nbsp; WHILE (outdoc IS NOT NULL)<br />&nbsp; &nbsp; &nbsp; LOOP<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p := p + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;outdoc := dbms_drs.get_response (rid, p);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y := y || TO_CLOB (outdoc);<br />&nbsp; &nbsp; &nbsp; END LOOP;<br />&nbsp; &nbsp;EXCEPTION<br />&nbsp; &nbsp; &nbsp; WHEN NO_DATA_FOUND<br />&nbsp; &nbsp; &nbsp; THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL;<br />&nbsp; &nbsp;END;<br />&nbsp; &nbsp;z := XMLType (y);<br />&nbsp; &nbsp;dbms_drs.delete_request (rid);<br />&nbsp; &nbsp;SELECT XMLQUERY ('/DRC' PASSING z RETURNING CONTENT) INTO v_xml FROM DUAL;<br />&nbsp; &nbsp;FOR l<br />&nbsp; &nbsp; &nbsp; IN (WITH drc_data<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AS (SELECT xt.*<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM XMLTABLE ('/DRC'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PASSING v_xml<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COLUMNS conf PATH '/DRC/@name'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , protect_mode PATH '/DRC/@protect_mode'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , fast_start_failover PATH '/DRC/@fast_start_failover'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , enabled PATH '/DRC/@enabled'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , valuess XMLTYPE PATH '/DRC/SITE') xt)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, site_data<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AS (SELECT conf<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , protect_mode<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , fast_start_failover<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , enabled<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , xt2.*<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM drc_data dd<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LEFT OUTER JOIN XMLTABLE ('/SITE' PASSING dd.valuess COLUMNS name PATH '/SITE/@name', id PATH '/SITE/@site_id') xt2<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ON 1 = 1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT *<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM site_data)<br />&nbsp; &nbsp;LOOP<br />&nbsp; &nbsp; &nbsp; v_protect_mode_no := l.protect_mode;<br />&nbsp; &nbsp; &nbsp; v_fast_start_failover := l.fast_start_failover;<br />&nbsp; &nbsp; &nbsp; v_enabled := l.enabled;<br />&nbsp; &nbsp; &nbsp; indoc := '<do_configure_site><get_resource res_id="' || l.id || '"></get_resource></do_configure_site>';<br />&nbsp; &nbsp; &nbsp; y := NULL;<br />&nbsp; &nbsp; &nbsp; rid := dbms_drs.do_control (indoc);<br />&nbsp; &nbsp; &nbsp; outdoc := NULL;<br />&nbsp; &nbsp; &nbsp; p := 1;<br />&nbsp; &nbsp; &nbsp; WHILE (outdoc IS NULL)<br />&nbsp; &nbsp; &nbsp; LOOP<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;outdoc := dbms_drs.get_response (rid, p);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y := y || TO_CLOB (outdoc);<br />&nbsp; &nbsp; &nbsp; END LOOP;<br />&nbsp; &nbsp; &nbsp; BEGIN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHILE (outdoc IS NOT NULL)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p := p + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outdoc := dbms_drs.get_response (rid, p);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y := y || TO_CLOB (outdoc);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;END LOOP;<br />&nbsp; &nbsp; &nbsp; EXCEPTION<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHEN NO_DATA_FOUND<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL;<br />&nbsp; &nbsp; &nbsp; END;<br />&nbsp; &nbsp; &nbsp; z := XMLType (y);<br />&nbsp; &nbsp; &nbsp; SELECT XMLQUERY ('/RESOURCE' PASSING z RETURNING CONTENT) INTO v_xml FROM DUAL;<br />&nbsp; &nbsp; &nbsp; FOR q<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IN (WITH resource_data<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AS (SELECT xt.*<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM XMLTABLE ('/RESOURCE'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PASSING v_xml<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;COLUMNS res_id PATH '/RESOURCE/@res_id', valuess XMLTYPE PATH '/RESOURCE/PROPERTY_LIST/VALUE') xt)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , values_data<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AS (SELECT res_id, xt2.*<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM resource_data dd<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LEFT OUTER JOIN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;XMLTABLE ('/VALUE'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PASSING dd.valuess<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;COLUMNS name PATH '/VALUE/@name', VALUE PATH '/VALUE/@value', property_type PATH '/VALUE/roperty_type') xt2<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ON 1 = 1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SELECT *<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM values_data<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE&nbsp; &nbsp; &nbsp;VALUE IS NOT NULL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND name NOT IN ('ENABLED'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'STATUS'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ERROR_NUM'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ERROR_TEXT'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ClusterDatabase'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DbChangeCritical'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DbIsCritical'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DbDisplayName'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'GUIProperty3'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'IncarnationTable'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'SRLStatus'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'SidName'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'HostName'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'SRLStatus'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DataGuardSyncLatency'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'InstanceName'))<br />&nbsp; &nbsp; &nbsp; LOOP<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v_last_role := v_new_role;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SELECT UTL_RAW.cast_to_varchar2 (HEXTORAW (value_raw))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTO v_new_role<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM x$drc<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE attribute = 'role' AND object_id = q.res_id;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IF v_last_role &lt;&gt; v_new_role OR v_last_role IS NULL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CASE v_new_role<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHEN 'PRIMARY'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outdoc :=<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'create configuration ' || l.conf || ' as primary database is ''' || l.name || ''' connect identifier is ''' || l.name || ''';';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_type := 'database';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_headers_commands := db_headers_commands || CHR (10) || outdoc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHEN 'PHYSICAL'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outdoc := 'add database ''' || l.name || ''' as connect identifier is ''' || l.name || ''';';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_type := 'database';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_headers_commands := db_headers_commands || CHR (10) || outdoc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHEN 'FAR_SYNC_INSTANCE'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outdoc := 'add far_sync ''' || l.name || ''' as connect identifier is ''' || l.name || ''';';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_type := 'far_sync';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_headers_commands := db_headers_commands || CHR (10) || outdoc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; END CASE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;END IF;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IF&nbsp; &nbsp; &nbsp;db_type = 'far_sync'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND q.name IN ('DelayMins'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ApplyInstanceTimeout'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ApplyLagThreshold'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ApplyParallel'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'StandbyFileManagement'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ArchiveLagTarget'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DbFileNameConvert'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'LsbyMaxSga'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'LsbyMaxServers'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ApplyInstances'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'LsbyMaxEventsRecorded'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'StaticConnectIdentifier')<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ELSE<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IF q.name = 'RedoRoutes'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;db_commands_RedoRoutes :=<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'edit '<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || db_type<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || ' '<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || l.name<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || ' set property '<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || q.name<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || ' = '''<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || q.VALUE<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || ''';'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || CHR (10)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || db_commands_RedoRoutes;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ELSE<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--DBMS_OUTPUT.put_line ( 'edit ' || db_type || ' ' || l.name || ' set property ' || q.name || ' = ''' || q.VALUE || ''';' );<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;db_commands :=<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_commands || CHR (10) || 'edit ' || db_type || ' ' || l.name || ' set property ' || q.name || ' = ''' || q.VALUE || ''';';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; END IF;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;END IF;<br />&nbsp; &nbsp; &nbsp; END LOOP;<br />&nbsp; &nbsp; &nbsp; dbms_drs.delete_request (rid);<br />&nbsp; &nbsp;END LOOP;<br />&nbsp; &nbsp;indoc := '<do_configure_site><get_resource res_id="0"></get_resource></do_configure_site>';<br />&nbsp; &nbsp;y := NULL;<br />&nbsp; &nbsp;rid := dbms_drs.do_control (indoc);<br />&nbsp; &nbsp;outdoc := NULL;<br />&nbsp; &nbsp;P := 1;<br />&nbsp; &nbsp;WHILE (outdoc IS NULL)<br />&nbsp; &nbsp;LOOP<br />&nbsp; &nbsp; &nbsp; outdoc := dbms_drs.get_response (rid, P);<br />&nbsp; &nbsp; &nbsp; y := y || TO_CLOB (outdoc);<br />&nbsp; &nbsp;END LOOP;<br />&nbsp; &nbsp;BEGIN<br />&nbsp; &nbsp; &nbsp; WHILE (outdoc IS NOT NULL)<br />&nbsp; &nbsp; &nbsp; LOOP<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p := p + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;outdoc := dbms_drs.get_response (rid, p);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y := y || TO_CLOB (outdoc);<br />&nbsp; &nbsp; &nbsp; END LOOP;<br />&nbsp; &nbsp;EXCEPTION<br />&nbsp; &nbsp; &nbsp; WHEN NO_DATA_FOUND<br />&nbsp; &nbsp; &nbsp; THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL;<br />&nbsp; &nbsp;END;<br />&nbsp; &nbsp;z := XMLTYPE (y);<br />&nbsp; &nbsp;SELECT XMLQUERY ('/RESOURCE/PROPERTY_LIST/VALUE' PASSING z RETURNING CONTENT) INTO v_xml FROM DUAL;<br />&nbsp; &nbsp;FOR C IN (SELECT name, VALUE<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM XMLTABLE ('/VALUE' PASSING v_xml COLUMNS NAME PATH '/VALUE/@name', VALUE PATH '/VALUE/@value')<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE&nbsp; &nbsp; &nbsp;VALUE IS NOT NULL<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND NAME NOT IN ('ENABLED'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'STATUS'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ERROR_NUM'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ERROR_TEXT'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'MIV'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'PRIMARY_SITE_ID'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'HEALTH_CHECK_INTERVAL'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'HEALTH_CHECK_ENABLED'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DRC_UNIQUE_ID'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'DRC_UNIQUE_ID_SEQUENCE'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'EXT_COND'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'OVERALL_PROTECTION_MODE'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverHB'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FSFO_MIV'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'MANAGED_STANDBY_MASK'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'RoleChangeHistory'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FastStartFailoverConditions'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FastStartFailoverTgtSwitchInt'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FastStartFailoverOBID1'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FastStartFailoverOBID2'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FastStartFailoverOBID3'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverVersion1'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverVersion2'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverVersion3'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'FastStartFailoverMode'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'Configuration_Name'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverName1'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverName2'<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;, 'ObserverName3'))<br />&nbsp; &nbsp;LOOP<br />&nbsp; &nbsp; &nbsp; general_commands := general_commands || CHR (10) || 'edit configuration set property ' || c.NAME || ' = ''' || c.VALUE || ''';';<br />&nbsp; &nbsp;END LOOP;<br />&nbsp; &nbsp;dbms_drs.delete_request (rid);<br />&nbsp; &nbsp;DBMS_OUTPUT.put_line (db_headers_commands);<br />&nbsp; &nbsp;DBMS_OUTPUT.put_line (db_commands);<br />&nbsp; &nbsp;DBMS_OUTPUT.put_line ('EDIT CONFIGURATION SET PROTECTION MODE AS MAXPERFORMANCE;');<br />&nbsp; &nbsp;IF v_enabled = 'yes'<br />&nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; DBMS_OUTPUT.put_line ('enable configuration;');<br />&nbsp; &nbsp;END IF;<br />&nbsp; &nbsp;DBMS_OUTPUT.put_line (db_commands_RedoRoutes);<br />&nbsp; &nbsp;CASE v_protect_mode_no<br />&nbsp; &nbsp; &nbsp; WHEN 3<br />&nbsp; &nbsp; &nbsp; THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;protect_mode := 'MAXPERFORMANCE';<br />&nbsp; &nbsp; &nbsp; WHEN 2<br />&nbsp; &nbsp; &nbsp; THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;protect_mode := 'MAXAVAILABILITY';<br />&nbsp; &nbsp; &nbsp; WHEN 1<br />&nbsp; &nbsp; &nbsp; THEN<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;protect_mode := 'MAXPROTECTION';<br />&nbsp; &nbsp;END CASE;<br />&nbsp; &nbsp;IF v_protect_mode_no &lt;&gt; 3<br />&nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; DBMS_OUTPUT.put_line ('EDIT CONFIGURATION SET PROTECTION MODE AS ' || protect_mode || ';');<br />&nbsp; &nbsp;END IF;<br />&nbsp; &nbsp;IF v_fast_start_failover = 'ENABLED'<br />&nbsp; &nbsp;THEN<br />&nbsp; &nbsp; &nbsp; DBMS_OUTPUT.put_line ('ENABLE FAST_START FAILOVER;');<br />&nbsp; &nbsp;END IF;<br />&nbsp; &nbsp;DBMS_OUTPUT.put_line ('show configuration;');<br />&nbsp; &nbsp;DBMS_OUTPUT.put_line (general_commands);<br />END;<br />/</blockquote><br />Enjoy<br /><br /><br /><div class="MsoNormal"><span style="mso-ansi-language: EN-GB; mso-bidi-font-family: Arial; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: EN-GB; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;">Yossi Nixon<o:p></o:p></span></div><div class="MsoNormal"><span lang="EN-US"><a href="https://apex.oracle.com/pls/apex/f?p=19297:4:::NO:4:P4_ID:16673"><span lang="EN-GB" style="color: windowtext; mso-ansi-language: EN-GB; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: EN-GB; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes; text-decoration: none; text-underline: none;"><!--[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="Picture_x0020_1" o:spid="_x0000_i1029" type="#_x0000_t75" alt="Image result for oracle ace associate" href="https://apex.oracle.com/pls/apex/f?p=19297:4:::NO:4:P4_ID:16673" style='width:113.25pt;height:41.25pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:/Users/yossin/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" o:title="Image result for oracle ace associate"/></v:shape><![endif]--><!--[if !vml]--><span style="mso-ignore: vglayout;"></span><!--[endif]--></span></a></span><span style="mso-ansi-language: EN-GB; mso-bidi-font-family: Arial; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: EN-GB; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;"><o:p></o:p></span></div><div class="MsoNormal"><span style="mso-ansi-language: EN-GB; mso-bidi-font-family: Arial; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: EN-GB; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;">Chief Database Architect<o:p></o:p></span></div><div class="MsoNormal">Twitter:&nbsp; <a href="https://twitter.com/YossiNixon"><span style="color: #0563c1; mso-bidi-font-family: Arial;">@YossiNixon</span></a></div><div class="MsoNormal"><span style="mso-ansi-language: EN-GB; mso-bidi-font-family: Arial; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: EN-GB; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;">Linkedin: </span><u><span style="background: white; color: #0563c1; font-family: &quot;Arial&quot;,sans-serif; font-size: 8.5pt; mso-ansi-language: EN-GB; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-fareast-language: EN-GB; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;"><span style="color: #0563c1;"><a href="https://www.linkedin.com/in/ynixon/">https://www.linkedin.com/in/ynixon/</a></span></span></u></div> Yossi Nixon tag:blogger.com,1999:blog-6061714.post-3161068415123131720 Thu Feb 08 2018 11:33:00 GMT-0500 (EST) Cloudscape Podcast – Episode 1: Cloud Vendor News and Updates for January 2018 https://blog.pythian.com/cloudscape-ep1-cloud-vendor-news-january-2018/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Welcome to the first episode of the Cloudscape Podcast. In this series we will be looking at the most current developments in the public cloud sphere and bringing you all the information from an array of industry experts.</p> <p>On today’s show we host Warner Chaves, Greg Baker, and John Laham, experts in Microsoft Azure, Amazon’s AWS, and Google Cloud Platform respectively. We will be scanning the cloudscape for the most important news across these platforms and discussing them among the casual panel to keep you updated.</p> <p>Today we&#8217;ll be taking a look at AWS Auto Scaling, Google’s new security features, the latest about Azure Data Factory, some interesting news from Azure and everything in between. Listen in to hear more!</p> <p><iframe src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/393147717&amp;color=%23f7a700&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true" width="100%" height="166" frameborder="no" scrolling="no"></iframe></p> <h3>Key Points From This Episode:</h3> <ul> <li>Looking at AWS Auto Scaling and the potential equivalents.</li> <li>Azure’s new security centre and its features.</li> <li>AWS GuardDuty and how it matches up to this.</li> <li>Cloud security as a full time job and is it common?</li> <li>Google’s security services and comparing these against the standard.</li> <li>How machine learning is catching up with other fields in the cloud.</li> <li>The serverless market place.</li> <li>Azure Data Factory’s new visual tools.</li> <li>Some of the newest product developments from Google.</li> <li>Recent compatibility changes in Azure.</li> <li>Aurora’s new serverless database.</li> <li>The effects of the last month’s meltdown on our guests.</li> <li>And much more!</li> </ul> <h3>Links Mentioned in Today’s Episode:</h3> <ul> <li><a href="https://aws.amazon.com/autoscaling">AWS Auto Scaling</a></li> <li><a href="https://www.terraform.io/">Terraform</a></li> <li><a href="https://azure.microsoft.com">Azure</a></li> <li><a href="https://kubernetes.io/">Kubernetes</a></li> <li><a href="https://www.coursera.org/">Coursera</a></li> <li><a href="https://en.wikipedia.org/wiki/Glue_code">Glue</a></li> <li><a href="https://www.codeaurora.org/">Aurora</a></li> </ul> </div></div> Chris Presley https://blog.pythian.com/?p=103375 Thu Feb 08 2018 09:00:52 GMT-0500 (EST) Cloud Computing How do I Look http://oracle-help.com/oracle-cloud/cloud-computing-look/ <p>It’s been long I was thinking to write something about cloud computing, when people around me started talking about cloud computing. “<em><strong>Oh my God here is another buzzword in IT, let’s explore it</strong></em>&#8221; this was my first thought. For me it’s a new computing paradigm or IT infrastructure model.</p> <p>If you see the advancement in the technologies took place over the last few decades is really astonishing. Starting from having computers of the size of big room till a hand held device i.e. Mobile phones, PDAs, iPod and so on are the evidences of advancements in the technical field. Parallel to this enchantment and development also took place in the area of computer programming.  I thought over sharing my understanding of cloud computing thus exploring more on this.</p> <p>My sole intention of writing this is to encourage beginners in cloud computing, who are new to this and want to learn while working and not getting time to go through hundreds of pages to get the essence of the cloud computing.</p> <p>There are majorly six areas play a vital or I would say pivotal role in any IT systems</p> <ul> <li>Application</li> <li>Database</li> <li>Storage</li> <li>Network</li> <li>Operating system</li> <li>Virtualization</li> </ul> <p>Lets starts computing paradigms,</p> <ol> <li><strong>Mainframe computers,</strong></li> </ol> <p>Those act as most powerful server, where all the components i.e. operating system, applications, databases were located at a centralized location and users were able to leverage the capabilities a dump terminal with only display unit and a keyboard. However it was not difficult to own by small organizations due to cost of ownership, development cost and maintenance cost.</p> <ol start="2"> <li><strong>Stand Alone Server</strong></li> </ol> <p>At this time one powerful computer termed as server with more processing power [CPU], more RAM capacity and more storage [HDD].</p> <p>With this desktop invention computer were able to communicate each other using TCP/IP protocol. There used to have servers holding application, database and operating system, and the client desktop machines were able to store and fetch using applications. This had revolutionized all industries, banks, financials institutes to take the advantage. This computing model gained enough popularity and adapted by many. I would say the real growth of IT started from here. This model did have limitations and issues related to single point of failure [SPOF] for the entire all the components. DR sites, database replication were the options to address the issue or drawback; however those options come with cost of hardware, licenses and maintenance. Also the size of Data Centers were increased due more number of racks, servers, network switches, electricity power setups and backup power.</p> <ol start="3"> <li><strong>Clustered computing</strong></li> </ol> <p>This model was extension to the standalone server where the power of two or more than two servers was consolidated to improve the performance. In this another component work on top of the operating system to manage multiple servers called the clusterware. With this it was possible to achieve horizontal and vertical scalability; however this model also involved the cost of licenses, skilled people to manage and the maintenance costs as an overhead.</p> <ol start="4"> <li><strong>Engineered system</strong> [Still on]</li> </ol> <p>At this time a step further was taken to consolidate and combine all the infrastructure components i.e. [Hardware, Network and Storage] together into one box. Each components are engineered, integrated and optimized in such a way that all will work in collaboration for the purpose they are designed for. These components are special one with extreme performance and lighting fast responses. The Engineered system are ideal platform for traditional data centers and cloud as well. Oracle is clear leader in the area of engineered system. Oracle Exadata DB Machine, Super-cluster, Exalogic, Oracle Database Appliance are some of the examples. Check <a href="https://www.oracle.com/in/engineered-systems/index.html">https://www.oracle.com/in/engineered-systems/index.html</a> for more information. The Engineered Systems are also called next generation computing platform which are used to data-center consolidation.</p> <ol start="5"> <li><strong>Cloud Computing</strong></li> </ol> <p>Now finally we reach to discuss the current and demand of the time the computing model known as cloud computing. Cloud Computing can be defined as a new computing paradigm in which the IT resources i.e. Servers, Networking, Storage, Database and Applications can be delivered as a Service via a web browser using an internet connection. I also call it as a delivery model where in each IT resources can be delivered as a Service.</p> <ul> <li>Infrastructure as a Service [IaaS]</li> <li>Platform as a Service [PaaS]</li> <li>Software as s Service [SaaS]</li> <li>DataBase as a Service [DBaaS]</li> </ul> <p><a href="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg"><img data-attachment-id="3368" data-permalink="http://oracle-help.com/oracle-cloud/cloud-computing-look/attachment/cloud/" data-orig-file="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?fit=1112%2C436" data-orig-size="1112,436" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Cloud" data-image-description="" data-medium-file="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?fit=300%2C118" data-large-file="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?fit=980%2C384" class="alignnone size-full wp-image-3368" src="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?resize=980%2C384" alt="" width="980" height="384" srcset="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?w=1112 1112w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?resize=300%2C118 300w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?resize=768%2C301 768w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?resize=1024%2C401 1024w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?resize=60%2C24 60w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/Cloud.jpg?resize=150%2C59 150w" sizes="(max-width: 980px) 100vw, 980px" data-recalc-dims="1" /></a></p> <p>The figure above is explains the fact that the ownership of infrastructure is changing in cloud space. The customer has freedom to choose any cloud delivery model depending on need.</p> <p>As you can see and analyze that the technology advancement has changed the face of IT services. There are many cloud service providers available in the market today i.e. Amazon, Google, Azure and Oracle and others. Each one have a list of several services in their cloud service catalog to cater the need of the small, medium and large enterprises.</p> <p>In <strong><a href="https://www.linkedin.com/feed/update/urn:li:activity:6358604929371860992">my previous post</a></strong> I talked about change in <strong>DBA</strong> role [but never said DBA role is going to end], rather I would say there are more opportunities for DBAs to become Cloud Ready. Since DBAs always closely work with OS Admins, Network Admins and Storage admins, this way they [The DBAs ] understand the infra better than anyone else. There is a lot scope for Core DBAs, Apps DBAs, especially migration from On-Prem to Cloud infrastructure. Let’s think about whatever tasks you were performing on a day to day to basis, how those can be done on cloud. Try out with Oracle Coud  https://cloud.oracle.com/home  with a simple tasks like</p> <ol> <li>Connecting to <strong>Oracle Cloud</strong> from your desktop and Laptop</li> <li>Creating database using <strong>DBCS</strong> [ DataBase Cloud Service ]</li> <li>Migrate the database from <strong>On-Prem</strong> to <strong>Oracle Cloud</strong> [ Using Import/Export and <strong>RMAN</strong>]</li> </ol> <p>To do this one need to have Oracle Cloud trail account, you can follow the official site to know more, I am just sharing the link <a href="https://cloud.oracle.com/home"><strong>https://cloud.oracle.com/home</strong></a></p> <p>There is a lot more things we can explore in Oracle Cloud. In my subsequent posts I will share more on this this space. Thanks for your time in reading my post. Do share your comments and thoughts.</p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-cloud/cloud-computing-look/">Cloud Computing How do I Look</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Nitin Kashiv http://oracle-help.com/?p=3370 Thu Feb 08 2018 08:12:17 GMT-0500 (EST) Database Design – Hardware Requirements http://oracle-help.com/oracle-database/database-design-hardware-requirements/ <p>Database Design is the most important part of the IT project. This is the second post regarding Database Design. Normally we just think about software and some basic terms of hardware while we think about the database. Now let&#8217;s have deep look at <strong>Hardware Requirements.</strong> This post explains the technical terms which must keep in mind while we decide to design database.</p> <p><strong>Hardware Requirements</strong></p> <p>As we know Computer hardware refers to the physical parts of a computer and related devices. Internal hardware devices include motherboards, hard drives, and RAM. External hardware devices include monitors, keyboards, mice, printers, and scanners.</p> <p>The internal hardware parts of a computer are often referred to as components, while external hardware devices are usually called peripherals.</p> <p><strong>General Specifications</strong><br /> The database server will be used as a web server and database server for a regional project with its central office located in Belize. A tower chassis has been chosen to accommodate an internal LTO tape drive. This server will be connected via the Internet to another server located in Belmopan, Belize. Both servers will have the same hardware and software configuration. The manufacturer of any software included with the hardware must be a reputable and globally recognized manufacturer of that class of software. The Manufacturer of the proposed equipment must be a reputable and globally recognized manufacturer of microcomputer hardware. Absolutely no clones will be considered. The equipment vendor must be an authorized dealer of the proposed equipment and software preferably with an office in each country where equipment is to be located.<br /> <strong>Detailed Technical Specifications</strong><br /> The server should meet the following detailed specification. These specifications were determined based on the size of the database, the number of users, and the life expectancy of the project. Based on monetary considerations it is not expected that the<br /> server will be replaced for at least 5 years.</p> <p><strong>NOTE</strong>:- This post is a simple idea for any project. The parameters can be changed according to company&#8217;s terms and conditions.</p> <p><a href="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg"><img data-attachment-id="3365" data-permalink="http://oracle-help.com/oracle-database/database-design-hardware-requirements/attachment/dd/" data-orig-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?fit=665%2C2952" data-orig-size="665,2952" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="DD" data-image-description="" data-medium-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?fit=68%2C300" data-large-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?fit=231%2C1024" class="alignnone size-full wp-image-3365" src="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?resize=665%2C2952" alt="" width="665" height="2952" srcset="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?w=665 665w, https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?resize=231%2C1024 231w, https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/DD.jpg?resize=34%2C150 34w" sizes="(max-width: 665px) 100vw, 665px" data-recalc-dims="1" /></a></p> <p><span style="font-size: 10pt;">Image Source has been taken from <a href="http://www.mbrs.doe.gov.bz/dbdocs/tech/Design.pdf"><strong>http://www.mbrs.doe.gov.bz/dbdocs/tech/Design.pdf</strong></a></span></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-database/database-design-hardware-requirements/">Database Design &#8211; Hardware Requirements</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3257 Thu Feb 08 2018 03:30:53 GMT-0500 (EST) Understanding the Java Virtual Machine (JVM) Architecture Part 1 https://blog.pythian.com/understanding-java-virtual-machinejvm-architecture-part1/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><h2 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-Whatisgarbagecollection"><strong>What is garbage collection?</strong></h2> <p>Garbage collection (GC) is a form of automatic memory management. In essence what the garbage collection does is to attempt to reclaim garbage, ergo memory occupied by objects that are no longer relevant for the active program, while allowing the developer to focus on the application without having to free memory. My particular interest is how the Java Virtual Machine (JVM) affects Apache Cassandra, since it was built in Java and it can have a big impact on performance.</p> <p>The method used by the Java Virtual Machine (JVM) to track down all the live objects and to make sure that memory from non-reachable objects can be reclaimed is called the <strong>Mark and Sweep</strong> Algorithm. It comprises of two steps:</p> <ul> <li><strong>Marking </strong>phase scans through all reachable objects and keep in native memory a ledger about all such objects.</li> <li><strong>Sweeping </strong>makes sure the memory addresses allocated to non-reachable objects is reclaimed so that it can be used for new objects.</li> </ul> <p>Different GC algorithms within the JVM such as CMS of G1GC implement these phases, but the concept explained above remains the same for all.</p> <p>A crucial thing to consider is that in order for the garbage collection to happen the application threads need to be stopped, as you cannot count references to objects if they keep changing during the process. The temporary pause so that the JVM can perform “housekeeping” activities is called a <strong>Stop The World pause</strong>. These pauses can happen for multiple reasons, with garbage collection being the principal one.</p> <h1></h1> <h3 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-GarbagecollectioninJava"><strong>Garbage collection in Java</strong></h3> <p>Whenever sweeping occurs, and blocks of memory are reclaimed, fragmentation ensues. Memory fragmentation behaves much like disk fragmentation and can lead to multiple problems:</p> <ul> <li>Writing operations become more inefficient since finding the next suitable block of sufficient size is no longer a trivial operation.</li> <li>When creating new objects, the JVM allocates memory in contiguous blocks. When fragmentation increases to the point where no single available block is big enough to accommodate the newly created object, an allocation error occurs.</li> </ul> <p>To avoid these problems, the JVM preforms a memory de-fragmentation during the garbage collection. This process moves all live objects close to each other, thereby reducing fragmentation.</p> <div id="attachment_103402" style="max-width: 640px" class="wp-caption alignnone"><img class="size-full wp-image-103402" src="https://blog.pythian.com/wp-content/uploads/blocks-of-memory-before-and-after-compaction.png" alt="" width="630" height="300" srcset="https://blog.pythian.com/wp-content/uploads/blocks-of-memory-before-and-after-compaction.png 630w, https://blog.pythian.com/wp-content/uploads/blocks-of-memory-before-and-after-compaction-465x221.png 465w, https://blog.pythian.com/wp-content/uploads/blocks-of-memory-before-and-after-compaction-350x167.png 350w" sizes="(max-width: 630px) 100vw, 630px" /><p class="wp-caption-text">Block compaction during a garbage collection</p></div> <h2></h2> <h4 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-WeakGenerationalHypothesis">Weak Generational Hypothesis</h4> <p>Garbage collectors make assumptions about the way applications use objects. The most important of these assumptions is the <strong>weak generational hypothesis</strong>, which states that most objects survive for only a short period of time.</p> <p>While naïve garbage collection examines every live object in the heap, generational collection exploits several empirical observed properties of most applications to minimize the work required to reclaim unused (garbage) objects.</p> <ul> <li>Most of the objects soon become unused.</li> <li>References from old objects to young objects only exist in small numbers.</li> </ul> <p>Some objects live longer than others, and it follows a distribution close to the one below. An efficient collection is made possible by focusing on the fact that a majority of objects “die young.”</p> <div id="attachment_103401" style="max-width: 640px" class="wp-caption alignnone"><img class="size-full wp-image-103401" src="https://blog.pythian.com/wp-content/uploads/WGY.png" alt="" width="630" height="329" srcset="https://blog.pythian.com/wp-content/uploads/WGY.png 630w, https://blog.pythian.com/wp-content/uploads/WGY-465x243.png 465w, https://blog.pythian.com/wp-content/uploads/WGY-350x183.png 350w" sizes="(max-width: 630px) 100vw, 630px" /><p class="wp-caption-text">Weak Generational Hypothesis &#8211; Object life cycle</p></div> <p>Based on this hypothesis, the JVM memory is divided into generations (memory pools holding objects of different ages.)</p> <p>Most objects exist and die in the pool dedicated to young objects (the <strong>Young Generation</strong> pool.) When the Young Generation pool fills up, a minor compaction is triggered in which only the young generation is collected. The cost of such collections is proportional to the number of live objects being collected, but since the weak generational hypothesis states that most objects die young, the result is a very efficient garbage collection.</p> <p>A fraction of the objects that survive the minor compaction get promoted to the <strong>Old Generation</strong> or <strong>Tenured Generation</strong>, significantly larger than the former and dealing with objects that are less likely to be garbage. Eventually, <strong>Tenured Generation</strong> will fill up and a major collection will ensue, in which the entire heap is collected. Major compactions usually last much longer than minor collections because a significantly larger number of objects are involved.</p> <p>This approach also has some problems though:</p> <ul> <li>Objects from different generations may contain references to each other.</li> <li>Since GC algorithms are optimized for objects that either ‘die young’ of ‘will live a long time’, the JVM behaves poorly with objects with ‘medium’ life expectancy.</li> </ul> <h4 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-MemoryPools">Memory Pools</h4> <div class="mceTemp"></div> <div id="attachment_103406" style="max-width: 842px" class="wp-caption alignnone"><img class="size-full wp-image-103406" src="https://blog.pythian.com/wp-content/uploads/Memory-Pools.png" alt="" width="832" height="341" srcset="https://blog.pythian.com/wp-content/uploads/Memory-Pools.png 832w, https://blog.pythian.com/wp-content/uploads/Memory-Pools-465x191.png 465w, https://blog.pythian.com/wp-content/uploads/Memory-Pools-350x143.png 350w" sizes="(max-width: 832px) 100vw, 832px" /><p class="wp-caption-text">Heap memory pools</p></div> <p>&nbsp;</p> <h3 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-YoungGeneration"><strong>Young Generation</strong></h3> <p>The young generation is comprised of 3 different spaces.</p> <ul> <li>1 <strong>Eden</strong> Space</li> <li>2 <strong>Survivor</strong> spaces</li> </ul> <h4 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-Eden">Eden</h4> <p>Eden is the memory region where objects are allocated when they are created. Since we are usually talking about multi-threaded environments, where multiple threads are creating a lot of objects simultaneously, Eden is further divided into one or more <strong>Thread Local Allocation Buffer</strong> (TLAB.) These buffers allow each thread to allocate objects in the corresponding buffer, avoiding expensive lock-contention issues.</p> <p>When the allocation is not possible inside a TLAB (not enough room), the allocation is done on a Shared Eden space. If no room exists in either the TLAB or the shared Eden Space, a Young Generation Garbage Collection is triggered to free up more space. In the case where the garbage collection did not free enough free memory inside the Eden pool, the object is allocated in the Old Generation.</p> <p>After the marking phase of the garbage collection identifies all living objects within Eden, all of them are copied to one of the Survivor Spaces, and the entire Eden is cleaned, so that it can be used for new object allocation. This approach is called “<strong>Mark and Copy</strong>”: the live objects are marked, and then copied (not moved) to a survivor space.</p> <div class="mceTemp"></div> <div id="attachment_103405" style="max-width: 842px" class="wp-caption alignnone"><img class="size-full wp-image-103405" src="https://blog.pythian.com/wp-content/uploads/Eden-1.png" alt="" width="832" height="341" srcset="https://blog.pythian.com/wp-content/uploads/Eden-1.png 832w, https://blog.pythian.com/wp-content/uploads/Eden-1-465x191.png 465w, https://blog.pythian.com/wp-content/uploads/Eden-1-350x143.png 350w" sizes="(max-width: 832px) 100vw, 832px" /><p class="wp-caption-text">Eden spaces</p></div> <h4></h4> <h4 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-SurvivorSpaces">Survivor Spaces</h4> <p>Adjacent to the Eden space are two survivor spaces. An important thing to notice is that one of the two survivor spaces is always empty. Every time a young generation garbage collection happens, all of the live objects from the Eden space and live objects from the other survivor space (the whole live Young Generation objects) are copied to the other survivor space, leaving the former survivor space empty.</p> <div id="attachment_103404" style="max-width: 842px" class="wp-caption alignnone"><img class="wp-image-103404 size-full" src="https://blog.pythian.com/wp-content/uploads/Survivor.png" alt="" width="832" height="341" srcset="https://blog.pythian.com/wp-content/uploads/Survivor.png 832w, https://blog.pythian.com/wp-content/uploads/Survivor-465x191.png 465w, https://blog.pythian.com/wp-content/uploads/Survivor-350x143.png 350w" sizes="(max-width: 832px) 100vw, 832px" /><p class="wp-caption-text">Survivor Spaces cycle</p></div> <p>This garbage collection cycle of copying live objects between the two survivor spaces is repeated multiple times (x15) until objects are deemed old enough to be promoted to the old Generation, as they are expected to continue to be used for a long time.</p> <p>To determine if an object is deemed &#8220;old enough&#8221; to be considered ready for promotion to the Old Space, whenever an object survives a GC cycle it has its age incremented. When the age exceeds a certain <strong>tenuring threshold,</strong> the object will be promoted.</p> <p>The actual tenuring threshold is dynamically adjusted by the JVM, but one can adjust its upper limit by changing <strong><em>-XX:+</em><em>MaxTenuringThreshold</em></strong>.</p> <ul> <li>Setting <strong><em>-XX:+MaxTenuringThreshold=0</em></strong> results in immediate promotion without copying it between Survivor spaces.</li> <li>On modern JVMs  <strong><em>-XX:+MaxTenuringThreshold</em></strong>,  is set to <strong>15 GC cycles</strong> by default. This is also the maximum value in HotSpot.</li> </ul> <p>Promotion may also happen prematurely if the size of the Survivor space is not enough to hold all of the live objects in the Young generation.</p> <h2></h2> <h3 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-TenuredGeneration/OldGeneration"><strong>Tenured Generation / Old Generation</strong></h3> <p>Old Generation is usually much larger than the Young Generation, and it holds the objects that are less likely to become deprecated.</p> <p>Garbage Collections in the Old Generation pool happens less frequently than in the Young Generation, but it also takes more time to complete resulting in bigger <strong>Stop the World</strong> <strong>pauses</strong>.</p> <p>Since Objects are expected to live a long time in the Old Generation pool, the cleaning algorithms for the Old Generation are slightly different, there is no <strong>Mark and Copy</strong> as in the Young Generation but a <strong>Mark and Move</strong> instead, to minimize fragmentation.</p> <h2></h2> <h3 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-PermGen&amp;Metaspace"><strong>PermGen &amp; Metaspace</strong></h3> <h4 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-PermGen">PermGen</h4> <p>As of Java 8, Permanent Generation (PermGen) space, which was created at startup and used to store metadata such as classes and interned strings is gone. The space where metadata information has now moved to native memory to an area known as the Metaspace.</p> <p>The move was necessary because PermGen was really hard to tune, and it was also difficult to size the PermGen. This created a lot of issues to Java developers since it&#8217;s very difficult to predict how much space all that metadata would require, resulting in lots of <strong>java.lang.OutOfMemoryError: Permgen space</strong> exceptions. The way to fix this problem was to increase the PermGen size up to the maximum allowed size of 256MB:</p> <div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-name="code"> <div class="codeHeader panelHeader pdl"><b>JVM configuration</b></div> <div class="codeContent panelContent pdl"> <div> <div id="highlighter_347319" class="syntaxhighlighter sh-confluence nogutter java"> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="code"> <div class="container" title="Hint: double-click to select code"> <div class="line number1 index0 alt2"><code class="java plain">java -XX:MaxPermSize=256m com.mycompany.MyApplication</code></div> </div> </td> </tr> </tbody> </table> </div> </div> </div> </div> <div style="max-width: 610px" class="wp-caption alignnone"><img class="confluence-embedded-image" src="https://jira.pythian.com/confluence/download/attachments/27525189/permgen%26Metadata.png?version=1&amp;modificationDate=1517181125893&amp;api=v2" alt="Move from PermGen to Metaspace in Java 8" width="600" height="908" data-image-src="/confluence/download/attachments/27525189/permgen%26Metadata.png?version=1&amp;modificationDate=1517181125893&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="27525213" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="permgen&amp;Metadata.png" data-base-url="https://jira.pythian.com/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="27525189" data-linked-resource-container-version="22" /><p class="wp-caption-text">Move from PermGen to Metaspace in Java 8</p></div> <h3></h3> <h4 id="id-1.UnderstandingtheJavaVirtualMachine(JVM)Architecture-Metaspace">Metaspace</h4> <p>With the Metaspace, metadata (such as class definitions) are<em> </em>now located in the native memory and do not interfere with regular Heap Objects. By default, the Metaspace size is only limited by the amount of native memory available to the Java process, thus saving the developers from memory errors as described earlier. The downside of this is you still need to worry about the Metaspace footprint.</p> <ul> <li>By default class metadata allocation is limited by the amount of available native memory (capacity will of course depend if you use a 32-bit JVM vs. 64-bit along with OS virtual memory availability).</li> <li>The <strong>MaxMetaspaceSize</strong>, allows you to limit the amount of native memory used for class metadata. If you don&#8217;t use it, the metaspace will dynamically re-size depending on current demand.</li> </ul> </div></div> Pedro Vidigal https://blog.pythian.com/?p=103361 Wed Feb 07 2018 14:11:45 GMT-0500 (EST) Rebootless node fencing in Oracle RAC http://oracle-help.com/oracle-rac/rebootless-node-fencing-oracle-rac/ <p><strong>Oracle Grid Infrastructure 11.2.0.2</strong> has many features including <strong>Cluster</strong> <strong>Node</strong> <strong>Membership</strong>, <strong>Cluster</strong> <strong>Resource</strong> <strong>Management</strong>, and <strong>Cluster Resources monitoring</strong>. One of the key areas where <strong>DBA</strong> need to have expert knowledge on how the cluster node membership works and how the cluster decides to take out node should there be a heartbeat network, voting disk or node specific issues. In <strong>Oracle 11.2.0.2</strong>  oracle bring many new features  one of them is <strong>reboot less fencing</strong> :</p> <p>But what happened before that ????</p> <p>when sub-components of <strong>Oracle RAC</strong> like private interconnect or voting disk fails, Oracle Clusterware tries to prevent a split-brain with a fast reboot of the node without waiting for I/O operation or synchronization of the file systems.</p> <p><strong>To read Split Brain in Rac:</strong> <strong><a href="http://oracle-help.com/oracle-rac/split-brain-and-amnesia-in-oracle-rac/">Split Brain and Amnesia in Oracle RAC</a></strong></p> <p><strong>Oracle</strong> uses algorithms common to <strong>STONITH</strong> (<strong><em>shoot the other node in the Head</em></strong>) implementations to determine what nodes need to get fenced. When a node is alerted that it is being “fenced” it uses suicide to carry out the order</p> <p><strong>STONITH</strong> automatically powers down a node that is not working correctly. An administrator might employ <strong>STONITH</strong> if one of the nodes in a cluster can not be reached by the other node(s) in the cluster.;</p> <p>But after <strong>11.2.0.2</strong> the mechanism is <strong>changed</strong>.</p> <p>Finally, <strong>Oracle</strong> has improved the node fencing in <strong>Oracle 11g Release 2</strong> (11.2.0.2) by killing the processes on the failed node that are capable of performing IO and then stopping the Clusterware on the failed node rather than simply rebooting the failed node. Whenever subcomponents of Oracle RAC like private interconnect, voting disk etc fails, <strong>Oracle Clusterware first decides which node to evict,  then</strong></p> <ol> <li>The <strong>Clusterware</strong> attempts to shut down all Oracle resources and process on that node, especially those processes which generates <strong>I/O</strong>.</li> <li>The <strong>Clusterware</strong> will stop cluster service on that node.</li> <li>Then <strong>OHASD</strong>[Oracle High Availability Service Daemon] will try to start <strong>CRS</strong> [Cluster Ready Service] stack again. and once the interconnect is back online, all cluster resources on that node will automatically be started.</li> <li>And if it is not possible to stop resources or processes generating <strong>I/O</strong> then Clusterware will kill the node.</li> </ol> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-rac/rebootless-node-fencing-oracle-rac/">Rebootless node fencing in Oracle RAC</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Jagruti Jasleniya http://oracle-help.com/?p=3236 Wed Feb 07 2018 11:21:16 GMT-0500 (EST) ODTUG February News https://www.odtug.com/p/bl/et/blogaid=767&source=1 The ODTUG February News features the WIT Scholar Application, ODTUG Kscope18 updates, ODTUG community news, upcoming Meetups, upcoming ODTUG webinars, Oracle Cloud Customer Connect webinars and information, and more! ODTUG https://www.odtug.com/p/bl/et/blogaid=767&source=1 Wed Feb 07 2018 10:49:05 GMT-0500 (EST) Women in Technology Scholar - Now Accepting Applications https://www.odtug.com/p/bl/et/blogaid=766&source=1 ODTUG is pleased to announce the fourth annual ODTUG Women in Technology Scholarship program. The scholarship recipient will be awarded a complimentary pass to ODTUG Kscope18. ODTUG https://www.odtug.com/p/bl/et/blogaid=766&source=1 Wed Feb 07 2018 10:37:29 GMT-0500 (EST) Women in Technology Scholar - Now Accepting Applications https://kscope18.odtug.com/p/bl/et/blogaid=766&source=1 ODTUG is pleased to announce the fourth annual ODTUG Women in Technology Scholarship program. The scholarship recipient will be awarded a complimentary pass to ODTUG Kscope18. ODTUG https://kscope18.odtug.com/p/bl/et/blogaid=766&source=1 Wed Feb 07 2018 10:37:29 GMT-0500 (EST) Cosmos DB Indexing Fundamentals – SQL On The Edge Episode 15 https://blog.pythian.com/cosmos-db-indexing-fundamentals-sql-edge-episode-15/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>As Microsoft&#8217;s premier NoSQL cloud offering, Cosmos DB offers some interesting design decisions and trade-offs that are necessary to understand in order to maximize the benefits of the product. In this blog post, we are going to cover indexing as it is one of the features that really illustrates this point.</p> <h3><strong>Index Management</strong></h3> <p>In a relational database, you create a schema and then define your indexes on top of it. The exact definition, quantity and storage of those indexes can often times have a significant impact on the overall performance of the database.</p> <p>For the Cosmos DB team, it was important that their service &#8220;just worked&#8221; right off the bat. This means that you are able to load data and start querying, skipping both the declarative schema creation as well as the index management piece. To achieve this, Cosmos DB indexes all fields by default and starts using them right away as soon as data is loaded into the database.</p> <p>Indexes also work transparently out of the gate and do not have to be declared explicitly to use them. This is not the case in other competitor products such as Amazon&#8217;s DynamoDB where the index to be used has to be declared with the request. This gives Cosmos DB more flexibility since the querying code is completely independent of the underlying implementation, as it should be.</p> <p>If an administrator does not like this &#8220;index all by default&#8221; policy then they are also free to change it. This again is the beauty of this design; you don&#8217;t have to micromanage indexing, but if you want to, you can do it. This is done in a declarative way through a JSON policy that specifies which paths of the database have to be indexed and how.</p> <p>The indexing can even be micromanaged to the level of the individual document. For example, you can change indexing from &#8220;automatic&#8221; to &#8220;manual&#8221; and then only the documents that you request to be indexed will be added to the index. This is likely overkill for many people but if you need this level of granular control, you have access to it.</p> <h3><strong>Indexing Consistency</strong></h3> <p>Another interesting option provided by Cosmos DB is the ability to specify whether the indexes are updated in two different ways:</p> <ul> <li>Consistent: changes to the index happen immediately. Query consistency is respected and Request Unit consumption is higher.</li> <li>Lazy: changes to the index happen asynchronously through a background process. Query consistency is eventual and Request Unit consumption is lower.</li> </ul> <p>Depending on the application use case, it is up to the developers to decide which one of these two modes is what they require.</p> <p>There is also a third option and it is simply to set the indexing mode as None. This will make Cosmos drop any indexes and stop indexing writes. If you use this option then the only way to access the documents without scanning the collection would be by recalling the document based on the ID value. This for example is feasible if you want to use Cosmos as a key-value store.</p> <h3><strong>Index Types</strong></h3> <p>Currently the service supports 3 different index types:</p> <ol> <li>Hash: useful for equality and inequality predicates.</li> <li>Range: useful for ordering and range searches.</li> <li>Spatial: useful for spatial queries (within, distance, etc.)</li> </ol> <p>The choice of Hash versus Range is again dependent on the query profile of the application. By default Cosmos will do ranges for numbers and hashes for strings but this can be changed at any time by the developer. Furthermore, you can tweak the policy so that some specific paths use an index type that is more fitting to how they are queried.</p> <h3><strong>Indexing Changes</strong></h3> <p>The last thing to understand about Cosmos DB is what happens when the indexing policy changes. There are three main characteristics:</p> <ol> <li>Online: there is no blocking or query throttling while the index is being changed.</li> <li>No performance impact: this is a big one, Cosmos DB does not take Request Units to change the indexing policy.</li> <li>Consistency: while the index transformation is happening, queries will be eventually consistent.</li> </ol> <h3><strong>Demo</strong></h3> <p>Let&#8217;s jump into the video now, where we will demonstrate the impact that the different consistency settings can have on Cosmos DB performance. Cheers!</p> <p><iframe src="https://www.youtube.com/embed/UfXj5pMv0o8?ecver=1" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> </div></div> Warner Chaves https://blog.pythian.com/?p=103166 Wed Feb 07 2018 09:40:10 GMT-0500 (EST) RMOUG Training Days 2018 http://dbakevlar.com/2018/02/rmoug-training-days-2018/ <p>So Training Days is coming up in two weeks.  You haven&#8217;t <a href="https://training-days-2018.rmoug.org/page/1299900/registration">registered to attend</a>?  How you feeling about that?</p> <p><a href="http://dbakevlar.com/2018/02/rmoug-training-days-2018/scream/" rel="attachment wp-att-7785"><img class="alignnone wp-image-7785" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/scream.gif?resize=392%2C294" alt="" width="392" height="294" data-recalc-dims="1" /></a></p> <p>Rocky Mountain Oracle User Group, (RMOUG) has the largest Oracle user group grassroots conference each February.  For the 2018 year, we decided to shake it up with:</p> <ul> <li>A new venue, The Westminster Westin Conference Center</li> <li>A new management company, EPS Conference Management</li> <li>A new Training Days Director, Komal Goyal</li> <li>A new management software, Bizabo</li> </ul> <p><a href="http://dbakevlar.com/2018/02/rmoug-training-days-2018/wesstin/" rel="attachment wp-att-7786"><img class="alignnone size-large wp-image-7786" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2018/02/Wesstin.png?resize=650%2C164" alt="" width="650" height="164" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2018/02/Wesstin.png?resize=1024%2C258 1024w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2018/02/Wesstin.png?resize=300%2C76 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2018/02/Wesstin.png?resize=768%2C193 768w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2018/02/Wesstin.png?w=1068 1068w" sizes="(max-width: 650px) 100vw, 650px" data-recalc-dims="1" /></a></p> <p>This was a huge undertaking and I have to say, I was worried we wouldn&#8217;t be able to pull it off, but it was time.  There&#8217;s nothing scarier than saying, &#8220;but this is the way we&#8217;ve always done it&#8221; and it wasn&#8217;t that there was anything wrong with how we&#8217;d done it, but there&#8217;s also something to be said for adding value to a great event by doing something new and taking a few risks.</p> <p>I came back to supplement my tasks as president to help Komal, as it is a huge undertaking.  We signed on <a href="https://training-days-2018.rmoug.org/page/1299897/keynote-presentation">Penny Avril</a> as the keynote last month, added a WIT luncheon and an AWS workshop.  All of these are pretty damn impressive. We&#8217;ve replaced so much, but the one thing we didn&#8217;t touch was the fantastic speakers and great content.</p> <p>There are <a href="https://training-days-2018.rmoug.org/page/1299898/workshops">four workshops</a> on the first day:</p> <ul> <li>Mike Dietrich</li> <li>Kent Graziano</li> <li>John King</li> <li>Peter Koletzke</li> </ul> <p>There&#8217;s over <a href="https://training-days-2018.rmoug.org/agenda">100 sessions</a> over 2 1/2 days from some of the <a href="https://training-days-2018.rmoug.org/page/1299903/speakers">best speakers</a> in the Oracle community.  If you&#8217;re interested in a certain track or topic, consider searching by <a href="https://training-days-2018.rmoug.org/page/1321366/presentations-by-topic">filter.</a></p> <p>It all sums up to be a fantastic and impressive event that will all happen in Westminster, CO in a couple weeks.  Are you going to really miss this much awesomeness?  <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p><a href="http://dbakevlar.com/2018/02/rmoug-training-days-2018/rmoug_o/" rel="attachment wp-att-7787"><img class="alignnone wp-image-7787 aligncenter" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2018/02/rmoug_o.png?resize=186%2C135" alt="" width="186" height="135" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <br><br><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/ico-tag.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/conference/" rel="tag">conference</a>, <a href="http://dbakevlar.com/tag/rmoug/" rel="tag">RMOUG</a>, <a href="http://dbakevlar.com/tag/training-days/" rel="tag">Training Days</a><br><br><div style="width:100%"><table align="left" width="100%" cellspacing="0" cellpadding="0" bgcolor="#f1f1f1" border="0px;"> <tbody> <tr bgcolor="#ffffff"><td align="center" width="17%" valign="top"> <span class="sb_title">Del.icio.us</span><br> <a href="http://del.icio.us/post?url=http://dbakevlar.com/2018/02/rmoug-training-days-2018/&title=RMOUG Training Days 2018"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2018/02/rmoug-training-days-2018/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">TweetThis</span><br> <a href="http://twitthis.com/twit?url=http://dbakevlar.com/2018/02/rmoug-training-days-2018/&title=RMOUG Training Days 2018"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Digg</span><br> <a href="http://digg.com/submit?phase=2&url=http://dbakevlar.com/2018/02/rmoug-training-days-2018/&title=RMOUG Training Days 2018"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">StumbleUpon</span><br> <a href="http://www.stumbleupon.com/submit?url=http://dbakevlar.com/2018/02/rmoug-training-days-2018/&title=RMOUG Training Days 2018"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td></tr> </tbody></table></div><br><div style="clear:both"></div><div style="background:#EEEEEE; padding:0px 0px 0px 15px; margin:10px 0px 0px 0px;"><div style="padding:5px 0px 5px 0px;"><b>Comments:</b>&nbsp;&nbsp;<a href="http://dbakevlar.com/2018/02/rmoug-training-days-2018/#respond">0 (Zero), Be the first to leave a reply!</a></div><br><div style="clear:both"></div><div style="padding:13px 0px 5px 0px;"><span style="border-bottom:1px dashed #003399;padding-bottom:4px;"><strong>You might be interested in this:</strong></span>&nbsp;&nbsp;<br><ul style="margin:0; padding:0; padding-top:10px; padding-bottom:5px;"><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2010/11/the-problem-with-the-automated-statistics-gathering-2/" >The Problem with the Automated Statistics Gathering</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/01/smart-home-update/" >Smart Home Update</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2018/01/linux-101-sql-server-dbas-part-ii/" >Linux 101 for SQL Server DBAs, Part II</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/06/installing-em13c-on-windows-tips/" >Installing EM13c on Windows Tips</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/05/em12c-dealing-with-unknown-targets/" >EM12c- Dealing with Unknown Targets</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2018/02/rmoug-training-days-2018/">RMOUG Training Days 2018</a>], All Right Reserved. 2018.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2018/02/rmoug-training-days-2018/">RMOUG Training Days 2018</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=7784 Tue Feb 06 2018 16:33:57 GMT-0500 (EST) WordPress 4.9.3 and 4.9.4 http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/XoevN8f63YM/ <p><img class="wp-image-4861 alignleft" src="https://oracle-base.com/blog/wp-content/uploads/2015/05/wordpress.png" alt="" width="200" height="200" />I&#8217;ve given up on posting about new WordPress releases as most of you who are self-hosting are probably using the automatic update feature, so by the time you read my release announcement you&#8217;ve already upgraded automatically. Not this time&#8230; <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Yesterday <a href="https://codex.wordpress.org/Version_4.9.3">WordPress 4.9.3</a> was released and got automatically applied to the five WordPress blogs I look after. As well as fixing a bunch of bugs, 4.9.3 also broke the automatic update feature, so you are going to be stuck on 4.9.3 until you manually click the upgrade button. If you are self hosting WordPress, it&#8217;s a good idea to log in and manually click the upgrade button, so you get <a href="https://codex.wordpress.org/Version_4.9.4">WordPress 4.9.4</a>, and all subsequent upgrades automatically. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/06/wordpress-4-9-3-and-4-9-4/">WordPress 4.9.3 and 4.9.4</a> was first posted on February 6, 2018 at 8:18 pm.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/XoevN8f63YM" height="1" width="1" alt=""/> Tim./author> https://oracle-base.com/blog/?p=7866 Tue Feb 06 2018 14:18:34 GMT-0500 (EST) Network transformation in today’s cloud services landscape. https://blog.pythian.com/how-cloud-services-are-transforming-networking/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p><span style="font-weight: 400;">Computer networks have always had secondary roles in the design of applications. The network is important for your services to be able to talk to each other. It needs to be as fast as possible, secure, with required SLAs, and the availability and redundancy should be higher than your application. The list of requirements grows faster with the scale of an application. All of a sudden you start thinking about CDN planning and getting to know what is better for your case, L7 or L3 load balancer. Add cloud concerns and the network doesn’t seem secondary anymore. </span></p> <p><span style="font-weight: 400;">Networking was transformed with the introduction of the variety of cloud services, and we need to start thinking about networks differently. Network planning and the way network engineers operate within the cloud infrastructure are no longer the same. Monitoring and troubleshooting in the environment with limited network visibility require creativity.</span></p> <p>&nbsp;</p> <h3><strong>Network Planning</strong></h3> <p>Network planning<span style="font-weight: 400;"> used to be a long process that required a lot of resources before even starting to write code, but not anymore.</span></p> <p>&nbsp;</p> <table style="height: 237px; border: 1px;" width="672"> <tbody> <tr> <th style="text-align: center;">Traditional networking</th> <th style="text-align: center;">Cloud networking</th> </tr> <tr> <td style="text-align: center;">Assess</td> <td style="text-align: center;">Quick Assessment</td> </tr> <tr> <td style="text-align: center;">Logical network planning</td> <td style="text-align: center;">Logical planning</td> </tr> <tr> <td style="text-align: center;">Capacity planning</td> <td style="text-align: center;">N/A *</td> </tr> <tr> <td style="text-align: center;">Power requirements</td> <td style="text-align: center;">N/A **</td> </tr> <tr> <td style="text-align: center;">Costing</td> <td style="text-align: center;">OPEX cost</td> </tr> <tr> <td style="text-align: center;">Life-cycle planning</td> <td style="text-align: center;">N/A ***</td> </tr> </tbody> </table> <p><em><span style="font-weight: 400;">*Capacity planning is required in extreme cases of traffic-intensive applications. Even then, knowing the limits of the virtual instances is enough. </span></em></p> <p><em><span style="font-weight: 400;">**The only time when you need to think about power is when you need to better understand availability zones. </span></em></p> <p><em><span style="font-weight: 400;">***Life-cycle planning is moving towards application and services level and is not applicable at the networking layer.</span></em></p> <p>&nbsp;</p> <p><span style="font-weight: 400;">The table above shows how network planning changed. </span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Network engineers need to think mostly from L3 and above when dealing with cloud infrastructure.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">No wires, no power, no cooling, no physical infrastructure.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">L2 can be thought of as merely interconnectivity, specific services, and edge troubleshooting cases.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">More smart services that act above L3 layer like caching, L7 load balancing, CDN, GEO-based DNS, Serverless functions.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Availability, scalability, and reliability became the architectural task and cloud vendors’ headache. </span></li> </ul> <p><span style="font-weight: 400;">Some limitations are coming along that become tricky for applications that rely on network services: </span></p> <ol> <li style="font-weight: 400;"><span style="font-weight: 400;">Dynamic routing is tricky and limited depending on the cloud provider you’re using.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Be aware of the IP address conflicts that will turn your network interconnectivity (either office to cloud or one cloud account with another one) into a nightmare.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Limits in the number of records for the ACLs and Security Groups.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">VPN connectivity with other cloud providers or with the hardware solutions is not that straightforward.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Services like DNS split-horizon may work only within the native cloud environment and are unsuitable for the parts of the infrastructure that are outside of cloud ecosystem.</span></li> </ol> <p><span style="font-weight: 400;">A lot of things can be fixed on the go for the cloud networking, but those changes sometimes lead to  the same complexity as in traditional networking.</span></p> <p><span style="font-weight: 400;">There are some common mistakes that can be avoided with proper planning:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Thinking VLANs instead of IP networks and routing.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Trying to replicate all traditional network elements like NAT and DPI boxes.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Planning IP addressing without understanding that external IP addresses are no longer routed into cloud infrastructure, they are attached to the interfaces.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Creating rudimental backbone-like bottlenecks to have visibility or control over the traffic</span></li> </ul> <p>&nbsp;</p> <h3><strong>Maintaining Network Infastructure</strong></h3> <p>Maintaining<span style="font-weight: 400;"> the cloud network infrastructure is comparatively a paradise for network engineers. They don’t need to worry about routers firmware, fan noise and temperature of the server rooms.</span></p> <p>&nbsp;</p> <table style="height: 237px;" width="672"> <tbody> <tr> <th style="text-align: center;">Working with Traditional Networking</th> <th style="text-align: center;">Working with Cloud Networking</th> </tr> <tr> <td style="text-align: center;">Physical access</td> <td style="text-align: center;">No physical access</td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Mainly manual, with simple scripted automation</span></td> <td style="text-align: center;"><span style="font-weight: 400;">Manual as well as automated using cloud SDK/API</span></td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Multiple devices to talk to deploy infrastructure</span></td> <td style="text-align: center;"><span style="font-weight: 400;">Single point of sending commands during the network deployment</span></td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Hard to code</span></td> <td style="text-align: center;"><span style="font-weight: 400;">Easy to code</span></td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">A lot of visibility for troubleshooting</span></td> <td style="text-align: center;">Limited, close to no visibility for troubleshooting</td> </tr> </tbody> </table> <p><span style="font-weight: 400;"><br /> Network engineers have an option of working on their cloud network using either their own scripts or known tools, and they can use cloud-native network services or build their own. Network engineers are no longer attached to their data centers and in the cloud infrastructure case might never know the location of them.Network engineers are more comfortable setting up new infrastructure because it can be coded and doesn’t require any new device deployments. The downside is that, in case of a mistake, production infrastructure can be destroyed or misconfigured.</span></p> <p><span style="font-weight: 400;">Keep in mind that the cost of the traditional network maintenance is much higher than in the cloud, and in most cases, internal traffic costs are insignificant.</span></p> <p>&nbsp;</p> <h3><strong>Network Monitoring and Troubleshooting</strong></h3> <p>Network monitoring<span style="font-weight: 400;"> requires to be reconsidered in the infrastructure with limited or no access to network devices.</span></p> <p>&nbsp;</p> <table style="height: 237px;" width="672"> <tbody> <tr> <th style="text-align: center;">Traditional Networking Monitoring</th> <th style="text-align: center;">Cloud Network Monitoring</th> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Network devices counters and logs</span></td> <td style="text-align: center;"><span style="font-weight: 400;">Application generated alerts</span></td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Automatic failover in the case of the network failure</span></td> <td style="text-align: center;"><span style="font-weight: 400;">Failover is not visible for the application</span></td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Visibility during light network degradation (ex. 5% packet loss)</span></td> <td style="text-align: center;"><span style="font-weight: 400;">No visibility during light network degradation</span></td> </tr> <tr> <td style="text-align: center;"><span style="font-weight: 400;">Isolated issue, harder to detect and fix</span></td> <td style="text-align: center;">Mostly spread across multiple customers, fixed by the cloud vendor</td> </tr> </tbody> </table> <p><span style="font-weight: 400;"><br /> Design the application with network monitoring components in it (timeouts, failovers to a backup host, checksums, response codes and confirmations, stateless, autoscaling.)What does this all mean?</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Monitoring of the network is performed on the Virtual OS level but it’s hard to detect noisy neighbor.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Cloud native services network monitoring can be done by tracking the endpoint response times on the application level.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">In case there is a network related issue in the cloud your account wouldn’t be the one affected and most likely cloud vendor support will be aware of the ETA of fixing the issue.</span></li> </ul> <p><span style="font-weight: 400;">All cloud vendors have their services status pages. Remember that those status pages are mostly filled by humans and if you’re the first customer who detected the issue you can expect to see all green on the status page.</span></p> <p><span style="font-weight: 400;">There are services on the internet where customers report issues with cloud vendors and SaaS applications even before it gets acknowledged by the customer support teams. </span></p> <p>Troubleshooting<span style="font-weight: 400;"> is a critical skill and being able to define the root cause of the issue in networking is not trivial. It’s even more complicated when you are trying to troubleshoot networks you don’t know. And even more complicated when you are trying to troubleshoot a network that isn’t your own and you don’t have visibility into the devices supporting it, and you’re remote. </span></p> <p><span style="font-weight: 400;">How should network engineers troubleshoot cloud networking?</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Know the weak spots (signs of the noisy neighbor, signs of potential node degradation or failure, API rate limits, ACL number of records limitations, nodes network limitations.)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Know your application to be able to separate application issues from network issues.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Call cloud vendor support because they can run nodes and network health checks.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Know what the normal performance of the network is (run load tests and compare them during the times of degradation.)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Run multipoint network connectivity tests within the cloud environment (some availability zones behave differently during the peak hours.)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Expect different response time from cloud-native services during different times of the day and provide recommendations to design your application accordingly.</span></li> </ul> <p><span style="font-weight: 400;">Incidents caused by the network issues are rare in cloud networking and usually troubleshooting in a properly planned reliable and redundant application is coming down to acknowledging that something happened and application recovered by itself. If a big outage happens there is not much network engineer can do except helping to execute a disaster recovery strategy. </span></p> <p><span style="font-weight: 400;">Network planning, maintenance, monitoring, and troubleshooting changed with the growth of cloud and cloud-native services. There are a lot of other things to consider that are network related. Network and application security are tied together. Cloud-native network services can provide better use of engineering time and ease of working remotely. Network-based application performance is improving all the time by getting closer to the customer’s devices. If you’re not sure where your network is on its transformation journey, don’t hesitate to reach out to experts. </span></p> </div></div> Oleksandr Zadorozhnyi https://blog.pythian.com/?p=103389 Tue Feb 06 2018 13:51:58 GMT-0500 (EST) TopicWise Interview Question on Oracle Database http://oracle-help.com/articles/topicwise-interview-question-on-oracle-database/ <p>Here is some <strong>Oracle Listeners Interview Question</strong>, hope it will help you.</p> <p><strong>Listener Question</strong>: <a href="http://clouddba.co/generic-dba/">http://clouddba.co/generic-dba/</a></p> <p>Here is some <strong>Oracle Tablespace  Interview Question</strong>, hope it will help you.</p> <p><strong>Tablespace Question</strong>: <a href="http://clouddba.co/generic-dba/">http://clouddba.co/generic-dba/</a></p> <p>Here is some <strong>Oracle EXPDP IMPDP Datapump Interview Question</strong>, hope it will help you.</p> <p><strong>EXPDP IMPDP Datapump Question</strong>: <a href="http://clouddba.co/expdp-impdp-datapump-interview-questions/">http://clouddba.co/expdp-impdp-datapump-interview-questions/</a></p> <p>Here is some <strong>Oracle Database Architecture Interview Question</strong>, hope it will help you.</p> <p><strong>Database Architecture Question</strong>:<a href="http://clouddba.co/database-architecture-interview-questions/"> http://clouddba.co/database-architecture-interview-questions/</a></p> <p>Here is some <strong>Oracle User Management Interview Question</strong>, hope it will help you.</p> <p><strong>Oracle User Management Question</strong>: <a href="http://clouddba.co/oracle-user-role-privilege-interview-questions/">http://clouddba.co/oracle-user-role-privilege-interview-questions/</a></p> <p>These questions are collaborated and collected by  many <strong>DBAs</strong> which include<strong> <a href="https://www.linkedin.com/in/debasis-maity-19007115/">Debasis Maity</a>, <a href="https://www.linkedin.com/in/saibal-ghosh-ccsk-prince2-%C2%AE-469b0a7/">Saibal Ghosh</a>, <a href="http://www.linkedin.com/in/skantali/">Skant Gupta</a></strong> and many more.</p> <p>Stay Tuned for<strong> More Interview Question on Different Topics<br /> </strong></p> <p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/articles/topicwise-interview-question-on-oracle-database/">TopicWise Interview Question on Oracle Database</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Skant Gupta http://oracle-help.com/?p=3330 Tue Feb 06 2018 11:39:52 GMT-0500 (EST) Advanced Analytics from Pythian Improves CrowdTwist’s Loyalty Program Outcomes https://blog.pythian.com/pythian-improves-crowdtwists-loyalty-program-with-analytics/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><div> <p dir="ltr">CrowdTwist provides a SaaS based omni-channel loyalty and analytics platform that is designed to allow marketers to acquire, engage and retain customers. They power the most innovative and engaging loyalty programs in the market today.</p> <p dir="ltr">The platform is used internationally by consumer brands to drive new and existing customers to their company with the intent of keeping them engaged throughout the customer journey.</p> <p dir="ltr">Consumers have high expectations when it comes to loyalty programs, the rewards need to be relevant and have advantages to keep the consumer engaged. It is crucial for CrowdTwist to collect, analyze and use the data they collect from their customers so they can learn, understand and strengthen their customer relationships.</p> <p dir="ltr">CrowdTwist wanted to improve the client experience with more visible information, better reports and a balance of incentives given and financial liability.</p> <p><span id="m_-7588051093280039792gmail-docs-internal-guid-0b993ab6-e720-0388-a76d-696ef427a7f1">Pythian’s <a href="https://pythian.com/data-services/">Data Science</a> team assessed the current dataset and built a model to determine how users clustered together could be distinguished from one another. Cluster analysis was provided offering advanced analytics into optimal speed per channel per user. </span></p> </div> <div>Using predictive analytics, Pythian was able to translate actionable outcomes with measurably improved customer data segments, streamlined reports all resulting in a better client experience with the loyalty and engagement platform overall.</div> <div></div> <h4><a href="https://pythian.com/clients/crowdtwist/"><strong>Read the full case study here to learn more. </strong></a></h4> <div> <div class="yj6qo ajU"></div> </div> </div></div> Krista Colby-Wheatley https://blog.pythian.com/?p=103307 Tue Feb 06 2018 11:25:44 GMT-0500 (EST) Determine the process which is locking an Oracle account with incorrect password http://oracle-help.com/oracle-database/accountsusers-oracledetermine-process-locking-oracle-account-incorrect-password/ <p>As we know all that in the world of technology we have to fill ups user and password name multiple times . We must know what is actually happens while we enter incorrect password. First few lines give some basic idea about the Authentication.</p> <p>Authentication is a process in which the credentials provided are compared to those on file in a database of authorized users’ information on a local operating system or within an authentication server.</p> <p>Different systems may require different types of credentials to ascertain a user&#8217;s identity. The credential often takes the form of a password, which is a secret and known only to the individual and the system. Three categories in which someone may be authenticated are: something the user knows, something the user is, and something the user has.</p> <p>We are going to have look on  the procedure to Determine the process which is locking an Oracle account with incorrect password, which search from the dba_audit_session view for records with a <span class="il">return code</span> equal to <span class="il">1017</span> which indicate a failed logon.</p><pre class="crayon-plain-tag">column username format a15 column userhost format a25 column terminal format a15 column timestamp format a15 column action_name format a15 select username, userhost, terminal, timestamp, action_name from sys.dba_audit_trail where RETURNCODE='1017'; USERNAME        USERHOST                  TERMINAL   TIMESTAMP   ACTION_NAME --------------- ------------------------- ---------- ----------- ----------- appsread              &lt;HOSTNAME&gt;                                    02-APR-14       LOGON appsread              &lt;HOSTNAME&gt;                                    02-APR-14       LOGON appsread             &lt;HOSTNAME&gt;                                     02-APR-14       LOGON appsread             &lt;HOSTNAME&gt;                                     02-APR-14       LOGON appsread             &lt;HOSTNAME&gt;                                     02-APR-14       LOGON</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-database/accountsusers-oracledetermine-process-locking-oracle-account-incorrect-password/">Determine the process which is locking an Oracle account with incorrect password</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3324 Tue Feb 06 2018 11:08:41 GMT-0500 (EST) Types of Supplemental logging at Database level http://oracle-help.com/oracle-database/types-supplemental-logging-database-level/ <p>Redo log files are generally used for instance recovery and media recovery. The data needed for such operations is automatically recorded in the redo log files. However, a redo-based application may require that additional column be logged in the redo log files. The process of logging these additional columns is called <span class="bold"><strong>supplemental logging</strong>.</span></p> <p>There are two types of supplemental logging:</p> <ol> <li>Minimal Supplemental Logging.</li> <li>Identification Supplemental Logging</li> </ol> <p>Generally, we have used <strong>Minimal Supplemental logging</strong>, as it does not impose significant overhead on the database generating redo log files. Identification supplemental logging can create overhead on database generating redo log files.</p> <p><strong>Minimal Supplemental logging :</strong></p> <p>Minimal supplemental logging logs the minimal amount of information needed for LogMiner to identify, group, and merge the redo operations associated with <strong>DML changes</strong>. It ensures that LogMiner (and any product building on LogMiner technology) has sufficient information to support chained rows and various storage arrangements, such as cluster tables and <strong>index-organized tables</strong>.</p> <p>To <strong>check</strong> minimal supplemental logging is enabled or not?</p><pre class="crayon-plain-tag"><span style="font-size: 10pt;">SQL&gt; SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;</span> <span style="font-size: 10pt;">SUPPLEME</span> <span style="font-size: 10pt;">--------</span> <span style="font-size: 10pt;">NO</span></pre><p>To <strong>enable</strong> supplemental logging</p><pre class="crayon-plain-tag">ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;</pre><p><strong>Oracle recommends that you at least enable minimal supplemental logging for LogMiner.</strong></p> <p><strong>Identification Supplemental Logging</strong></p> <p>Identification Supplemental logging is useful when redo log files are mined at Logical Standby database and not at Source database Instance. Using database identification key logging, you can enable database-wide before-image logging for all updates by specifying one or more of the following options to the ALTER DATABASE ADD SUPPLEMENTAL LOG  statement.</p> <p>There is <strong>four</strong> option with ALTER DATABASE ADD SUPPLEMENTAL LOG:</p> <ol> <li>ALL</li> <li>PRIMARY KEY</li> <li>.UNIQUE KEY</li> <li>FOREIGN KEY</li> </ol> <p><strong>ALL</strong>: This option specifies that after enabling ALL option of supplemental logging , whenever a row is updated all columns of this row will be recorded in redo log file.</p> <p><strong>Note</strong>: <strong>LOBs, LONGS, and ADT</strong>[abstract data types] data types will <strong>not</strong> be placed in redo log if any other column is being updated in this row.</p> <p>to enable supplemental log data for ALL column</p><pre class="crayon-plain-tag">SQL&gt; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; Database altered.</pre><p>To check whether it is <strong>enabled or not</strong></p><pre class="crayon-plain-tag">SQL&gt; SELECT SUPPLEMENTAL_LOG_DATA_ALL FROM V$DATABASE; SUP --- YES</pre><p><strong>PRIMARY KEY</strong></p> <p>This option causes the database to place all columns of a row&#8217;s primary key in the redo log file whenever a row containing a primary key is updated (even if no value in the primary key has changed).</p> <p>If table does not contain Primary Key but have unique key then unique key is chosen for logging . If table is having multiple unique key then one of the unique key is chosen for logging.</p> <p>If table does not contain either primary key or unique key then ALL columns are used for logging and gives same behavior as supplemental_log_data_all.</p> <p><strong>NOTE:</strong> Oracle recommends when you enable primary key supplemental logging all or most tables be defined to have primary or unique index keys..</p> <p>To enable primary key supplemental logging :</p><pre class="crayon-plain-tag">SQL&gt; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; Database altered.</pre><p>To check whether primary key supplemental logging is <strong>enabled or not</strong> :</p><pre class="crayon-plain-tag">SQL&gt; SELECT SUPPLEMENTAL_LOG_DATA_PK FROM V$DATABASE; SUP --- YES</pre><p><strong>UNIQUE KEY :</strong></p> <p>With this option, database places all columns of a composite unique key or bitmap index in the redo log file if any column of composite unique key or bitmap index is being updated. A unique index can be created with unique constraint or unique index.</p> <p>To enable unique key supplemental logging :</p><pre class="crayon-plain-tag">SQL&gt; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(UNIQUE) COLUMNS; Database altered.</pre><p>To check whether unique key supplemental logging is <strong>enabled or not</strong> :</p><pre class="crayon-plain-tag">SQL&gt; SELECT SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUP --- YES</pre><p><strong>FOREIGN KEY</strong></p> <p>This option causes the database to place all columns of a row&#8217;s foreign key in the redo log file if any column belonging to the foreign key is modified.</p> <p>To enable foreign key supplemental log data</p><pre class="crayon-plain-tag">SQL&gt; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(FOREIGN KEY) COLUMNS; Database altered.</pre><p>To check whether foreign key supplemental logging is enabled or not</p><pre class="crayon-plain-tag">SQL&gt; SELECT SUPPLEMENTAL_LOG_DATA_FK FROM V$DATABASE; SUP --- YES</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-database/types-supplemental-logging-database-level/">Types of Supplemental logging at Database level</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Jagruti Jasleniya http://oracle-help.com/?p=3239 Tue Feb 06 2018 11:07:14 GMT-0500 (EST) Where in the World is Goth Girl- Cleveland Edition http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/ <p>I&#8217;ve returned from SQL Saturday Cleveland after presenting &#8220;Linux Performance Essentials for the SQL Server DBA&#8221;.  The event had 30% women speakers, which is incredible for a technical event.  I&#8217;m thrilled with the attendance and although my session went through a lot of Linux in an hour, people didn&#8217;t leave looking like their brains were going to explode, so mission accomplished.</p> <p><a href="http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/brain_explode2/" rel="attachment wp-att-7774"><img class="alignnone size-full wp-image-7774" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2018/02/brain_explode2.gif?resize=485%2C273" alt="" width="485" height="273" data-recalc-dims="1" /></a></p> <p>I always feel like I&#8217;m walking around these events looking for the hidden cameras trying to record my astounded facial reactions. There is a significantly higher percentage of women speaking and in attendance and not a pencil skirt in sight.  Maybe its that the events are on the weekend vs. a weekday, but at SQL Summit, the week long conference in Seattle, the only dressing up I really observed was Halloween costumes and then the guys wearing kilts in support of the women at the event.  At SQL Saturday Cleveland, I had the surreal experience of feeling like the ONLY woman without a bright streak of color in her hair, (I&#8217;m in the middle of a redye process this week&#8230; :))  Erin Stellato, Wendy Pastrick, Holly Foley and others all had a flare of bright color in the midst of their natural hair color.  I have felt <em>over-dressed</em> at a couple SQL events, as they want me here for my brain, not for my appearance.</p> <h3>Saturday Schmaterday</h3> <p>SQL Saturdays are pretty cool events and incredibly successful for the Microsoft Data Platform community. Database specialists from each community get together to form a user group, which gives them the opportunity to network with each other, host events and learn from other.   They&#8217;ve already built a culture that expects to learn on the weekend, rarely taking business time off, but in exchange, the events are free with your PASS membership, (which is also free, I might add.) and seems to retain a consistent attendance due to this. Microsoft makes it a bit easier for the volunteers who run the user groups than Oracle, as they&#8217;ve created a platform, (for better or worse) that all user groups can use as a &#8220;home base&#8221; with resources, software, hosting and a dashboard to manage it all from.  There are a list of expectations that makes it easy for someone to launch a local user group, but they can also take it from there and build an event outside of the PASS organization if they wish to do so, it just is no longer part of PASS.  I&#8217;ve felt one of the biggest challenges for the Oracle user groups are that we&#8217;re constantly &#8220;reinventing the wheel&#8221; with each user group and a centralized resource location would be helpful.  I don&#8217;t think it would be possible to launch one on the Oracle side now, but the benefit of having one is apparent.</p> <p>With that being said, the SQL Community also makes it easy to become a speaker with your PASS membership-  its easy to find events, to submit abstracts, promote and interact with the event on social media.  The SQL Family, (You can find #SQLFamily hashtag on Twitter) has a strong following</p> <p>I think there&#8217;s a lot to be learned from all experiences and due to this, I&#8217;ve increased my involvement with the SQL Server user group in Denver as their new president.   When the board suggested it, I was a little hesitant, but as they displayed their desire to continue to perform the duties for each of their roles to the fullest, it became clear that it would make sense for me to become president, as most of what I do as president for the oracle user group, RMOUG, could be reused.  My biggest hurdle has been updating my SQL Saturday speaking schedule to not speak at the same time as a Saturday board meeting!</p> <p>So let&#8217;s discuss what&#8217;s coming up on the calendar for the rest of February and all of March!</p> <h3>February</h3> <p><strong>SQL Saturday Redmond</strong>, Redmond, WA- Feb. 10th</p> <p><strong>RMOUG Training Days</strong>, Denver, CO-  Feb. 20-22nd</p> <p>Since I&#8217;m doing most of the planning for this event and also the president, I&#8217;m trying to give me some space for February&#8230;. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <h3>March</h3> <p><strong>SQL Saturday Victoria</strong>, Victoria BC- March 3rd</p> <p><strong>HotSos Symposium</strong>, Dallas, TX- March 6-8th</p> <p><strong>SQL Saturday Spokane</strong>, Spokane, WA- March 10th</p> <p><strong>Cincinnati Oracle User Group</strong>, Cincinnati, IN- March 16th</p> <p><strong>SQL Saturday Cincinnati</strong>, Cincinnati, IN- March 17th</p> <p><strong>SQL Saturday Colorado Springs</strong>, Colorado Springs, CO- March 24th</p> <p>So March may look like an impossible schedule, but for the week of the 3rd through the 10th, I&#8217;m taking one way flights from Denver to Victoria to Dallas to Spokane and then back to Denver.  The two event in Cincinnati are back to back for one trip and then Colorado Springs is local for me.  It will be six events, four SQL Server and two Oracle in a lesser impacting schedule.</p> <p>I&#8217;m looking forward to traveling to Redmond this week.  If you notice, my schedule has a few Pacific Northwest cities listed.  As this area is high on our list of possible locations we might want to relocate to, I&#8217;m looking forward to spending more time in some of the urban areas of Washington and British Columbia.</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <br><br><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/ico-tag.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<br><br><div style="width:100%"><table align="left" width="100%" cellspacing="0" cellpadding="0" bgcolor="#f1f1f1" border="0px;"> <tbody> <tr bgcolor="#ffffff"><td align="center" width="17%" valign="top"> <span class="sb_title">Del.icio.us</span><br> <a href="http://del.icio.us/post?url=http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/&title=Where in the World is Goth Girl- Cleveland Edition"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">TweetThis</span><br> <a href="http://twitthis.com/twit?url=http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/&title=Where in the World is Goth Girl- Cleveland Edition"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">Digg</span><br> <a href="http://digg.com/submit?phase=2&url=http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/&title=Where in the World is Goth Girl- Cleveland Edition"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td><td align="center" width="17%" valign="top"> <span class="sb_title">StumbleUpon</span><br> <a href="http://www.stumbleupon.com/submit?url=http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/&title=Where in the World is Goth Girl- Cleveland Edition"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=650" border="0" align="absmiddle" data-recalc-dims="1"></a> </td></tr> </tbody></table></div><br><div style="clear:both"></div><div style="background:#EEEEEE; padding:0px 0px 0px 15px; margin:10px 0px 0px 0px;"><div style="padding:5px 0px 5px 0px;"><b>Comments:</b>&nbsp;&nbsp;<a href="http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/#respond">0 (Zero), Be the first to leave a reply!</a></div><br><div style="clear:both"></div><div style="padding:13px 0px 5px 0px;"><span style="border-bottom:1px dashed #003399;padding-bottom:4px;"><strong>You might be interested in this:</strong></span>&nbsp;&nbsp;<br><ul style="margin:0; padding:0; padding-top:10px; padding-bottom:5px;"><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/05/options-for-pre-em13c-target-software-and-non-supported-os-in-em13c/" >Options For Pre-EM13c Target Software and Non-Supported OS in EM13c</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/04/ioug-collaborate-2016-c16lv/" >IOUG Collaborate 2016! #C16LV</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/10/pass-summit-2016-and-old-school-mssql-dba-skills/" >Pass Summit 2016 and Old School MSSQL DBA Skills</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2012/03/oracle-for-the-sql-server-dba-presentation-slides/" >Oracle for the SQL Server DBA Presentation Slides</a></li><li style="list-style-type: none;"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tick.png?w=650" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/02/rmougs-first-wit-scholarship-winner/" >RMOUG's First WIT Scholarship Winner</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/">Where in the World is Goth Girl- Cleveland Edition</a>], All Right Reserved. 2018.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2018/02/world-goth-girl-cleveland-edition/">Where in the World is Goth Girl- Cleveland Edition</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=7773 Tue Feb 06 2018 10:31:10 GMT-0500 (EST) Deploying Oracle OEM agents 13c on windows targets (2008 R2) while OMS is on Linux https://technology.amis.nl/2018/02/06/deploying-oracle-oem-agents-13c-on-windows-targets-2008-r2-while-oms-is-on-linux/ <p>Situation at customer’s site: OMS 13.2 on Oracle Linux, targets are Windows machines, and a bit ancient: Windows 2008 R2. How to deploy agents on those targets? Several methods are possible in theory. In this blog I’ll describe my efforts to determine what is really possible and what is efficient.<span id="more-47462"></span></p> <p>When using Linux targets, there’s no question how to deploy agents, there’s a wunderfull mechanism to push agents to the targets. No pain (mostly). Even to targets in the Oracle Cloud.</p> <p>Using the same mechanism for Windows, we need cywin to emulate a Linux connection. That’s my first attempt, but there are other possilities to explore:</p> <p>1. The above named cygwin option. Install cygwin on every Windows target host. When that’s done (automated perhaps), it should be easy to push agents.</p> <p>2. Using a Windows staging server to push agents to a Windows target, from a Windows machine. Should be easier, and less labour at the target-site.</p> <p>3. A silent install at every Windows target of the agent.</p> <p>&nbsp;</p> <h2>1. Cygwin option.</h2> <p>There is quite a bit documentation to be found and blogposts about this subject, mentioned in the resources below this post. Most striking details of the configurartion:</p> <p>&#8211; you need to edit the file \oui\prov\resources\ssPaths_msplats.properties on the OMS server. Change properties like SCP_PATH, SH_PATH, CHMOD_PATH, LS_PATH, SSH_PATH, MKDIR_PATH. Small but minor detail, not mentioned in the documentation: use forward slashes instead of backslash !! D:/ instead of D:\.</p> <p>&#8211; put the user of the target and password in the password file on the target:</p> <blockquote><p>$ /bin/mkpasswd -l -u oracle &gt;&gt; /etc/passwd</p></blockquote> <p>When Cygwin has been installed, push the agents through Setup —&gt; add target –&gt; manually.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-44.png?ssl=1"><img title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-44.png?resize=702%2C419&#038;ssl=1" alt="image" width="702" height="419" border="0" data-recalc-dims="1" /></a></p> <p>And installling:</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image-45.png?ssl=1"><img title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/01/image_thumb-45.png?resize=702%2C437&#038;ssl=1" alt="image" width="702" height="437" border="0" data-recalc-dims="1" /></a></p> <p>And in my case it fails unfortunately:</p> <blockquote><p>Execution of command d:/oracle/agent13c/ADATMP_2018-01-19_15-17-49-PM/agentDeploy.bat -ignorePrereqs ORACLE_HOSTNAME=&lt;hostname&gt; AGENT_BASE_DIR=d:/oracle/agent13c OMS_HOST=&lt;hostname&gt; EM_UPLOAD_PORT=4903 AGENT_INSTANCE_HOME=d:/oracle/agent13c/agent_inst b_doDiscovery=false START_AGENT=false b_forceInstCheck=true -force AGENT_PORT=3872 on host &lt;hostname&gt; Failed</p></blockquote> <p>At this time I did not know what went wrong, thought I ran into bug 23499235 : 13c Cloud Control Agent not Deploying on Microsoft Windows x64 2008 R2.  To investigate what went wrong, it&#8217;s best to to run the command manual at the target. But that’s what I’m basically doing in the third option, so I stopped this action of pushing the agents for the moment.</p> <h2>2. Using a Windows staging server</h2> <p>This should be the most promising option, a centralised staging server, pushing the agents to the targets. Oracle has documented this by an example:</p> <blockquote><p>Example Deployment of an Enterprise Manager 12.1.0.5/13c Cloud Control Agent on an MS Windows Host with the PsExec Method from an MS Windows Staging Server when the OMS is on Unix (Doc ID 2304834.1)</p></blockquote> <p>But there are several exellent blogs about this configuration, like <a href="https://www.toadworld.com/platforms/oracle/b/weblog/archive/2014/07/04/enterprise-manager-agent-deployment-gets-better-on-windows" target="_blank" rel="noopener">here</a>.</p> <p>In general:</p> <p>Choose and configure a Windows server to act as a ‘pushing’ agents server. Copy the agent software, install psexec tools, test connection to the target host, create a property file and push the agent.</p> <ul> <li>How to obtain the agent has been excellent described by <a href="http://dbakevlar.com/2013/10/em12c-agent-deployment-on-windows/" target="_blank" rel="noopener">dbakevlar in this blog</a>.</li> <li>How to install psexec tools and test the connection has been described <a href="https://www.toadworld.com/platforms/oracle/b/weblog/archive/2014/07/04/enterprise-manager-agent-deployment-gets-better-on-windows" target="_blank" rel="noopener">here</a>.</li> <li>The property file I used:</li> </ul> <blockquote><p>HOST_NAMES=&lt;hostname&gt;<br /> USER_NAME=&lt;windows domain&gt;\oracle<br /> PASSWORD=&lt;password&gt;<br /> AGENT_IMAGE_PATH=D:\tools\staging\13.2.0.0.0_AgentCore_233.zip<br /> AGENT_BASE_DIR=D:\oracle\agent13c<br /> OMS_HOST=&lt;Linux-OMS&gt;<br /> EM_UPLOAD_PORT=4903<br /> AGENT_REGISTRATION_PASSWORD=&lt;agent_passw&gt;<br /> PSEXEC_DIR=D:\tools\pstools<br /> REMOTE_SYS_DIR=C:\Windows</p></blockquote> <p>And off we go, pushing the agent to a Windows target:</p> <blockquote><p>agentDeployPSExec.bat PROPERTIES_FILE=d:\tools\staging\&lt;property_file&gt;</p></blockquote> <p>But then, the following error:</p> <blockquote><p>Error copying D:\tools\staging\\unzip_tmp.exe to remote system:</p> <p>D:\tools\pstools\psexec.exe \\&lt;targethostname&gt; -u &lt;windows-domainname&gt;\oracletab -p ****** cmd.exe /c move C:\Windows\unzip_tmp.exe D:\oracle\agent13c\ADATMP_&#8211;_&#8211;</p> <p>PsExec v2.2 &#8211; Execute processes remotely</p> <p>Copyright (C) 2001-2016 Mark Russinovich</p> <p>Sysinternals &#8211; www.sysinternals.com</p> <p><strong>Access is denied</strong>.</p></blockquote> <p>And.. there’s a note for this:</p> <p>EM 13c: PsExec.exe Access Is Denied When Attempting To Move C:\Windows\unzip_tmp.exe On Target Host (Doc ID 2201143.1)</p> <p>Solution: Turn off UAC at the target Windows server. This is not an option for the organization , so I’ll skip this alternative….</p> <h2>3. A silent install at every Windows target of the agent</h2> <p>At first, this seemed not to be the fastest way, but after the experiences of the other options, it could be the best option.</p> <p>There’s a good description how to do this  at <a href="http://dbakevlar.com/2013/10/em12c-agent-deployment-on-windows/" target="_blank" rel="noopener">DBAkevlar’s site</a>, won’t repeat this in this blog.</p> <p>After some struggle with missing dll’s (Windows 2008 R2), read a lot of notes about this (see below this post), got the job done.</p> <p>The trick for me: add the following dll’s to a directory which is in the PATH variable:</p> <ul> <li>perl58.dll</li> <li>msvcp71.dll</li> <li>msvcr71.dll</li> <li>msvr100.dll</li> </ul> <p>Conclusion: first do a silent install to ensure the installation works. After that you may decide to choose one of the other options. I decided to go for the silent install by the way.</p> <p>&nbsp;</p> <p>Resources:</p> <p>Install cygwin on Windows servers: <a href="https://docs.oracle.com/cd/E73210_01/EMBSC/GUID-B8ED3864-2CCC-4508-9E98-73E79E0E852D.htm#EMBSC152">https://docs.oracle.com/cd/E73210_01/EMBSC/GUID-B8ED3864-2CCC-4508-9E98-73E79E0E852D.htm#EMBSC152</a></p> <p>Download cygwin: <a href="https://cygwin.com/install.html">https://cygwin.com/install.html</a></p> <p>Cygwin installation blogpost: <a href="http://www.carajandb.com/en/blogs/blog-swinkler-en/190-oem-12c-agent-deploy-on-windows-no-problem-with-cygwin">http://www.carajandb.com/en/blogs/blog-swinkler-en/190-oem-12c-agent-deploy-on-windows-no-problem-with-cygwin</a></p> <p>Another cygwin installation blogpost: <a href="http://www.carajandb.com/en/blogs/blog-swinkler-en/190-oem-12c-agent-deploy-on-windows-no-problem-with-cygwin">http://www.carajandb.com/en/blogs/blog-swinkler-en/190-oem-12c-agent-deploy-on-windows-no-problem-with-cygwin</a></p> <p>Doc ID 2304834.1: Example Deployment of an Enterprise Manager 12.1.0.5/13c Cloud Control Agent on an MS Windows Host with the PsExec Method from an MS Windows Staging Server when the OMS is on Unix</p> <p>Toadword about staging server:</p> <p><a href="https://www.toadworld.com/platforms/oracle/b/weblog/archive/2014/07/04/enterprise-manager-agent-deployment-gets-better-on-windows">https://www.toadworld.com/platforms/oracle/b/weblog/archive/2014/07/04/enterprise-manager-agent-deployment-gets-better-on-windows</a></p> <p>Download psexec tool: <a href="http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx">http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx</a></p> <p>dbakevlar, deploying standalone agents: <a href="http://dbakevlar.com/2013/10/em12c-agent-deployment-on-windows/">http://dbakevlar.com/2013/10/em12c-agent-deployment-on-windows/</a></p> <p>Access denied with psexec: EM 13c: PsExec.exe Access Is Denied When Attempting To Move C:\Windows\unzip_tmp.exe On Target Host (Doc ID 2201143.1)</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/06/deploying-oracle-oem-agents-13c-on-windows-targets-2008-r2-while-oms-is-on-linux/">Deploying Oracle OEM agents 13c on windows targets (2008 R2) while OMS is on Linux</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Job Oprel https://technology.amis.nl/?p=47462 Tue Feb 06 2018 10:00:48 GMT-0500 (EST) OUG Ireland 2018 http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/VMF0IlNPYDU/ <p><a href="https://www.ukoug.org/2018-events/oug-ireland-2018/"><img class="alignnone size-full wp-image-7864" src="https://oracle-base.com/blog/wp-content/uploads/2018/02/oug-ireland-2018.png" alt="" width="396" height="111" /></a></p> <p>Next month (22-23 March) is the <a href="https://www.ukoug.org/2018-events/oug-ireland-2018/">OUG Ireland 2018</a> event. Somehow I managed to miss the call for papers, so I wasn&#8217;t in the race for a speaker slot, ut I just booked my flights and hotel, so I&#8217;ll be lurking around.</p> <p>If anyone drops out of a session after 11:00 on the first day, or at any time on the second day, I&#8217;m happy to drop in and fill the spot. Just sayin&#8217;! <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> If not, I have an overnight stay in Dublin.</p> <p>Maybe see you there!</p> <p>Cheers</p> <p>Tim&#8230;</p> <p><strong>Update</strong>: I&#8217;m registered as an attendee now through my company&#8217;s membership, so I&#8217;ll definitely be there. If I get a stray speaker slot, all the better. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/06/ukoug-ireland-2018/">OUG Ireland 2018</a> was first posted on February 6, 2018 at 10:55 am.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/VMF0IlNPYDU" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7863 Tue Feb 06 2018 04:55:28 GMT-0500 (EST) February Webinars https://www.odtug.com/p/bl/et/blogaid=765&source=1 Is there a topic you would like covered but do not see here? We are happy to take webinar suggestions. Email us at kgately@odtug.com. Did you miss a webinar? As an ODTUG member you can view all of our past webinars at any time. ODTUG https://www.odtug.com/p/bl/et/blogaid=765&source=1 Mon Feb 05 2018 17:08:23 GMT-0500 (EST) Special Event Announcement https://www.odtug.com/p/bl/et/blogaid=764&source=1 On Wednesday, June 13, 2018, join us for the ODTUG Kscope18 Special Event at Andretti Indoor Karting & Games in Orlando, Florida! ODTUG https://www.odtug.com/p/bl/et/blogaid=764&source=1 Mon Feb 05 2018 17:04:50 GMT-0500 (EST) Special Event Announcement https://kscope18.odtug.com/p/bl/et/blogaid=764&source=1 On Wednesday, June 13, 2018, join us for the ODTUG Kscope18 Special Event at Andretti Indoor Karting & Games in Orlando, Florida! ODTUG https://kscope18.odtug.com/p/bl/et/blogaid=764&source=1 Mon Feb 05 2018 17:04:50 GMT-0500 (EST) ODTUG Kscope18 5K Fun Run Announcement https://www.odtug.com/p/bl/et/blogaid=763&source=1 Happy New Year! Stay true to your New Year's fitness resolution and have more FUN at ODTUG Kscope18 this year by participating in the 5K Fun Run! ODTUG https://www.odtug.com/p/bl/et/blogaid=763&source=1 Mon Feb 05 2018 17:00:35 GMT-0500 (EST) ODTUG Kscope18 5K Fun Run Announcement https://kscope18.odtug.com/p/bl/et/blogaid=763&source=1 Happy New Year! Stay true to your New Year's fitness resolution and have more FUN at ODTUG Kscope18 this year by participating in the 5K Fun Run! ODTUG https://kscope18.odtug.com/p/bl/et/blogaid=763&source=1 Mon Feb 05 2018 17:00:35 GMT-0500 (EST) ODTUG January News https://www.odtug.com/p/bl/et/blogaid=762&source=1 ODTUG's January news includes the announcement of the 2018 - 2019 Executive Committee, ODTUG Kscope18 updates, Oracle Cloud Connect upcoming webinars, ODTUG's community news, and upcoming ODTUG webinars. ODTUG https://www.odtug.com/p/bl/et/blogaid=762&source=1 Mon Feb 05 2018 16:55:23 GMT-0500 (EST) What Makes MicroServices Different from SOA? http://kettenisblogs.blogspot.com/2018/02/what-makes-microservices-different-from.html <div dir="ltr" style="text-align: left;" trbidi="on"><i>In this article I will discuss what is different between MicroServices and a traditional Service Oriented Architecture as such an architecture&nbsp;may look looks like when you know for example Oracle SOA. I also discuss some of misconceptions heard or read concerning MicroServices. It is written by and for a person that knows SOA and is wonders what to do with MicroServices. If MicroServices is what you do already, I probably have little news for you.</i><br /><i>I wrote this article many months ago, but somehow forgot to publish.</i><br /><h3><span style="color: blue;">What's Different Compared to Traditional SOA?</span></h3>In&nbsp;<a href="http://www.infoworld.com/article/3080611/application-development/learning-from-soa-5-lessons-for-the-microservices-era.html">his article on InfoWorld</a>&nbsp;Matt McLarty states that this question should not matter. The real question is: "what we can learn from the SOA movement", and I concur with his 5 important lessons. Nevertheless, even after reading his article, people like me will keep on wondering what the practical implications may be on the way we use our technology now and how we should change that.<br /><br />All in all most of the MicroServices principles are fundamental to what I would consider to be a "good" Service Oriented Architecture. Of course, there is no such thing as <i>the&nbsp;SOA</i>, although in my opinion many best practices, and lessons learned the hard way, have lead to identifying some generic characteristics of the more successful ones, which in the below I refer to as <i>classical SOA</i>.<br /><br />The way I see it (from my classical SOA perspective):<br /><h3 style="text-align: left;"><span style="color: blue;">Statefull vs Stateless</span></h3>MicroServices are stateless by principle. In SOA it is a best practice to avoid stateful services but that is not a principle. You should try to avoid stateful BPEL, but when creating a composite service that involves one or more asynchronous services, that leaves you little choice. As I explain in <a href="http://kettenisblogs.blogspot.nl/2017/03/are-microservices-death-of-bpm-and-case.html">my previous blog about MicroServices and BPM and Case Management</a>, the latter two are stateful by definition, so there you also don't have a choice.<br /><div><br /></div><div>However, in case of aynchronous (request/response) communication, some next time you may consider using events instead, where the response is not handled by an asynchronous callback&nbsp;but by publishing an event by means of the EDN or using JMS). Generally this complicates the implementation, but who said that MicroServices did not come with a price?</div><div><br /></div><div><h3 style="text-align: left;"><span style="color: blue;">Reuse</span></h3></div><div>SOA is about reuse. In a&nbsp;classical&nbsp;SOA there often are a number of small, reusable "technical" services that are then reused to compose bigger "business services". Examples include some service to handle asynchronous interaction in a generic way, and a service that retrieves some list of values from a database. We made them to speed up the development process, because creating the next application takes less time by reusing the services we created for the previous one.&nbsp;</div><div><br /></div><div>Everybody happy, until a new requirement makes we have to change the generic service with potential impact on all existing applications using it. If you are lucky some regression test suite is available to verify that the existing functionality keeps on working, but even then you may find that people don't feel comfortable unless all the other applications have been retested as well. You then may come to a point where you start wondering if all that reuse was such a great idea.</div><div><br /></div><div>Much more than classical SOA, MicroServices are about minimal function services build around <i>business capabilities</i> (not necessarily 'fine-grained'), where reuse is even discouraged if that introduces dependencies that may jeopardize business agility. There obviously is reuse with MicroServices (a reusable printing service provides a sensible business capability), but you should for example avoid shared custom Java libraries that are deployed independently. Also in a classical SOA you can avoid this by making sure that you package a specific version of the library with the service so that it will never be impacted by any change unless you want it to.<br /><br />In general, compared to classical SOA, applying MicroServices principles will make you start thinking differently about the responsibility, and granularity of services. Again, this may come with a price as some functionality may have to be duplicated to support business agility.<br /><br /><h3 style="text-align: left;"><span style="color: blue;">Data Services vs Data Replication</span></h3></div><div>In a classical SOA we may not think for a second before deciding we need a (reusable) data service to get customer data. When reading about MicroServices you will find that the (already classical) example of a bad practice is having some sort of a CustomerDataService that may fail, and with that result in the failure of an OrderService to complete successfully.<br /><div><br /></div>It is for this reason that the <a href="https://martinfowler.com/articles/microservices.html#DesignForFailure">Design for Failure</a> principle implies that a MicroService should have its own data store when possible, and may have its own copy of shared business data like customer data. In this way the successful completion of the OrderService is never dependent on some CustomerDataService to be available. Data is synchronized when necessary and feasible.</div><div><br /></div><div>You may already have realized that this is a specialization of the reuse issue addressed in the previous section. You will also realize that this is one of the more, if not most complex challenges to address, and the choice to replicate data is not be an easy decision to make.</div><div><br /></div><div><h3 style="text-align: left;"><span style="color: blue;">HTTP vs REST</span></h3>The interface of MicroServices should be simple, which almost de facto seems to imply REST (over HTTP) and JSON. With classical SOA this typically is SOAP and XML, although by no means you are limited to that. For a while already we start seeing more and more SOA services with REST interfaces.</div><div><br /></div><h3 style="text-align: left;"><span style="color: blue;">Multiple vs Single&nbsp;Containers</span></h3><div>With classical SOA many services will be deployed on the same SOA container, all sharing the same infrastructure (data sources, messaging, Operations tooling, etc.) that the container provides. Reuse of that infrastructure being the reason to do so.<br /><br />However, as a result, one single service behaving badly can impact all other services on the same container. I have seen cases where a single failing service brought down the complete container. One of the reasons to deploy every version of a MicroService in its own container is to prevent this type of issues. In this way it can be scaled, improved, and fixed without affecting any other MicroService.&nbsp;</div><div><br /></div><div><h3 style="text-align: left;"><span style="color: blue;">Choreography</span></h3>As I explain in my&nbsp;<a href="http://kettenisblogs.blogspot.be/2017/03/are-microservices-death-of-bpm-and-case.html">previous posting about MicroServices</a>, there can be quite a few challenges to overcome when business functionality has to be supported by a set of MicroServices working together. Quite a few of those you could be avoided or addressed much more easily when all services would be deployed on the same container (which in a classical SOA is more or less the default), in particular related to monitoring and Operations.<br /><br />If there is any area in which MicroServices could quickly start adding value to a classical SOA, then it is by orchestrating MicroServices (instead of classical SOA services) in case of Business Process Management or Case Management. Compared to classical SOA, what you will get "for free" is that the cluttering of the orchestration by technical aspects will be kept to the minimum (if existing at all) as you will be orchestrating business functions with (mostly) business-oriented interfaces.<br /><br /><h3 style="text-align: left;"><span style="color: blue;">Technology Choices</span></h3></div><div>With classical SOA the technology is limited to what the SOA container supports. For example, in case of Oracle you primarily implement your services using BPEL, Mediator or BPMN, simply because that is the easiest to do. Of course there can be good arguments for restricting the technologies used (even in a MicroServices environment you might want to have guidelines on that) but in practice you may find that this does not always result in the best designed, constructed, and operating service. If all you have is a hammer...</div><div><br /></div><div><div>In contrast, MicroServices are polyglot regarding technology, where for each individual MicroService you will use the technology that is best suited considering the functionality you have to provide and the skills present in the team. Different types of MicroServices may have a complete different way of implementation, and using a complete different set of technologies. However, except for the interface, the technology used is completely transparent for the consumer.&nbsp;</div><div><br /></div></div><div><h3 style="text-align: left;"><span style="color: blue;">Message Transformation</span></h3>Another MicroServices principle is <a href="https://martinfowler.com/articles/microservices.html#SmartEndpointsAndDumbPipes">smart endpoints / dumb pipes</a>, meaning that there is no transformation or enrichment happening in some Enterprise Service Bus. If an ESB is used then that is limited to routing and perhaps as a layer for enforcing security. In a classical SOA architecture transformation and some types of enrichment is typically done in the Service Bus.<br /><ul style="text-align: left;"></ul><h3 style="text-align: left;"><span style="color: blue;">Some Misconceptions About MicroServices</span></h3>Finally I would like to address some of the misconceptions I hear and read about MicroServices:<br /><ul style="text-align: left;"><li><b>DevOps implies MicroServices</b>. It's more the other way around. DevOps is about culture and shared responsibility for the operation of one application. That can also be applied to many other architectures.</li><li><b>SOA is not MicroServices</b>. Many see MicroServices is a sub-domain of SOA. As&nbsp;<a href="https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa">James Lewis and Martin Fowler state</a>,&nbsp;some consider MicroServices as SOA done right.</li><li><b>There is no use for a Enterprise Service Bus</b> in a MicroService architecture. Well, you may still need the routing and security features it can offer (see also the section Message Transformation above). Perhaps not the traditional Enterprise Service Bus as we know it, but more something that you could call a "Business&nbsp;Event Bus".</li></ul></div></div> Jan Kettenis tag:blogger.com,1999:blog-33270406.post-8565307701817976521 Mon Feb 05 2018 11:54:00 GMT-0500 (EST) Start/Stop Extract/Replicat with REST API/JSON https://dbasolved.com/2018/02/04/start-stop-extract-replicat-with-rest-api-json/ <p dir="auto">Oracle GoldenGate Microservices Architecture is designed to allow the user to have three different ways of interacting with replication from anywhere. One of these approaches is to use the RESTful APIs that come bundled with release. By using RESTful APIs, an organization can orgistrate how they want GoldenGate to work within their environment.</p> <p dir="auto">In this post, you will take a look at how to start a pre-existing extract/replicat by using the RESTful API end points. To find more information on the APIs that are avaliable, please refere to the Oracle docs located <a href="https://docs.oracle.com/goldengate/c1230/gg-winux/OGGRA/toc.htm" target="_blank" rel="noopener">here</a>.</p> <p dir="auto">If you have an existing extract/replicat in a down or pending status, then you can start it using a JSON file and the associated RESTful API end point.</p> <p><img class="aligncenter" src="https://curtisbl.files.wordpress.com/2018/02/start_stop_er1.jpg?w=597&#038;h=230" width="597" height="230" align="middle" /></p> <p dir="auto">Now the image above shows you that the extract is stopped. To start the extract using RESTful API, you will need a JSON file that contains the following:</p> <pre class="brush: css; title: ; notranslate"> { &quot;$schema&quot;:&quot;ogg:command&quot;, &quot;name&quot;:&quot;start&quot;, &quot;processName&quot;:&quot;IEXTSOE&quot;, &quot;processType&quot;:&quot;extract&quot; } </pre> <p dir="auto">Then from the command line, you can use cURL or some other method that accepts RESTful API calls to start the extract.</p> <pre class="brush: css; title: ; notranslate"> curl -u oggadmin:******** -H &quot;Content-Type: application/json&quot; -H &quot;Accept: application/json&quot; -X POST http://http://localhost:16001/services/v2/commands/execute&quot; -d @start_extracts.json | python -mjson.tool </pre> <p dir="auto">Upon execution of the cURL command, you receive a status response on the command line in JSON output. This response shows you that the extract is starting and started.</p> <pre class="brush: css; title: ; notranslate"> { &quot;$schema&quot;: &quot;api:standardResponse&quot;, &quot;links&quot;: [ { &quot;href&quot;: &quot;http://localhost:16001/services/v2/commands/execute&quot;, &quot;mediaType&quot;: &quot;application/json&quot;, &quot;rel&quot;: &quot;canonical&quot; }, { &quot;href&quot;: &quot;http://localhost:16001/services/v2/commands/execute&quot;, &quot;mediaType&quot;: &quot;application/json&quot;, &quot;rel&quot;: &quot;self&quot; } ], &quot;messages&quot;: [ { &quot;$schema&quot;: &quot;ogg:message&quot;, &quot;code&quot;: &quot;OGG-00975&quot;, &quot;issued&quot;: &quot;2018-02-05T03:27:17Z&quot;, &quot;severity&quot;: &quot;INFO&quot;, &quot;title&quot;: &quot;EXTRACT IEXTSOE starting&quot;, &quot;type&quot;: &quot;http://docs.oracle.com/goldengate/c1230/gg-winux/GMESG/oggus.htm#OGG-00975&quot; }, { &quot;$schema&quot;: &quot;ogg:message&quot;, &quot;code&quot;: &quot;OGG-15426&quot;, &quot;issued&quot;: &quot;2018-02-05T03:27:17Z&quot;, &quot;severity&quot;: &quot;INFO&quot;, &quot;title&quot;: &quot;EXTRACT IEXTSOE started&quot;, &quot;type&quot;: &quot;http://docs.oracle.com/goldengate/c1230/gg-winux/GMESG/oggus.htm#OGG-15426&quot; } ] } </pre> <p dir="ltr"> When you go back to the web page for the Administration Service, you see that the extract has been started.</p> <p>&nbsp;</p> <p><img class="aligncenter" src="https://curtisbl.files.wordpress.com/2018/02/start_stop_er2.jpg?w=707&#038;h=254" width="707" height="254" align="middle" /></p> <p dir="ltr">This same process can be used when you want to start/stop an replicat.</p> <p dir="ltr">Enjoy!!</p> Bobby Curtis http://dbasolved.com/?p=1829 Sun Feb 04 2018 23:23:32 GMT-0500 (EST) LEAP#376 Piezo Vibration Detector and BPM Counter https://blog.tardate.com/2018/02/leap376-piezo-vibration-detector-and-bpm-counter.html <p>I’m experimenting with some piezo transducers (sensors) to capture physical taps as a <strong>beats per minute</strong> measure with a microprocessor. All the filtering and debouncing of the raw piezo signal is done onboard the ATmega328 using a combination of:</p> <ul> <li>analog comparator interrupts</li> <li>filtering based on musical assumptions</li> <li>exponential averaging</li> </ul> <p>The result is a BPM between the <a href="https://www.youtube.com/watch?v=afhSDK5DJqA">threshold of the perceptual present</a> and <a href="https://www.youtube.com/watch?v=h3kqBX1j7f8">too fast to be useful</a>.</p> <p>As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/PiezoVibrationDetector/">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a> <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/PiezoVibrationDetector/"><img src="https://leap.tardate.com/playground/PiezoVibrationDetector/assets/PiezoVibrationDetector_build.jpg" alt="hero_image" /></a></p> https://blog.tardate.com/2018/02/leap376-piezo-vibration-detector-and-bpm-counter.html Sun Feb 04 2018 09:09:16 GMT-0500 (EST) Mac updates disaster (again) and a return to Windows desktop? http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/7s6ZsYH14c4/ <p><img class="alignleft wp-image-7069" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/frog-48234_640.png" alt="" width="150" height="162" />A couple of nights ago I tweeted about my MacBook Pro being a brick after the latest updates were applied. It was totally unresponsive. The only thing that would work is the &#8220;Option&#8221; key at boot to alter the boot order.</p> <p>This is not the first time this has happened to me, and not just on this machine. I think in total I&#8217;ve had to restore the entire OS from TimeMachine three times. Once on a previous MBP and twice on the latest one. Twice it was after updates and once because it just stopped working and I never found out why.</p> <p>Being a DBA, backups are my thing, so I have a TimeMachine partition on my NAS, as well as manual backups for some of the important things, which in turn get pushed up to an AWS bucket. For good measure I also have an external drive with some backups on, because it always pays to be prepared. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Due to past issues I always keep a Mac Recovery USB Drive waiting to go. This is how I recovered from the latest issue. The recovery took 6+ hours, then it took about 30+ minutes to apply the update that started all this fiasco. So I now have a patched and working MBP again, for now&#8230;</p> <p>I also mentioned on Twitter I might be moving back to Windows for my main desktop, possibly even installing it on the MBP. That prompted a few comments, so I figured I would mention my current opinions on the top-3 Operating Systems, from a *desktop perspective*.</p> <h2>macOS</h2> <p>I bought my first MacBook Pro in 2009 and have used one as my travel machine since then. About 2.5 years ago I bought a 15&#8243; retina, which became my home desktop machine, and travel laptop combined. The 2009 13&#8243; MBP is next to my bed, used every day as my Netflix machine. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I was convinced to give Macs a go because loads of people at conferences kept telling me how good macOS was. It&#8217;s over 8 years, but I&#8217;m still waiting to fall in love with it. This seems to have happened for other people instantly, but I just don&#8217;t see the major appeal.</p> <p>I still find it annoying how little support there is for Macs from software companies. Most of what I want to do it fine, but every now and then I want to try something and it&#8217;s not supported on Mac, or I&#8217;ve got to wait a few months for the Mac version to be released. It&#8217;s still a Windows world, so I&#8217;m still using Windows VMs occasionally.</p> <p>The only really positive thing I can say is I like the build quality of the case, but after my <a href="https://9to5mac.com/2017/02/24/retina-macbook-display-staingate/">Staingate</a> issue and a problem with the fan I had in the first few weeks of the latest machine, I&#8217;m not sure the build quality is quite what it was when I bought my first MBP.</p> <h2>Linux</h2> <p>I first used Linux in the RedHat 5.1 days (not RHEL), which <a href="https://en.wikipedia.org/wiki/Red_Hat_Linux#Version_history">Wikipedia</a> tells me was 1998. At some point I ditched Windows at home and Red Hat Linux became my main desktop. I can&#8217;t remember which exact version I switched to, but I&#8217;m thinking Red Hat Linux 8. When Red Hat Linux became <a href="https://en.wikipedia.org/wiki/Fedora_version_history#Version_history">Fedora</a> I made that move also. When I started to do presentations I bought a laptop which used Windows Vista, which wasn&#8217;t as bad as people made out. Later on I switched to a MacBook Pro, but Fedora was my main desktop OS until about 2.5 years ago. Once again, I can&#8217;t remember the exact version, but it was one of the 20&#8217;s. Somewhere between Fedora 21 and 23 at a guess. Since moving away from a Linux desktop I have kept up with Fedora for every release, but it&#8217;s not been a 100% desktop for me.</p> <p>I learned a lot by using Linux as my desktop, but I spent a lot of time trying to get round device compatibility issues, or get what felt like part-finished software to work. I was forever having to use Wine or Mono to run additional software because the Linux support didn&#8217;t exist, or didn&#8217;t really work properly. I was also having to use a Windows VM to run some software I needed for my business. Like I said, great learning experience, but hardly what I would call an efficient use of time for a regular user.</p> <p>Someone on Twitter asked me what I wanted from a Linux desktop and I said,</p> <blockquote><p>&#8220;Support for all apps I want to use and devices, without having to do weekend projects to fix problems&#8230;&#8221;</p></blockquote> <p><a href="https://twitter.com/PerlDBA">Jared Still</a> commented,</p> <blockquote><p>&#8220;Twice I have made serious attempts to use Linux on a laptop. It is just too fiddly; every time something New needs to be done it is a new project. All my Databases run on Linux, I do dev on Linux, but it was just too much trouble for many common tasks.&#8221;</p></blockquote> <p>I agree. I am a total devotee of Linux on the server, but using Linux on the desktop is not a viable option for me. Been there. Done it for a lot of years. Moved on!</p> <h2>Windows</h2> <p>I wrote my PhD thesis on Microsoft Word using Windows 3.11. At every job I&#8217;ve ever had, Windows has been my main desktop OS, so I&#8217;ve lived through all the versions since Windows 3.11. Even when I switched to Linux at home, I was using Windows at work, and supporting family members using Windows. My work desktop still uses Windows 7, but as of next week it will be Windows 10. My family used Windows 8.0, then 8.1 and now Windows 10. Like most IT people, I have to support family PCs, so it was me who did the upgrades and I&#8217;ve used these versions a lot. I&#8217;m doing the last minute checks to this post on my brother&#8217;s Windows 10 laptop.</p> <p>Windows is far from perfect, but if you&#8217;ve not been using it regularly for the last few years, I think you might be surprised. I like Windows 10.</p> <h2>Conclusion</h2> <p>I think my next move will be Windows.</p> <p>I have a long history of all three operating systems, so it&#8217;s not like I&#8217;m going into this blind. I think I probably have a better grounding in all three than most of the people who are trying to push their preference on me. <img src="https://s.w.org/images/core/emoji/2.4/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Most of the time I am in a shell or a browser, so I can work OK on all three operating systems without much trouble, but it&#8217;s when I want to go off piste the differences start to become evident.</p> <p>You don&#8217;t have to agree with me. My choice does not mean your choice is wrong. Likewise, your choice doesn&#8217;t mean my choice is wrong.</p> <p>Cheers</p<p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2018/02/04/mac-updates-disaster-again-and-a-return-to-windows-desktop/">Mac updates disaster (again) and a return to Windows desktop?</a> was first posted on February 4, 2018 at 1:42 pm.<br />©2012 "<a href="http://www.oracle-base.com/blog">The ORACLE-BASE Blog</a>". Use of this feed is for personal non-commercial use only. If you are not reading this article in your feed reader, then the site is guilty of copyright infringement.<br /><img src="http://feeds.feedburner.com/~r/TheOracleBaseBlog/~4/7s6ZsYH14c4" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7854 Sun Feb 04 2018 07:42:23 GMT-0500 (EST) ORA-01203: Wrong Incarnation http://oracle-help.com/ora-errors/ora-01203-wrong-incarnation/ <p>I came to the problem that data file with tablespace ended up in broken state. But the tablespace has no crucial data for me so I decided just to remove it and keep on moving.</p><pre class="crayon-plain-tag">SQL&gt; alter database open; alter database open * ERROR at line 1: ORA-01122: database file 4 failed verification check ORA-01110: data file 4: '+data/ORCL/undotbs2231.dbf' ORA-01203: wrong incarnation of this file - wrong creation SCN</pre><p></p> <h3>SOLUTION:</h3> <p>To fix this, either you have to restore that datafile from latest backup or drop the datafile if it doesn’t contain any valuable data.</p> <p>In my case, the issue was with undo datafile, so I dropped the same.</p><pre class="crayon-plain-tag">SQL&gt; alter database datafile '+data/ORCL/undotbs2231.dbf' offline drop; Database altered. SQL&gt; alter database open; Database altered.</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/ora-errors/ora-01203-wrong-incarnation/">ORA-01203: Wrong Incarnation</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3308 Sun Feb 04 2018 01:42:40 GMT-0500 (EST) ORA-65500: Could Not Modify DB_UNIQUE_NAME http://oracle-help.com/ora-errors/ora-65500-could-not-modify-db_unique_name/ <p>When you create a database in <strong>12C</strong> it now creates a resource in <strong>HAS/</strong> <strong>CRS</strong>, which isn’t a problem.</p> <p>While duplicating a database using RMAN active cloning in RAC database, got below error.(<strong>ORA-65500</strong>)</p> <p>However, when you come to recreate a standby database, probably because it has got such a big lag that it is quicker to recreate than recovering the log files, then you will see the following error message:-</p><pre class="crayon-plain-tag">RMAN-03015: error occurred in stored script Memory Script RMAN-03009: failure of sql command on clone_default channel at 1/02/2018 11:41:23 RMAN-11003: failure during parse/execution of SQL statement: alter system set db_unique_name = 'ORCL' comment= 'Modified by RMAN duplicate' scope=spfile ORA-32017: failure in updating SPFILE ORA-65500: could not modify DB_UNIQUE_NAME, resource exists</pre><p></p> <h3>SOLUTION:</h3> <p>If you are creating a RAC auxiliary, then it must be created as a single instance (with RMAN) first, then converted to RAC.</p><pre class="crayon-plain-tag">1. set<strong> cluster_database=FALSE</strong> in the auxiliary database parameter file 2. Remove database resource from CRS srvctl remove database -d ORCL</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/ora-errors/ora-65500-could-not-modify-db_unique_name/">ORA-65500: Could Not Modify DB_UNIQUE_NAME</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3303 Sun Feb 04 2018 01:32:48 GMT-0500 (EST) ORA-65049: Creation Of Local User Not Allowed http://oracle-help.com/ora-errors/ora-65049-creation-of-local-user-not-allowed/ <p><strong>This error usually occurs due to we are trying to create user ( common user ) under root container. In oracle 12c there is two type of users: common user and local user.</strong></p> <p>oerr ora 65096<br /> 65096, 00000, &#8220;invalid common user or role name&#8221;<br /> // *Cause:  An attempt was made to create a common user or role with a name<br /> //          that was not valid for common users or roles.  In addition to<br /> //          the usual rules for user and role names, common user and role<br /> //          names must start with C## or c## and consist only of ASCII<br /> //          characters.<br /> // *Action: Specify a valid common user or role name.<br /> //</p> <p>PROBLEM:<br /> While creating a user in root container in the multi-tenant database, Got error ORA-65049.</p><pre class="crayon-plain-tag">SQL&gt; show con_name CON_NAME —————————— CDB$ROOT SQL&gt; create user USER1 identified by USER1 container=current; create user USER1 identified by USER1 container=current * ERROR at line 1: ORA-65049: creation of local user or role is not allowed in CDB$ROOT</pre><p><strong>If you wish to create a common user under CDB$ROOT than create user start with C## and c##, as follows:</strong><br /> Note:</p> <ul> <li>Common user will be created under root container only.</li> <li>A current container must be set to CDB$ROOT.</li> </ul> <p></p><pre class="crayon-plain-tag">SQL&gt; create user C##USER1 identified by password; User created.</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/ora-errors/ora-65049-creation-of-local-user-not-allowed/">ORA-65049: Creation Of Local User Not Allowed</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3300 Sun Feb 04 2018 01:29:29 GMT-0500 (EST) ORA-65096: Invalid Common http://oracle-help.com/ora-errors/ora-65096-invalid-common/ <p>We have to user the prefix by adding “C##” or “c##” before the username in container database.</p> <p style="padding-left: 30px;">Error report &#8211;<br /> SQL Error: ORA-65096: invalid common user or role name<br /> 65096. 00000 &#8211; &#8220;invalid common user or role name&#8221;<br /> *Cause: An attempt was made to create a common user or role with a name<br /> that was not valid for common users or roles. In addition to<br /> the usual rules for user and role names, common user and role<br /> names must start with C## or c## and consist only of ASCII<br /> characters.<br /> *Action: Specify a valid common user or role name.</p> <p></p><pre class="crayon-plain-tag">SQL&gt; show con_name CON_NAME —————————- CDB$ROOT SQL&gt; create user USER1 identified by USER1; create user USER1 identified by USER1 * ERROR at line 1: ORA-65096: invalid common user or role name</pre><p></p> <h3>SOLUTION:</h3> <p><strong>If you wish to create a common user under CDB$ROOT than create user start with C## and c##, as follows:</strong><br /> Note:</p> <ul> <li>Common user will be created under root container only.</li> <li>A current container must be set to CDB$ROOT.</li> </ul> <p></p><pre class="crayon-plain-tag">SQL&gt; show con_name CON_NAME ------------------------------ CDB$ROOT SQL&gt; create user c##USER1  identified by USER1; User created.</pre><p>Thank you for giving your valuable time to read the above information.</p> <p><span class="s1">If you want to be updated with all our articles s</span>end us the Invitation or Follow us:</p> <p><span class="s1"><span class="s2"><strong>Skant Gupta’s</strong> LinkedIn: <a class="jive-link-external-small" href="http://www.linkedin.com/in/skantali/" rel="nofollow">www.linkedin.com/in/skantali/</a></span></span></p> <p class="p4"><span class="s1"><strong>Joel Perez’s</strong> LinkedIn: <a href="http://www.linkedin.com/in/SirDBaaSJoelPerez"><strong>Joel Perez’s Profile</strong></a></span></p> <p><strong>Anuradha’s </strong><span class="s1">LinkedIn: <strong><a href="https://www.linkedin.com/in/dbaanuradhamudgal/">Anuradha’s Profile</a></strong></span></p> <p>LinkedIn Group: <em><strong><a class="js-entity-name entity-name" href="https://www.linkedin.com/groups/12065270" data-app-link="">Oracle Cloud DBAAS</a></strong></em></p> <p>Facebook Page: <em><strong><a href="https://www.facebook.com/oraclehelp">OracleHelp</a></strong></em></p> <p>The post <a rel="nofollow" href="http://oracle-help.com/ora-errors/ora-65096-invalid-common/">ORA-65096: Invalid Common</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3296 Sun Feb 04 2018 01:23:15 GMT-0500 (EST) ORA-32001: Write To SPFILE Requested But No SPFILE Is In Use http://oracle-help.com/articles/ora-32001-write-spfile-requested-no-spfile-use/ <h3></h3> <h3>PROBLEM:</h3> <p>While altering parameter in parameter file got below error.</p> <p>ALTER SYSTEM SET processes = 900 SCOPE=SPFILE;</p> <p>ALTER SYSTEM SET processes = 900 SCOPE=SPFILE<br /> *<br /> ERROR at line 1:<br /> ORA-32001: write to SPFILE requested but no SPFILE is in use</p> <h3>SOLUTION:</h3> <p>This error comes, if the database is running with pfile instead of spfile.</p> <p><strong>1. Check whether DB is running with pfile or spfile:</strong></p> <p>&nbsp;</p> <p>SQL&gt; show parameter pfile</p> <p>NAME TYPE VALUE<br /> &#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> spfile string</p> <p>&nbsp;</p> <p>Here value is showing BLANK, Means database is running with pfile. So with pfile , if we are trying to alter any init parameter in database, it will throw error.</p> <p>To fix it, create an spfile from the pfile and restart the database.</p> <p><strong>2. Create spfile from pfile;</strong></p> <p><span class="crayon-e">create </span><span class="crayon-e">spfile </span><span class="crayon-e">from </span><span class="crayon-v">pfile</span><span class="crayon-sy">;</span></p> <p><strong>3. Check whether spfile has been created in $ORACLE_HOME/dbs location:</strong></p> <p>cd $ORACLE_HOME/dbs<br /> ls -ltr spfile*</p> <p><strong>4. Restart the database</strong></p> <div id="crayon-5a7550d89b9f6502320034-3" class="crayon-line"><span class="crayon-e">shutdown </span><span class="crayon-v">immediate</span><span class="crayon-sy">;</span></div> <div id="crayon-5a7550d89b9f6502320034-4" class="crayon-line crayon-striped-line"><span class="crayon-i">startup</span></div> <div>When we start the database, if both pfile(init$ORACLE_SID.ora) and spfile(spfile$ORACLE_SID.ora) are present at dbs location, Then bydefault spfile will be used for db startup.</div> <div><strong>5. Check whether spfile is used or not:</strong></div> <div>show parameter pfile</p> <p>NAME TYPE VALUE<br /> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> spfile string /oracle/app/oracle/product/12chome/spfiledbaclass.ora</p></div> <div></div> <div></div> <div><strong>6. Now run alter statement:</strong></div> <div>ALTER SYSTEM SET processes = 900 SCOPE=SPFILE</p> <p>System altered.</p></div> <p>The post <a rel="nofollow" href="http://oracle-help.com/articles/ora-32001-write-spfile-requested-no-spfile-use/">ORA-32001: Write To SPFILE Requested But No SPFILE Is In Use</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3289 Sat Feb 03 2018 01:15:26 GMT-0500 (EST) ORA-1495 :Specified Chained Row Table Not Found http://oracle-help.com/articles/ora-1495-specified-chained-row-table-not-found/ <h3>PROBLEM:</h3> <p>While analyzing the table for chained rows, got an error. ORA-1495</p> <p>ANALYZE TABLE SCOTT.EMPTAB LIST CHAINED ROWS;<br /> *<br /> ORA-1495 specified chained row table not found</p> <h3>SOLUTION:</h3> <p>To fix it run the utlchain.sql script.</p> <p>sqlplus / as sysdba<br /> $ORACLE_HOME/rdbms/admin/utlchain.sql script</p> <p>After that</p> <p>TRUNCATE TABLE CHAINED_ROWS;<br /> ANALYZE TABLE SCOTT.EMPTAB LIST CHAINED ROWS;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/articles/ora-1495-specified-chained-row-table-not-found/">ORA-1495 :Specified Chained Row Table Not Found</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3285 Sat Feb 03 2018 01:04:12 GMT-0500 (EST) एक और उत्तर http://ezsaid.blogspot.com/2018/02/blog-post.html ashish tag:blogger.com,1999:blog-14142302.post-6304708581421970859 Fri Feb 02 2018 12:41:00 GMT-0500 (EST) Streaming Oracle to Kafka – Stories from the Message Bus Stop https://blog.pythian.com/streaming-oracle-kafka-stories-message-bus-stop/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Fascinated by streaming data pipelines, I have been looking at different ways to get data out of a relational database like Oracle and into Apache Kafka. I have presented about this topic at a number of conferences. There is a recording of the session from Oracle Code San Francisco during the week of OpenWorld 2017 together with <a href="http://redpillanalytics.com/author/stewartbryson/">Stewart Bryson</a>.</p> <p><iframe class='youtube-player' type='text/html' width='560' height='315' src='https://www.youtube.com/embed/mFxb6WkBRqo?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe></p> <p>The session is an easy introduction to kafka and event streaming for DBAs followed by more detailed explanations and demos of different methods to connect oracle to kafka:</p> <ul> <li>Kafka Connect JDBC</li> <li>Poor Man&#8217;s CDC with flashback query</li> <li>Dbvisit Replicate pureflow</li> <li>Oracle GoldenGate for Big Data</li> </ul> <p>I have recently built a new session on top of this one where we explore streaming ETL with KSQL to perform aggregates and roll-ups on the fly and join streams from different sources together.</p> </div></div> Bjoern Rost https://blog.pythian.com/?p=103343 Fri Feb 02 2018 11:04:05 GMT-0500 (EST) JET 4.1 : How to Setup a Functional Application Architecture http://lucbors.blogspot.com/2018/02/jet-41-how-to-setup-functional.html Luc Bors tag:blogger.com,1999:blog-29432516.post-6736168858564373854 Fri Feb 02 2018 09:16:00 GMT-0500 (EST) Diversity: Pursuing your Dreams https://blog.pythian.com/diversity-pursuing-dreams/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Seven months ago, I was fortunate to start a new career journey with Pythian. At first I found working in IT intimidating as I was working with such a wide variety of technical subject matter experts on a daily basis, however it wasn’t long until I started connecting with some of the best female consultants, database administrators, and team managers here at Pythian.</p> <p>Working with such a diverse field of experts here at Pythian, makes me feel empowered, and inspires me to continue my learning and career in the IT field. The diversity and inclusion at Pythian has allowed me to let go of all the doubts I had, boosted my confidence and re-triggered my dream of pursuing a technical career. The women and men I work with at Pythian are the reason my dreams are alive again! During my first month at Pythian, I decided to start using my Personal Development Benefits towards my ITIL certificate which I am happy to say is now in full swing! Every day I take small steps to advance my my technical career with the support of my team and colleagues here at Pythian.</p> <p>Last week, I had the opportunity to attend a “Diversity in Engineering and Technology” networking night held at the University of Carleton, representing Pythian. The event was designed to connect employers who are interested in a diverse and inclusive workforce with students from a range of under-represented groups studying Engineering, IT and Computer Science. It was an exciting opportunity to promote the diversity we experience here at Pythian and demonstrate to new graduates what a diverse culture looks like. New graduates can benefit from seeing what a diverse work culture looks like and the incredible opportunities waiting for them!</p> <div id="attachment_103351" style="max-width: 1090px" class="wp-caption alignnone"><img class="size-full wp-image-103351" src="https://blog.pythian.com/wp-content/uploads/Pythians-event.jpg" alt="" width="1080" height="1287" /><p class="wp-caption-text">Pythian at the Diversity in Technology and Engineering event</p></div> <p>It was an exciting event for me, as I had the chance to meet a variety of people from a variety of backgrounds. I had the pleasure of talking to a student who is finishing up her fourth year in Neuroscience, only to realize that she is interested in computer science after an elective she took. This showed me yet again that even though you may have started in a specific field, you may take that one course that inspires you to move in a different direction. This student is now signed up for a degree in computer science starting in the New Year. I saw my young self in her and it brought to light that most girls are potentially going through this. I encouraged her throughout our conversation and told her about my personal experience of moving into the IT field.I was extremely touched when she thanked me for the advice. After this conversation, I knew exactly why I was attending this event: to share my story about perseverance and the importance of diversity in all facets of your life.</p> <p>To further reiterate my sentiment, the keynote speaker Sashieka Seneviratne, a Hardware Design Engineer, and inspiring woman from Ericsson gave a very moving talk. She said “No one can define your potential; try and fail, cultivate a growth mindset, one open to failure and learning as it is the biggest barrier to diversity and inclusion.” Her speech was a great reminder to me that we may all fail at making the right decision sometimes but it should not stop us from pursuing a career we’re passionate about. Everyone who listened to her speech was captivated and realized that we are not alone in our continued search for finding our passion, and should not give in to feelings of rejection and self-doubt.</p> <p>I left the event motivated and inspired with a very important message to all underrepresented groups out there: that if you are feeling the same as you wade into the exciting but stressful waters of the technology world, always remember that if you think you can, or you think you can&#8217;t, you’re right.</p> </div></div> Marah Alasadi https://blog.pythian.com/?p=103349 Thu Feb 01 2018 16:48:50 GMT-0500 (EST) Log Buffer #538: A Carnival of the Vanities for DBAs https://blog.pythian.com/log-buffer-538-carnival-vanities-dbas/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>This Log Buffer covers blog posts from Cloud, Oracle, SQL Server, MySQL and PostgreSQL.</p> <p><span id="more-103354"></span></p> <p><strong>Cloud:</strong></p> <p>Finer-grained security using custom roles for <a href="https://cloudplatform.googleblog.com/2018/01/finer-grained-security-using-custom-roles-for-Cloud-IAM.html">Cloud</a> IAM</p> <p>Google Cloud Platform opens region in the <a href="https://cloudplatform.googleblog.com/2018/01/Google-Cloud-Platform-opens-region-in-the-Netherlands.html">Netherlands</a></p> <p>12 best practices for user <a href="https://cloudplatform.googleblog.com/2018/01/12-best-practices-for-user-account.html">account</a>, authorization and password management</p> <p>Invoking AWS Lambda from <a href="https://aws.amazon.com/blogs/compute/invoking-aws-lambda-from-amazon-mq/">Amazon</a> MQ</p> <p>Task Networking in <a href="https://aws.amazon.com/blogs/compute/task-networking-in-aws-fargate/">AWS</a> Fargate</p> <p><strong>Oracle:</strong></p> <p>Webserver Logfile Analysis with Oracle <a href="http://www.oracle-and-apex.com/webserver-logfile-analysis-with-oracle-apex/">APEX</a></p> <p><a href="https://prutser.wordpress.com/2018/01/31/oracle-solaris-11-4-public-beta-released/">Oracle</a> Solaris 11.4 Public Beta Released</p> <p><a href="http://kingsfleet.blogspot.com.au/2018/01/quick-debugger-tip-where-was-that-class.html">Quick</a> Debugger Tip, where was that class loaded from.</p> <p><a href="http://lucbors.blogspot.com/2018/01/jet-41-how-to-use-toastr-to-show-non.html">JET</a> 4.1 : How to use toastr to show non-blocking notifications</p> <p>Index <a href="https://richardfoote.wordpress.com/2018/01/30/index-skip-scan-potential-use-case-or-maybe-not-shine-on-you-crazy-diamond/">Skip</a> Scan: Potential Use Case or Maybe Not ? (Shine On You Crazy Diamond)</p> <p>All of Your <a href="https://www.thatjeffsmith.com/archive/2018/01/all-of-your-sql-developer-google-questions/">SQL</a> Developer Google Questions</p> <p><strong>SQL Server:</strong></p> <p>A <a href="https://tomroush.net/2017/12/19/a-ship-a-hairbrush-and-the-importance-of-having-a-plan-b/">ship</a>, a hairbrush, and the importance of having a Plan B</p> <p>Differentiation by Denny: <a href="https://www.dcac.co/case-studies/lcptracker">LCPtracker</a>’s Reporting Warehouse</p> <p>How to backup <a href="https://sqlbak.com/blog/how-to-backup-large-databases-recommendation/">large</a> databases. Recommendation.</p> <p>How to Upgrade <a href="http://www.sqlservercentral.com/articles/SQL+Server+Upgrade/130968/">SQL</a> Server</p> <p><a href="https://www.brentozar.com/archive/2018/01/scripting-tip-start-crediting-source/">Scripting</a> Tip: Start With Crediting Your Source</p> <p><strong>MySQL:</strong></p> <p>Aurora Hash <a href="https://www.percona.com/blog/2018/01/31/aurora-hash-join-optimization-a-gentle-reminder-on-lab-features/">Join</a> Optimization (with a Gentle Reminder on Lab Features)</p> <p>Choosing the best indexes for <a href="https://www.eversql.com/choosing-the-best-indexes-for-mysql-query-optimization/">MySQL</a> query optimization</p> <p>MySQL Connector/Java 8.0.9-rc has been released</p> <p>Partial <a href="http://mikaelronstrom.blogspot.com/2018/01/partial-lcp-in-mysql-cluster-764.html">LCP</a> in MySQL Cluster 7.6.4</p> <p>How To Achieve <a href="https://severalnines.com/blog/how-achieve-pci-compliance-mysql-mariadb-clustercontrol-webinar">PCI</a> Compliance for MySQL &amp; MariaDB with ClusterControl &#8211; The Replay</p> <p><strong>PostgreSQL:</strong></p> <p>Thanks to <a href="http://ardentperf.com">Jeremy Schneider</a> from Ardent Performance for PostgreSQL section.</p> <p>Before digging into the chatter of the week, lets get <a href="https://www.postgresql.org/about/news/1827/">announcements</a> out of the way. I think it&#8217;s worth mentioning the recent JDBC driver release because it brings support for the new postgresql 10 authentication method called SCRAM. Java-based applications can finally start testing this new protocol now.</p> <p>If I had to pick a dominant theme for the last two weeks, I&#8217;d probably choose partitioning and time-series data. First off, on Jan 20 <a href="https://joaodlf.com/postgresql-10-partitions-of-partitions.html">JoãoFerreira</a> published a short and widely-shared article pointing out a short sentence from the PostgreSQL 10 docs saying it supports not only partitions but also sub-partitions!</p> <p>But what I really noticed this week wasn&#8217;t just partitioning, it was one specific application of partitioning: time-series or log data. I<br /> personally helped stand up elasticsearch clusters at past jobs in order to analyze large volumes of logs from many machines. Within the past few months I&#8217;ve taken trace data and imported it into postgresql to have access to window functions and other useful features of SQL. And it&#8217;s not just me &#8211; a lot of people are talking about returning to relational systems with their time-series data.</p> <p>Want to see what this looks like in PostgreSQL? <a href="https://engineering.semantics3.com/partitioning-in-postgresql-161e52c367ba">Arpit Agarwal</a> wrote a great article on Jan 23 describing how they cut their Amazon RDS costs by 90% with PostgreSQL traditional (inheritance-based) partitioning and he even included code snippits to show exactly how they did it.</p> <p>On Jan 25, <a href="https://www.nextplatform.com/2018/01/25/time-time-series-databases/">Timothy Prickett Morgan</a> published an article on The Next Platform called It’s About Time For Time Series Databases. Seemed to me that there were a fair number of retweets on this piece about the new postgres-based TimescaleDB.</p> <p>But is TimescaleDB your only choice of specialized PostgreSQL extensions? Of course not! In fact, on Jan 24 <a href="https://www.citusdata.com/blog/2018/01/24/citus-and-pg-partman-creating-a-scalable-time-series-database-on-PostgreSQL/">Craig Kerstiens</a> from Citus wrote a great article about using their stalwart pg_partman extension for time-series data &#8211; which is even able to leverage PostgreSQL 10&#8217;s new native partitioning!</p> <p>So between all of this you can see why it felt like time-series was getting a little more discussion than usual. But the usual discussion topics continued at full steam too, such as the ever-present subject of indexes. There were quite a few really good articles worth highlighting.</p> <p>On Jan 25, <a href="https://rcoh.me/posts/postgres-indexes-under-the-hood/">Russell Cohen</a> dug into B-Tree implementation with his article Postgres Indexes Under the Hood.</p> <p>On Jan 18, <a href="http://askdba.org/weblog/2018/01/migrating-function-based-indexes-from-oracle-to-postgresql/">Amit Bansal</a> from askdba.org wrote what he learned while Migrating Function based indexes from Oracle to PostgreSQL.</p> <p>And <a href="https://medium.com/@Alibaba_Cloud/principles-and-applications-of-the-index-types-supported-by-postgresql-481f59bab67d">Alibaba Cloud</a> FTW with two articles: first, an excellent walk-through of 14 different indexing types and strategies in PostgreSQL! This is worth reading and bookmarking.</p> <p>Second, <a href="https://www.alibabacloud.com/blog/Full-text-Search-Index-Optimization---Alibaba-Cloud-RDS-PostgreSQL-Best-Practices_p339391">Alibaba</a> Cloud published an article talking about using indexes to tune queries with four specific examples.</p> <p>Ok, I&#8217;m just going to have to stop myself now. There are a lot more good articles I could pass along&#8230; but it would be too much for one week! So I&#8217;ll leave you with two final articles.</p> <p>The big talker on Jan 30 was <a href="https://rhaas.blogspot.co.uk/2018/01/do-or-undo-there-is-no-vacuum.html">Robert Haas</a> disclosure that EnterpriseDB has evidently been working on adding a whole new MVCC mechanism to PostgreSQL &#8211; namely, using undo. His article &#8220;DO or UNDO &#8211; there is no VACUUM&#8221; is sure to generate lots of discussion.</p> <p>And finally, we&#8217;ve been following <a href="http://www.jk-consult.nl/why-i-picked-postgres-over-oracle-part-iii/">Jan Karremans</a> last two articles about his personal journey from Oracle to PostgreSQL. On Jan 27 he published his third and final chapter, where he talks more on what PostgreSQL actually is and why it attracted him. If you&#8217;ve been following along then you can now hear the rest of the story!</p> <p>There is a lot more, but I&#8217;ll stop here. Have a great week and keep learning!!</p> </div></div> Fahd Mirza https://blog.pythian.com/?p=103354 Thu Feb 01 2018 16:38:59 GMT-0500 (EST) A Google Cloud Platform in Montreal is good for all of Canada https://blog.pythian.com/google-cloud-platform-montreal-good-canada/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p><span style="font-weight: 400;">The opening of the new Google Cloud Platform (GCP) region in Montreal is huge for Canada. </span></p> <p><span style="font-weight: 400;">Being closer to the cloud will give Canadian businesses powerful performance gains. But more importantly, it will also give our country a strategic foundation to stand out and lead in the global data economy.</span></p> <p><span style="font-weight: 400;">Data is the new oil. It’s a resource of massive value. Nearly every business and person on the planet depends on it in some form or other. </span></p> <p><span style="font-weight: 400;">Like oil, data exists in an environment, and that’s the cloud. (Yes, there are other data environments, but the cloud is the way of the future, period.) With this new Google cloud region, Canadian companies will have even more capacity to mine, manage, and monetize their ‘data oil’.</span></p> <p><span style="font-weight: 400;">This is key, because </span><i><span style="font-weight: 400;">unlike</span></i><span style="font-weight: 400;"> oil, data is highly mobile. It can live anywhere. The cloud can be anywhere. But real-world factors like regulations and legislation—and the laws of physics—give an edge to places that have the cloud hosted on their own soil.</span></p> <h5>GCP gives Canada a leg up</h5> <p><span style="font-weight: 400;">What advantages does Canada gain with Google’s new GCP region in Montreal?</span></p> <ol> <li style="font-weight: 400;"><b>Speed.</b><span style="font-weight: 400;"><span style="font-weight: 400;"><span style="font-weight: 400;"> Google has said applications hosted in the new region could have up to 90 percent less latency for local users compared to the next-closest region. Companies can build and run applications faster, with better response times, both of which convert into competitive advantage.</span></span></span></li> <li style="font-weight: 400;"><b>Data sovereignty.</b><span style="font-weight: 400;"> This is becoming a major issue for organizations and governments worldwide. (Check out this </span><a href="https://www.thestar.com/business/2017/09/29/canada-urged-to-do-more-to-protect-data-from-us-during-nafta-talks.html"><i><span style="font-weight: 400;">Toronto Star </span></i><span style="font-weight: 400;">article</span></a><span style="font-weight: 400;"> that quotes Pythian Senior VP, Keith Millar, on the sovereignty issue and its implications.) To reinforce the point, have a look at </span><a href="https://www.thestar.com/opinion/contributors/2018/01/30/jim-balsillie-canada-needs-a-national-data-strategy.html"><span style="font-weight: 400;">this op-ed</span></a><span style="font-weight: 400;"><span style="font-weight: 400;"><span style="font-weight: 400;"> by Jim Balsillie on the necessity of Canada to establish a data strategy—let’s just say that all of this hinges on our ability to host that data in Canada.  Organizations are often required by law to store data on native soil for privacy and security—and the volumes can quickly add up. Google is demonstrating a real commitment to helping Canadian businesses meet their compliance needs with its new Montreal data center.</span></span></span></li> <li style="font-weight: 400;"><b>Opportunity.</b><span style="font-weight: 400;"> Because data and application performance get better the closer you are to where processing happens, organizations around the world that want to do business in North America need a footprint on this continent. The new Google Cloud Platform region positions Canada to be a potential home for that data. In particular, European entities looking for a base of operations in North America may prefer Canada to the U.S. because our overall regulatory regime is more compatible and aligned with their requirements.</span></li> </ol> <h5><span style="font-weight: 400;">Google is invested in Canada’s future</span></h5> <p><span style="font-weight: 400;">Google has been building its presence in Canada for more than a decade. The company continues to grow its teams to support Canadian businesses’ forays into the cloud, and now it’s made Montreal one of just 15 Google Cloud Platform regions in the world—the first in this country.</span></p> <p><span style="font-weight: 400;">We love working with Google at Pythian because their eyes are always on the future. Take artificial intelligence and machine learning, which are going to transform how people do everything from agriculture to manufacturing. The cloud is essential to putting those technologies into play and Google knows it. What else could handle data from thousands of sensors that are tracking millions of measurements and feeding algorithms that predict equipment failures before they happen or analyze behavior patterns to provide more personal shopping experiences? You can’t. It takes the cloud.</span></p> <p><span style="font-weight: 400;">And it will take the cloud to fully deliver the benefits of technological advances in areas like renewable energy, which aren’t just about the future of technology but the future of our planet.</span></p> <h5><span style="font-weight: 400;">Taking Canada full-on into the cloud</span></h5> <p><span style="font-weight: 400;">With the GCP coming to Montreal, Canada is positioned better than ever to make that future come true. Our team can’t wait to help make it happen. We’re a Google Cloud Platform Premier partner with Specialization in Data Analytics and more than 40 experts certified on GCP. In the past three years, we’ve had a hand in a number of Google Cloud service launches. And we’re completely focused on optimizing technology to maximize companies’ business outcomes. </span></p> <p><span style="font-weight: 400;">Companies of all stripes are focusing their data strategies on the cloud: not just the ones that have sprung up in the cloud era but those that have been around for years, too. With the explosion of data everywhere, they need the cloud (and specifically “big cloud”) to really harness the value of their data—their ‘oil’.</span></p> <p><span style="font-weight: 400;">The keys to cloud success are high availability, performance, security, and cost-effective pricing. As a data-centric company for more than 20 years, we’ve built up our capabilities to help companies realize those benefits. And we’re going to keep on doing so.</span></p> <p><span style="font-weight: 400;">Welcome to Montreal, Google.</span></p> <p><img class="size-full wp-image-103357 aligncenter" src="https://blog.pythian.com/wp-content/uploads/GooglePanel.jpg" alt="" width="384" height="512" srcset="https://blog.pythian.com/wp-content/uploads/GooglePanel.jpg 384w, https://blog.pythian.com/wp-content/uploads/GooglePanel-350x467.jpg 350w" sizes="(max-width: 384px) 100vw, 384px" /></p> <hr /> <p><a href="https://pythian.com/google-cloud-platform/"><span style="font-weight: 400;"><br /> </span></a><b><a href="https://pythian.com/google-cloud-platform/">LEARN MORE</a> about Pythian Services for Google Cloud Platform. </b></p> </div></div> Paul Vallee https://blog.pythian.com/?p=103356 Thu Feb 01 2018 11:29:06 GMT-0500 (EST) ORA-13541: System Moving Window Baseline Size Greater Than Retention http://oracle-help.com/articles/ora-13541-system-moving-window-baseline-size-greater-retention/ <h3><strong>This post is about the ORA-13541: System Moving Window Baseline Size Greater Than Retention. </strong></h3> <p><a href="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg"><img data-attachment-id="3272" data-permalink="http://oracle-help.com/articles/ora-13541-system-moving-window-baseline-size-greater-retention/attachment/images-6-5/" data-orig-file="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?fit=311%2C162" data-orig-size="311,162" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="images (6)" data-image-description="" data-medium-file="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?fit=300%2C156" data-large-file="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?fit=311%2C162" class="alignnone wp-image-3272" src="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?resize=452%2C235" alt="" width="452" height="235" srcset="https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?resize=300%2C156 300w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?resize=60%2C31 60w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?resize=150%2C78 150w, https://i1.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-6.jpg?w=311 311w" sizes="(max-width: 452px) 100vw, 452px" data-recalc-dims="1" /></a></p> <h3>PROBLEM:</h3> <p>While modifying the retention period of AWR snapshot, got error <strong>ORA-13541</strong></p> <p>SQL&gt; execute dbms_workload_repository.modify_snapshot_settings (interval =&gt; 30, retention =&gt; 10080);<br /> BEGIN dbms_workload_repository.modify_snapshot_settings (interval =&gt; 30, retention =&gt; 10080); END;</p> <p>*<br /> ERROR at line 1:<br /> ORA-13541: system moving window baseline size (691200) greater than retention<br /> (604800)<br /> ORA-06512: at &#8220;SYS.DBMS_WORKLOAD_REPOSITORY&#8221;, line 198<br /> ORA-06512: at &#8220;SYS.DBMS_WORKLOAD_REPOSITORY&#8221;, line 246<br /> ORA-06512: at line 1</p> <h3>SOLUTION:</h3> <p>Here we are trying to set retention to 10080 which is equal to 7 days.</p> <p><strong>Let’s check the Moving window size:</strong></p> <p>SQL&gt; select BASELINE_TYPE,MOVING_WINDOW_SIZE from dba_hist_baseline;</p> <p>BASELINE_TYPE MOVING_WINDOW_SIZE<br /> &#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> MOVING_WINDOW 8</p> <p>It is set to 8 days. I.e the moving window size is more than the retention period we are trying to set.</p> <p><strong>So modify the window size to  7 </strong>days.</p> <p>SQL&gt; execute dbms_workload_repository.modify_baseline_window_size(window_size=&gt; 7);</p> <p>PL/SQL procedure successfully completed.</p> <p>SQL&gt; select BASELINE_TYPE,MOVING_WINDOW_SIZE from dba_hist_baseline;</p> <p>BASELINE_TYPE MOVING_WINDOW_SIZE<br /> &#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br /> MOVING_WINDOW 7</p> <p><strong>Now try to modify awr snapshot retention:</strong></p> <p>SQL&gt; execute dbms_workload_repository.modify_snapshot_settings (interval =&gt; 30, retention =&gt; 10080);</p> <p>PL/SQL procedure successfully completed.</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/articles/ora-13541-system-moving-window-baseline-size-greater-retention/">ORA-13541: System Moving Window Baseline Size Greater Than Retention</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3267 Thu Feb 01 2018 11:20:09 GMT-0500 (EST) Database Design(Software Selection) http://oracle-help.com/oracle-12c/oracle-12cr2/database-designsoftware-selection/ <p>Today we are going to talk about most important part of the <strong>Database</strong>. As a fresher, we all have a dream to do something different and we choose DBA as a profession. As my personal experience as a fresher I wanted to be Oracle DBA and today I feel proud to work as <strong>DBA.</strong> Let&#8217;s have look at Database Design part of the database. This phase of database base is my favorite one. If you are fresher then it will most helpful for your future with the help Database Design we will have a depth knowledge of the database and if you are experienced than you may add some good knowledge in knowledge treasure.</p> <p>Before I did lots of R&amp;D about <strong>Database Design</strong>. While we design database being DBA we have to think about all aspects of projects. We are going to learn that what are these.</p> <p>As we all know we can not design without the help of software. While we design we must choose the best software on which we can keep our projects first step to words our organization&#8217;s growth. While we choose database software we must keep these point in our mind.</p> <p><a href="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg"><img data-attachment-id="3261" data-permalink="http://oracle-help.com/oracle-12c/oracle-12cr2/database-designsoftware-selection/attachment/images-5-4/" data-orig-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg?fit=265%2C190" data-orig-size="265,190" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="images (5)" data-image-description="" data-medium-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg?fit=265%2C190" data-large-file="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg?fit=265%2C190" class="alignnone wp-image-3261" src="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg?resize=525%2C380" alt="" width="525" height="380" srcset="https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg?resize=60%2C43 60w, https://i2.wp.com/oracle-help.com/wp-content/uploads/2018/02/images-5.jpg?resize=150%2C108 150w" sizes="(max-width: 525px) 100vw, 525px" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p><strong>SOFTWARE</strong></p> <p>Following reviews of the data that would be entered into the database, and the requirements of retrieving the data several criteria were identified that need to be met by the database software. The minimum requirements for the software were:<br /> <strong>1</strong>. Must support the relational database model and some version of <strong>the SQL language</strong>. This is an industry standard, and as a program that will be spanning several countries and many years adhering to this standard will ensure the <strong>longevity and portability</strong> of the database. In addition, most database <strong>administrators</strong> are familiar with some form of SQL and relational databases, so training of an administrator will be relatively easy.<br /> <strong>2</strong>. Need to allow multiple users to access tables simultaneously.<br /> <strong>3</strong>. <strong>SQL scripts</strong> are the most important while database works. While we go to buy software we must know that it allows running of stored<strong> SQL scripts</strong>. There are many processes that can be automated with stored scripts, to facility <strong>management, updates, editing, and querying of the database</strong>. This is especially important if users are accessing the data from the internet. Being able to call and run a stored script is far easier and more efficient than trying to code all the information into a web form.<br /> <strong>4</strong>. Allow restrictions on the data values entered in columns within a table. Being able to restrict the data to certain ranges or values will reduce the possible errors in data entry.<br /> <strong>5</strong>.Creation is the most important part of the database being a project manager we must have to keep this point in our mind that it Allow creation of multiple indexes on a table, as well as unique indexes within a table. Also must be able to create one index on multiple columns. Multiple indexes on a table allow faster sorts and queries based on various parameters. Creating a unique index across multiple columns will prevent entering duplicate data.</p> <p><strong>6</strong>.Day by day data is increasing we must think about security as we know how much important is view in any database. Software must allow the creation of views on the data. This allows a minimum amount of data to be stored and a virtually unlimited number of outputs to be created. Views allow display of calculated values, without having to create additional columns in the data tables and have them populated with the calculated values. Having the additional columns can lead to conflicting data within one record of a data table. In addition, views allow multiple tables to be joined together to provide a customized view of the data in the data table.<br /> <strong>7</strong>. Allow inner joins, left outer joins, right outer joins, full outer joins, and multiple joins within a query. The joins are different ways of selecting items from one or more tables, in either a query or a view. The inner join selects only the records that exist in both tables and matches them up. The left outer join selects all of the records from the left table and only the matching records from the right table. The right outer join selects all of the records from the right table and only the matching records from the left table. The full outer join selects all records from both the left and right table and joins the records that match. The non-matching records are joined with null values.<br /> <strong>8.</strong>In the fast technology, world replication proves itself being helped for DBA while choosing software keep this point as a plus point.<strong> </strong> Have some method of replication between two servers. Since the data is going to be housed on two servers some sort of replication is necessary.<br /> <strong>9</strong>. Software must allow triggers on the data tables. Triggers will allow predetermined actions to be taken when information is entered, edited, or deleted from a data table. Column data checks are an intrinsic form of triggers.<br /> <strong>10</strong>. Without internet is life is impossible . We must know that it Allow data entry from the internet. Most of the data will be entered into the forms from the internet.<br /> <strong>11</strong>.The software runs on different OS like Windows, Linux, Unix etc. As per business budget and requirements, we must choose OS and software. We have multiple options available in the market.</p> <p><strong>Note:-Based on these requirements the qualified software was examined was Oracle, Informix, Ingres, and PostgreSQL. All of these </strong><strong>products met the requirements outlined above.</strong></p> <p>This is the first step for <strong>Database Design</strong> after this we will look forward to its hardware requirements in next post.</p> <p>For more details http://www.mbrs.doe.gov.bz/dbdocs/tech/Design.pdf</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="http://oracle-help.com/oracle-12c/oracle-12cr2/database-designsoftware-selection/">Database Design(Software Selection)</a> appeared first on <a rel="nofollow" href="http://oracle-help.com">ORACLE-HELP</a>.</p> Anuradha Mudgal http://oracle-help.com/?p=3228 Thu Feb 01 2018 10:16:40 GMT-0500 (EST) Relocating base directory Enterprise Manager’s central agent https://technology.amis.nl/2018/02/01/relocating-base-directory-enterprise-managers-central-agent/ <p>After the upgrade of the 12c central agent to 13c, I noticed the new central agent’s home located under the wrong &#8211; old agent &#8211; directory: /u01/app/oracle/<strong>agent12c</strong>/<strong>agent_13.2.0.0.0</strong>. Must have done something wrong. How to correct this? Want to move the directory to /u01/app/oracle/agent13c/. A very short blog to describe the two steps.</p> <p>It’s a bit hidden away in the <a href="https://docs.oracle.com/cd/E73210_01/EMUPG/GUID-C807B2F8-DA3A-4934-8C2E-7DFB63E9F65D.htm#EMUPG377" target="_blank" rel="noopener">documentation</a> (in the appendixes) but there’s a special procedure to do this, and it worked like a charm for me.</p> <p>So, /u01/app/oracle/<strong>agent12c</strong>/<strong>agent_13.2.0.0.0  </strong>should be /u01/app/oracle<strong>/agent13c/agent_13.2.0.0.0</strong></p> <p>Step 1:  Create a list of plugins by using this command:</p> <blockquote><p>/u01/app/oracle/<strong>agent12c/agent_13.2.0.0.0</strong>/perl/bin/perl      /u01/app/oracle/agent12c/agent_13.2.0.0.0/sysman/install/create_plugin_list.pl -instancehome /u01/app/oracle/agent12c/agent_inst/</p></blockquote> <p>A file /u01/app/oracle/agent12c/plugins.txt is created, used by the next command.</p> <p>&nbsp;</p> <p>Step 2: Creating a new base directory for agent13c – where I didn’t need to stop the agent by the way, that’s all included in the script:</p> <blockquote><p>/u01/app/oracle/agent12c/agent_13.2.0.0.0/perl/bin/perl /u01/app/oracle/agent12c/agent_13.2.0.0.0/sysman/install/AgentMigrate.pl -instanceHome /u01/app/oracle/agent12c/agent_inst -newAgentBaseDir /u01/app/oracle/agent13c</p></blockquote> <p>Post actions to be done:</p> <ul> <li>Run root.sh from /u01/app/oracle/agent13c/agent_13.2.0.0.0/root.sh manually</li> <li>Deinstall (rm -R) agent home /u01/app/oracle/agent12c/agent_13.2.0.0.0 manually</li> </ul> <p>And that’s it! Sometimes life is easy.</p> <p>Regardz..</p> <p>&nbsp;</p> <p>Resources:</p> <p>Moving the central agent base directory : <a title="https://docs.oracle.com/cd/E73210_01/EMUPG/GUID-C807B2F8-DA3A-4934-8C2E-7DFB63E9F65D.htm#EMUPG377" href="https://docs.oracle.com/cd/E73210_01/EMUPG/GUID-C807B2F8-DA3A-4934-8C2E-7DFB63E9F65D.htm#EMUPG377">https://docs.oracle.com/cd/E73210_01/EMUPG/GUID-C807B2F8-DA3A-4934-8C2E-7DFB63E9F65D.htm#EMUPG377</a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/02/01/relocating-base-directory-enterprise-managers-central-agent/">Relocating base directory Enterprise Manager&#8217;s central agent</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Job Oprel https://technology.amis.nl/?p=47456 Thu Feb 01 2018 10:00:46 GMT-0500 (EST) Datascape Podcast Episode 21 – What’s a Solutions Architect? https://blog.pythian.com/datascape-podcast-episode-21-whats-solutions-architect/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><p>On today’s show we welcome Adam Muise and John Laham to talk about the idea of the Solutions Architect. Both of our guests are currently employed at Pythian but have done work in design and development at other big companies prior to their present jobs. During our chat we will be unpacking the sometimes confusing, role of a Solutions Architect and navigating our way through this newish landscape. Throughout our conversation, John and Adam present some contrasting views on the topic, and share with us a few different ways to look at the role. Being quite a new trend as a job descriptor means that there is still plenty of space for definition. For those aspiring to find employment as a Solutions Architect, Adam and John give some tips on how to get current and set yourself up for these types of opportunities. If this is something you wish to do, or you are just interested in having a better understanding of what the title can mean within a workspace, this episode is definitely for you. Listen in to hear more!</p> <p><iframe src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/387466901&amp;color=%23ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&amp;visual=true" width="100%" height="300" frameborder="no" scrolling="no"></iframe></p> <p><strong>Key Points From This Episode:</strong></p> <p>• An overview of Adam’s career and areas of expertise.<br /> • What is a Solutions Architect exactly?<br /> • Making a comparison between a Solutions Architect and domestic plumber.<br /> • Tactics for promoting yourself as a Solutions Architect from another area of expertise.<br /> • What makes a good background for aspiring Solutions Architects?<br /> • The overlap between architecture and leadership roles.<br /> • Benefits of other qualifications and skills to an Solutions Architect.<br /> • Our guests’ favorite things about their positions at Pythian.<br /> • The value of failure and learning from your colleagues in IT.<br /> • The somewhat invisible basic skillset necessary to these positions.<br /> • John does the “Lightning Round!”<br /> • And much more!</p> <p>Links Mentioned in Today’s Episode:</p> <p><a href="https://paytm.com/">Paytm</a><br /> <a href="https://pythian.com">Pythian</a><br /> <a href="https://www.penguinrandomhouse.com/books/314049/scale-by-geoffrey-west/9781594205583/">Scale</a><br /> <a href="https://play.google.com/store/apps/details?id=com.sappsuma.salonapps.cloud9&amp;hl=en">Cloudnine</a></p> <p><a href="http://&lt;iframe width=&quot;100%&quot; height=&quot;300&quot; scrolling=&quot;no&quot; frameborder=&quot;no&quot; allow=&quot;autoplay&quot; src=&quot;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/387466901&amp;amp;color=%23ff5500&amp;amp;auto_play=false&amp;amp;hide_related=false&amp;amp;show_comments=true&amp;amp;show_user=true&amp;amp;show_reposts=false&amp;amp;show_teaser=true&amp;amp;visual=true&quot;&gt;&lt;/iframe&gt;"><img class="alignnone size-full wp-image-103355" src="https://blog.pythian.com/wp-content/uploads/Episode-21-e1517493948818.jpg" alt="" width="600" height="300" /></a></p> </div></div> Chris Presley https://blog.pythian.com/?p=103284 Thu Feb 01 2018 09:18:46 GMT-0500 (EST) Oracle’s Database Security Assessment Tool (DBSAT) Version 2 (2.0.1) https://blog.pythian.com/oracles-database-security-assessment-tool-dbsat-version-2-2-0-1/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><h2><span style="font-weight: 400;">Background</span></h2> <p><span style="font-weight: 400;">Oracle recently released a new version of their Database Security Assessment Tool (DBSAT) &#8211; version 2.0.1. This is a welcome update as it’s been a while since the initial release in 2016. In fact, the tool hasn&#8217;t been enhanced or updated in over a year.</span></p> <p><span style="font-weight: 400;">Overall DBSAT is quite a valuable tool and personally I would recommend Oracle database administrators use it.</span></p> <h2><span style="font-weight: 400;">Advantages of Version 2 over Version 1</span></h2> <p><span style="font-weight: 400;">Version 2.0.1 seems to offer a number of advantages and general changes. Some of the things I’ve noticed include:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Change in terminology from “Opportunity”, “Some Risk”, “Significant Risk”, and “Severe Risk” to the more conventional terms “Advisory”, “Low Risk”, “Medium Risk”, and “High Risk”.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A more comprehensive analysis. Running both versions against the same database, version 2 found more “issues”. Even within the same check, the new version sometimes identified more results.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A new “References” section at the bottom of each check. From the DBSAT documentation: “</span><i><span style="font-weight: 400;">Provides information on whether the finding is related to a CIS Oracle Database Benchmark 12c v2.0.0 recommendation or related to a GDPR Article/Recital</span></i><span style="font-weight: 400;">”.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A whole new Discoverer component designed to search for data based on customizable criteria and then generate a “Database Sensitive Data Assessment Report”. This report can be generated offline on a secondary system (only the source data collection runs on the database server).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A new output format: JSON for ingestion into other tools or utilities (i.e. via a custom loader). Previously output was provided in HTML for easy manual navigation, Excel where additional columns can be added (i.e. making it more like a check-list), and text for easy cut &amp; paste.</span></li> </ul> <h2><span style="font-weight: 400;">New Feature: “Discoverer” </span></h2> <p><span style="font-weight: 400;">The Discoverer component is a brand new feature for the purpose of searching for and reporting on “sensitive data”. What that really means is looking for sensitive data by column names (i.e. columns named “SALARY” or “SAL”, etc.) and producing a report on the findings. Reports are only in HTML and CSV formats as of DBSAT version 2.0.1.</span></p> <p><span style="font-weight: 400;">There’s a list of proposed “sensitive column names” included to get started with, but the list is fully customizable and extensible. In fact, this is the only part of DBSAT that is extensible. But for that reason I think this is a really promising and helpful new feature and can add value for anyone who does need to look for and track sensitive data. It saves them from writing their own similar tool or utility.</span></p> <p><span style="font-weight: 400;">The biggest downside is of course that the accuracy of the results is only as good as the search criteria and column names. For organizations with strong data modelling rules and policies, this shouldn’t be a problem. But if column names are completely arbitrary and obscure, then the effectiveness of the findings will be diminished.</span></p> <h2><span style="font-weight: 400;">Comparison to ORAchk</span></h2> <p><span style="font-weight: 400;">For those familiar with Oracle’s more general health check tool ORAchk (or ExaChk), you’ll find the concept and operation reasonably familiar.</span></p> <p><span style="font-weight: 400;">But while it’s similar, there are still a number of differences. Comparing DBSAT to ORAchk some of the key differences would include:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">DBSAT is a two-step operation: fist your collect data, then report on it. The later can be performed on a secondary machine.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">DBSAT gives the option to encrypt the raw data it gathers during the collection phase (more on this later).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">DBSAT has fewer command line switches and is simpler to run and use. Though the basic usage of ORAchk is pretty simple also.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The HTML reports generated are a little similar in look and feel but also differ in many ways.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Unlike ORAchk, DBSAT is not extensible meaning you cannot add your own custom audit checks.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Unlike ORAchk, DBSAT does not offer automated runs or repository storage for comparative analysis and overall estate dashboard (ORAchk offers the “Collection Manager” repository database and APEX application).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">There’s no catalog of checks like ORAchk provides in HTML format.</span></li> </ul> <h3><span style="font-weight: 400;">Integration</span></h3> <p><span style="font-weight: 400;">Since ORAchk version 12.2.0.1.1_20160916, ORAchk has automatically included DBSAT by default. In fact, all of the old security related ORAchk checks seem to have been removed since DBSAT is now the security review tool of choice.</span></p> <p><span style="font-weight: 400;">Personally I do not think this integration is a good thing for several reasons including:</span></p> <ol> <li style="font-weight: 400;"><span style="font-weight: 400;">There’s no guarantee that the version of DBSAT bundled with the version of ORAchk being used is the most recent. Since DBSAT doesn’t seem to be updated nearly as frequently it’s likely not a problem except for a period of time shortly after a DBSAT release.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The included DBSAT output within an ORAchk report is only in text format and is encapsulated as a single audit check by ORAchk. In the ORAchk output, there’s no included DBSAT HTML, XLS, or JSON data for an easier review or integration into other tools.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Most significantly, the scope of visibility may be different between an ORAchk report and a DBSAT report. An ORAchk findings report may be treated as low risk from a security and confidentiality perspective and therefore may be shared with a wider audience or handled less securely within an organization. Conversely, DBSAT reports may show current exposures and sensitive information that could be easily exploited if it fell into the wrong hands. Consequently DBSAT findings are often handled and secured with additional scrutiny.</span></li> </ol> <p><span style="font-weight: 400;">For those reasons I would recommend not running DBSAT as part of ORAchk but instead running it as a stand alone tool only. Excluding it from ORAchk is pretty simple: either the explicit CheckID can be skipped:</span></p> <blockquote> <pre><span style="font-weight: 400;">./orachk -excludecheck 39128FBB540C098AE0530D98EB0AFB1A</span></pre> </blockquote> <p><span style="font-weight: 400;">Or alternatively, the security profile (which currently only includes the DBSAT report) can be skipped:</span></p> <blockquote> <pre><span style="font-weight: 400;">./orachk -excludeprofile security</span></pre> </blockquote> <p><span style="font-weight: 400;">Personally I’d suggest manually excluding only the check by the CheckID to not inadvertently exclude other security related checks which may be added to ORAchk in the future. For example, ORAchk’s scope can be quite broad while DBSAT is focused on the Database (and related OS configuration). So possibly the ORAchk “Security” profile could include security checks for other products.</span></p> <h2><span style="font-weight: 400;">Limitations and Concerns</span></h2> <p><span style="font-weight: 400;">DBSAT seems to have two main limitations or areas of concern. The first is spelled out pretty clearly in the documentation/user guide : it doesn’t collect OS data for the Windows platform. For Windows only SQL queries are run and hence only a subset of the analysis is performed.</span></p> <p><span style="font-weight: 400;">The second issue is with DBSAT’s encryption. The collector will (unless overridden with the -n command line argument which Oracle does not recommend), encrypt the raw data it collects for security.  However, it only uses simple ZIP encryption to accomplish this. Standard ZIP encryption is not very strong and is breakable (exactly how is out of scope for this discussion).</span></p> <p><span style="font-weight: 400;">Consequently if you need to transfer the raw data collected by the DBSAT collector to a secondary system for processing by the DBSAT reporter in a secure manner then I would suggest instead manually encrypting/decrypting using a more powerful zip utility such as 7-zip and using AES-256 or similar.</span></p> <h2><span style="font-weight: 400;">Conclusion</span></h2> <p><span style="font-weight: 400;">DBSAT is a pretty valuable utility and it’s nice to see Oracle evolving it with a major upgrade. The new Discoverer component also seems promising.</span></p> <p><span style="font-weight: 400;">And while it’s similar to ORAchk in usage and purpose, it’s also quite different. The ideal would be for Oracle to merge the functionality of both to provide the best of both tools to each.</span></p> <h2><span style="font-weight: 400;">References:</span></h2> <p><a href="https://go.oracle.com/lp=38340"><span style="font-weight: 400;">https://go.oracle.com/lp=38340</span></a></p> <p><a href="https://support.oracle.com/epmos/faces/DocContentDisplay?id=2138254.1"><span style="font-weight: 400;">Oracle Database Security Assessment Tool (DBSAT) (Doc ID 2138254.1)</span></a></p> <p><a href="https://support.oracle.com/epmos/faces/DocContentDisplay?id=1268927.2"><span style="font-weight: 400;">ORAchk &#8211; Health Checks for the Oracle Stack (Doc ID 1268927.2)</span></a></p> </div></div> Simon Pane https://blog.pythian.com/?p=103334 Wed Jan 31 2018 13:59:33 GMT-0500 (EST) Scalar subquery caching in action https://blog.pythian.com/scalar-subquery-caching-action/ <div class="l-submain"><div class="l-submain-h g-html i-cf"><h1>The trouble with a feature that kicks in without announcement</h1> <p>So, there I was the other day creating a procedure to obfuscate data for one of our customers, you know: <a href="https://www.eugdpr.org/" target="_blank" rel="noopener">GDPR</a> is coming!!</p> <p>The idea is pretty simple: a PL/SQL BULK COLLECT FOR ALL UPDATE that will obfuscate by replacing the actual data with random generated stuff. The obfuscation rules are provided by the customer and we created a package &#8220;to rule them all&#8221;.</p> <p>Nice and neat and the process to update 500K rows was running in 4 seconds. But there was a small problem with the code in terms of performance, see if you spot it:</p> <pre lang="sql" line="1" highlight="18">DECLARE c_limit PLS_INTEGER := 50000; CURSOR to_obfuscate IS SELECT rowid FROM owner.table_to_obfuscate; TYPE ids_t IS TABLE OF to_obfuscate%ROWTYPE INDEX BY PLS_INTEGER; l_ids ids_t; rcount INTEGER := 0; BEGIN OPEN to_obfuscate; LOOP FETCH to_obfuscate BULK COLLECT INTO l_ids LIMIT c_limit; EXIT WHEN l_ids.COUNT=0; FORALL indx IN INDICES OF l_ids SAVE EXCEPTIONS UPDATE owner.table_to_obfuscate c SET column_to_obfuscate=(SELECT remap_utils.maskcolumn() FROM dual) WHERE c.rowid=l_ids(indx).rowid; rcount:=rcount+SQL%ROWCOUNT; COMMIT; DBMS_OUTPUT.PUT_LINE('Updated columns: '||rcount||' at '||sysdate); END LOOP; CLOSE to_obfuscate; EXCEPTION WHEN OTHERS THEN IF SQLCODE = -24381 THEN FOR indx IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP DBMS_OUTPUT.put_line ('Error updating row #' || SQL%BULK_EXCEPTIONS (indx).ERROR_INDEX | '. Error code is ' || SQL%BULK_EXCEPTIONS (indx).ERROR_CODE); END LOOP; ELSE RAISE; END IF; END; / </pre> <p>Not easy to spot as is quite a lot of code but the thing (see the highlighted line #18), and I have to thank the Oracle tech guys here at Pythian for pointing out this one to me, is that the code is using a SELECT FROM DUAL to obtain the random value.</p> <h2>What happened next?</h2> <p>After I was advised to change that small part of the code, boom, the performance went to 10x slower, running in some 45 seconds what before was running in 4, what the &#8230; is going on here?</p> <p>After some research, and thanks to Luke here for his help, it turned out to be my new friend &#8220;scalar subquery caching&#8221; preventing my call to SELECT FROM DUAL from actually getting a new value. The data was obfuscated, yes and pretty fast, but the resulting data was not random at all and the cardinality was complete askew for the obfuscated columns.</p> <p>So, lessons learned, beware of nice performance features that may save your day most of the time but can also give you trouble in some cases.</p> <p>&nbsp;</p> </div></div> Jose Rodriguez https://blog.pythian.com/?p=103298 Wed Jan 31 2018 08:33:31 GMT-0500 (EST) Oracle API Platform Cloud Service: Design-First approach and using Oracle Apiary https://technology.amis.nl/2018/01/31/oracle-api-platform-cloud-service-design-first-approach-using-oracle-apiary/ <p>At the Oracle Partner PaaS Summer Camps VII 2017 in Lisbon last year, at the end of august, I attended the API Cloud Platform Service &amp; Integration Cloud Service bootcamp.</p> <p>In a series of article’s I will give a high level overview of what you can do with Oracle API Platform Cloud Service. The version used of Oracle API Platform CS was Release 17.3.3 — August 2017.</p> <p>See <a href="https://docs.oracle.com/en/cloud/paas/api-platform-cloud/whats-new/index.html" target="_blank" rel="noopener">https://docs.oracle.com/en/cloud/paas/api-platform-cloud/whats-new/index.html</a> to learn about the new and changed features of Oracle API Platform CS in the latest release.</p> <p>In preparation of creating an API Blueprint document, I took a closer look at Oracle REST Data Services and used the RESTful Services feature in Oracle SQL Developer, to generate example JSON payload’s based on some tables in the “HR’ schema. For more information about this, see my article “Oracle REST Data Services (ORDS)”.<br /> <a href="https://technology.amis.nl/2018/01/22/oracle-rest-data-services-ords/" target="_blank" rel="noopener"><sub>[https://technology.amis.nl/2018/01/22/oracle-rest-data-services-ords/]</sub></a></p> <p>In this first article in the series about Oracle API Platform CS, the focus will be on the <b>Design-First approach</b> and using <b>Oracle Apiary</b>.</p> <p><span id="more-47483"></span></p> <h2><b>Short overview of </b><b>Oracle API Platform Cloud Service</b></h2> <p><i>Oracle API Platform Cloud Service enables companies to thrive in the digital economy by comprehensively managing the full API lifecycle from design and standardization to documenting, publishing, testing and managing APIs. These tools provide API developers, managers, and users an end-to-end platform for designing, prototyping. Through the platform, users gain the agility needed to support changing business demands and opportunities, while having clear visibility into who is using APIs for better control, security and monetization of digital assets.</i><br /> <a href="https://cloud.oracle.com/en_US/api-platform/datasheets" target="_blank" rel="noopener"><sub>[https://cloud.oracle.com/en_US/api-platform/datasheets]</sub></a></p> <h2><span style="font-weight: bold">Architecture</span></h2> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_34.png?resize=640%2C360&#038;ssl=1" alt="" width="640" height="360" data-recalc-dims="1" /></p> <p><i><u>Management Portal: </u></i><br /> <i>APIs are managed, secured, and published using the Management Portal. </i><i>The Management Portal is hosted on the Oracle Cloud, managed by Oracle, and users granted A</i><i>PI Manager privileges have access.</i></p> <p><i><u>Gateways: </u></i><br /> <i>API Gateways are the runtime components that enforce all policies, but also help in </i><i>collecting data for analytics. The gateways can be deployed anywhere – on premise, on Oracle </i><i>Cloud or to any third party cloud providers.</i></p> <p><i><u>Developer Portal:</u></i><br /> <i>After an API is published, Application Developers use the Developer Portal to </i><i>discover, register, and consume APIs. The Developer Portal can be customized to run either on </i><i>the Oracle Cloud or directly in the customer environment on premises.</i><br /> <a href="https://cloud.oracle.com/opc/paas/datasheets/APIPCSDataSheet_Oct2017.pdf" target="_blank" rel="noopener"><sub>[https://cloud.oracle.com/opc/paas/datasheets/APIPCSDataSheet_Oct2017.pdf]</sub></a></p> <p>More about this follows in another article in the series.</p> <h2><span style="font-weight: bold">Design-First approach</span></h2> <p><i>API-First Development is a fundamental paradigm shift in the process of API design where APIs are built before applications and mirror the goals and objectives of the company. API-First Development is also commonly referred to as Design-First Development.</i></p> <p><i>Before a developer builds a web, mobile, or other application, they develop the API first, then start </i><i>defining the channels that the API will be available on. Developers kick off the development process </i><i>discussing the API with their potential customers, generate use cases, and mock up the API before </i><i>even developing the application.</i><br /> <a href="https://cloud.oracle.com/opc/paas/datasheets/Apiary-Datasheet-Oracle.pdf" target="_blank" rel="noopener"><sub>[https://cloud.oracle.com/opc/paas/datasheets/Apiary-Datasheet-Oracle.pdf]</sub></a></p> <p><i>“</i><i>API-First Development” experience</i><i> is one of the Key Design Principles of Oracle API Platform Cloud Service. The Developer Portal, </i><i>tightly linked with Apiary, allows application developers to search for, learn about, test and register to use APIs, and then track their own usage.</i><br /> <a href="https://cloud.oracle.com/opc/paas/datasheets/APIPCSDataSheet_Oct2017.pdf" target="_blank" rel="noopener"><sub>[https://cloud.oracle.com/opc/paas/datasheets/APIPCSDataSheet_Oct2017.pdf]</sub></a></p> <p><i>Oracle Apiary provides you with the ability to design APIs using either API Blueprint or Swagger 2.0. From these description files, Oracle Apiary generates interactive documentation and a console for making calls to the APIs from the UI.</i><br /> <a href="https://docs.oracle.com/en/cloud/paas/api-platform-cloud/apfad/oracle-apiary-integration.html" target="_blank" rel="noopener"><sub>[https://docs.oracle.com/en/cloud/paas/api-platform-cloud/apfad/oracle-apiary-integration.html]</sub></a></p> <h2><span style="font-weight: bold">API Blueprint</span></h2> <p><b><i>API Blueprint</i></b><i> is a documentation-oriented web API description language. The API Blueprint is essentially a set of semantic assumptions laid on top of the Markdown syntax used to describe a web API.</i></p> <p><i>An <b>API Blueprint document</b> – a blueprint – is a plain text Markdown document describing a Web API in whole or in part. The document is structured into logical sections. Each section has its distinctive meaning, content and position in the document.</i><br /> <a href="https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md" target="_blank" rel="noopener"><sub>[https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md]</sub></a></p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_35.jpg?resize=672%2C783&#038;ssl=1" alt="" width="672" height="783" data-recalc-dims="1" /></p> <p>For the Full Language Specification of API Blueprint see for example:<br /> <a href="https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md" target="_blank" rel="noopener">https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md</a></p> <p>For an API Blueprint tutorial see for example:<br /> <a href="https://docs.oracle.com/cloud/apiary/api_101/api_blueprint_tutorial/index.html" target="_blank" rel="noopener">https://docs.oracle.com/cloud/apiary/api_101/api_blueprint_tutorial/index.html</a></p> <p>The recommended file extension for API Blueprint is .apib</p> <h2><span style="font-weight: bold">Oracle Apiary</span></h2> <p><i>Apiary provides the world’s first platform, API Flow, specifically designed to help companies accelerate and control the design, development, and documentation of their APIs and microservices. This allows its users to create products and services that customers, business partners, and even machines love to use.</i></p> <p><i>Apiary API Flow is an open platform supporting both API Blueprint and OpenAPI (Swagger). The platform provides tools to developers for every step of an API-First Development Lifecycle and delivers several significant benefits to a team of developers.</i><br /> <a href="https://cloud.oracle.com/opc/paas/datasheets/Apiary-Datasheet-Oracle.pdf" target="_blank" rel="noopener"><sub>[https://cloud.oracle.com/opc/paas/datasheets/Apiary-Datasheet-Oracle.pdf]</sub></a></p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_36.jpg?resize=702%2C424&#038;ssl=1" alt="" width="702" height="424" data-recalc-dims="1" /></p> <p>In this article I will discuss some of the functionality of Oracle Apiary, but not all. Please see the available documentation for more details.</p> <p>Go to <a href="https://apiary.io/">https://apiary.io/</a> to start Oracle Apiary.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_37.jpg?resize=702%2C363&#038;ssl=1" alt="" width="702" height="363" data-recalc-dims="1" /></p> <p>You can Sign Up for free with a GitHub, Twitter or email account. Once you have done that, you can Sign In to start working with Oracle Apiary.</p> <p>Via menu | Create New API Project, the New API wizard is started, where you can choose between creating a Personal API or Team API and in the field “New API name” you can fill in your API name, for example: HumanResourceService.</p> <p>Then click on button “Create API”.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_38.jpg?resize=421%2C560&#038;ssl=1" alt="" width="421" height="560" data-recalc-dims="1" /></p> <h2><span style="font-weight: bold">Apiary Editor</span></h2> <p>The “HumanResourceService” API automatically shows up in the Apiary Editor. The header item “Editor” is high-lighted.</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_39.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <p>The Apiary Editor, contains 3 panes, with an API Blueprint tutorial (<i>a polls service, which allows consumers to view polls and vote in them</i>) already in place. For more information about that tutorial, see: <a href="https://help.apiary.io/api_101/api_blueprint_tutorial/" target="_blank" rel="noopener">https://help.apiary.io/api_101/api_blueprint_tutorial/</a></p> <p><i>The Apiary Editor is the foundation of your API design. Apiary Editor supports API Blueprint and Swagger API Description languages.</i><br /> <a href="https://help.apiary.io/tools/apiary-editor/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/apiary-editor/]</sub></a></p> <p>In the <b>left pane</b> (Editor), an API Blueprint document, structured into logical sections, is shown.<br /> The <b>center pane</b> (Documentation preview) shows what your API document will look like when rendered as documentation. It also lets you to try out your API as you build. The documentation preview is dynamically updated as you type in the Editor.<br /> In the <b>right pane</b> the code examples/console is shown.</p> <p>You can modify the API Blueprint tutorial document to fulfill your needs, or use some other text editor and copy and paste it into the <b>Editor</b>.</p> <p>As described in my previous article, mentioned above, in the table below I summarized the requests that I created:</p> <table style="margin-bottom: 10px" border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="270"><b>Request name</b></td> <td valign="top" width="79"><b>Method</b></td> <td valign="top" width="416"><b>Request URL</b></td> </tr> <tr> <td valign="top" width="270">GetAllEmployeesRequest</td> <td valign="top" width="79">GET</td> <td valign="top" width="416">http://localhost:9090/ords/hr/demo1/employees/</td> </tr> <tr> <td valign="top" width="270">CreateEmployeeRequest</td> <td valign="top" width="79">POST</td> <td valign="top" width="416">http://localhost:9090/ords/hr/demo1/employees/</td> </tr> <tr> <td valign="top" width="270">GetEmployeeRequest</td> <td valign="top" width="79">GET</td> <td valign="top" width="416">http://localhost:9090/ords/hr/demo1/employees/100</td> </tr> <tr> <td valign="top" width="270">UpdateEmployeeRequest</td> <td valign="top" width="79">PUT</td> <td valign="top" width="416">http://localhost:9090/ords/hr/demo1/employees/219</td> </tr> <tr> <td valign="top" width="270">GetDepartmentRequest</td> <td valign="top" width="79">GET</td> <td valign="top" width="416">http://localhost:9090/ords/hr/demo1/departments/30</td> </tr> <tr> <td valign="top" width="270">GetDepartmentEmployeeRequest</td> <td valign="top" width="79">GET</td> <td valign="top" width="416">http://localhost:9090/ords/hr/demo1/departments/30/employees/119</td> </tr> </tbody> </table> <p>The first step for creating an API Blueprint document is to specify the Metadata, API name and description.</p> <p><b><u>Metadata section</u></b>:<br /> The API Blueprint document starts with a Metadata section, which consists of Key-Value pairs. Each Key is separated from its Value by a colon (:). One pair per line. The FORMAT keyword is required and denotes that document is API Blueprint.</p> <p><a style="font-family: Courier New;color: black">FORMAT: 1A</a></p> <p><b><u>API name &amp; overview section</u></b>:<br /> In the API name &amp; overview section, the API name is defined by the first Markdown header in the API Blueprint document.</p> <p><a style="font-family: Courier New;color: black"># HumanResourceService</p> <p>Human Resource Service is an API to manage Human Resources.</a></p> <p><b><u>Resource section</u></b>:<br /> An API consists of resources specified by their URIs.</p> <p>In line with the API Blueprint tutorial (<i>a polls service, which allows consumers to view polls and vote in them</i>), I used a Resource section with as format:<br /> <a style="font-family: Courier New;color: black">## &lt;identifier&gt; [&lt;URI template&gt;]</a></p> <p>For example:<br /> <a style="font-family: Courier New;color: black">## Employees Collection [/employees]</a></p> <p><b><u>Action section</u></b>:<br /> You should specify each action you may make on a resource. An action is specified with a sub-heading with the name of the action followed by the HTTP method.</p> <p>Within the Resource section I created multiple Action sections, with as format:<br /> <a style="font-family: Courier New;color: black">### &lt;identifier&gt; [&lt;HTTP request method&gt; &lt;URI template&gt;]</a></p> <p>For example:<br /> <a style="font-family: Courier New;color: black">### Get all employees [GET /employees]</a></p> <p>As you can see, in my API, some Action sections contain an URI parameters section and/or a Request section and a Response section.</p> <p><b><u>URI parameters section</u></b>:<br /> The URI parameters section describes any URI parameters specific to the action, with as format:<br /> <a style="font-family: Courier New;color: black">+ &lt;parameter name&gt;: `&lt;example value&gt;` (&lt;type&gt; | enum[&lt;type&gt;], required | optional) &#8211; &lt;description&gt;</a></p> <p>For example:<br /> <a style="font-family: Courier New;color: black">+ id: `220` (number, required) &#8211; Id of an employee.</a></p> <p><b><u>Request section</u></b>:<br /> For the Request sections the following format was used:<br /> <a style="font-family: Courier New;color: black">+ Request &lt;identifier&gt; (&lt;Media Type&gt;)</a></p> <p>For example:<br /> <a style="font-family: Courier New;color: black">+ Request (application/json)</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&#8220;LAST_NAME&#8221;:&#8221;TESTUPDATE&#8221;, &#8220;JOB_ID&#8221;:&#8221;SA_REP&#8221;, &#8220;SALARY&#8221;:8000, &#8220;DEPARTMENT_ID&#8221;:80}</a></p> <p><u>Remark</u>:<br /> Specifying the media type generates a HTTP <a style="font-family: Courier New;color: black">Content-Type</a> header.</p> <p><b><u>Response section</u></b>:<br /> For the Response sections the following format was used:<br /> <a style="font-family: Courier New;color: black">+ Response &lt;HTTP status code&gt; (&lt;Media Type&gt;)</a></p> <p>For example:<br /> <a style="font-family: Courier New;color: black">+ Response 200 (application/json)</p> <p>{<br /> &#8220;employee_id&#8221;: 220,<br /> &#8220;first_name&#8221;: &#8220;TESTFIRST&#8221;,<br /> &#8220;last_name&#8221;: &#8220;TESTUPDATE&#8221;,<br /> &#8220;email&#8221;: &#8220;TESTMAIL&#8221;,<br /> &#8220;phone_number&#8221;: null,<br /> &#8220;hire_date&#8221;: &#8220;2015-06-25T04:00:00Z&#8221;,<br /> &#8220;job_id&#8221;: &#8220;SA_REP&#8221;,<br /> &#8220;salary&#8221;: 8000,<br /> &#8220;commission_pct&#8221;: null,<br /> &#8220;manager_id&#8221;: 103,<br /> &#8220;department_id&#8221;: 80<br /> }</a></p> <p><u>Remark</u>:<br /> Specifying the media type generates a HTTP <a style="font-family: Courier New;color: black">Content-Type</a> header.</p> <p>My HumanResourceService.apib therefor looks like:</p> <pre class="brush: xml; title: ; notranslate"> FORMAT: 1A # HumanResourceService Human Resource Service is an API to manage Human Resources. ## Employees Collection [/employees] ### Get all employees [GET /employees] Get all employees. + Response 200 (application/json) { &quot;items&quot;: [ { &quot;employee_id&quot;: 100, &quot;first_name&quot;: &quot;Steven&quot;, &quot;last_name&quot;: &quot;King&quot;, &quot;email&quot;: &quot;SKING&quot;, &quot;phone_number&quot;: &quot;515.123.4567&quot;, &quot;hire_date&quot;: &quot;1987-06-17T04:00:00Z&quot;, &quot;job_id&quot;: &quot;AD_PRES&quot;, &quot;salary&quot;: 24000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: null, &quot;department_id&quot;: 90, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/100&quot; } ] }, { &quot;employee_id&quot;: 101, &quot;first_name&quot;: &quot;Neena&quot;, &quot;last_name&quot;: &quot;Kochhar&quot;, &quot;email&quot;: &quot;NKOCHHAR&quot;, &quot;phone_number&quot;: &quot;515.123.4568&quot;, &quot;hire_date&quot;: &quot;1989-09-21T04:00:00Z&quot;, &quot;job_id&quot;: &quot;AD_VP&quot;, &quot;salary&quot;: 17000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 90, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/101&quot; } ] }, { &quot;employee_id&quot;: 102, &quot;first_name&quot;: &quot;Lex&quot;, &quot;last_name&quot;: &quot;De Haan&quot;, &quot;email&quot;: &quot;LDEHAAN&quot;, &quot;phone_number&quot;: &quot;515.123.4569&quot;, &quot;hire_date&quot;: &quot;1993-01-13T05:00:00Z&quot;, &quot;job_id&quot;: &quot;AD_VP&quot;, &quot;salary&quot;: 17000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 90, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/102&quot; } ] }, { &quot;employee_id&quot;: 103, &quot;first_name&quot;: &quot;Alexander&quot;, &quot;last_name&quot;: &quot;Hunold&quot;, &quot;email&quot;: &quot;AHUNOLD&quot;, &quot;phone_number&quot;: &quot;590.423.4567&quot;, &quot;hire_date&quot;: &quot;1990-01-03T05:00:00Z&quot;, &quot;job_id&quot;: &quot;IT_PROG&quot;, &quot;salary&quot;: 9000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 102, &quot;department_id&quot;: 60, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/103&quot; } ] }, { &quot;employee_id&quot;: 104, &quot;first_name&quot;: &quot;Bruce&quot;, &quot;last_name&quot;: &quot;Ernst&quot;, &quot;email&quot;: &quot;BERNST&quot;, &quot;phone_number&quot;: &quot;590.423.4568&quot;, &quot;hire_date&quot;: &quot;1991-05-21T04:00:00Z&quot;, &quot;job_id&quot;: &quot;IT_PROG&quot;, &quot;salary&quot;: 6000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 103, &quot;department_id&quot;: 60, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/104&quot; } ] }, { &quot;employee_id&quot;: 105, &quot;first_name&quot;: &quot;David&quot;, &quot;last_name&quot;: &quot;Austin&quot;, &quot;email&quot;: &quot;DAUSTIN&quot;, &quot;phone_number&quot;: &quot;590.423.4569&quot;, &quot;hire_date&quot;: &quot;1997-06-25T04:00:00Z&quot;, &quot;job_id&quot;: &quot;IT_PROG&quot;, &quot;salary&quot;: 4800, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 103, &quot;department_id&quot;: 60, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/105&quot; } ] }, { &quot;employee_id&quot;: 106, &quot;first_name&quot;: &quot;Valli&quot;, &quot;last_name&quot;: &quot;Pataballa&quot;, &quot;email&quot;: &quot;VPATABAL&quot;, &quot;phone_number&quot;: &quot;590.423.4560&quot;, &quot;hire_date&quot;: &quot;1998-02-05T05:00:00Z&quot;, &quot;job_id&quot;: &quot;IT_PROG&quot;, &quot;salary&quot;: 4800, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 103, &quot;department_id&quot;: 60, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/106&quot; } ] }, { &quot;employee_id&quot;: 107, &quot;first_name&quot;: &quot;Diana&quot;, &quot;last_name&quot;: &quot;Lorentz&quot;, &quot;email&quot;: &quot;DLORENTZ&quot;, &quot;phone_number&quot;: &quot;590.423.5567&quot;, &quot;hire_date&quot;: &quot;1999-02-07T05:00:00Z&quot;, &quot;job_id&quot;: &quot;IT_PROG&quot;, &quot;salary&quot;: 4200, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 103, &quot;department_id&quot;: 60, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/107&quot; } ] }, { &quot;employee_id&quot;: 108, &quot;first_name&quot;: &quot;Nancy&quot;, &quot;last_name&quot;: &quot;Greenberg&quot;, &quot;email&quot;: &quot;NGREENBE&quot;, &quot;phone_number&quot;: &quot;515.124.4569&quot;, &quot;hire_date&quot;: &quot;1994-08-17T04:00:00Z&quot;, &quot;job_id&quot;: &quot;FI_MGR&quot;, &quot;salary&quot;: 12000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 101, &quot;department_id&quot;: 100, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/108&quot; } ] }, { &quot;employee_id&quot;: 109, &quot;first_name&quot;: &quot;Daniel&quot;, &quot;last_name&quot;: &quot;Faviet&quot;, &quot;email&quot;: &quot;DFAVIET&quot;, &quot;phone_number&quot;: &quot;515.124.4169&quot;, &quot;hire_date&quot;: &quot;1994-08-16T04:00:00Z&quot;, &quot;job_id&quot;: &quot;FI_ACCOUNT&quot;, &quot;salary&quot;: 9000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 108, &quot;department_id&quot;: 100, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/109&quot; } ] }, { &quot;employee_id&quot;: 110, &quot;first_name&quot;: &quot;John&quot;, &quot;last_name&quot;: &quot;Chen&quot;, &quot;email&quot;: &quot;JCHEN&quot;, &quot;phone_number&quot;: &quot;515.124.4269&quot;, &quot;hire_date&quot;: &quot;1997-09-28T04:00:00Z&quot;, &quot;job_id&quot;: &quot;FI_ACCOUNT&quot;, &quot;salary&quot;: 8200, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 108, &quot;department_id&quot;: 100, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/110&quot; } ] }, { &quot;employee_id&quot;: 111, &quot;first_name&quot;: &quot;Ismael&quot;, &quot;last_name&quot;: &quot;Sciarra&quot;, &quot;email&quot;: &quot;ISCIARRA&quot;, &quot;phone_number&quot;: &quot;515.124.4369&quot;, &quot;hire_date&quot;: &quot;1997-09-30T04:00:00Z&quot;, &quot;job_id&quot;: &quot;FI_ACCOUNT&quot;, &quot;salary&quot;: 7700, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 108, &quot;department_id&quot;: 100, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/111&quot; } ] }, { &quot;employee_id&quot;: 112, &quot;first_name&quot;: &quot;Jose Manuel&quot;, &quot;last_name&quot;: &quot;Urman&quot;, &quot;email&quot;: &quot;JMURMAN&quot;, &quot;phone_number&quot;: &quot;515.124.4469&quot;, &quot;hire_date&quot;: &quot;1998-03-07T05:00:00Z&quot;, &quot;job_id&quot;: &quot;FI_ACCOUNT&quot;, &quot;salary&quot;: 7800, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 108, &quot;department_id&quot;: 100, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/112&quot; } ] }, { &quot;employee_id&quot;: 113, &quot;first_name&quot;: &quot;Luis&quot;, &quot;last_name&quot;: &quot;Popp&quot;, &quot;email&quot;: &quot;LPOPP&quot;, &quot;phone_number&quot;: &quot;515.124.4567&quot;, &quot;hire_date&quot;: &quot;1999-12-07T05:00:00Z&quot;, &quot;job_id&quot;: &quot;FI_ACCOUNT&quot;, &quot;salary&quot;: 6900, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 108, &quot;department_id&quot;: 100, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/113&quot; } ] }, { &quot;employee_id&quot;: 114, &quot;first_name&quot;: &quot;Den&quot;, &quot;last_name&quot;: &quot;Raphaely&quot;, &quot;email&quot;: &quot;DRAPHEAL&quot;, &quot;phone_number&quot;: &quot;515.127.4561&quot;, &quot;hire_date&quot;: &quot;1994-12-07T05:00:00Z&quot;, &quot;job_id&quot;: &quot;PU_MAN&quot;, &quot;salary&quot;: 11000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 30, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/114&quot; } ] }, { &quot;employee_id&quot;: 115, &quot;first_name&quot;: &quot;Alexander&quot;, &quot;last_name&quot;: &quot;Khoo&quot;, &quot;email&quot;: &quot;AKHOO&quot;, &quot;phone_number&quot;: &quot;515.127.4562&quot;, &quot;hire_date&quot;: &quot;1995-05-18T04:00:00Z&quot;, &quot;job_id&quot;: &quot;PU_CLERK&quot;, &quot;salary&quot;: 3100, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 114, &quot;department_id&quot;: 30, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/115&quot; } ] }, { &quot;employee_id&quot;: 116, &quot;first_name&quot;: &quot;Shelli&quot;, &quot;last_name&quot;: &quot;Baida&quot;, &quot;email&quot;: &quot;SBAIDA&quot;, &quot;phone_number&quot;: &quot;515.127.4563&quot;, &quot;hire_date&quot;: &quot;1997-12-24T05:00:00Z&quot;, &quot;job_id&quot;: &quot;PU_CLERK&quot;, &quot;salary&quot;: 2900, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 114, &quot;department_id&quot;: 30, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/116&quot; } ] }, { &quot;employee_id&quot;: 117, &quot;first_name&quot;: &quot;Sigal&quot;, &quot;last_name&quot;: &quot;Tobias&quot;, &quot;email&quot;: &quot;STOBIAS&quot;, &quot;phone_number&quot;: &quot;515.127.4564&quot;, &quot;hire_date&quot;: &quot;1997-07-24T04:00:00Z&quot;, &quot;job_id&quot;: &quot;PU_CLERK&quot;, &quot;salary&quot;: 2800, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 114, &quot;department_id&quot;: 30, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/117&quot; } ] }, { &quot;employee_id&quot;: 118, &quot;first_name&quot;: &quot;Guy&quot;, &quot;last_name&quot;: &quot;Himuro&quot;, &quot;email&quot;: &quot;GHIMURO&quot;, &quot;phone_number&quot;: &quot;515.127.4565&quot;, &quot;hire_date&quot;: &quot;1998-11-15T05:00:00Z&quot;, &quot;job_id&quot;: &quot;PU_CLERK&quot;, &quot;salary&quot;: 2600, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 114, &quot;department_id&quot;: 30, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/118&quot; } ] }, { &quot;employee_id&quot;: 119, &quot;first_name&quot;: &quot;Karen&quot;, &quot;last_name&quot;: &quot;Colmenares&quot;, &quot;email&quot;: &quot;KCOLMENA&quot;, &quot;phone_number&quot;: &quot;515.127.4566&quot;, &quot;hire_date&quot;: &quot;1999-08-10T04:00:00Z&quot;, &quot;job_id&quot;: &quot;PU_CLERK&quot;, &quot;salary&quot;: 2500, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 114, &quot;department_id&quot;: 30, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/119&quot; } ] }, { &quot;employee_id&quot;: 120, &quot;first_name&quot;: &quot;Matthew&quot;, &quot;last_name&quot;: &quot;Weiss&quot;, &quot;email&quot;: &quot;MWEISS&quot;, &quot;phone_number&quot;: &quot;650.123.1234&quot;, &quot;hire_date&quot;: &quot;1996-07-18T04:00:00Z&quot;, &quot;job_id&quot;: &quot;ST_MAN&quot;, &quot;salary&quot;: 8000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 50, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/120&quot; } ] }, { &quot;employee_id&quot;: 121, &quot;first_name&quot;: &quot;Adam&quot;, &quot;last_name&quot;: &quot;Fripp&quot;, &quot;email&quot;: &quot;AFRIPP&quot;, &quot;phone_number&quot;: &quot;650.123.2234&quot;, &quot;hire_date&quot;: &quot;1997-04-10T04:00:00Z&quot;, &quot;job_id&quot;: &quot;ST_MAN&quot;, &quot;salary&quot;: 8200, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 50, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/121&quot; } ] }, { &quot;employee_id&quot;: 122, &quot;first_name&quot;: &quot;Payam&quot;, &quot;last_name&quot;: &quot;Kaufling&quot;, &quot;email&quot;: &quot;PKAUFLIN&quot;, &quot;phone_number&quot;: &quot;650.123.3234&quot;, &quot;hire_date&quot;: &quot;1995-05-01T04:00:00Z&quot;, &quot;job_id&quot;: &quot;ST_MAN&quot;, &quot;salary&quot;: 7900, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 50, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/122&quot; } ] }, { &quot;employee_id&quot;: 123, &quot;first_name&quot;: &quot;Shanta&quot;, &quot;last_name&quot;: &quot;Vollman&quot;, &quot;email&quot;: &quot;SVOLLMAN&quot;, &quot;phone_number&quot;: &quot;650.123.4234&quot;, &quot;hire_date&quot;: &quot;1997-10-10T04:00:00Z&quot;, &quot;job_id&quot;: &quot;ST_MAN&quot;, &quot;salary&quot;: 6500, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 50, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/123&quot; } ] }, { &quot;employee_id&quot;: 124, &quot;first_name&quot;: &quot;Kevin&quot;, &quot;last_name&quot;: &quot;Mourgos&quot;, &quot;email&quot;: &quot;KMOURGOS&quot;, &quot;phone_number&quot;: &quot;650.123.5234&quot;, &quot;hire_date&quot;: &quot;1999-11-16T05:00:00Z&quot;, &quot;job_id&quot;: &quot;ST_MAN&quot;, &quot;salary&quot;: 5800, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 100, &quot;department_id&quot;: 50, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/124&quot; } ] } ], &quot;hasMore&quot;: true, &quot;limit&quot;: 25, &quot;offset&quot;: 0, &quot;count&quot;: 25, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/&quot; }, { &quot;rel&quot;: &quot;edit&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/&quot; }, { &quot;rel&quot;: &quot;describedby&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/metadata-catalog/employees/&quot; }, { &quot;rel&quot;: &quot;first&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/&quot; }, { &quot;rel&quot;: &quot;next&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/?offset=25&quot; } ] } ### Get an employee [GET /employees/{id}] Get a particular employee by providing an identifier. + Response 200 (application/json) { &quot;employee_id&quot;: 100, &quot;first_name&quot;: &quot;Steven&quot;, &quot;last_name&quot;: &quot;King&quot;, &quot;email&quot;: &quot;SKING&quot;, &quot;phone_number&quot;: &quot;515.123.4567&quot;, &quot;hire_date&quot;: &quot;1987-06-17T04:00:00Z&quot;, &quot;job_id&quot;: &quot;AD_PRES&quot;, &quot;salary&quot;: 24000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: null, &quot;department_id&quot;: 90, &quot;links&quot;: [ { &quot;rel&quot;: &quot;self&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/100&quot; }, { &quot;rel&quot;: &quot;edit&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/100&quot; }, { &quot;rel&quot;: &quot;describedby&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/metadata-catalog/employees/item&quot; }, { &quot;rel&quot;: &quot;collection&quot;, &quot;href&quot;: &quot;http://localhost:9090/ords/hr/employees/&quot; } ] } ### Create an employee [POST /employees] Create an employee, by using post with the complete payload + Request (application/json) {&quot;LAST_NAME&quot;:&quot;TESTINSERT&quot;, &quot;FIRST_NAME&quot;:&quot;TESTFIRST&quot;, &quot;EMAIL&quot;:&quot;TESTMAIL&quot;, &quot;HIRE_DATE&quot;:&quot;25-JUN-15&quot;, &quot;JOB_ID&quot;:&quot;IT_PROG&quot;, &quot;SALARY&quot;:6000, &quot;MANAGER_ID&quot;:103, &quot;DEPARTMENT_ID&quot;:60} + Response 201 (application/json) { &quot;employee_id&quot;: 220, &quot;first_name&quot;: &quot;TESTFIRST&quot;, &quot;last_name&quot;: &quot;TESTINSERT&quot;, &quot;email&quot;: &quot;TESTMAIL&quot;, &quot;phone_number&quot;: null, &quot;hire_date&quot;: &quot;2015-06-25T04:00:00Z&quot;, &quot;job_id&quot;: &quot;IT_PROG&quot;, &quot;salary&quot;: 6000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 103, &quot;department_id&quot;: 60 } ### Update an employee [PUT /employees/{id}] Update an employee, by using put with the a payload containing: last_name, job_id, salary and department_id. + Parameters + id: `220` (number, required) - Id of an employee. + Request (application/json) {&quot;LAST_NAME&quot;:&quot;TESTUPDATE&quot;, &quot;JOB_ID&quot;:&quot;SA_REP&quot;, &quot;SALARY&quot;:8000, &quot;DEPARTMENT_ID&quot;:80} + Response 200 (application/json) { &quot;employee_id&quot;: 220, &quot;first_name&quot;: &quot;TESTFIRST&quot;, &quot;last_name&quot;: &quot;TESTUPDATE&quot;, &quot;email&quot;: &quot;TESTMAIL&quot;, &quot;phone_number&quot;: null, &quot;hire_date&quot;: &quot;2015-06-25T04:00:00Z&quot;, &quot;job_id&quot;: &quot;SA_REP&quot;, &quot;salary&quot;: 8000, &quot;commission_pct&quot;: null, &quot;manager_id&quot;: 103, &quot;department_id&quot;: 80 } ## Departments Collection [/departments] ### Get a department [GET /department/{id}] Get a particular department by providing an identifier. + Parameters + id: `30` (number, required) - Id of a department. + Response 200 (application/json) { &quot;department_id&quot;: 30, &quot;department_name&quot;: &quot;Purchasing&quot;, &quot;manager_id&quot;: 114, &quot;location_id&quot;: 1700 } ### Get a department and employee [GET /departments/{department_id}/employees/{employee_id}] Get a particular department by providing a department identifier and a particular employee within that department by providing an employee identifier. + Parameters + department_id: `30` (number, required) - Id of a department. + employee_id: `119` (number, required) - Id of an employee. + Response 200 (application/json) { &quot;department_id&quot;: 30, &quot;department_name&quot;: &quot;Purchasing&quot;, &quot;employee_id&quot;: 119, &quot;first_name&quot;: &quot;Karen&quot;, &quot;last_name&quot;: &quot;Colmenares&quot; } </pre> <h2><span style="font-weight: bold">Apiary Editor, instant feedback</span></h2> <p><i>The Apiary Editor gives you instant feedback on any warnings or errors in your document as you type. The feedback will include line numbers and explanations for the warnings and errors, which will take you to the corresponding line in the editor when clicked.</i><br /> <a href="https://help.apiary.io/tools/apiary-editor/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/apiary-editor/]</sub></a></p> <p>For example:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_40.jpg?resize=535%2C253&#038;ssl=1" alt="" width="535" height="253" data-recalc-dims="1" /></p> <p>The semantic issues shown above where solved by, changing the URI template to:</p> <p><a style="font-family: Courier New;color: black">### Get a department and employee [GET /departments/{department_id}/employees/{employee_id}]</a></p> <p>After changing the content of the API Blueprint tutorial (<i>a polls service, which allows consumers to view polls and vote in them</i>) in order to describe the functionality of the HumanResourceService, the Apiary Editor looks like:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_41.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <h2><span style="font-weight: bold">Mock Server</span></h2> <p><i>The Mock Server allows you to try out your API as you design it, giving immediate feedback along the way in how it may be used.</i></p> <p><i>The Mock Server accomplishes this by listening for requests as you’ve defined them in your blueprint. When a request is received to your Mock Server for a URL you’ve defined, the corresponding response for that request will be returned.</i><br /> <a href="https://help.apiary.io/tools/mock-server/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/mock-server/]</sub></a></p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_42.jpg?resize=702%2C213&#038;ssl=1" alt="" width="702" height="213" data-recalc-dims="1" /></p> <p>The Mock Server for the “HumanResourceService” API is listening at:<br /> <a href="http://private-b4874b1-humanresourceservice.apiary-mock.com" target="_blank" rel="noopener">http://private-b4874b1-humanresourceservice.apiary-mock.com</a></p> <p><i>You will have your own private URL for the Mock Server. This is to ensure that other users do not see the traffic you’re sending to the server.</i><br /> <a href="https://help.apiary.io/tools/mock-server/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/mock-server/]</sub></a></p> <p>Interacting with the Mock Server can be done:</p> <ul> <li>Directly</li> <li>By using code examples</li> <li>By using the console</li> </ul> <p><b><u>Interacting with the Mock Server directly</u></b><br /> <i>This URL may be used to interact directly with the server. You can make requests with applications like </i><i>curl</i><i> or </i><i>Paw</i><i> to that URL and will get responses defined in the API Description.</i><br /> <a href="https://help.apiary.io/tools/mock-server/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/mock-server/]</sub></a></p> <p><b><u>Interacting with the Mock Server by using code examples</u></b><br /> <i>Apiary provides <b>code examples</b> that you may use to interact with the Mock Server. You can get to these examples by clicking on any action in the documentation.</i><br /> <a href="https://help.apiary.io/tools/mock-server/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/mock-server/]</sub></a></p> <p><b><u>Interacting with the Mock Server by using the console</u></b><br /> <i>The console in the documentation is where you can send requests to the Mock Server directly from the documentation (along with the Debugging Proxy and your production server). You can get to this by clicking on an action in the documentation, then clicking “Switch to Console” in the <a style="color: purple"><b>machine</b></a> column.</i><br /> <a href="https://help.apiary.io/tools/mock-server/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/mock-server/]</sub></a></p> <h2><span style="font-weight: bold">Interactive Documentation</span></h2> <p>When you don’t need to see the left pane (Editor) anymore, you can switch in the header to “Documentation”.</p> <p><i>The interactive documentation contains two main columns: the <a style="color: green"><b>human</b></a> and <a style="color: purple"><b>machine</b></a> columns. These two columns provide the separation that is important for reading the documentation and actually using tooling to interact with it.</i><br /> <a href="https://help.apiary.io/tools/interactive-documentation/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/interactive-documentation/]</sub></a></p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_43.jpg?resize=702%2C378&#038;ssl=1" alt="" width="702" height="378" data-recalc-dims="1" /></p> <p>After clicking on an action (for example: “Get all employees”) in the documentation (<a style="color: green"><b>human</b></a> column) the right pane (<a style="color: purple"><b>machine</b></a> column) shows <b>code examples</b>.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_44.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <p>Default the “Raw” type is selected, but there is a drop down that has a list of the available languages for the code examples.</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_45.jpg?resize=702%2C667&#038;ssl=1" alt="" width="702" height="667" data-recalc-dims="1" /></p> <p>When choosing for example “Java” as language for the code example, the following is shown:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_46.jpg?resize=702%2C668&#038;ssl=1" alt="" width="702" height="668" data-recalc-dims="1" /></p> <pre class="brush: xml; title: ; notranslate"> // Maven : Add these dependecies to your pom.xml (java6+) // &lt;dependency&gt; // &lt;groupId&gt;org.glassfish.jersey.core&lt;/groupId&gt; // &lt;artifactId&gt;jersey-client&lt;/artifactId&gt; // &lt;version&gt;2.8&lt;/version&gt; // &lt;/dependency&gt; // &lt;dependency&gt; // &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt; // &lt;artifactId&gt;jersey-media-json-jackson&lt;/artifactId&gt; // &lt;version&gt;2.8&lt;/version&gt; // &lt;/dependency&gt; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Response; import javax.ws.rs.core.MediaType; Client client = ClientBuilder.newClient(); Response response = client.target(&quot;https://private-b4874b1-humanresourceservice.apiary-mock.com/employees&quot;) .request(MediaType.TEXT_PLAIN_TYPE) .get(); System.out.println(&quot;status: &quot; + response.getStatus()); System.out.println(&quot;headers: &quot; + response.getHeaders()); System.out.println(&quot;body:&quot; + response.readEntity(String.class)); </pre> <p>This “Java” code example can be used to interact with the Mock Server.</p> <p>When choosing for example “Python” as language for the code example, the following is shown:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_47.jpg?resize=702%2C666&#038;ssl=1" alt="" width="702" height="666" data-recalc-dims="1" /></p> <pre class="brush: xml; title: ; notranslate"> from urllib2 import Request, urlopen request = Request('https://private-b4874b1-humanresourceservice.apiary-mock.com/employees') response_body = urlopen(request).read() print response_body </pre> <p>This “Python” code example can be used to interact with the Mock Server.</p> <p>After clicking on an action (for example: “Get all employees”) in the documentation (<a style="color: green"><b>human</b></a> column) and then in the right pane (<a style="color: purple"><b>machine</b></a> column) clicking on button “Switch to Console” (or on the button “Try” in the code example<b>)</b>, the <b>Console</b> is shown.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_48.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <p>For the action “Get all employees”, in line with the specifications, the <b>URI Parameters</b>, <b>Headers</b> and <b>Body</b> parts are empty.</p> <p>When you click on the button “Call Resource”, the response is shown:</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_49.jpg?resize=702%2C661&#038;ssl=1" alt="" width="702" height="661" data-recalc-dims="1" /></p> <p>After clicking on the action “Create an employee” in the documentation (<a style="color: green"><b>human</b></a> column) and then in the right pane (<a style="color: purple"><b>machine</b></a> column) clicking on button “Switch to Console”, the following is shown.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_50.jpg?resize=702%2C401&#038;ssl=1" alt="" width="702" height="401" data-recalc-dims="1" /></p> <p>For the action “Create an employee”, in line with the specifications, the <b>Headers</b> part is filled.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_51.jpg?resize=702%2C539&#038;ssl=1" alt="" width="702" height="539" data-recalc-dims="1" /></p> <p>For the action “Create an employee”, in line with the specifications, the <b>Body</b> part is filled.</p> <p>After clicking on the action “Get a department and employee” in the documentation (<a style="color: green"><b>human</b></a> column) and then in the right pane (<a style="color: purple"><b>machine</b></a> column) clicking on button “Switch to Console”, the following is shown.</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_52.jpg?resize=702%2C441&#038;ssl=1" alt="" width="702" height="441" data-recalc-dims="1" /></p> <p>For the action “Get a department and employee”, in line with the specifications, the <b>URI Parameters</b> part is filled.</p> <h2><span style="font-weight: bold">API Inspector</span></h2> <p><i>Each request and response from the Mock Server is logged in the API Inspector, which can be found by clicking “Inspector” in the Apiary header. There you will see each request received, each response given, and any validation errors that were found.</i><br /> <a href="https://help.apiary.io/tools/api-inspector/" target="_blank" rel="noopener"><sub>[https://help.apiary.io/tools/api-inspector/]</sub></a></p> <p>For example:</p> <p><img src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_53.jpg?resize=702%2C134&#038;ssl=1" alt="" width="702" height="134" data-recalc-dims="1" /></p> <p>For each request (by clicking on it) more details are available:</p> <p><img src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_54.jpg?resize=702%2C377&#038;ssl=1" alt="" width="702" height="377" data-recalc-dims="1" /></p> <h2><span style="font-weight: bold">API Test</span></h2> <p>When you click on the header item “Test”, the following is shown.</p> <p><img src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2018/02/lameriks_201801_55.jpg?resize=702%2C259&#038;ssl=1" alt="" width="702" height="259" data-recalc-dims="1" /></p> <p>For more information about testing your API , please see the available documentation.</p> <h2><span style="font-weight: bold">Summary</span></h2> <p>In this first article in the series about Oracle API Platform Cloud Service, the focus is on the <b>Design-First approach</b> and using <b>Oracle Apiary</b>.<b></b></p> <p>“API-First Development” experience (commonly referred to as Design-First Development) is one of the Key Design Principles of Oracle API Platform Cloud Service. Developers kick off the development process discussing the API with their potential customers, generate use cases, and mock up the API before even developing the application.</p> <p>The Developer Portal of API Platform CS is tightly linked with Oracle Apiary.</p> <p>Oracle Apiary provides you with the ability to design APIs using either API Blueprint or Swagger 2.0. From these description files, Oracle Apiary generates interactive documentation and a console for making calls to the APIs from the UI.</p> <p>This article shows you how, with the help of Oracle Apiary, a “HumanResourceService” API is created, based on API Blueprint and example JSON payload’s (based on some tables in the “HR’ schema).</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2018/01/31/oracle-api-platform-cloud-service-design-first-approach-using-oracle-apiary/">Oracle API Platform Cloud Service: Design-First approach and using Oracle Apiary</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Marc Lameriks https://technology.amis.nl/?p=47483 Wed Jan 31 2018 02:10:00 GMT-0500 (EST) See me, see it at Collaborate18 http://noriegaaoracleexpert.blogspot.com/2018/01/see-me-see-it-at-collaborate18.html <div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><span style="color: yellow; font-size: x-large;"><b>You are invited to Collaborate18</b></span></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-eQDAxs91Ejw/WnEbzmiZRkI/AAAAAAAASrw/cvrXAq4tFbE_kDrFSXgkpMzbiWmUkph8QCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1366" height="359" src="https://4.bp.blogspot.com/-eQDAxs91Ejw/WnEbzmiZRkI/AAAAAAAASrw/cvrXAq4tFbE_kDrFSXgkpMzbiWmUkph8QCLcBGAs/s640/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-g1FRQr301Ko/WnEbsMQWAWI/AAAAAAAASrs/rvF2Zg1BZikjqugkXahPvw1PzOqi_r8BgCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1365" src="https://3.bp.blogspot.com/-g1FRQr301Ko/WnEbsMQWAWI/AAAAAAAASrs/rvF2Zg1BZikjqugkXahPvw1PzOqi_r8BgCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-og1fZ0ldE40/WnEcGNJZWzI/AAAAAAAASr0/UIAaU2ma0FYTz7gGh67bMc5IqahKY9fDQCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1366" height="358" src="https://1.bp.blogspot.com/-og1fZ0ldE40/WnEcGNJZWzI/AAAAAAAASr0/UIAaU2ma0FYTz7gGh67bMc5IqahKY9fDQCLcBGAs/s640/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-mcxAvu_jwNM/WnEcGA7MWsI/AAAAAAAASr4/szEBMeRjcTg186wPF77GuM1GvmA3IZbcACLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1365" src="https://2.bp.blogspot.com/-mcxAvu_jwNM/WnEcGA7MWsI/AAAAAAAASr4/szEBMeRjcTg186wPF77GuM1GvmA3IZbcACLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-_AU5N_pA-ZE/WnEcMmw04fI/AAAAAAAASsE/J5Ag7_vDb6QgP3ZIvex0kR1v3mQgN9CAgCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1366" height="358" src="https://4.bp.blogspot.com/-_AU5N_pA-ZE/WnEcMmw04fI/AAAAAAAASsE/J5Ag7_vDb6QgP3ZIvex0kR1v3mQgN9CAgCLcBGAs/s640/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-nS_qYiC8LXI/WnEcMtoU7DI/AAAAAAAASsA/ClPw2v-FzTQx9Xq6TfEtGo6F6uYL7Tu2QCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1365" src="https://1.bp.blogspot.com/-nS_qYiC8LXI/WnEcMtoU7DI/AAAAAAAASsA/ClPw2v-FzTQx9Xq6TfEtGo6F6uYL7Tu2QCLcBGAs/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-_AU5N_pA-ZE/WnEcMmw04fI/AAAAAAAASsE/FXZnYK6ShyAM5skoiAeVH9u-PdFmDyrbQCEwYBhgL/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1366" height="358" src="https://1.bp.blogspot.com/-_AU5N_pA-ZE/WnEcMmw04fI/AAAAAAAASsE/FXZnYK6ShyAM5skoiAeVH9u-PdFmDyrbQCEwYBhgL/s640/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.30%2BPM.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-nS_qYiC8LXI/WnEcMtoU7DI/AAAAAAAASsA/0LcRGTjf5KgnHG_HUMus3h6MqIRI5Y4iQCEwYBhgL/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1365" src="https://1.bp.blogspot.com/-nS_qYiC8LXI/WnEcMtoU7DI/AAAAAAAASsA/0LcRGTjf5KgnHG_HUMus3h6MqIRI5Y4iQCEwYBhgL/s1600/Screen%2BShot%2B2018-01-30%2Bat%2B8.27.40%2BPM.png" /></a></div><br /></div> Anthony D Noriega tag:blogger.com,1999:blog-4535123449935735221.post-3821274971423549616 Tue Jan 30 2018 20:31:00 GMT-0500 (EST) JET 4.1 : How to use toastr to show non-blocking notifications http://lucbors.blogspot.com/2018/01/jet-41-how-to-use-toastr-to-show-non.html Luc Bors tag:blogger.com,1999:blog-29432516.post-5210993881916305265 Tue Jan 30 2018 14:37:00 GMT-0500 (EST)