ODTUG Aggregator ODTUG Blogs http://localhost:8080 Thu, 25 May 2017 17:58:05 +0000 http://aggrssgator.com/ Docker, WebLogic Image on Amazon EC2 Container Service https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/ <p><strong>This blog series shows how to get started with WebLogic and Docker &#8211; in 3 different Clouds:</strong></p> <ul> <li><a href="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/">Docker and the Oracle Images</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/">Create and run a WebLogic Docker Image on a local machine and upload the WebLogic Docker Image into the Docker Hub registry</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/">WebLogic Docker Container on Oracle Container Cloud Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/">WebLogic Docker Container on Microsoft Azure Container Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/">WebLogic Docker Container on Amazon EC2 Container Service</a></li> </ul> <p>This blog is running a WebLogic Docker Container image from the Docker Hub registry on the Amazon EC2 Container Service.</p> <h2>Starting point &amp; Outline</h2> <p>Starting point for this blog is:</p> <ul> <li>A computer with a browser and MobaXterm installed</li> <li>A WebLogic Docker Container Image in a private Docker Hub repository, as described in <a href="https://technology.amis.nl/?p=44935&amp;preview=true">this blog</a></li> <li>Access to Amazon EC2</li> </ul> <p>The Amazon ECS cloud service knows the following concepts:</p> <ul> <li>Cluster: a Cluster is a set of EC2 instances (hosts) that are running the ECS container agent.</li> <li>Task: a Task definition describes how to run Docker containers in Amazon ECS. It describes the Docker image to use, CPU and memory requirements. networking, port mapping, etc. Tasks run on a Cluster.</li> <li>Service: a number of instances of a Task definition that runs simultaneously in a Cluster</li> </ul> <p>The Microsoft Azure and the Oracle Public Cloud offerings both had a clear distinction between the creation of the Container platform, and running containers on it. When you start with Amazon ECS, that is all combined into 1 wizard, where the platform (Cluster) is created and the first container that is run on that platform (Task).</p> <p>The cluster wizard uses an Amazon ECS-optimized AMI: the container agent is already installed. Making life easier <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <hr /> <p>&nbsp;</p> <h2>Create an Amazon EC2 Container Service, ECS</h2> <p>Start by logging in into your AWS console. I picked region Oregon – as it seems to be the cheapest.</p> <p><img data-attachment-id="45008" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-1-aws-console/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?fit=1827%2C695&amp;ssl=1" data-orig-size="1827,695" 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="5.1 AWS console" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?fit=300%2C114&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?fit=702%2C267&amp;ssl=1" class="alignnone wp-image-45008" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?resize=702%2C268&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?resize=1024%2C390&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?resize=300%2C114&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?resize=768%2C292&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.1-AWS-console.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Click on EC2 Container Service</p> <p><img data-attachment-id="45009" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-2-aws-console-get-started/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?fit=1832%2C782&amp;ssl=1" data-orig-size="1832,782" 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="5.2 AWS console get started" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?fit=300%2C128&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?fit=702%2C300&amp;ssl=1" class="alignnone size-large wp-image-45009" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?resize=702%2C300&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?resize=1024%2C437&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?resize=300%2C128&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?resize=768%2C328&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.2-AWS-console-get-started.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Click on Get started</p> <p><img data-attachment-id="45010" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-3-aws-wizard-no-repository/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?fit=1856%2C625&amp;ssl=1" data-orig-size="1856,625" 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="5.3 AWS wizard no repository" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?fit=300%2C101&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?fit=702%2C237&amp;ssl=1" class="alignnone size-large wp-image-45010" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?resize=702%2C237&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?resize=1024%2C345&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?resize=300%2C101&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?resize=768%2C259&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.3-AWS-wizard-no-repository.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Select the first option ‘Deploy a sample …’ and de-select the ‘Store container ….’ option. In our example, we don’t need a registry as we will use the WebLogic container image that we have in the Docker Hub registry.</p> <p><img data-attachment-id="45011" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-4-aws-wizard-step-1/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?fit=1002%2C958&amp;ssl=1" data-orig-size="1002,958" 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="5.4 AWS wizard step 1" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?fit=300%2C287&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?fit=702%2C671&amp;ssl=1" class="alignnone wp-image-45011" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?resize=702%2C671&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?w=1002&amp;ssl=1 1002w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?resize=300%2C287&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.4-AWS-wizard-step-1.png?resize=768%2C734&amp;ssl=1 768w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>The above figure shows step 1 of the wizard. On this page, the Task definition is created.</p> <p>Note that the image name points to the image we stored in Docker Hub. And don’t forget to add the port mapping for port 7001! Then, click Next step.</p> <p><img data-attachment-id="45012" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-5-aws-wizard-step-2/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?fit=1007%2C626&amp;ssl=1" data-orig-size="1007,626" 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="5.5 AWS wizard step 2" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?fit=300%2C186&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?fit=702%2C436&amp;ssl=1" class="alignnone wp-image-45012" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?resize=702%2C436&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?w=1007&amp;ssl=1 1007w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?resize=300%2C186&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.5-AWS-wizard-step-2.png?resize=768%2C477&amp;ssl=1 768w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>In this step, the Service is configured by giving it a name and configuring how many Tasks have to be run under that Service. Since we want to keep things simple, we decide to run only 1 Task under this Service. So, also no Load Balancer needed. Click Next step.</p> <p><img data-attachment-id="45013" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-6-aws-wizard-step-3/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?fit=1125%2C1021&amp;ssl=1" data-orig-size="1125,1021" 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="5.6 AWS wizard step 3" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?fit=300%2C272&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?fit=702%2C637&amp;ssl=1" class="alignnone size-large wp-image-45013" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?resize=702%2C637&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?resize=1024%2C929&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?resize=300%2C272&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?resize=768%2C697&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.6-AWS-wizard-step-3.png?w=1125&amp;ssl=1 1125w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Here, the Cluster has to be configured, i.e. the EC2 instances that the Containers will run on. Note to pick an EC2 instance type that is sufficient to run WebLogic on. I picked t2.large, which has 2 cores and 8 GB of RAM.</p> <p>Also, we need a key pair for logging in into the EC2 instances. For generating a new key pair, click on the ‘EC2 conole’ link. That will bring you to a page for creating key pairs. I created a new one, named ‘aws-lgo-weblogic’:</p> <p><img data-attachment-id="45014" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-7-aws-wizard-step-3-create-key-pair/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.7-AWS-wizard-step-3-create-key-pair.png?fit=422%2C175&amp;ssl=1" data-orig-size="422,175" 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="5.7 AWS wizard step 3 &#8211; create key pair" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.7-AWS-wizard-step-3-create-key-pair.png?fit=300%2C124&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.7-AWS-wizard-step-3-create-key-pair.png?fit=422%2C175&amp;ssl=1" class="alignnone wp-image-45014" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.7-AWS-wizard-step-3-create-key-pair.png?resize=306%2C127&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.7-AWS-wizard-step-3-create-key-pair.png?w=422&amp;ssl=1 422w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.7-AWS-wizard-step-3-create-key-pair.png?resize=300%2C124&amp;ssl=1 300w" sizes="(max-width: 306px) 100vw, 306px" data-recalc-dims="1" /></p> <p>Download the key and remember where you stored it: you will need it later on!</p> <p>Now, move back to the wizard page, refresh the key pair input field and select the keypair ‘aws-lgo-weblogic’:</p> <p><img data-attachment-id="45015" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-8-aws-wizard-step-3-select-key-pair/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.8-AWS-wizard-step-3-select-key-pair.png?fit=551%2C103&amp;ssl=1" data-orig-size="551,103" 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="5.8 AWS wizard step 3 &#8211; select key pair" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.8-AWS-wizard-step-3-select-key-pair.png?fit=300%2C56&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.8-AWS-wizard-step-3-select-key-pair.png?fit=551%2C103&amp;ssl=1" class="alignnone size-full wp-image-45015" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.8-AWS-wizard-step-3-select-key-pair.png?resize=551%2C103&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.8-AWS-wizard-step-3-select-key-pair.png?w=551&amp;ssl=1 551w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.8-AWS-wizard-step-3-select-key-pair.png?resize=300%2C56&amp;ssl=1 300w" sizes="(max-width: 551px) 100vw, 551px" data-recalc-dims="1" /></p> <p>Click Review &amp; launch:</p> <p><img data-attachment-id="45016" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-9-aws-wizard-step-4-review/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?fit=986%2C932&amp;ssl=1" data-orig-size="986,932" 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="5.9 AWS wizard step 4 &#8211; review" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?fit=300%2C284&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?fit=702%2C664&amp;ssl=1" class="alignnone wp-image-45016" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?resize=702%2C664&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?w=986&amp;ssl=1 986w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?resize=300%2C284&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.9-AWS-wizard-step-4-review.png?resize=768%2C726&amp;ssl=1 768w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Review the above page and when you’re OK with it, click ‘Launch instance &amp; run service’. That will bring you to a page where the progress of the Cluster creation is shown:</p> <p><img data-attachment-id="45017" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-10-aws-ecs-creation/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?fit=826%2C786&amp;ssl=1" data-orig-size="826,786" 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="5.10 AWS ECS creation" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?fit=300%2C285&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?fit=702%2C668&amp;ssl=1" class="alignnone wp-image-45017" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?resize=556%2C529&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?w=826&amp;ssl=1 826w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?resize=300%2C285&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.10-AWS-ECS-creation.png?resize=768%2C731&amp;ssl=1 768w" sizes="(max-width: 556px) 100vw, 556px" data-recalc-dims="1" /></p> <p>When your Cluster creation has finished, the ‘View service’ button as shown below will become visible:</p> <p><img data-attachment-id="45018" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-11-aws-ecs-creation-finished/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.11-AWS-ECS-creation-finished.png?fit=336%2C193&amp;ssl=1" data-orig-size="336,193" 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="5.11 AWS ECS creation finished" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.11-AWS-ECS-creation-finished.png?fit=300%2C172&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.11-AWS-ECS-creation-finished.png?fit=336%2C193&amp;ssl=1" class="alignnone wp-image-45018" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.11-AWS-ECS-creation-finished.png?resize=223%2C128&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.11-AWS-ECS-creation-finished.png?w=336&amp;ssl=1 336w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.11-AWS-ECS-creation-finished.png?resize=300%2C172&amp;ssl=1 300w" sizes="(max-width: 223px) 100vw, 223px" data-recalc-dims="1" /></p> <p>Click it! It will bring you to the Cluster overview page. Now, zoom in on the weblogic-cluster and go to the Tasks tab and then select the &#8216;Stopped&#8217; tasks. The resulting page should look like shown below:</p> <p><img data-attachment-id="45019" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-12-aws-ecs-cluster-status/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?fit=1901%2C789&amp;ssl=1" data-orig-size="1901,789" 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="5.12 AWS ECS cluster status" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?fit=300%2C125&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?fit=702%2C291&amp;ssl=1" class="alignnone wp-image-45019" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?resize=702%2C292&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?resize=1024%2C425&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?resize=300%2C125&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?resize=768%2C319&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.12-AWS-ECS-cluster-status.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>The page shows that something is going wrong in our Cluster: why are there so many Tasks? Why are they STOPPED? So, let’s drill in on one of the many stopped tasks by clicking a Task link:</p> <p><img data-attachment-id="45020" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-13-aws-ecs-cluster-task-cause/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?fit1711%2C791&amp;ssl=1" data-orig-size="1711,791" 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="5.13 AWS ECS cluster task cause" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?fit=300%2C139&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?fit=702%2C324&amp;ssl=1" class="alignnone wp-image-45020" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?resize=702%2C324&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?resize=1024%2C473&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?resize=300%2C139&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?resize=768%2C355&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.13-AWS-ECS-cluster-task-cause.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>This reveals what&#8217;s going on. The message ‘STOPPED (CannotPullContainerError: Error: image lgorissen/m)’ means that the WebLogic image can’t be accessed. Which makes sense, because in the whole configuration wizard, we have not entered the credentials for accessing the private Docker Hub registry!</p> <p>We need to configure the EC2 instance so it can access the Docker Hub registry.</p> <p>First, look up the ip address of the EC2 instance. Go to the Amazon console and select the ‘instances’ section:</p> <p><img data-attachment-id="45021" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-14-aws-ecs-cluster-ip-address/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?fit=1861%2C275&amp;ssl=1" data-orig-size="1861,275" 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="5.14 AWS ECS cluster ip address" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?fit=300%2C44&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?fit=702%2C104&amp;ssl=1" class="alignnone wp-image-45021" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?resize=702%2C103&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?resize=1024%2C151&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?resize=300%2C44&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?resize=768%2C113&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.14-AWS-ECS-cluster-ip-address.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Note the ip address.</p> <p>Fire up MobaXterm, click &#8216;Start a new remote session&#8217; and select session type &#8216;SSH&#8217; and use the public IP number and the earlier downloaded SSH key:</p> <p><img data-attachment-id="45022" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-15-aws-mobaxterm/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?fit=1195%2C799&amp;ssl=1" data-orig-size="1195,799" 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="5.15 AWS MobaXterm" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?fit=300%2C201&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?fit=702%2C470&amp;ssl=1" class="alignnone size-large wp-image-45022" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?resize=702%2C470&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?resize=1024%2C685&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?resize=300%2C201&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?resize=768%2C513&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.15-AWS-MobaXterm.png?w=1195&amp;ssl=1 1195w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Click OK to start the session, and <strong>login as  ec2-user</strong> : it should look like shown below:</p> <p><img data-attachment-id="45023" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-16-aws-mobaxterm-session/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?fit=1150%2C690&amp;ssl=1" data-orig-size="1150,690" 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="5.16 AWS MobaXterm session" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?fit=300%2C180&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?fit=702%2C421&amp;ssl=1" class="alignnone size-large wp-image-45023" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?resize=702%2C421&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?resize=1024%2C614&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?resize=300%2C180&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?resize=768%2C461&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.16-AWS-MobaXterm-session.png?w=1150&amp;ssl=1 1150w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>In that terminal, we will edit the Amazon ECS container agent configuration file:</p> <pre class="brush: bash; title: ; notranslate"> [ec2-user@ip-10-0-1-142 ~]$ sudo vi /etc/ecs/ecs.config </pre> <p>And add the two lines below (insert your appropriate username, password and e-mail!):</p> <pre class="brush: bash; title: ; notranslate"> ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={&quot;https://index.docker.io/v1/&quot;:{&quot;username&quot;:&quot;lgorissen&quot;,&quot;password&quot;:&quot;&lt;your_password&gt;&quot;,&quot;email&quot;:&quot;l.gorissen@icloud.com&quot;}} </pre> <p>Next, (1) ensure that the agent uses the ECS_DATADIR variable, (2) re-start the ecs agent and (3) verify that the agent is running:</p> <pre class="brush: bash; title: ; notranslate"> [ec2-user@ip-10-0-1-142 ~]$ docker inspect ecs-agent | grep ECS_DATADIR &quot;ECS_DATADIR=/data&quot;, [ec2-user@ip-10-0-1-142 ~]$ sudo stop ecs ecs stop/waiting [ec2-user@ip-10-0-1-142 ~]$ sudo start ecs ecs start/running, process 3266 [ec2-user@ip-10-0-1-142 ~]$ curl http://localhost:51678/v1/metadata {&quot;Cluster&quot;:&quot;weblogic-cluster&quot;,&quot;ContainerInstanceArn&quot;:&quot;arn:aws:ecs:us-west-2:009784947762:container-instance/ff16c35d-9339-4522-a28e-a11e2e7a3268&quot;,&quot;Version&quot;:&quot;Amazon ECS Agent - v1.14.1 (467c3d7)&quot;} [ec2-user@ip-10-0-1-142 ~]$ </pre> <p>Back to the weblogic-cluster overview page, the cluster should now have a Task with status RUNNING:</p> <p><img data-attachment-id="45024" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-17-aws-ecs-cluster-task-running/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?fit=1638%2C531&amp;ssl=1" data-orig-size="1638,531" 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="5.17 AWS ECS cluster task running" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?fit=300%2C97&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?fit=702%2C228&amp;ssl=1" class="alignnone wp-image-45024" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?resize=702%2C228&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?resize=1024%2C332&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?resize=300%2C97&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?resize=768%2C249&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-cluster-task-running.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Then point browser to the public IP address you also used in the MobaXterm SSH session: http://35.160.191.190:7001/console</p> <p><img data-attachment-id="45025" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-17-aws-ecs-weblogic-1/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?fit=946%2C169&amp;ssl=1" data-orig-size="946,169" 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="5.17 AWS ECS WebLogic 1" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?fit=300%2C54&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?fit=702%2C125&amp;ssl=1" class="alignnone wp-image-45025" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?resize=621%2C111&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?w=946&amp;ssl=1 946w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?resize=300%2C54&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.17-AWS-ECS-WebLogic-1.png?resize=768%2C137&amp;ssl=1 768w" sizes="(max-width: 621px) 100vw, 621px" data-recalc-dims="1" /></p> <p>And after logging in, check for the developer_domain:</p> <p><img data-attachment-id="45026" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/5-19-aws-ecs-weblogic-2/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?fit=1107%2C549&amp;ssl=1" data-orig-size="1107,549" 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="5.19 AWS ECS WebLogic 2" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?fit=300%2C149&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?fit=702%2C348&amp;ssl=1" class="alignnone size-large wp-image-45026" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?resize=702%2C348&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?resize=1024%2C508&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?resize=300%2C149&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?resize=768%2C381&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/5.19-AWS-ECS-WebLogic-2.png?w=1107&amp;ssl=1 1107w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>&nbsp;</p> <p>Indeed, this must be from our Container image from Docker Hub!</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/">Docker, WebLogic Image on Amazon EC2 Container Service</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Luc Gorissen https://technology.amis.nl/?p=44941 Wed May 24 2017 10:39:46 GMT-0400 (EDT) Docker, WebLogic Image on Microsoft Azure Container Service https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/ <p><strong>This blog series shows how to get started with WebLogic and Docker &#8211; in 3 different Clouds:</strong></p> <ul> <li><a href="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/">Docker and the Oracle Images</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/">Create and run a WebLogic Docker Image on a local machine and upload the WebLogic Docker Image into the Docker Hub registry</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/">WebLogic Docker Container on Oracle Container Cloud Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/">WebLogic Docker Container on Microsoft Azure Container Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/">WebLogic Docker Container on Amazon EC2 Container Service</a></li> </ul> <p>This blog is running a WebLogic Docker Container image from the Docker Hub registry on the Microsoft Azure Container Service.</p> <h2>Starting point &amp; Outline</h2> <p>Starting point for this blog is:</p> <ul> <li>A computer running Ubuntu and with Docker installed</li> <li>A WebLogic Docker Container Image in a private Docker Hub repository, as described in <a href="https://technology.amis.nl/?p=44935&amp;preview=true">this blog</a></li> <li>Access to Microsoft Azure, e.g. via a trial subscription</li> </ul> <p>The blog itself consists of 2 main parts:</p> <ol> <li>Create an Azure Container Service</li> <li>Run the container image from the Docker Hub repository on the created Cloud Service</li> </ol> <hr /> <p>&nbsp;</p> <h2>Create an Azure Container Service</h2> <p>The Azure Container Service offers the choice between using Docker Swarm, DC/OS, or Kubernetes for orchestration/management of the Docker container solution. For our specific use case, I picked Docker Swarm.</p> <p>The high level steps for creating your Azure Container Service are:</p> <ul> <li>create an SSH RSA public key</li> <li>deploy an Azure Container Service cluster (via the Azure portal), by using an Azure Resource Manager template (for Docker Swarm)</li> </ul> <p>Let’s get started.</p> <ul> <li><strong>create an SSH RSA public key</strong></li> </ul> <p>Log in into the Ubuntu machine and generate the key:</p> <pre class="brush: bash; title: ; notranslate"> developer@developer-VirtualBox:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/developer/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/developer/.ssh/id_rsa. Your public key has been saved in /home/developer/.ssh/id_rsa.pub. The key fingerprint is: SHA256:Lpm8BrZoQscz1E6Maq9J0WdjjLjHAP5fxZXBdlrdzMY developer@developer-VirtualBox The key's randomart image is: +---[RSA 2048]----+ |          ..  .+.| |           ooo .E| |.   +     .o+  . | |o ooo+  . ..     | | =+oo*  So       | | +*=*o.+.        | |ooo*oo=..        | |o =.o oo         | | =.  o.          | +----[SHA256]-----+ developer@developer-VirtualBox:~$ </pre> <ul> <li><strong>deploy an Azure Container Service cluster (via the Azure portal), by using an Azure Resource Manager template (for Docker Swarm)</strong></li> </ul> <p>First, login into the Microsoft Azure Portal on <a href="http://portal.azure.com">http://portal.azure.com</a>. Here, click the + sign, select ‘Containers’ and then ‘Azure Container Service’:</p> <p><img data-attachment-id="44991" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-1-azure-add-container-service/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?fit=1103%2C871&amp;ssl=1" data-orig-size="1103,871" 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="4.1 Azure Add Container Service" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?fit=300%2C237&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?fit=702%2C555&amp;ssl=1" class="alignnone wp-image-44991" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?resize=487%2C385&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?resize=1024%2C809&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?resize=300%2C237&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?resize=768%2C606&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.1-Azure-Add-Container-Service.png?w=1103&amp;ssl=1 1103w" sizes="(max-width: 487px) 100vw, 487px" data-recalc-dims="1" /></p> <p>The next screen appears:</p> <p><img data-attachment-id="44993" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-2-azure-create-container-service/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?fit=828%2C852&amp;ssl=1" data-orig-size="828,852" 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="4.2 Azure Create Container Service" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?fit=292%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?fit=702%2C722&amp;ssl=1" class="alignnone wp-image-44993" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?resize=488%2C502&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?w=828&amp;ssl=1 828w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?resize=292%2C300&amp;ssl=1 292w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.2-Azure-Create-Container-Service.png?resize=768%2C790&amp;ssl=1 768w" sizes="(max-width: 488px) 100vw, 488px" data-recalc-dims="1" /></p> <p>Click the Create button.</p> <p><img data-attachment-id="44994" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-3-azure-create-container-service-configuration/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?fit=903%2C882&amp;ssl=1" data-orig-size="903,882" 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="4.3 Azure Create Container Service configuration" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?fit=300%2C293&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?fit=702%2C686&amp;ssl=1" class="alignnone wp-image-44994" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?resize=526%2C513&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?w=903&amp;ssl=1 903w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?resize=300%2C293&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.3-Azure-Create-Container-Service-configuration.png?resize=768%2C750&amp;ssl=1 768w" sizes="(max-width: 526px) 100vw, 526px" data-recalc-dims="1" /></p> <p>Complete the settings like shown in the figure above and click OK to move to the next page:</p> <p><img data-attachment-id="44995" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-4-azure-create-container-service-master-configuration/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?fit=904%2C897&amp;ssl=1" data-orig-size="904,897" 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="4.4 Azure Create Container Service master configuration" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?fit=300%2C298&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?fit=702%2C697&amp;ssl=1" class="alignnone wp-image-44995" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?resize=531%2C527&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?w=904&amp;ssl=1 904w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?resize=150%2C150&amp;ssl=1 150w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?resize=300%2C298&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?resize=768%2C762&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.4-Azure-Create-Container-Service-master-configuration.png?resize=144%2C144&amp;ssl=1 144w" sizes="(max-width: 531px) 100vw, 531px" data-recalc-dims="1" /></p> <p>For the Master configuration, complete the settings as shown above. Use the SSH key that was created in step (1). Note that the ‘Master’ is the Manager node in a Docker Swarm. One Master node is enough for this simple configuration. Next, click OK.</p> <p><img data-attachment-id="44996" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-5-azure-create-container-service-agent-configuration/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?fit=890%2C874&amp;ssl=1" data-orig-size="890,874" 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="4.5 Azure Create Container Service agent configuration" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?fit=300%2C295&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?fit=702%2C689&amp;ssl=1" class="alignnone wp-image-44996" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?resize=539%2C529&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?w=890&amp;ssl=1 890w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?resize=300%2C295&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.5-Azure-Create-Container-Service-agent-configuration.png?resize=768%2C754&amp;ssl=1 768w" sizes="(max-width: 539px) 100vw, 539px" data-recalc-dims="1" /></p> <p>That brings us to the Agent configuration page, where Agent is actually a Docker Swarm Worker node. We need only 1 agent. For the Virtual Machine size, the DS2 profile is chosen, which has 2 cpu cores and 7GB of RAM. That should be enough to run the WebLogic container on.</p> <p>Click OK to continue:</p> <p><img data-attachment-id="44997" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-6-azure-create-container-service-configuration-summary/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?fit=1257%2C886&amp;ssl=1" data-orig-size="1257,886" 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="4.6 Azure Create Container Service configuration summary" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?fit=300%2C211&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?fit=702%2C495&amp;ssl=1" class="alignnone wp-image-44997" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?resize=546%2C385&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?resize=1024%2C722&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?resize=300%2C211&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?resize=768%2C541&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.6-Azure-Create-Container-Service-configuration-summary.png?w=1257&amp;ssl=1 1257w" sizes="(max-width: 546px) 100vw, 546px" data-recalc-dims="1" /></p> <p>Review the Summary page, and the click OK to start creation of your Azure Container Service:</p> <p><img data-attachment-id="44998" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-7-azure-create-container-service-creation/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?fit=1856%2C834&amp;ssl=1" data-orig-size="1856,834" 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="4.7 Azure Create Container Service creation" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?fit=300%2C135&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?fit=702%2C315&amp;ssl=1" class="alignnone wp-image-44998" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?resize=702%2C315&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?resize=1024%2C460&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?resize=300%2C135&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?resize=768%2C345&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.7-Azure-Create-Container-Service-creation.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>After some time, your Azure Container Service will be created!</p> <hr /> <p>&nbsp;</p> <h2>Run the WebLogic image from Docker Hub registry</h2> <p>Now, we will start to get the WebLogic image from the Docker Hub registry running on the Azure Container Service. This is achieved from the command line of our local Ubuntu machine – the one that also has Docker installed.</p> <p>The following steps will be done:</p> <ul> <li>Make a tunnel to the Master node</li> <li>Run the WebLogic container</li> <li>Add a LoadBalancer rule for forwarding port 7001</li> <li>Test</li> </ul> <p>Let’s get started.</p> <ul> <li><strong>Make a SSH tunnel to the Master node</strong></li> </ul> <p>From the local Ubuntu machine, make an SSH tunnel to the Master node. In that way, docker commands from the Ubuntu machine will be handled by the Docker Swarm container on the Master node. First, establish the tunnel, set the Docker host that will be used by the local Ubuntu machine and then list the images. The output of the ‘docker images list’ command shows what Docker images are available on the Master node – in our case: none (as this is a fresh installation):</p> <pre class="brush: bash; title: ; notranslate"> developer@developer-VirtualBox:~$ ssh -fNL 2375:localhost:2375 -p 2200 lgorisse@lgomgmt.northeurope.cloudapp.azure.com developer@developer-VirtualBox:~$ export DOCKER_HOST=:2375 developer@developer-VirtualBox:~$ docker images list REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE developer@developer-VirtualBox:~$ </pre> <ul> <li><strong>Run the WebLogic container</strong></li> </ul> <p>Now, give the commands below on the local Ubuntu machine to start the WebLogic container on the Azure Container Service. The WebLogic container will run on the agent machine.</p> <p>The following steps have to be done:</p> <ul> <li>Login into the Docker Hub, using your Docker Hub account. This is necessary because the Docker Hub registry that I used is a private registry (= password protected)</li> <li>Pull the WebLogic Container image with the docker pull command</li> <li>Run the image with the port mapping for port 7001</li> <li>Notice in the output below that I also had a yeasy/simple-web container running</li> </ul> <pre class="brush: bash; title: ; notranslate"> developer@developer-VirtualBox:~$ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: lgorissen Password: Login Succeeded developer@developer-VirtualBox:~$ docker pull lgorissen/myfirstweblogic Using default tag: latest swarm-agent-595FAAF3000001: Pulling lgorissen/myfirstweblogic:latest... : downloaded developer@developer-VirtualBox:~$ docker run -d -p 7001:7001 lgorissen/myfirstweblogic 6506b88dc7cc166df55c470e4e7f9732cfb55353c8a1a84d8048c7689c886a7c developer@developer-VirtualBox:~$ docker container ps CONTAINER ID        IMAGE                       COMMAND                  CREATED                  STATUS              PORTS                                                   NAMES 6506b88dc7cc        lgorissen/myfirstweblogic   &quot;startWebLogic.sh&quot;       Less than a second ago   Up 21 seconds       5556/tcp, 7002/tcp, 8453/tcp, 10.0.0.5:7001-&gt;7001/tcp   swarm-agent-595FAAF3000001/competent_allen fd4c32b1fd19        yeasy/simple-web            &quot;/bin/sh -c 'pytho...&quot;   8 minutes ago            Up 8 minutes        10.0.0.5:80-&gt;80/tcp                                     swarm-agent-595FAAF3000001/pensive_pike developer@developer-VirtualBox:~$ </pre> <ul> <li><strong>Add a LoadBalancer rule for forwarding port 7001</strong></li> </ul> <p>In this set-up, the Agent machine can’t be reached over port 7001. A route in the LoadBalancer that routes traffic for this port has to be created. Creating that LoadBalancer route can be done in the Azure Portal. First, look up the resource groups in the portal:</p> <p><img data-attachment-id="44999" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-8-azure-lb_rule-resource-group/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.8-Azure-LB_Rule-resource-group.png?fit=480%2C460&amp;ssl=1" data-orig-size="480,460" 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="4.8 Azure LB_Rule resource group" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.8-Azure-LB_Rule-resource-group.png?fit=300%2C288&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.8-Azure-LB_Rule-resource-group.png?fit=480%2C460&amp;ssl=1" class="alignnone wp-image-44999" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.8-Azure-LB_Rule-resource-group.png?resize=333%2C319&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.8-Azure-LB_Rule-resource-group.png?w=480&amp;ssl=1 480w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.8-Azure-LB_Rule-resource-group.png?resize=300%2C288&amp;ssl=1 300w" sizes="(max-width: 333px) 100vw, 333px" data-recalc-dims="1" /></p> <p>Open the weblogic-demo resource group by clicking on it:</p> <p><img data-attachment-id="45000" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-9-azure-lb_rule-resource-group-opened/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?fit=1867%2C876&amp;ssl=1" data-orig-size="1867,876" 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="4.9 Azure LB_Rule resource group opened" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?fit=300%2C141&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?fit=702%2C329&amp;ssl=1" class="alignnone wp-image-45000" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?resize=702%2C329&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?resize=1024%2C480&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?resize=300%2C141&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?resize=768%2C360&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.9-Azure-LB_Rule-resource-group-opened.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Click on the Load balancer for the agent (remember, out WebLogic container is running on the agent virtual machine). That brings up the Load balancer screen:</p> <p><img data-attachment-id="45001" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-10-azure-lb_rule-rules-agent/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?fit=1916%2C917&amp;ssl=1" data-orig-size="1916,917" 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="4.10 Azure LB_Rule Rules agent" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?fit=300%2C144&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?fit=702%2C336&amp;ssl=1" class="alignnone wp-image-45001" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?resize=702%2C336&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?resize=1024%2C490&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?resize=300%2C144&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?resize=768%2C368&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?resize=1078%2C516&amp;ssl=1 1078w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?resize=702%2C336&amp;ssl=1 702w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.10-Azure-LB_Rule-Rules-agent.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Click on the Add sign to add a new load balancer rule for port 7001:</p> <p><img data-attachment-id="45002" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-11-azure-lb_rule-rules-7001/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?fit=806%2C876&amp;ssl=1" data-orig-size="806,876" 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="4.11 Azure LB_Rule Rules 7001" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?fit=276%2C300&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?fit=702%2C763&amp;ssl=1" class="alignnone wp-image-45002" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?resize=579%2C629&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?w=806&amp;ssl=1 806w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?resize=276%2C300&amp;ssl=1 276w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.11-Azure-LB_Rule-Rules-7001.png?resize=768%2C835&amp;ssl=1 768w" sizes="(max-width: 579px) 100vw, 579px" data-recalc-dims="1" /></p> <p>Enter front-end, back-end and port numbers to establish the new route and save it.</p> <p>&nbsp;</p> <ul> <li><strong>Test</strong></li> </ul> <p>Again look into the resource groups in the Azure Portal to find the public dns name for the agents:</p> <p><img data-attachment-id="45003" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/4-12-azure-agent-dns-name/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?fit=1536%2C420&amp;ssl=1" data-orig-size="1536,420" 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="4.12 Azure Agent dns name" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?fit=300%2C82&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?fit=702%2C192&amp;ssl=1" class="alignnone size-large wp-image-45003" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?resize=702%2C192&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?resize=1024%2C280&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?resize=300%2C82&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?resize=768%2C210&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?w=1536&amp;ssl=1 1536w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/4.12-Azure-Agent-dns-name.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>From the figure above, we see that the url to use for accessing the WebLogic container is: <a href="http://lgoagents.northeurope.cloudapp.azure.com:7001/">http://lgoagents.northeurope.cloudapp.azure.com:7001/</a></p> <p>Nifty :-S</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/">Docker, WebLogic Image on Microsoft Azure Container Service</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Luc Gorissen https://technology.amis.nl/?p=44939 Wed May 24 2017 10:37:37 GMT-0400 (EDT) Docker, WebLogic Image on Oracle Container Cloud Service https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/ <p><strong>This blog series shows how to get started with WebLogic and Docker &#8211; in 3 different Clouds:</strong></p> <ul> <li><a href="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/">Docker and the Oracle Images</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/">Create and run a WebLogic Docker Image on a local machine and upload the WebLogic Docker Image into the Docker Hub registry</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/">WebLogic Docker Container on Oracle Container Cloud Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/">WebLogic Docker Container on Microsoft Azure Container Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/">WebLogic Docker Container on Amazon EC2 Container Service</a></li> </ul> <h2>Starting point &amp; Outline</h2> <p>Starting point for this blog is:</p> <ul> <li>A computer with a browser</li> <li>A WebLogic Docker Container Image in a private Docker Hub repository, as described in this blog [todo: make reference]</li> <li>Identity Domain Administrator access to the Oracle Public Cloud, e.g. via a trial account</li> </ul> <p>The blog itself consists of 2 main parts:</p> <ol> <li>Create a Container Cloud Service</li> <li>Run the container image from the Docker Hub repository on the created Cloud Service</li> </ol> <hr /> <h2>Create a Container Cloud Service</h2> <p>First step is to create an Oracle Container Cloud Service. Start by logging in as Identity Domain Administrator. When you have a trial account, you will have received a mail like the one below:</p> <p><img data-attachment-id="44966" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-1-oracle-myservices-mail/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?fit=949%2C458&amp;ssl=1" data-orig-size="949,458" 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="3.1 Oracle MyServices mail" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?fit=300%2C145&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?fit=702%2C339&amp;ssl=1" class="alignnone wp-image-44966" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?resize=516%2C249&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?w=949&amp;ssl=1 949w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?resize=300%2C145&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.1-Oracle-MyServices-mail.png?resize=768%2C371&amp;ssl=1 768w" sizes="(max-width: 516px) 100vw, 516px" data-recalc-dims="1" /></p> <p>Login into MyServices Administration using the url from the mail as shown above:</p> <p><img data-attachment-id="44967" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-2-oracle-myservices-page/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?fit=1913%2C738&amp;ssl=1" data-orig-size="1913,738" 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="3.2 Oracle MyServices page" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?fit=300%2C116&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?fit=702%2C271&amp;ssl=1" class="alignnone wp-image-44967" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?resize=557%2C215&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?resize=1024%2C395&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?resize=300%2C116&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?resize=768%2C296&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.2-Oracle-MyServices-page.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 557px) 100vw, 557px" data-recalc-dims="1" /></p> <p>Click on the ‘Create Instance’ to start provisioning fo the Container Cloud Service. A pop-up is now shown:</p> <p><img data-attachment-id="44968" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-3-oracle-myservices-popup/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?fit=938%2C584&amp;ssl=1" data-orig-size="938,584" 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="3.3 Oracle MyServices popup" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?fit=300%2C187&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?fit=702%2C437&amp;ssl=1" class="alignnone wp-image-44968" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?resize=480%2C299&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?w=938&amp;ssl=1 938w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?resize=300%2C187&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.3-Oracle-MyServices-popup.png?resize=768%2C478&amp;ssl=1 768w" sizes="(max-width: 480px) 100vw, 480px" data-recalc-dims="1" /></p> <p>Pick the Container (cloud service), which brings you to the first page of the wizard for creation of the Container Cloud Service:</p> <p><img data-attachment-id="44969" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-4-oracle-myservices-service-wizard-1/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?fit=1614%2C679&amp;ssl=1" data-orig-size="1614,679" 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="3.4 Oracle MyServices service wizard 1" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?fit=300%2C126&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?fit=702%2C295&amp;ssl=1" class="alignnone wp-image-44969" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?resize=547%2C230&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?resize=1024%2C431&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?resize=300%2C126&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?resize=768%2C323&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.4-Oracle-MyServices-service-wizard-1.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 547px) 100vw, 547px" data-recalc-dims="1" /></p> <p>Click &#8216;Create Service&#8217; button:</p> <p><img data-attachment-id="44970" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-5-oracle-myservices-service-wizard-2/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?fit=1601%2C781&amp;ssl=1" data-orig-size="1601,781" 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="3.5 Oracle MyServices service wizard 2" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?fit=300%2C146&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?fit=702%2C343&amp;ssl=1" class="alignnone size-large wp-image-44970" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?resize=702%2C343&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?resize=1024%2C500&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?resize=300%2C146&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?resize=768%2C375&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.5-Oracle-MyServices-service-wizard-2.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>On this page, create the SSH Public Key: click the Edit button and select &#8216;Create a New Key&#8217;:</p> <p><img data-attachment-id="44971" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-6-oracle-myservices-service-wizard-2-key-gen/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.6-Oracle-MyServices-service-wizard-2-key-gen.png?fit=651%2C490&amp;ssl=1" data-orig-size="651,490" 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="3.6 Oracle MyServices service wizard 2 key gen" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.6-Oracle-MyServices-service-wizard-2-key-gen.png?fit=300%2C226&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.6-Oracle-MyServices-service-wizard-2-key-gen.png?fit=651%2C490&amp;ssl=1" class="alignnone wp-image-44971" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.6-Oracle-MyServices-service-wizard-2-key-gen.png?resize=419%2C315&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.6-Oracle-MyServices-service-wizard-2-key-gen.png?w=651&amp;ssl=1 651w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.6-Oracle-MyServices-service-wizard-2-key-gen.png?resize=300%2C226&amp;ssl=1 300w" sizes="(max-width: 419px) 100vw, 419px" data-recalc-dims="1" /></p> <p>Click Enter:</p> <p><img data-attachment-id="44972" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-7-oracle-myservices-service-wizard-2-key-gen-download/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.7-Oracle-MyServices-service-wizard-2-key-gen-download.png?fit=529%2C163&amp;ssl=1" data-orig-size="529,163" 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="3.7 Oracle MyServices service wizard 2 key gen download" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.7-Oracle-MyServices-service-wizard-2-key-gen-download.png?fit=300%2C92&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.7-Oracle-MyServices-service-wizard-2-key-gen-download.png?fit=529%2C163&amp;ssl=1" class="alignnone wp-image-44972" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.7-Oracle-MyServices-service-wizard-2-key-gen-download.png?resize=289%2C89&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.7-Oracle-MyServices-service-wizard-2-key-gen-download.png?w=529&amp;ssl=1 529w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.7-Oracle-MyServices-service-wizard-2-key-gen-download.png?resize=300%2C92&amp;ssl=1 300w" sizes="(max-width: 289px) 100vw, 289px" data-recalc-dims="1" /></p> <p>Download the key. Continue by clicking Next. That brings you to the overview page:</p> <p><img data-attachment-id="44973" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-8-oracle-myservices-service-wizard-3-overview/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?fit=1615%2C678&amp;ssl=1" data-orig-size="1615,678" 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="3.8 Oracle MyServices service wizard 3 overview" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?fit=300%2C126&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?fit=702%2C295&amp;ssl=1" class="alignnone wp-image-44973" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?resize=540%2C227&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?resize=1024%2C430&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?resize=300%2C126&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?resize=768%2C322&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.8-Oracle-MyServices-service-wizard-3-overview.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 540px) 100vw, 540px" data-recalc-dims="1" /></p> <p>Review the data and then click ‘Create’ to start creation of the Container Cloud Service:</p> <p><img data-attachment-id="44974" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-9-oracle-service-creation/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?fit=1624%2C794&amp;ssl=1" data-orig-size="1624,794" 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="3.9 Oracle service creation" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?fit=300%2C147&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?fit=702%2C343&amp;ssl=1" class="alignnone wp-image-44974" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?resize=538%2C263&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?resize=1024%2C501&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?resize=300%2C147&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?resize=768%2C375&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.9-Oracle-service-creation.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 538px) 100vw, 538px" data-recalc-dims="1" /></p> <p>Now, the service is creating for several minutes &#8211; mine took 11 minutes. The page will then look like:</p> <p><img data-attachment-id="44975" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-10-oracle-service-created/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?fit=1278%2C145&amp;ssl=1" data-orig-size="1278,145" 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="3.10 Oracle service created" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?fit=300%2C34&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?fit=702%2C80&amp;ssl=1" class="alignnone wp-image-44975" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?resize=524%2C59&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?resize=1024%2C116&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?resize=300%2C34&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?resize=768%2C87&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.10-Oracle-service-created.png?w=1278&amp;ssl=1 1278w" sizes="(max-width: 524px) 100vw, 524px" data-recalc-dims="1" /></p> <p>Click on the ‘WebLogicService’, which brings you to a more detailed overview of your created Container Cloud Service:</p> <p><img data-attachment-id="44976" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-11-oracle-service-container-console/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?fit=1606%2C786&amp;ssl=1" data-orig-size="1606,786" 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="3.11 Oracle service container console" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?fit=300%2C147&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?fit=702%2C343&amp;ssl=1" class="alignnone wp-image-44976" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?resize=534%2C261&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?resize=1024%2C501&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?resize=300%2C147&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?resize=768%2C376&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.11-Oracle-service-container-console.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 534px) 100vw, 534px" data-recalc-dims="1" /></p> <p>Like shown in the above picture: go to the ‘Container Console’:</p> <p><img data-attachment-id="44977" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-12-oracle-service-container-console-login/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.12-Oracle-service-container-console-login.png?fit=474%2C437&amp;ssl=1" data-orig-size="474,437" 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="3.12 Oracle service container console login" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.12-Oracle-service-container-console-login.png?fit=300%2C277&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.12-Oracle-service-container-console-login.png?fit=474%2C437&amp;ssl=1" class="alignnone wp-image-44977" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.12-Oracle-service-container-console-login.png?resize=302%2C278&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.12-Oracle-service-container-console-login.png?w=474&amp;ssl=1 474w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.12-Oracle-service-container-console-login.png?resize=300%2C277&amp;ssl=1 300w" sizes="(max-width: 302px) 100vw, 302px" data-recalc-dims="1" /></p> <p>Login with the admin username and password that you entered when creating the Container Cloud Service. This will now bring you to the Dashboard of the Cloud Container Service named WebLogicService:</p> <p><img data-attachment-id="44978" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-13-oracle-service-container-console/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?fit=1901%2C927&amp;ssl=1" data-orig-size="1901,927" 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="3.13 Oracle service container console" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?fit=300%2C146&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?fit=702%2C342&amp;ssl=1" class="alignnone wp-image-44978" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?resize=521%2C254&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?resize=1024%2C499&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?resize=300%2C146&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?resize=768%2C375&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.13-Oracle-service-container-console.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 521px) 100vw, 521px" data-recalc-dims="1" /></p> <p>In this console, the main concepts of the Oracle Container Cloud Service are clearly visible:</p> <ul> <li>Task: action created in the Oracle Container Cloud Service as a response to your requests</li> <li>Event: individual, discrete operations on the Oracle Container Cloud Service</li> <li>Service: comprises the information required for running a Docker image on a host</li> <li>Stack: comprises the configuration for running a set of services as a single entity</li> <li>Deployment: a deployed service or stack on the Oracle Container Cloud Service</li> <li>Container: a Docker container, i.e. a process created to run a Docker image</li> <li>Image: a Docker image</li> <li>Hosts: the Oracle Compute virtual machines that are managed by the Oracle Container Cloud Service (also: worker nodes)</li> <li>Resource Pools: a combination of hosts into groups of compute resources</li> <li>Registry: a Docker registry, i.e. a system for storing and sharing Docker images</li> <li>Tags: labels for organizing resource pools and the hosts within them (used for management)</li> </ul> <p>&nbsp;</p> <hr /> <h2>Run the WebLogic image from Docker Hub registry</h2> <p>With the Oracle Container Cloud Service up and running, we can start running the WebLogic image that we have in Docker Hub. The following has to be done:</p> <ol> <li>Update the registry to access the private Docker Hub repository where the WebLogic image is stored</li> <li>Create a Service for the WebLogic container image</li> <li>Deploy the Service</li> <li>Test the deployment</li> </ol> <p>Steps are shown below:</p> <ul> <li><strong>Update the registry to access the private Docker Hub repository where the WebLogic image is stored</strong></li> </ul> <p>Goto registries:</p> <p><img data-attachment-id="44979" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-14-oracle-registries/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?fit=1725%2C752&amp;ssl=1" data-orig-size="1725,752" 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="3.14 Oracle registries" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?fit=300%2C131&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?fit=702%2C306&amp;ssl=1" class="alignnone wp-image-44979" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?resize=603%2C263&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?resize=1024%2C446&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?resize=300%2C131&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?resize=768%2C335&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.14-Oracle-registries.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 603px) 100vw, 603px" data-recalc-dims="1" /></p> <p>Click the Edit button and add the authorization details for the private Docker Hub registry:</p> <p><img data-attachment-id="44980" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-15-oracle-registries-edited/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.15-Oracle-registries-edited.png?fit=768%2C572&amp;ssl=1" data-orig-size="768,572" 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="3.15 Oracle registries edited" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.15-Oracle-registries-edited.png?fit=300%2C223&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.15-Oracle-registries-edited.png?fit=702%2C523&amp;ssl=1" class="alignnone wp-image-44980" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.15-Oracle-registries-edited.png?resize=520%2C387&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.15-Oracle-registries-edited.png?w=768&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.15-Oracle-registries-edited.png?resize=300%2C223&amp;ssl=1 300w" sizes="(max-width: 520px) 100vw, 520px" data-recalc-dims="1" /></p> <p>&nbsp;</p> <ul> <li><strong>Create a Service for the WebLogic container image</strong></li> </ul> <p>Next, we’ll create a Service that describes how we want to deploy the WebLogic container image. Goto the Services page and click on the New Service button:</p> <p><img data-attachment-id="44981" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-16-oracle-services/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?fit=1682%2C398&amp;ssl=1" data-orig-size="1682,398" 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="3.16 Oracle services" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?fit=300%2C71&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?fit=702%2C166&amp;ssl=1" class="alignnone wp-image-44981" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?resize=626%2C148&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?resize=1024%2C242&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?resize=300%2C71&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?resize=768%2C182&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.16-Oracle-services.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 626px) 100vw, 626px" data-recalc-dims="1" /></p> <p>In the Service Editor pop-up, enter the values like shown below. Note the port mapping settings!</p> <p><img data-attachment-id="44982" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-17-oracle-weblogic-service/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?fit=1143%2C966&amp;ssl=1" data-orig-size="1143,966" 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="3.17 Oracle WebLogic service" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?fit=300%2C254&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?fit=702%2C593&amp;ssl=1" class="alignnone wp-image-44982" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?resize=524%2C443&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?resize=1024%2C865&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?resize=300%2C254&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?resize=768%2C649&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.17-Oracle-WebLogic-service.png?w=1143&amp;ssl=1 1143w" sizes="(max-width: 524px) 100vw, 524px" data-recalc-dims="1" /></p> <p>Click Save and note that the Service is added:</p> <p><img data-attachment-id="44983" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-18-oracle-weblogic-service-added/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?fit=706%2C165&amp;ssl=1" data-orig-size="706,165" 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="3.18 Oracle WebLogic service added" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?fit=300%2C70&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?fit=702%2C164&amp;ssl=1" class="alignnone wp-image-44983" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?resize=483%2C113&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?w=706&amp;ssl=1 706w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?resize=300%2C70&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.18-Oracle-WebLogic-service-added.png?resize=702%2C165&amp;ssl=1 702w" sizes="(max-width: 483px) 100vw, 483px" data-recalc-dims="1" /></p> <p>&nbsp;</p> <ul> <li><strong>Deploy the Service</strong></li> </ul> <p>&nbsp;</p> <p>In the previous sceen, click the green Deploy button to start deployment of the service.</p> <p><img data-attachment-id="44984" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-19-oracle-weblogic-service-deployment-settings/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?fit=762%2C668&amp;ssl=1" data-orig-size="762,668" 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="3.19 Oracle WebLogic service deployment settings" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?fit=300%2C263&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?fit=702%2C615&amp;ssl=1" class="alignnone wp-image-44984" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?resize=439%2C385&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?w=762&amp;ssl=1 762w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?resize=300%2C263&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.19-Oracle-WebLogic-service-deployment-settings.png?resize=110%2C96&amp;ssl=1 110w" sizes="(max-width: 439px) 100vw, 439px" data-recalc-dims="1" /></p> <p>Accept the default settings and click Deploy. After some time, i.e. when the deployment has completed, the Deployments tab will be colored green:</p> <p><img data-attachment-id="44985" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-20-oracle-weblogic-service-deployment-completed/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?fit=1914%2C835&amp;ssl=1" data-orig-size="1914,835" 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="3.20 Oracle WebLogic service deployment completed" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?fit=300%2C131&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?fit=702%2C306&amp;ssl=1" class="alignnone wp-image-44985" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?resize=540%2C236&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?resize=1024%2C447&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?resize=300%2C131&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?resize=768%2C335&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.20-Oracle-WebLogic-service-deployment-completed.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 540px) 100vw, 540px" data-recalc-dims="1" /></p> <p>&nbsp;</p> <ul> <li><strong>Test the deployment</strong></li> </ul> <p>First, check that the image has actually been pulled in on your host, by looking at the Images tab:</p> <p><img data-attachment-id="44986" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-21-oracle-weblogic-image/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?fit=1886%2C482&amp;ssl=1" data-orig-size="1886,482" 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="3.21 Oracle WebLogic image" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?fit=300%2C77&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?fit=702%2C180&amp;ssl=1" class="alignnone wp-image-44986" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?resize=698%2C178&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?resize=1024%2C262&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?resize=300%2C77&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?resize=768%2C196&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.21-Oracle-WebLogic-image.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 698px) 100vw, 698px" data-recalc-dims="1" /></p> <p>Then, check for the container to be up-and-running in the Containers tab:</p> <p><img data-attachment-id="44987" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-22-oracle-weblogic-container/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?fit=1890%2C474&amp;ssl=1" data-orig-size="1890,474" 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="3.22 Oracle WebLogic container" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?fit=300%2C75&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?fit=702%2C176&amp;ssl=1" class="alignnone size-large wp-image-44987" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?resize=702%2C176&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?resize=1024%2C257&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?resize=300%2C75&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?resize=768%2C193&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.22-Oracle-WebLogic-container.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Now, as a final check, you&#8217;ll want to log in into the weblogic console.</p> <p>First, go to the Hosts tab, and find the public ip address:</p> <p><img data-attachment-id="44988" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-23-oracle-host-ip/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?fit=1889%2C999&amp;ssl=1" data-orig-size="1889,999" 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="3.23 Oracle host ip" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?fit=300%2C159&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?fit=702%2C372&amp;ssl=1" class="alignnone size-large wp-image-44988" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?resize=702%2C372&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?resize=1024%2C542&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?resize=300%2C159&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?resize=768%2C406&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?resize=351%2C185&amp;ssl=1 351w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.23-Oracle-host-ip.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Then, point your browser to the familiar url, here: http://129.150.70.46:7001/console</p> <p><img data-attachment-id="44989" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/3-24-oracle-weblogic/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?fit=1910%2C958&amp;ssl=1" data-orig-size="1910,958" 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="3.24 Oracle WebLogic" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?fit=300%2C150&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?fit=702%2C352&amp;ssl=1" class="alignnone wp-image-44989" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?resize=509%2C255&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?resize=1024%2C514&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?resize=300%2C150&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?resize=768%2C385&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/3.24-Oracle-WebLogic.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 509px) 100vw, 509px" data-recalc-dims="1" /></p> <p>&#8230; and login to observe that the WebLogic server has the developer_domain, which is a clear indication that it is indeed running in our container from Docker Hub.</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/">Docker, WebLogic Image on Oracle Container Cloud Service</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Luc Gorissen https://technology.amis.nl/?p=44937 Wed May 24 2017 10:36:29 GMT-0400 (EDT) Docker, WebLogic Images on Local Linux https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/ <p><strong>This blog series shows how to get started with WebLogic and Docker &#8211; in 3 different Clouds:</strong></p> <ul> <li><a href="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/">Docker and the Oracle Images</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/">Create and run a WebLogic Docker Image on a local machine and upload the WebLogic Docker Image into the Docker Hub registry</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/">WebLogic Docker Container on Oracle Container Cloud Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/">WebLogic Docker Container on Microsoft Azure Container Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/">WebLogic Docker Container on Amazon EC2 Container Service</a></li> </ul> <p>This blog is about creating and running a WebLogic Docker Container on a local machine and uploading the image to the Docker Hub registry.</p> <h2>Outline</h2> <p>This blog will show how to create an Oracle WebLogic Docker container image, using the official Oracle Docker images on GitHub (<a href="https://github.com/oracle/docker-images">https://github.com/oracle/docker-images</a>). Next, that image will be uploaded to the Docker Hub registry. Finally, the image from the Docker Hub registry will be run on a local machine.</p> <h2>Starting point</h2> <p>Starting point for this blog is:</p> <ul> <li>a Docker account</li> <li>an Oracle Enterprise Linux 7.3 machine, with graphical capabilities</li> </ul> <p>&nbsp;</p> <h2>Start Docker EE for Oracle Linux trial</h2> <p>First thing to do is to start a (free) 1 month trial for ‘Docker Enterprise Edition for Oracle Linux’. Log in with your Docker account and go to the Docker store (<a href="https://store.docker.com/editions/enterprise/docker-ee-server-oraclelinux/trial">https://store.docker.com/editions/enterprise/docker-ee-server-oraclelinux/trial</a>):</p> <p><img data-attachment-id="44948" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/2-1-docker-free-trial/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?fit=1675%2C791&amp;ssl=1" data-orig-size="1675,791" 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="2.1 Docker free trial" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?fit=300%2C142&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?fit=702%2C332&amp;ssl=1" class="alignnone wp-image-44948" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?resize=598%2C283&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?resize=1024%2C484&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?resize=300%2C142&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?resize=768%2C363&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.1-Docker-free-trial.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 598px) 100vw, 598px" data-recalc-dims="1" /></p> <p>After you complete some more details and contact information, you will be on the page below:</p> <p><img data-attachment-id="44949" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/2-2-docker-get-url/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?fit=1535%2C660&amp;ssl=1" data-orig-size="1535,660" 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="2.2 Docker get url" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?fit=300%2C129&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?fit=702%2C302&amp;ssl=1" class="alignnone wp-image-44949" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?resize=609%2C261&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?resize=1024%2C440&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?resize=300%2C129&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?resize=768%2C330&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?w=1535&amp;ssl=1 1535w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.2-Docker-get-url.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 609px) 100vw, 609px" data-recalc-dims="1" /></p> <p>Copy <strong>YOUR</strong> URL: <a href="https://storebits.docker.com/ee/oraclelinux/sub-3495f92c">https://storebits.docker.com/ee/oraclelinux/sub-3495f92c</a>&#8230; as you will need it later.</p> <p>&nbsp;</p> <h2>Installation of Docker EE</h2> <p>&nbsp;</p> <p>I installed Docker EE on a OEL 7.3 machine. The steps are outlined below.</p> <ul> <li><strong>Check Linux Version and Kernel version</strong></li> </ul> <p>The commands below show how you can check the Linux release and Kernel version:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost ~]$ rpm -qf /etc/redhat-release oraclelinux-release-7.3-1.0.4.el7.x86_64 [developer@localhost ~]$ uname -r 4.1.12-61.1.18.el7uek.x86_64 [developer@localhost ~]$ </pre> <p>The Linux release and Kernel versions are important, as Docker EE for Oracle is certified for specific versions – a familiar topic for on-premises solutions. Note that I’m running UEK (Unbreakable Enterprise Kernel) and not RHCK (Red Hat Compatible Kernel). I proceeded with the UEK kernel, despite the fact that Docker EE is only certified for RHCK – and didn’t encounter problems. I wouldn’t recommend that for a production set-up <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <ul> <li><strong>Configure the yum repository</strong></li> </ul> <pre class="brush: bash; title: ; notranslate"> [developer@localhost ~]$ su - Password: Last login: Thu Apr 27 10:36:54 EDT 2017 on pts/0 [root@localhost ~]# vi /etc/yum yum/         yum.conf     yum.repos.d/ [root@localhost ~]# vi /etc/yum/vars/dockerurl </pre> <p>Now, paste the URL (the one you saved above) <a href="https://storebits.docker.com/ee/oralelinux/sub-3495f92c">https://storebits.docker.com/ee/oralelinux/sub-3495f92c</a>&#8230;  into the file, and save it.</p> <ul> <li><strong>Install yum-utils</strong></li> </ul> <p>Install yum-utils, which provides te yum-config-manager utility:</p> <pre class="brush: bash; title: ; notranslate"> $ sudo yum install -y yum-utils [root@localhost ~]# yum install -y yum-utils Loaded plugins: langpacks, ulninfo ol7_UEKR4                                                                                                                                    | 1.2 kB  00:00:00 ol7_latest                                                                                                                                   | 1.4 kB  00:00:00 Package yum-utils-1.1.31-40.el7.noarch already installed and latest version Nothing to do [root@localhost ~]# </pre> <ul> <li><strong>Add the stable yum repository</strong></li> </ul> <p>Use the following command to add the stable repository:</p> <pre class="brush: bash; title: ; notranslate"> [root@localhost ~]# yum-config-manager --add-repo https://storebits.docker.com/ee/oralelinux/sub-3495f92c-5a7e-4b52-b2ea-b95a8d03b9c1/docker-ee.repo&amp;lt;/pre&amp;gt; Loaded plugins: langpacks adding repo from: https://storebits.docker.com/ee/oralelinux/sub-3495f92c-5a7e-4b52-b2ea-b95a8d03b9c1/docker-ee.repo grabbing file https://storebits.docker.com/ee/oralelinux/sub-3495f92c-5a7e-4b52-b2ea-b95a8d03b9c1/docker-ee.repo to /etc/yum.repos.d/docker-ee.repo repo saved to /etc/yum.repos.d/docker-ee.repo [root@localhost ~]# </pre> <ul> <li><strong>prepare the yum cache</strong></li> </ul> <pre class="brush: bash; title: ; notranslate"> [root@localhost ~]# yum makecache fast Loaded plugins: langpacks, ulninfo docker-ee-stable-17.03                                                                                                                       | 2.9 kB  00:00:00 ol7_UEKR4                                                                                                                                    | 1.2 kB  00:00:00 ol7_latest                                                                                                                                   | 1.4 kB  00:00:00 docker-ee-stable-17.03/x86_64/primary_db                                                                                                     | 6.1 kB  00:00:00 Metadata Cache Created [root@localhost ~]# </pre> <ul> <li><strong>Install docker-ee package</strong></li> </ul> <p>Now, install docker-ee:</p> <pre class="brush: bash; title: ; notranslate"> [root@localhost ~]# yum -y install docker-ee Loaded plugins: langpacks, ulninfo Resolving Dependencies --&amp;gt; Running transaction check ---&amp;gt; Package docker-ee.x86_64 0:17.03.1.ee.3-1.el7 will be installed ... ... ... Installed: docker-ee.x86_64 0:17.03.1.ee.3-1.el7 Dependency Installed: docker-ee-selinux.noarch 0:17.03.1.ee.3-1.el7 Dependency Updated: selinux-policy.noarch 0:3.13.1-102.0.3.el7_3.16                              selinux-policy-targeted.noarch 0:3.13.1-102.0.3.el7_3.16 Complete! [root@localhost ~]# </pre> <h2>Start and test of Docker EE</h2> <p>Now it is time to test the Docker EE installation by starting the daemon and running a docker container.</p> <ul> <li><strong>Start Docker daemon</strong></li> </ul> <p>As user root:</p> <pre class="brush: bash; title: ; notranslate"> [root@localhost ~]# systemctl start docker [root@localhost ~]# </pre> <ul> <li><strong>Test docker</strong></li> </ul> <p>As user root, test by running the hello-world container image:</p> <pre class="brush: bash; title: ; notranslate"> [root@localhost ~]# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: - The Docker client contacted the Docker daemon. - The Docker daemon pulled the &amp;quot;hello-world&amp;quot; image from the Docker Hub. - The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. - The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/ [root@localhost ~]# </pre> <ul> <li><strong>Running Docker as non-root user</strong></li> </ul> <p>To run Docker as a non-root user, you must add that user to the group ‘docker’. Note that this may have security implications when you do this in a production set-up.</p> <p>First, verify that the group ‘docker’ is present and then add user ‘developer’ to that group:</p> <pre class="brush: bash; title: ; notranslate"> [root@localhost ~]# grep docker /etc/group docker:x:983: [root@localhost ~]# usermod -aG docker developer [root@localhost ~]# </pre> <p>Log-in as user developer (you may first need to log-out) and then test docker:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost ~]$ whoami developer [developer@localhost ~]$ docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: - The Docker client contacted the Docker daemon. - The Docker daemon pulled the &amp;quot;hello-world&amp;quot; image from the Docker Hub. - The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. - The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/ [developer@localhost ~]$ </pre> <h2>Build a WebLogic container image</h2> <p>With Docker installed on the system, we can start to build a WebLogic Docker container image. The following steps are required:</p> <ol> <li>Download the Oracle Docker image files from GitHub</li> <li>Build the Oracle JDK (Server JRE) base image</li> <li>Build the Oracle WebLogic Server install image</li> <li>Build the Oracle WebLogic Server domain image</li> </ol> <ul> <li><strong>Download Oracle Docker image files from github</strong></li> </ul> <p>In GitHub, find the Oracle Docker image files: <a href="https://github.com/oracle/docker-images">https://github.com/oracle/docker-images</a></p> <p><img data-attachment-id="44950" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/2-3-docker-github/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?fit=1449%2C359&amp;ssl=1" data-orig-size="1449,359" 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="2.3 Docker GitHub" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?fit=300%2C74&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?fit=702%2C174&amp;ssl=1" class="alignnone size-large wp-image-44950" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?resize=702%2C174&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?resize=1024%2C254&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?resize=300%2C74&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?resize=768%2C190&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.3-Docker-GitHub.png?w=1449&amp;ssl=1 1449w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Download them and unzip them as user developer in the home directory.</p> <ul> <li><strong>Build the Oracle JDK (Server JRE) base image</strong></li> </ul> <p>Download the jre (server-jre-8u131-linux-x64.tar.gz) from <a href="http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html">http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html</a>.</p> <p>Then build the Oracle Server JRE image:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost java-8]$ pwd /home/developer/docker-images-master/OracleJava/java-8 [developer@localhost java-8]$ mv ~/Downloads/server-jre-8u131-linux-x64.tar.gz . [developer@localhost java-8]$ docker build -t oracle/serverjre:8 . Sending build context to Docker daemon 54.72 MB Step 1/5 : FROM oraclelinux:7-slim 7-slim: Pulling from library/oraclelinux 1f5b026b07bc: Pull complete Digest: sha256:fdfc68d89f73172835cc2c715084b5a754cefa230b5012f7d2e8305f19acdce9 Status: Downloaded newer image for oraclelinux:7-slim ---&amp;gt; 442ebf722584 Step 2/5 : MAINTAINER Bruno Borges &amp;lt;bruno.borges@oracle.com&amp;gt; ---&amp;gt; Running in dd5326816e4d ---&amp;gt; 97d3fa9565ae Removing intermediate container dd5326816e4d Step 3/5 : ENV JAVA_PKG server-jre-8u*-linux-x64.tar.gz JAVA_HOME /usr/java/default ---&amp;gt; Running in 22cb13c0d942 ---&amp;gt; 5f4e6116a586 Removing intermediate container 22cb13c0d942 Step 4/5 : ADD $JAVA_PKG /usr/java/ ---&amp;gt; bded319e9e7d Removing intermediate container 09a592e1468e Step 5/5 : RUN export JAVA_DIR=$(ls -1 -d /usr/java/*) &amp;amp;&amp;amp;     ln -s $JAVA_DIR /usr/java/latest &amp;amp;&amp;amp;     ln -s $JAVA_DIR /usr/java/default &amp;amp;&amp;amp;     alternatives --install /usr/bin/java java $JAVA_DIR/bin/java 20000 &amp;amp;&amp;amp;     alternatives --install /usr/bin/javac javac $JAVA_DIR/bin/javac 20000 &amp;amp;&amp;amp;     alternatives --install /usr/bin/jar jar $JAVA_DIR/bin/jar 20000 ---&amp;gt; Running in 3a8c6176ff4f ---&amp;gt; 26377fc400d6 Removing intermediate container 3a8c6176ff4f Successfully built 26377fc400d6 [developer@localhost java-8]$ </pre> <ul> <li><strong>Build the Oracle WebLogic Server install image</strong></li> </ul> <p>Download files:</p> <ul> <li>WebLogic ‘fmw_12.2.1.0.0_wls_quick_Disk1_1of1.zip’ from <a href="http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html">http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html</a></li> <li>Java JRE ‘server-jre-8uXX-linux-x64.tar.gz’ from <a href="http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html">http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html</a> (the same one as above)</li> </ul> <p>Then build the Oracle WebLogic Server install image:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost 12.2.1]$ pwd /home/developer/docker-images-master/OracleWebLogic/dockerfiles/12.2.1 [developer@localhost 12.2.1]$ mv ~/Downloads/fmw_12.2.1.0.0_wls_quick_Disk1_1of1.zip . [developer@localhost 12.2.1]$ mv ~/Downloads/server-jre-8u131-linux-x64.tar.gz . [developer@localhost 12.2.1]$ cp Dockerfile.developer  Dockerfile [developer@localhost 12.2.1]$ docker build -t oracle/weblogic:12.2.1-developer . Sending build context to Docker daemon 276.1 MB Step 1/10 : FROM oracle/serverjre:8 ---&amp;gt; 26377fc400d6 Step 2/10 : MAINTAINER Bruno Borges &amp;lt;bruno.borges@oracle.com&amp;gt; … … Successfully built 98fd41ed6652 [developer@localhost 12.2.1]$ </pre> <p>Now, images are:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost 12.2.1]$ docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE oracle/weblogic     12.2.1-developer    98fd41ed6652        5 minutes ago       1.06 GB oracle/serverjre    8                   26377fc400d6        33 minutes ago      266 MB oraclelinux         7-slim              442ebf722584        6 days ago          114 MB hello-world         latest              48b5124b2768        3 months ago        1.84 kB [developer@localhost 12.2.1]$ </pre> <ul> <li><strong>Build the Oracle WebLogic Server domain image</strong></li> </ul> <p>Build the Oracle WebLogic Server domain image. Note that I chose to build an image with the domain named ‘developer_domain’. So, when later on, I start a container from this image and see the domain named ‘developer_domain’, I know that it is really from the image I built myself.</p> <p>The image is named ‘1221-domain’:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost 1221-domain]$ pwd /home/developer/docker-images-master/OracleWebLogicc/samples/1221-domain [developer@localhost 1221-domain]$ docker build -t 1221-domain --build-arg ADMIN_PASSWORD=welcome01 --build-arg DOMAIN_NAME=developer_domain . Sending build context to Docker daemon 27.14 kB Step 1/17 : FROM oracle/weblogic:12.2.1-developer ---&amp;gt; 98fd41ed6652 Step 2/17 : MAINTAINER Bruno Borges &amp;lt;bruno.borges@oracle.com&amp;gt; … … Successfully built 10e8405f95fa [developer@localhost 1221-domain]$ </pre> <h2>Run and Test theWebLogic container image</h2> <p>Running a container from this image is quite simple. The container is named wlsadmin, container port 7001 is mapped to port 7001 on the local machine:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost 1221-domain]$ docker run -d  --name wlsadmin -p 7001:7001 1221-domain 41cb5ee31b1fc0076e0b281cd0a4cd72744b7bc5855b1412a3c0cdd602b61725 </pre> <p>Verify that the container is running:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost 1221-domain]$ docker container list CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                                  NAMES 41cb5ee31b1f        1221-domain         &amp;quot;startWebLogic.sh&amp;quot;   29 seconds ago      Up 28 seconds       5556/tcp, 7002/tcp, 8453/tcp, 0.0.0.0:7001-&amp;gt;7001/tcp   wlsadmin [developer@localhost 1221-domain]$ </pre> <p>And the ultimate test is to point a browser to the well-known url <a href="http://localhost:7001/console">http://localhost:7001/console</a> and watch the WebLogic login screen appear!</p> <h2>Stop the WebLogic container</h2> <p>Stop the container using (part of) the container ID:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost ~]$ docker container list CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                                                  NAMES e283cbcebca9        1221-domain         &amp;quot;startWebLogic.sh&amp;quot;   About a minute ago   Up About a minute   5556/tcp, 7002/tcp, 8453/tcp, 0.0.0.0:7001-&amp;gt;7001/tcp   trusting_beaver [developer@localhost ~]$ docker stop e28 e28 [developer@localhost ~]$ </pre> <h2>Prepare a Docker Hub registry</h2> <p>We want to store the WebLogic container image that we created in the previous part in a Docker container registry. That should make this image available for running in the Oracle, Microsoft and Amazon clouds. The obvious choice is to use Docker Hub as a registry.</p> <p>First, log in into Docker Cloud (https://hub.docker.com) and use your Docker account to login:</p> <p><img data-attachment-id="44951" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/2-4-docker-hub-create/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?fit=1743%2C565&amp;ssl=1" data-orig-size="1743,565" 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="2.4 Docker Hub create" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?fit=300%2C97&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?fit=702%2C228&amp;ssl=1" class="alignnone size-large wp-image-44951" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?resize=702%2C228&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?resize=1024%2C332&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?resize=300%2C97&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?resize=768%2C249&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.4-Docker-Hub-create.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Click on &#8216;Create Repository&#8217; (remember: a repository is a part of a registry where images are stored that have the same name but different tags):</p> <p><img data-attachment-id="44958" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/2-5-docker-hub-create-registry/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?fit=1710%2C768&amp;ssl=1" data-orig-size="1710,768" 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="2.5 Docker Hub create registry" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?fit=300%2C135&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?fit=702%2C315&amp;ssl=1" class="alignnone size-large wp-image-44958" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?resize=702%2C315&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?resize=1024%2C460&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?resize=300%2C135&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?resize=768%2C345&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.5-Docker-Hub-create-registry.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>Add yourself (i.e. your own user account) as a collaborator:</p> <p><img data-attachment-id="44959" data-permalink="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/2-6-docker-hub-add-collaborator/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?fit=1648%2C552&amp;ssl=1" data-orig-size="1648,552" 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="2.6 Docker Hub add collaborator" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?fit=300%2C100&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?fit=702%2C235&amp;ssl=1" class="alignnone size-large wp-image-44959" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?resize=702%2C235&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?resize=1024%2C343&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?resize=300%2C100&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?resize=768%2C257&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/2.6-Docker-Hub-add-collaborator.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 702px) 100vw, 702px" data-recalc-dims="1" /></p> <p>You need to be added as ‘Collaborator’ so you can upload images!</p> <p>Now, the respository is ready to be used.</p> <h2>Upload the image into Docker Hub repository</h2> <p>First, tag the image with the same name that it has in the Docker Hub repository:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost ~]$ docker image list REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 1221-domain         latest              10e8405f95fa        37 hours ago        1.06 GB oracle/weblogic     12.2.1-developer    98fd41ed6652        38 hours ago        1.06 GB oracle/serverjre    8                   26377fc400d6        38 hours ago        266 MB oraclelinux         7-slim              442ebf722584        8 days ago          114 MB hello-world         latest              48b5124b2768        3 months ago        1.84 kB [developer@localhost ~]$ docker tag 1221-domain:latest lgorissen/myfirstweblogic:latest [developer@localhost ~]$ </pre> <p>For uploading the image, login into the repository and push the image:</p> <pre class="brush: bash; title: ; notranslate"> [developer@localhost ~]$ [developer@localhost ~]$ docker login Username: lgorissen Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Password: Login Succeeded [developer@localhost ~]$ docker push lgorissen/myfirstweblogic The push refers to a repository [docker.io/lgorissen/myfirstweblogic] bdf62266c46a: Pushed 018ffe8b5f56: Pushed 1b2e609eea7b: Pushed 091f64d4e188: Pushed 4ccdb37e8c17: Pushed b94907830dcf: Pushed latest: digest: sha256:0a38df39cdabe4b235e4547b5eaf7af4d2ea163e7bc8bc1bf2e5c333091a7042 size: 1582 [developer@localhost ~]$ </pre> <p>Now, verify in your Docker Hub repository that the image is actually there…</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/">Docker, WebLogic Images on Local Linux</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Luc Gorissen https://technology.amis.nl/?p=44935 Wed May 24 2017 10:35:31 GMT-0400 (EDT) Docker, Oracle Images and Cloud https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/ <h2>Overview</h2> <p>Oracle is embracing Docker &#8211; just like many other companies &#8211; as the de-facto standard in Container technologies. It has resulted in the certification of various Oracle products for running in Docker containers and even Oracle supported Docker images are available. Furthermore, Oracle offers 2 Cloud Service around containers: the Container Cloud Service is a generic service that offers a platform for running your containers. Next to that, Oracle offers the Application Container Cloud Service that is targeted to running Java SE, Node.JS, php and python applications. The Application Container Cloud Service is left out-of-scope.</p> <p><strong>This blog series shows how to get started with WebLogic and Docker &#8211; in 3 different Clouds:</strong></p> <ul> <li><a href="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/">Docker and the Oracle Images</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-images-local-linux/">Create and run a WebLogic Docker Image on a local machine and upload the WebLogic Docker Image into the Docker Hub registry</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-oracle-container-cloud-service/">WebLogic Docker Container on Oracle Container Cloud Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-microsoft-azure-container-service/">WebLogic Docker Container on Microsoft Azure Container Service</a></li> <li><a href="https://technology.amis.nl/2017/05/24/docker-weblogic-image-amazon-ec2-container-service/">WebLogic Docker Container on Amazon EC2 Container Service</a></li> </ul> <p><img data-attachment-id="44929" data-permalink="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/1-1-overview/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?fit=985%2C537&amp;ssl=1" data-orig-size="985,537" 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="1.1 Overview" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?fit=300%2C164&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?fit=702%2C383&amp;ssl=1" class="alignnone wp-image-44929" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?resize=596%2C325&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?w=985&amp;ssl=1 985w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?resize=300%2C164&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.1-Overview.png?resize=768%2C419&amp;ssl=1 768w" sizes="(max-width: 596px) 100vw, 596px" data-recalc-dims="1" /></p> <p>All cases describe the minimal steps to get a WebLogic container up and running: nothing fancy, very minimalistic, just to get you going.</p> <p>The approach for the Cloud use cases is similar for all 3 Cloud providers:</p> <ul> <li>get your container platform up and running (the &#8216;Container Service&#8217; in the cloud)</li> <li>start a WebLogic container from the image that we have first put on Docker Hub</li> </ul> <p>Some findings of the work done can be found at the bottom of this article.</p> <p>&nbsp;</p> <h2>Docker Overview</h2> <p>Even though this article is not intended as a Docker tutorial, below an overview of Docker concepts and terminology. That should be enough to get you moving if you&#8217;re new to this whole Docker containers thingies.</p> <p><strong>Docker container</strong></p> <p>A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings. A Docker container addresses the &#8216;runs-on-my-machine&#8217; problem: it is a complete package that runs on any machine. In doing so, it also simplifies your CI/CD solution.</p> <p><strong>Docker container vs virtualization</strong></p> <p>The biggest difference between Docker containers and virtualization solutions like Oracle VM is that a Docker container does not have a guest OS on board:</p> <p><img data-attachment-id="44930" data-permalink="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/1-2-container-vs-virtualization/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?fit=936%2C417&amp;ssl=1" data-orig-size="936,417" 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="1.2 Container vs Virtualization" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?fit=300%2C134&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?fit=702%2C313&amp;ssl=1" class="alignnone wp-image-44930" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?resize=646%2C288&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?w=936&amp;ssl=1 936w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?resize=300%2C134&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.2-Container-vs-Virtualization.png?resize=768%2C342&amp;ssl=1 768w" sizes="(max-width: 646px) 100vw, 646px" data-recalc-dims="1" /></p> <p>The above diagram is best described as &#8216;where Virtualization offer OS isolation, Docker containers offer process isolation&#8217;. That does imply that Virtualization offers better security: the &#8216;isolution&#8217; is at a lower level in the stack, thus making it less vulnerable.</p> <p><strong>Docker terminology</strong></p> <p>Docker made the diagram below, which illustrates the moving parts in a Docker setup:</p> <p><img data-attachment-id="44931" data-permalink="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/1-3-docker-architecture/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?fit=1173%2C615&amp;ssl=1" data-orig-size="1173,615" 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="1.3 Docker Architecture" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?fit=300%2C157&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?fit=702%2C368&amp;ssl=1" class="alignnone wp-image-44931" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?resize=630%2C330&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?resize=1024%2C537&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?resize=300%2C157&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?resize=768%2C403&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?resize=351%2C185&amp;ssl=1 351w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/1.3-Docker-Architecture.png?w=1173&amp;ssl=1 1173w" sizes="(max-width: 630px) 100vw, 630px" data-recalc-dims="1" /></p> <ul> <li><strong>Registry</strong>: a store for container Images</li> <li><strong>Repository</strong>: a set of different Docker Images with the same name and a different tag</li> <li><strong>Image</strong>: a package that defines a Container. It includes everything needed to run a container, including code, a runtime, environment variables, etc</li> <li><strong>Container</strong>: a running instance of an Image</li> <li><strong>Host</strong>: a machine running Containers</li> <li><strong>Daemon</strong>: process on the Host that manages the containers</li> <li><strong>Client</strong>: client for exchanges commands with the Daemon</li> <li><strong>Service</strong>: a group of containers that run from the same image</li> <li><strong>Swarm</strong>: a group of Docker hosts that run as a cluster. The Swarm consists of a number of Nodes and the Docker commands are handled by the Swarm Manager.</li> <li><strong>Stack</strong>: a group of Services that together are an application</li> </ul> <p>&nbsp;</p> <h2>Docker and management</h2> <p>A large scale Docker set-up needs proper management tooling. Popular candidates are:</p> <ul> <li>Docker Swarm</li> <li>Apache Mesos</li> <li>DC/OS</li> <li>Google Kubernetes</li> </ul> <p>In a cloud set-up, that choice is limited to what the cloud provider has pre-selected for you &#8211; the Microsoft Azure approach. Or, the offered Cloud interface may even hide from you the details about what management tooling is implemented: Oracle Container Cloud Service and Amazon EC2 Container Service.</p> <p>Of course, it is possible to only use the IAAS services from your Cloud provider and build up the whole Cloud Container platform yourself, similar to as if it were in your data center. For this blog series, that is out-of-scope.</p> <p>&nbsp;</p> <h2>Docker in real life</h2> <p>Before heading of quickly to your boss and promise that Docker containers will solve all of his application &#8216;packaging/deployment/CI/CD&#8217; problems, please read this section. My interpretation: <strong>using Docker in a real-life situation is more complicated than it seems at first glance.</strong></p> <p><strong>Environment</strong></p> <p>An application in a Docker container is rarely a completely isolated, stand-alone application. Normally, the application has configuration parameters that provide information on the environment that the application is running in. For example, host names, port numbers, DB urls, web service endpoints, user account names, etc. This environment specific information can be passed on to the container using environment variables. Both command-line and file-based entry is possible.</p> <p><strong>State</strong></p> <p>Docker containers by nature are stateless: a container starts, does its work for some time, and is then stopped. After the container is stopped, all of its internal state is gone. Obviously, that limits the practical usability of containers very much. The limitations are addressed by &#8216;data volumes&#8217;. A &#8216;data volume&#8217; enables the container to access a defined part of the file system of the host machine. That enables containers to persist data and also share data between containers. Best practice here is to also use separate, dedicated Data Volume Containers that share the data with other containers</p> <p><strong>Networking</strong></p> <p>Spinning up many containers also means that your networking has to be handled adequately: all traffic must be routed to the right container. The topic of Docker container networking is far beyond the scope of this blog. Please refer to the official documentation to get a first understanding: https://docs.docker.com/engine/userguide/networking/.</p> <p><strong>Security</strong></p> <p>You still have to do that yourself: Docker only delivers on &#8216;process isolation&#8217;.</p> <p><strong>Availability</strong></p> <p>Existing applications may have a high availability / clustering mechanism that doesn&#8217;t agree well with containers. For example, an active-passive set-up will not mix with scaling up through many containers. So, if you want to wrap your existing application into containers, you will have to consider this aspect.</p> <p><strong>Application architecture</strong></p> <p>Existing applications may not fit nicely into a container. Separation of state and environment data from application logic may prove to be difficult. When development of a new application is started, it is easier to take this into account up front.</p> <p><strong>Docker and Operating Systems</strong></p> <p>Containers rely on OS system calls. Therefore, mixing OS for host and container will not work. So,</p> <ul> <li>Linux host + Linux container = OK</li> <li>Windows host + windows container = OK</li> </ul> <p>However, it is possible to run a Linux container on windows. That solution is based on using the MobyLinuxVM on windows, and running a Linux container on top of that Linux VM.</p> <p>Furthermore, Kubernetes is working on a completely mixed Windows/Linux environment (https://www.mirantis.com/blog/linux-windows-living-together-total-chaos-ok-kubernetes-1-5/).</p> <p>Also note that the Windows containers implementation is currently (may 2017). E.g. Amazon claims (http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_Windows.html) that they still &#8216;consider it a beta that should not be used for production environments&#8217;. So, if you want to go into that direction, you should first investigate what the current status is!</p> <p>For the time being, just beware that mixing OS-es of host and container may be complex if not impossible. In the future, this I expect this all to be solved.</p> <p>To further confuse things: windows containers can be found with 2 isolation modes:</p> <ul> <li>Windows Server Containers: share the Windows kernel between containers</li> <li>Hyper-V Containers: runs each container in a thin VM, thus offering additional isolation (security)</li> </ul> <p>&nbsp;</p> <h2>Findings</h2> <p>I don’t intend to give a full-blown comparison of the different Cloud Container solutions that I worked with. But what I found remarkable:</p> <ul> <li>Making a custom Docker image for WebLogic is easy</li> <li>All Cloud solutions were easily accessible</li> <li>Using Docker containers for running your current applications may be difficult: your application may not ‘fit into a container’ (is containerizable a word?). For new applications, it is definitely worthwhile to consider the requirement ‘has to fit in a container’</li> <li>The Microsoft approach to containers is different from Oracle and Amazon. Microsoft offers the choice between some popular container management solutions, whereas Oracle and Amazon have built their own solution</li> <li>The Oracle solution was the only solution where I didn’t have to use a command-line console to get things up-and-running. I think that Oracle has found a good abstraction level for their UI, where all the container concepts like container, image, registry, service, task, etc are available in an intuitive way</li> <li>The Amazon solution seems to me to be somewhere in between the Oracle and Microsoft approach. They have abstracted a couple of concepts like cluster, task and service into their UI, but a bit more advanced stuff has to be done using command-line on the EC2 agent machines.</li> <li>For development purposes, by application developers with relatively little knowledge of infrastructure stuff, I would recommend looking at the Oracle Container Cloud Service. Mainly because of the clear UI.</li> <li>For production purposes, I don’t have an opinion by now. The Microsoft solution has pro’s and con’s. The fact that it uses existing container management software gives you more work (bad) but also more flexibility (good) and if you run into issues, you may find more ‘google-based-support’ (good). I expect the that the Amazon solution will require some scripting and command-line stuff – which may sound bad, but which may also offer flexibility and fit well with the skills of the system administrators that will have to manage the cloud platform. The Oracle solution seems to strike a good balance between platform configurability and ‘easy-to-use’ UI. That seems to best fulfill the Cloud promise of ‘all-you-need-is-a-credit-card-and-a-browser’.</li> <li>Note that these findings cover 3 Cloud container offerings. It is not intended to be a complete overview of what is happening in the Docker container eco system. Other platform solutions, like for example Red Hat OpenShift, should also be taken into account when selecting a Docker container platform.</li> <li>…. I welcome any of your considerations as a reply to this blog – please look for the reply box somewhere below <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li> </ul> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/24/docker-oracle-images-cloud/">Docker, Oracle Images and Cloud</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Luc Gorissen https://technology.amis.nl/?p=44927 Wed May 24 2017 10:33:19 GMT-0400 (EDT) LEAP#308 Combinational Logic 7-segment LED Driver http://blog.tardate.com/2017/05/leap308-combinational-logic-7-segment-led-driver.html <p>Ben Eater published a fantastic video/tutorial on designing a 7-segment hex decoder as an adjunct to his 8-bit breadboard computer quest. The first thought was of course “that’s an awful lot of work just to drive a 7-segment display .. lucky we don’t have to do that these days!” My next thought was naturally: “OK, now let’s build it!”. It was in fact a great excuse to dust off some combinational logic methods. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/LED7Segment/CombinationalLogicDriver">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/aD_J83ZpXYY" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/LED7Segment/CombinationalLogicDriver"><img src="http://leap.tardate.com/playground/LED7Segment/CombinationalLogicDriver/assets/CombinationalLogicDriver_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap308-combinational-logic-7-segment-led-driver.html Wed May 24 2017 07:21:42 GMT-0400 (EDT) ODTUG Kscope17 Women in Technology Event & 2017 Women in Technology Scholar http://www.odtug.com/p/bl/et/blogaid=720&source=1 Attend one of the hottest gatherings of the year – the ODTUG Kscope17 Women in Technology Event. Join men and women on Wednesday, June 28, at 12:15 PM for lunch, networking, and conversations surrounding workplace gender equality, workplace perception, work/life balance, and more. ODTUG http://www.odtug.com/p/bl/et/blogaid=720&source=1 Tue May 23 2017 10:51:57 GMT-0400 (EDT) 255 Again! https://jonathanlewis.wordpress.com/2017/05/23/255-again/ <p>There&#8217;s so many things that can go wrong when you start using tables with more than 255 columns &#8211; here&#8217;s one I discovered partly because I was thinking about a client requirement, partly because I had a vague memory of a change in behaviour in 12c and <a href="http://www.soocs.de/#blog"><em><strong>Stefan Koehler</strong></em></a> pointed me to <a href="http://orasql.org/2017/02/12/intra-block-row-chaining/"><em><strong>a blog note by Sayan Malakshinov</strong></em></a> when I asked the Oak Table if anyone remembered seeing the relevant note. Enough of the roundabout route, I&#8217;m going to start with a bit of code to create a table, stick a row in it, then update that row:</p> <pre class="brush: plain; title: ; notranslate"> rem rem Script: wide_table_4.sql rem Author: Jonathan Lewis rem Dated: May 2017 rem rem Last tested rem 12.2.0.1 rem 12.1.0.2 rem 11.2.0,4 rem set pagesize 0 set feedback off spool temp.sql prompt create table t1( select 'col' || to_char(rownum,'fm0000') || ' varchar2(10),' from all_objects where rownum &lt;= 320 ; prompt col0321 varchar2(10) prompt ) prompt / spool off @temp set pagesize 40 set feedback on insert into t1 (col0010, col0280) values ('0010','0280'); commit; update t1 set col0320 ='0320'; commit; column file_no new_value m_file_no column block_no new_value m_block_no select dbms_rowid.rowid_relative_fno(rowid) file_no, dbms_rowid.rowid_block_number(rowid) block_no, dbms_rowid.rowid_row_number(rowid) row_no from t1 ; alter system flush buffer_cache; alter system dump datafile &amp;m_file_no block &amp;m_block_no; </pre> <p>So I&#8217;ve written one of those horrible scripts that write a script and then run it. The script creates a table with 320 columns and inserts a row that populates columns 10 and 280. That gets me two row pieces, one consisting of the 255 columns from columns 26 to 280 that goes in as row piece 0, the other consisting of the first 25 columns that goes in as row piece 1; the remaining 40 columns are not populated so Oracle &#8220;forgets&#8221; about them (<strong><em><a href="https://jonathanlewis.wordpress.com/2012/10/01/row-sizes-2/">&#8220;trailing nulls take no space&#8221;</a></em></strong>). The script then updates the row by setting column 320 to a non-null value.</p> <p>For convenience I&#8217;ve then generated the file and block number (and row number, just to show its head piece went in as row 1 rather than row 0) of the row and done a symbolic block dump. The question is: what am I going to see in that block dump ?</p> <h3>Answers (part 1)</h3> <p>Here&#8217;s an extract from the block dump &#8211; though I&#8217;ve cut out a lot of lines reporting the NULL columns:</p> <pre class="brush: plain; title: ; notranslate"> ntab=1 nrow=2 frre=-1 fsbo=0x16 fseo=0x1e54 avsp=0x1e3e tosp=0x1f13 0xe:pti[0] nrow=2 offs=0 0x12:pri[0] offs=0x1e7a 0x14:pri[1] offs=0x1e54 block_row_dump: tab 0, row 0, @0x1e7a tl: 49 fb: -------- lb: 0x2 cc: 40 nrid: 0x014000a7.0 col 0: *NULL* col 1: *NULL* col 2: *NULL* ... col 37: *NULL* col 38: *NULL* col 39: *NULL* tab 0, row 1, @0x1e54 tl: 38 fb: --H-F--- lb: 0x2 cc: 25 nrid: 0x014000a3.0 col 0: *NULL* col 1: *NULL* col 2: *NULL* ... col 22: *NULL* col 23: *NULL* col 24: *NULL* end_of_block_dump </pre> <p>The block holds two row pieces, and the piece stored as <em>&#8220;row 1&#8221;</em> is the starting row piece (the H in the flag byte (<em><strong>fb</strong></em>) tells us this). This row piece consists of 25 columns. The next rowpiece (identified by <strong><em>nrid:</em></strong>) is row zero in block 0x014000a3 &#8211; that&#8217;s block 163 of file 5 &#8211; which is the same block as the first row piece. When we look at row zero we see that it holds 40 columns, all null; it&#8217;s pointing to a third row piece at row zero in block 0x014000a7 (file 5, block 167), and as corroboration we can also see that the flag byte has no bits set and that tells us that this is just a boring &#8220;somewhere in the middle&#8221; bit. So it looks like we have to follow the pointer to find the last 255 columns of the table. So let&#8217;s take a look at the dump of file 5 block 167:</p> <pre class="brush: plain; title: ; notranslate"> fsbo=0x14 fseo=0x1e76 avsp=0x1e62 tosp=0x1e62 0xe:pti[0] nrow=1 offs=0 0x12:pri[0] offs=0x1e76 block_row_dump: tab 0, row 0, @0x1e76 tl: 266 fb: -----L-- lb: 0x1 cc: 255 col 0: *NULL* col 1: *NULL* col 2: *NULL* ... col 251: *NULL* col 252: *NULL* col 253: *NULL* col 254: [ 4] 30 33 32 30 end_of_block_dump </pre> <p>Take note of the <em><strong>L</strong></em> in the flag byte &#8211; that tells us that we&#8217;re looking at the last row piece of a multi-piece row. It&#8217;s that last 255 columns we were looking for. The mechanics have worked as follows</p> <ul> <li>On the simple insert Oracle split the used 280 columns into (25, 255)</li> <li>On the update we grew the used column count from 280 to 320, adding 40 columns. Oracle extended the 255 column row piece to 295, then split it (40, 255) leaving 40 in the original block and migrating the 255 to a new block. So a row that could be only 2 pieces is now</li> </ul> <p>So a row that could be two pieces in one block is now three pieces spread over two blocks; and there&#8217;s worse to come. Go back to the original block dump and check the used space. A good first approximation would be to check the <em><strong>&#8220;tl:&#8221;</strong></em> (total length) value for each row &#8211; this gives you: 49 + 38 bytes; add on a couple of hundred for the general block overhead and stuff like the transaction table and you find you&#8217;ve used less than 300 bytes in the block. But I&#8217;ve got a little procedure (I published <a href="https://jonathanlewis.wordpress.com/2016/09/11/space-usage/"><em><strong>this version</strong></em></a> of it some time ago) to check for free and used space &#8211; and this is what it said about the (ASSM) segment that holds this table:</p> <pre class="brush: plain; title: ; notranslate"> Unformatted : 44 / 360,448 Freespace 1 ( 0 - 25% free) : 0 / 0 Freespace 2 ( 25 - 50% free) : 0 / 0 Freespace 3 ( 50 - 75% free) : 0 / 0 Freespace 4 ( 75 - 100% free) : 15 / 122,880 Full : 1 / 8,192 </pre> <p>Take particular note of the <em><strong>&#8220;Full&#8221;</strong></em> block at the end of the report &#8211; that&#8217;s the block where we&#8217;ve used up rather less than 300 bytes. In fact if you look again at the first block dump you&#8217;ll see the <em><strong>avsp</strong></em> (available space) and <em><strong>tosp</strong></em> (total space) figures of 0x1e3e and 0x1f13 bytes (7,742 and 7,955 bytes). There&#8217;s loads of space in the block &#8211; but the block is marked in the bitmap space management map as full. That&#8217;s really bad news.</p> <p>And there&#8217;s still more to come &#8211; but it will have to wait a little longer.</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/17157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/17157/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonathanlewis.wordpress.com&#038;blog=491988&#038;post=17157&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17157 Tue May 23 2017 08:10:07 GMT-0400 (EDT) SCAP OVAL SQL57_TEST Example For Oracle E-Business Suite https://www.integrigy.com/security-resources/scap-oval-sql57test-example-oracle-e-business-suite <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>Last week I posted a blog introducing SCAP and OVAL. Here is a quick follow-up with a link to a sql57_test example using the&nbsp;Oracle E-Business Suite - it will suffice for any Oracle database.</p> <p>A great book to read first on SCAP titled ‘Security Automation Essentials’&nbsp;for $15 on Amazon is a must read:&nbsp; <a data-jsb_prepared="0xnv34buh7" href="https://www.amazon.com/Security-Automation-Essentials-Streamlined-Communication/dp/0071772510" rel="noreferrer">https://www.amazon.com/Security-Automation-Essentials-Streamlined-Communication/dp/0071772510</a>. I would highly recommend this book to anyone interested in SCAP and much thanks to&nbsp;Witte, Cook, Kerr and Shaffer for writing it.</p> <p>If you have any questions, please contact us at&nbsp;<a data-jsb_prepared="v29nle7wx3" href="mailto:info@integrigy.com" rel="noreferrer">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h3>References</h3> <div class="grammarly-disable-indicator"><a data-jsb_prepared="3ffco7lj8e" href="/security-resources/scap-oval-oracle-sql57test-example" rel="noreferrer">SCAP OVAL Oracle SQL57_TEST Example</a></div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/scap-oval" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">SCAP OVAL</a>, <a href="/tags/oracle-database" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle Database</a>, <a href="/tags/oracle-e-business-suite" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle E-Business Suite</a> mmiller 583 at https://www.integrigy.com Tue May 23 2017 07:54:55 GMT-0400 (EDT) LEAP#307 Boldport Matrix Keypad Control http://blog.tardate.com/2017/05/leap307-boldport-matrix-keypad-control.html <p>So… ways to get arbitrary messages onto the Boldport Club Matrix? I happen to have a KeyboardMatrixModule that is coincidentally 5 keys high by 4 wide .. a number that neatly fits into the 24x5 display port of the Matrix. So I’ve wired it up and enabled a couple of commands to edit a message and start it scrolling. It is somewhat tedious, but it works! As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheMatrix/KeypadControl">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/qg2Bs1Q0ACw" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheMatrix/KeypadControl"><img src="http://leap.tardate.com/BoldportClub/TheMatrix/KeypadControl/assets/KeypadControl_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap307-boldport-matrix-keypad-control.html Tue May 23 2017 02:45:02 GMT-0400 (EDT) Where in the World is Geek Goth Girl- Week 21 http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/ <div id="tweetbutton6794" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Fworld-geek-goth-girl-week-21%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Fworld-geek-goth-girl-week-21%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"> <!-- Easy Plugin for AdSense V8.67 --> <!-- [leadin: 2 urCount: 2 urMax: 0] --> <div class="ezAdsense adsense adsense-leadin" style="float:right;margin:12px;"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- kevlar_ad --> <ins class="adsbygoogle" style="display:inline-block;width:320px;height:100px" data-ad-client="ca-pub-5103295461547706" data-ad-slot="5182487270"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div> <!-- Easy Plugin for AdSense V8.67 --> <p>Happy <a href="http://worldgothday.com/">National Goth Day</a>!  Although I consider myself &#8220;Goth Lite&#8221;, it&#8217;s a national holiday in my little world and I&#8217;m pondering what books I&#8217;ll write after I run out of tech titles.  Needless to say, I&#8217;ve chosen the title, &#8220;<strong>Staying Geeky and Goth After 50</strong>&#8221; and chosen the following for the cover art:</p> <p><a href="http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/old_goth/" rel="attachment wp-att-6795"><img class="alignnone size-full wp-image-6795" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/old_goth.jpg?resize=236%2C286" alt="" data-recalc-dims="1" /></a></p> <p>I&#8217;m considering adding a black choker to Ma Goth and maybe some facial piercings to Pa- we&#8217;ll see.</p> <p>As May winds down, I look forward to a vacation in Paris the beginning of June with my favorite person, Tim Gorman.  As much as we travel together, we rarely get to see much of each other while at an event and are both looking forward to some downtime to just spend together.</p> <p>After last week&#8217;s <a href="http://www.dbta.com/DataSummit/2017/">Data Summit 2017</a>, <a href="http://www.dbta.com/BigDataQuarterly/Articles/Tips-for-Database-Management-and-Migration-in-the-Cloud-118290.aspx">DBTA did a wonderful write up</a> on my session, but as I&#8217;m my worst critic, let me know I needed to do a better job of relaying my message to the community, as in the article, not one mention of the importance of virtualization in removing that pesky bottleneck of data from cloud migrations.  I greatly appreciate the opportunity to speak at this awesome event and shall promise to do better next time&#8230; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>For week 21 of the year, I&#8217;m off to sunny Phoenix, Arizona to <a href="https://www.dataplatforms.com/">Data Platforms 2017</a>.</p> <p><a href="http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/screen-shot-2017-05-22-at-10-13-44-am/" rel="attachment wp-att-6796"><img class="alignnone size-large wp-image-6796" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-22-at-10.13.44-AM.png?resize=600%2C159" alt="" srcset="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-22-at-10.13.44-AM.png?resize=1024%2C271 1024w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-22-at-10.13.44-AM.png?resize=300%2C79 300w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-22-at-10.13.44-AM.png?resize=768%2C203 768w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-22-at-10.13.44-AM.png?w=1264 1264w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-22-at-10.13.44-AM.png?w=1200 1200w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <p>This is an incredible event focused on data operations and no other event that I&#8217;ve seen better speak to the power of DevOps, automation and the power of visualizing a future of data at the speed of business than through virtualization.  I&#8217;m going to be <a href="https://www.dataplatforms.com/agenda/session/181331">speaking</a> at one session, focused on some of our solutions for virtualizing everything, not just the database.  We all know there are bottlenecks everywhere to getting to the cloud, automating and data in general and a number of solutions are a focus for getting away from the RDBMS, but in reality, it&#8217;s just moved the resource hit. We also know that databases don&#8217;t have sole ownership on complexity.  I&#8217;ll try to shed some light on how to lighten the load across the database, applications, flat files and anything else possible to make life for the next generation of technologist a piece of cake.</p> <p>Again-  Happy National Goth Day!!</p> <p><a href="http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/death_chest/" rel="attachment wp-att-6797"><img class="alignnone size-full wp-image-6797" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/death_chest.gif?resize=400%2C252" alt="" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> </div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/where-in-the-world/" rel="tag">Where in the World</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/2017/05/world-geek-goth-girl-week-21/&title=Where in the World is Geek Goth Girl- Week 21"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" 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/2017/05/world-geek-goth-girl-week-21/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/05/world-geek-goth-girl-week-21/&title=Where in the World is Geek Goth Girl- Week 21"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/05/world-geek-goth-girl-week-21/&title=Where in the World is Geek Goth Girl- Week 21"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/05/world-geek-goth-girl-week-21/&title=Where in the World is Geek Goth Girl- Week 21"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/05/world-geek-goth-girl-week-21/#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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2011/11/restarting-a-duplicate-process-from-a-very-failed-state/" >Restarting a Duplicate Process From a VERY Failed State</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/03/first-week-at-oracle/" >First Week at Oracle</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=600" 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><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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/02/everything-i-needed-to-know-about-enterprise-manager-i-learned-at-collaborate-2015/" >Everything I Needed to Know About Enterprise Manager I Learned at Collaborate 2015</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/" >Delivering Migration Projects on Time</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/">Where in the World is Geek Goth Girl- Week 21</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/">Where in the World is Geek Goth Girl- Week 21</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6794 Mon May 22 2017 12:31:33 GMT-0400 (EDT) Legacy users get ORA-01017 in 12.2 http://laurentschneider.com/wordpress/2017/05/legacy-users-get-ora-01017-in-12-2.html <p>The default case insensitive string disappeared in 12cR2, let&#8217;s call it the 10G string in this post, but it was the same since Oracle 7 at least. It was introduced in V5 or V6 to replace clear-text passwords. </p> <p>What&#8217;s happening then with my ultra-old-accounts?</p> <p>You could well set a new password (or the same password again) to each account to be migrated in 11g/12cR1 before moving to 12cR2. </p> <p>If nobody knows the password and nobody can change it because it is hardcoded in the application and neither easy to read (hidden / obfuscated /encrypted) nor to change, then, you are in TROUBLE ! This is documented in <a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=2075401.1">Note 2075401.1</a></p> <p>First disclaimer : it is a good thing to achieve a better security. SHA1 and SHA2 are <b>a lot</b> better than the oldstyle-longly-hacked-unsalted-case-insensitive-homemade-algorythm. SHA3 has been published in 2015 and it not used in Oracle 12cR2 yet. SHA2 is a bit older (2001) but still recommended. SHA1 is oldish (1995) and no-longer-recommended, collision has been detected. Read more on <a href="https://en.wikipedia.org/wiki/SHA-1#Comparison_of_SHA_functions">wikipedia</a> or <a href="https://www.crypto101.io/" class="broken_link">crypto101</a></p> <p>SHA-1 was a really <b>huge</b> improvement when introduced in 11gR1. The old self-made algorythm has been a torture for Oracle Security team. It has been published on Internet. Extremly powerfull password cracker can find your &#8220;not-too-long&#8221; password in notime. In 11g, Oracle removed the 10g String from the DBA_USERS view. I wrote about this <a href="http://laurentschneider.com/wordpress/2008/03/alter-user-identified-by-values-in-11g.html">here</a>. It remained on the base table, USER$ until 12cR2. Now Oracle completly removed it by default in 12cR2. 10 years after SHA1 was introduced in 11gR1. </p> <p>Still. You are the dba. You want to migrate your database not to chase passwords.</p> <p>You could edit your sqlnet.ora to allow 10g strings.<br /> <pre><code> SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 </code></pre></p> <p>This works<br /> <pre><code> SQL&gt; sho parameter sec_case_sensitive_logon NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VALUE ------------------------- ----- sec_case_sensitive_logon&nbsp;&nbsp;FALSE SQL&gt; CREATE USER &quot;U&quot; IDENTIFIED BY &nbsp;&nbsp;&nbsp;&nbsp; VALUES &#039;DC6F2B33D359A95B&#039;; User created. SQL&gt; grant create session to u; Grant succeeded. SQL&gt; conn u/abcdefg@pdb01 Connected. SQL&gt; conn u/AbCdEfG@pdb01 Connected. </code></pre> </p> <p>If you have SQLNET.ALLOWED_LOGON_VERSION_SERVER=11, then you could keep the same setting of sec_case_sensitive_logon as in 11g. I recommmend the default (true).</p> <p>But, that&#8217;s it ? Wellllllll&#8230; not sure.</p> <p>In 12.1<br /> <pre><code> SQL&gt; select dbms_metadata.get_ddl(&#039;USER&#039;,&#039;U&#039;) from dual DBMS_METADATA.GET_DDL(&#039;USER&#039;,&#039;U&#039;) ---------------------------------- &nbsp;&nbsp; CREATE USER &quot;U&quot; IDENTIFIED BY &nbsp;&nbsp;&nbsp;&nbsp; VALUES &#039;DC6F2B33D359A95B&#039; </code></pre></p> <p>Let&#8217;s try in 12.2<br /> <pre><code> SQL&gt; select dbms_metadata.get_ddl(&#039;USER&#039;,&#039;U&#039;) from dual DBMS_METADATA.GET_DDL(&#039;USER&#039;,&#039;U&#039;) ------------------------------------ CREATE USER &quot;U&quot; IDENTIFIED BY VALUES &nbsp;&nbsp;&#039;S:0000000000000000000000000000000 00000000000000000000000000000&#039; </code></pre></p> <p>While this is a perfectly working syntax, and IDENTIFIED BY VALUES is <font color="red">not supported <font size="1">*</font></font>. So if create that user, then, obviously, the 10G string is lost.</p> <p>Well, unsupported feature then? Hmm, yes. You should never have used identified by values. </p> <p>Ok, so if I refresh my Test database with Production data, how can I save test passwords? You can&#8217;t. At least not in a supported way by using identified by values. </p> <p>You could something like :<br /> <pre><code> SQL&gt; select &#039;alter user &quot;&#039;||name|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#039;&quot; identified by values &#039;&#039;&#039;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password||&#039;&#039;&#039;;&#039; txt &nbsp;&nbsp;&nbsp;&nbsp; from user$, v$instance &nbsp;&nbsp;&nbsp;&nbsp; where version &gt; &#039;12.2&#039; &nbsp;&nbsp;&nbsp;&nbsp; and spare4 is null&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; and type# = 1 &nbsp;&nbsp;&nbsp;&nbsp; and regexp_like(PASSWORD,&#039;[A-F0-9]{16}&#039;); txt ----------------------------------- alter user &quot;U&quot; identified by values &nbsp;&nbsp; &#039;DC6F2B33D359A95B&#039;; </code></pre></p> <p>This may work. In 12.2.0.1. Maybe not in 13. Maybe not in 12.2.0.1.0PSU July. It&#8217;s not supported. If it does not work, it is NOT-A-BUG.</p> <p>The SHA1 was introduced 10 years ago in Oracle 11gR1. If you have not changed your password in ten years, and you don&#8217;t know how many employees and ex-employees know this password, and it is case-insensitive, and its &#8220;pseudo-hashing-algorythm&#8221; has been hacked for maybe two decades, yet, I can only warmly recommend to change those accounts passwords ! </p> <p>Again: so if I refresh my Test database with Production data, how can I save test passwords ?<br /> If I were you I would design a better system for login. For human users, use global users and an Identity solution, like Oracle Universal directory. For technical account, build yourself a tool that generate a random password, and update the user and credentials, something like</p> <p><code><br /> select<br /> substr(<br /> REGEXP_REPLACE(<br /> UTL_RAW.cast_to_varchar2(<br /> SYS.DBMS_CRYPTO.RANDOMBYTES (1024)<br /> ) ,'[^!#-~]'<br /> ),<br /> 1,<br /> 20<br /> ) PW<br /> from dual;<br /> PW<br /> --------------------<br /> %K0w(^%UN.B82Yjjfu{?<br /> <code></p> <p>And use it to reset your technical user and to configure your application credentials. </p> <p><font color="red"><font size="1">*</font></font> <i>Note 554605.1: the 'IDENTIFIED BY VALUES' clause on a CREATE/ALTER USER statement is not officially documented, and is intended purely for internal </i></p> Laurent Schneider http://laurentschneider.com/?p=2453 Mon May 22 2017 10:50:17 GMT-0400 (EDT) Generating a Data Dictionary Report and Diagram for a SubView http://www.thatjeffsmith.com/archive/2017/05/generating-a-data-dictionary-report-and-diagram-for-a-subview/ <p>Your relational models can get big. Bigger than the human mind can easily consume. So instead of generating a report of 2,500 objects, you might want to break down your model to smaller chunks, AKA <a href="https://www.thatjeffsmith.com/archive/tag/subview/" target="_blank">SubViews</a>.</p> <div id="attachment_6176" style="width: 752px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-1-1024x523.png" alt="" width="742" height="379" class="size-large wp-image-6176" /></a><p class="wp-caption-text">All I want is a report of the HR or &#8216;blue&#8217; stuff.</p></div> <p>So let&#8217;s open the reports, which you&#8217;ll find on the main File menu.</p> <div id="attachment_6177" style="width: 476px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report1.png" alt="" width="466" height="628" class="size-full wp-image-6177" /></a><p class="wp-caption-text">Two things here to pay attention to.</p></div> <p>First, we don&#8217;t want the main diagram in the report, that&#8217;ll give us EVERYTHING. I just want the subview diagram.</p> <p>So after un-checking &#8216;include main diagram,&#8217; we need to go look at the &#8216;Objects&#8217; page.</p> <div id="attachment_6178" style="width: 476px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report2.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report2.png" alt="" width="466" height="628" class="size-full wp-image-6178" /></a><p class="wp-caption-text">We need to create a new Report Configuration.</p></div> <p>Now we can define a reporting configuration that defines which objects we want included.</p> <div id="attachment_6179" style="width: 730px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report3.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report3.png" alt="" width="720" height="690" class="size-full wp-image-6179" /></a><p class="wp-caption-text">Give it a name, click on &#8216;subviews&#8217;, click over the subview(s) you want included, then save the configuration.</p></div> <p>With our configuration saved and now available, we can go back and select it from the Objects panel.</p> <div id="attachment_6180" style="width: 464px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report4.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report4.png" alt="" width="454" height="230" class="size-full wp-image-6180" /></a><p class="wp-caption-text">Depending on how big your subview is, this could take a second or 3.</p></div> <h3>And Our Report!</h3> <div id="attachment_6181" style="width: 752px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report5.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/subview-report5-1024x790.png" alt="" width="742" height="572" class="size-large wp-image-6181" /></a><p class="wp-caption-text">Data dictionary info AND our subview diagram &#8211; all in one HTML report.</p></div> <p>Note I generated this using 4.2.0.17 of SQL Developer. Also note I noticed there&#8217;s a bug where the Subview Diagram links in the navigation bar to the left don&#8217;t work. Thankfully the object links work for the data dictionary bits, and you can just scroll down to the diagram.</p> <p>If we had included the main diagram (remember when we unchecked that box?), our report would have two diagrams instead of just the one here for the SubView.</p> thatjeffsmith http://www.thatjeffsmith.com/?p=6174 Mon May 22 2017 09:19:35 GMT-0400 (EDT) LEAP#303 Keyboard Matrix Module http://blog.tardate.com/2017/05/leap303-keyboard-matrix-module.html <p>I picked up one of these 4x4 Independent Keyboard Matrix modules to see how useful it might be for arbitrary input with a microcontroller. I examine how it is constructed, and provide some examples of how to make it work: <a href="https://github.com/tardate/LittleArduinoProjects/blob/master/playground/KeyboardMatrixModule/LedControl">LedControl</a> - controlling the LEDs; <a href="https://github.com/tardate/LittleArduinoProjects/blob/master/playground/KeyboardMatrixModule/KeyMatrixInput">KeyMatrixInput</a> - multiplexed key input; <a href="https://github.com/tardate/LittleArduinoProjects/blob/master/playground/KeyboardMatrixModule/SwitchInterrupts">SwitchInterrupts</a> - interrupt-driven switch input. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/KeyboardMatrixModule">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/KeyboardMatrixModule"><img src="http://leap.tardate.com/playground/KeyboardMatrixModule/assets/KeyboardMatrixModule_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap303-keyboard-matrix-module.html Mon May 22 2017 08:52:05 GMT-0400 (EDT) Node.js run from GitHub in Generic Docker Container backed by Dockerized Redis Cache https://technology.amis.nl/2017/05/22/node-js-run-from-github-in-generic-docker-container-backed-by-dockerized-redis-cache/ <p>In a previous article I talked about a generic Docker Container Image that can be used to run any Node.js application directly from GitHub or some other Git instance by feeding the Git repo url as Docker run parameter (see <a title="https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/" href="https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/">https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/</a>). In this article, I create a simple Node.js application that will be pushed to GitHub and run in that generic Docker container. It will use a Redis cache that is running in a separate Docker Container.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-63.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-62.png?resize=702%2C426&#038;ssl=1" data-recalc-dims="1"></a></p> <p>The application does something simple: HTTP requests are handled: each request will lead to an increment of the request counter and the current value of the request counter is returned. The earlier implementation of this functionality used a local Node.js variable to keep track of the request count. This approach had two spectacular flaws: horizontal scalability (adding instances of the application fronted by a load balancer of sorts) led to strange results because each instance kept its own request counter. And a restart of the application caused the count to be reset. The incarnation we discuss in this article uses a Redis cache as a shared store for the request counter, one that will also survive the restart of the Node.js application instances. Note: of course this means Redis becomes a single point of failure, unless we cluster Redis too and/or use a persistent file as backup. Both options are available but are out of scope for this article.</p> <p>Sources for this article can be found on GitHub: <a title="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017/tree/master/part1" href="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017/tree/master/part1">https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017/tree/master/part1</a> .</p> <h3>Run Redis</h3> <p>To run a Docker Container with a Redis cache instance, we only have to execute this statement:</p> <blockquote> <p>docker run -d &#8211;name redis -p 6379:6379 redis</p> </blockquote> <p> We run a container based on the Docker image called redis. The container is also called redis and its internal port 6379 is exposed and mapped to port 379 in the host. That it all it takes. The image is pulled and the container is started.</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-64.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-63.png?resize=587%2C313&#038;ssl=1" data-recalc-dims="1"></a></p> <h3>Create Node.js Application RequestCounter &#8211; Talking to Redis</h3> <p>To talk to Redis from a Node.js application, there are several modules available. The most common and generic one seems to be called <em>redis</em>. To use it, I have to install it with npm:</p> <blockquote> <p>npm install redis &#8211;save</p> </blockquote> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-65.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-64.png?resize=681%2C97&#038;ssl=1" data-recalc-dims="1"></a></p> <p>To leverage Redis in my application code, I need to require(‘redis’) and create a client connection. For that, I need the host and port for the Redis instance. The port was specified when we started the Docker container for Redis (6379) and the host ip is the ip of the Docker machine (I am running Docker Tools on Windows).</p> <p>Here is the naïve implementation of the request counter, backed by Redis. Naïve because it does not cater for race conditions between multiple instances that could each read the current counter value from Redis, each increase it and write it back, causing one or multiple counts to be potentially lost. Note that the REDIS_HOST and REDIS_PORT can be specified through environment variables (read with process.env.&lt;name of variable&gt;.</p> <pre class="brush: jscript; title: ; notranslate"> //respond to HTTP requests with response: count of number of requests // invoke from browser or using curl: curl http://127.0.0.1:PORT var http = require('http'); var redis = require(&quot;redis&quot;); var redisHost = process.env.REDIS_HOST ||&quot;192.168.99.100&quot; ; var redisPort = process.env.REDIS_PORT ||6379; var redisClient = redis.createClient({ &quot;host&quot;: redisHost, &quot;port&quot;: redisPort }); var PORT = process.env.APP_PORT || 3000; var redisKeyRequestCounter = &quot;requestCounter&quot;; var server = http.createServer(function handleRequest(req, res) { var requestCounter = 0; redisClient.get(redisKeyRequestCounter, function (err, reply) { if (err) { res.write('Request Count (Version 3): ERROR ' + err); res.end(); } else { if (!reply || reply == null) { console.log(&quot;no value found yet&quot;); redisClient.set(redisKeyRequestCounter, requestCounter); } else { requestCounter = Number(reply) + 1; redisClient.set(redisKeyRequestCounter, requestCounter); } res.write('Request Count (Version 3): ' + requestCounter); res.end(); } }) }).listen(PORT); // redisClient.quit(); console.log('Node.JS Server running on port ' + PORT + ' for version 3 of requestCounter application, powered by Redis.'); </pre> <p>&nbsp;</p> <h3>Run the Node.JS Application talking to Redis</h3> <p>The Node.js application can be run locally &#8211; from the command line directly on the Node.js runtime. </p> <p>Alternatively, I have committed and pushed the application to GitHub. Now I can run it using the generic Docker Container Image <em>lucasjellema/node-app-runner</em> that I prepared in this article: <a title="https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/" href="https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/">https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/</a> using a single startup command:</p> <blockquote> <p>docker run -e &#8220;GIT_URL=https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&#8221; -e &#8220;APP_PORT=8080&#8221; -p 8015:8080 -e &#8220;APP_HOME=part1&#8221;&nbsp; -e &#8220;APP_STARTUP=requestCounter-3.js&#8221; -e &#8220;REDIS_HOST:127.0.0.1&#8221; -e &#8220;REDIS_PORT:6379&#8221;&nbsp;&nbsp; lucasjellema/node-app-runner</p> </blockquote> <p>This command passes relevant values as environment variable &#8211; such as the GitHub Repo url, the directory in that repo and the exact script to run and also the host and port for Redis as well as the port that the Node.js application should listen at for requests. In the standard Docker way, the internal port (8080) is mapped to the external port (8015).<a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-66.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-65.png?resize=651%2C314&#038;ssl=1" data-recalc-dims="1"></a></p> <p>&nbsp;</p> <p>The application can accessed from the browser:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-67.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-66.png?resize=296%2C121&#038;ssl=1" data-recalc-dims="1"></a></p> <p>&nbsp;</p> <h3>Less Naïve Implementation using Redis Watch and Multi for Optimistic Locking</h3> <p>Although the code shown overhead seems to be working &#8211; it is not robust. When scaling out &#8211;&nbsp; multiple instances can race against each other and overwrite each other’s changes in Redis because no locking has been implemented. Based on this article: <a title="https://blog.yld.io/2016/11/07/node-js-databases-using-redis-for-fun-and-profit/#.WSGEWtwlGpo" href="https://blog.yld.io/2016/11/07/node-js-databases-using-redis-for-fun-and-profit/#.WSGEWtwlGpo">https://blog.yld.io/2016/11/07/node-js-databases-using-redis-for-fun-and-profit/#.WSGEWtwlGpo</a> I have extended the code with an optimistic locking mechanism. Additionally, the treatment of client connections is improved &#8211; reducing the chance of leaking connections.</p> <pre class="brush: jscript; title: ; notranslate"> //respond to HTTP requests with response: count of number of requests // invoke from browser or using curl: curl http://127.0.0.1:PORT // use an optmistic locking strategy to prevent race conditions between multiple clients updating the requestCount at the same time // based on https://blog.yld.io/2016/11/07/node-js-databases-using-redis-for-fun-and-profit/#.WSGEWtwlGpo var http = require('http'); var Redis = require(&quot;redis&quot;); var redisHost = process.env.REDIS_HOST || &quot;192.168.99.100&quot;; var redisPort = process.env.REDIS_PORT || 6379; var PORT = process.env.APP_PORT || 3000; var redisKeyRequestCounter = &quot;requestCounter&quot;; var server = http.createServer(function handleRequest(req, res) { increment(redisKeyRequestCounter, function (err, newValue) { if (err) { res.write('Request Count (Version 3): ERROR ' + err); res.end(); } else { res.write('Request Count (Version 3): ' + newValue); res.end(); } }) }).listen(PORT); function _increment(key, cb) { var replied = false; var newValue; var redis = Redis.createClient({ &quot;host&quot;: redisHost, &quot;port&quot;: redisPort }); // if the key does not yet exist, then create it with a value of zero associated with it redis.setnx(key, 0); redis.once('error', done); // ensure that if anything changes to the key-value pair in Redis (from a different connection), this atomic operation will fail redis.watch(key); redis.get(key, function (err, value) { if (err) { return done(err); } newValue = Number(value) + 1; // either watch tells no change has taken place and the set goes through, or this action fails redis.multi(). set(key, newValue). exec(done); }); function done(err, result) { redis.quit(); if (!replied) { if (!err &amp;&amp; !result) { err = new Error('Conflict detected'); } replied = true; cb(err, newValue); } } } function increment(key, cb) { _increment(key, callback); function callback(err, result) { if (err &amp;&amp; err.message == 'Conflict detected') { _increment(key, callback); } else { cb(err, result); } } } console.log('Node.JS Server running on port ' + PORT + ' for version 3 of requestCounter application, powered by Redis.'); </pre> <p>This Node.js application is run in exactly the same way as the previous one, using requestCounter-4.js as APP_STARTUP rather than requestCounter-3.js.</p> <blockquote> <p>docker run -e &#8220;GIT_URL=https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&#8221; -e &#8220;APP_PORT=8080&#8221; -p 8015:8080 -e &#8220;APP_HOME=part1&#8221;&nbsp; -e &#8220;APP_STARTUP=<strong>requestCounter-4.js</strong>&#8221; -e &#8220;REDIS_HOST:127.0.0.1&#8221; -e &#8220;REDIS_PORT:6379&#8221;&nbsp;&nbsp; lucasjellema/node-app-runner</p> </blockquote> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-68.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-67.png?resize=281%2C73&#038;ssl=1" data-recalc-dims="1"></a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/22/node-js-run-from-github-in-generic-docker-container-backed-by-dockerized-redis-cache/">Node.js run from GitHub in Generic Docker Container backed by Dockerized Redis Cache</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=44921 Mon May 22 2017 00:41:16 GMT-0400 (EDT) Using HTTPIE with Spring Boot Rest Repositories http://feedproxy.google.com/~r/blogspot/PEqWE/~3/gr7fUyL4drw/using-httpie-with-spring-boot-rest.html I recently got introduced to HTTPIE as a command line alternative to CURL for testing RESTful api endpoints created using @RestController annotated classes. For more information on httpie follow this <a href="https://httpie.org/" target="_blank">link</a><br /><br />Before we test this out lets create a very basic Spring Boot Application with classes/interfaces to verify HTTPIE. The following assumes you have a Spring Boot application already created and it has maven dependancies as follows to enable JPA, Rest Repositories, H2 and Web support<br /><br /><span style="color: #e69138;"><i>Note: We are using Spring Boot 1.5.3 here</i></span><br /><pre class="brush: xml"> <br />&lt;parent&gt;<br /> &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br /> &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;<br /> &lt;version&gt;1.5.3.RELEASE&lt;/version&gt;<br /> &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;<br /> &lt;/parent&gt;<br /><br /> &lt;properties&gt;<br /> &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;<br /> &lt;project.reporting.outputEncoding&gt;UTF-8&lt;/project.reporting.outputEncoding&gt;<br /> &lt;java.version&gt;1.8&lt;/java.version&gt;<br /> &lt;/properties&gt;<br /><br /> &lt;dependencies&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br /> &lt;artifactId&gt;spring-boot-starter-data-rest&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br /> &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br /> &lt;artifactId&gt;hibernate-entitymanager&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;com.h2database&lt;/groupId&gt;<br /> &lt;artifactId&gt;h2&lt;/artifactId&gt;<br /> &lt;scope&gt;runtime&lt;/scope&gt;<br /> &lt;/dependency&gt;<br /> &lt;/dependencies&gt;<br /></pre><br />1. Create classes/interfaces as follows<br /><br /><b>Employee.java</b><br /><pre class="brush: java"> <br />package pivotal.io.boot.httpie.demo;<br /><br />import javax.persistence.Entity;<br />import javax.persistence.GeneratedValue;<br />import javax.persistence.GenerationType;<br />import javax.persistence.Id;<br /><br />@Entity<br />public class Employee<br />{<br /> @Id<br /> @GeneratedValue (strategy = GenerationType.AUTO)<br /> private Long id;<br /><br /> private String firstName;<br /> private String lastName;<br /> private String job;<br /><br /> public Employee()<br /> {<br /> }<br /><br /> public Employee(String firstName, String lastName, String job) {<br /> this.firstName = firstName;<br /> this.lastName = lastName;<br /> this.job = job;<br /> }<br /><br /> public Long getId() {<br /> return id;<br /> }<br /><br /> public void setId(Long id) {<br /> this.id = id;<br /> }<br /><br /> public String getFirstName() {<br /> return firstName;<br /> }<br /><br /> public void setFirstName(String firstName) {<br /> this.firstName = firstName;<br /> }<br /><br /> public String getLastName() {<br /> return lastName;<br /> }<br /><br /> public void setLastName(String lastName) {<br /> this.lastName = lastName;<br /> }<br /><br /> public String getJob() {<br /> return job;<br /> }<br /><br /> public void setJob(String job) {<br /> this.job = job;<br /> }<br /><br /> @Override<br /> public String toString() {<br /> return "Employee{" +<br /> "id=" + id +<br /> ", firstName='" + firstName + '\'' +<br /> ", lastName='" + lastName + '\'' +<br /> ", job='" + job + '\'' +<br /> '}';<br /> }<br />}<br /></pre><br /><b>EmployeeRepository.java</b><br /><pre class="brush: java"> <br />package pivotal.io.boot.httpie.demo;<br /><br />import org.springframework.data.jpa.repository.JpaRepository;<br /><br />public interface EmployeeRepository extends JpaRepository &lt;Employee, Long&gt; {<br />} <br /></pre><br /><b>EmployeeRest.java</b><br /><pre class="brush: java"> <br />package pivotal.io.boot.httpie.demo;<br /><br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.beans.factory.annotation.Autowired;<br />import org.springframework.web.bind.annotation.*;<br /><br />import java.util.List;<br /><br />@RestController<br />@RequestMapping ("/api/employee")<br />public class EmployeeRest<br />{<br /> private static Log logger = LogFactory.getLog(EmployeeRest.class);<br /><br /> @Autowired<br /> private EmployeeRepository employeeRepository;<br /><br /> @GetMapping("/emps")<br /> public List&lt;Employee&gt; allEmployees()<br /> {<br /> return employeeRepository.findAll();<br /> }<br /><br /> @GetMapping("/emp/{employeeId}")<br /> public Employee findEmployee (@PathVariable Long employeeId)<br /> {<br /> Employee emp = employeeRepository.findOne(employeeId);<br /><br /> return emp;<br /> }<br /><br /> @PostMapping("/emps")<br /> public Employee createEmployee(@RequestBody Employee employee)<br /> {<br /> return employeeRepository.save(employee);<br /> }<br /><br /> @DeleteMapping("/emps/{employeeId}")<br /> public void deleteEmployee(@PathVariable Long employeeId)<br /> {<br /> Employee emp = employeeRepository.findOne(employeeId);<br /> employeeRepository.delete(emp);<br /> logger.info("Employee with id " + employeeId + " deleted...");<br /> }<br /><br />}<br /></pre><br />2. Run the Spring Boot Application which will run on port localhost:8080<br /><br /><br /><span style="color: #3d85c6;">&nbsp; . &nbsp; ____ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;__ _ _</span><br /><span style="color: #3d85c6;">&nbsp;/\\ / ___'_ __ _ _(_)_ __ &nbsp;__ _ \ \ \ \</span><br /><span style="color: #3d85c6;">( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \</span><br /><span style="color: #3d85c6;">&nbsp;\\/ &nbsp;___)| |_)| | | | | || (_| | &nbsp;) ) ) )</span><br /><span style="color: #3d85c6;">&nbsp; ' &nbsp;|____| .__|_| |_|_| |_\__, | / / / /</span><br /><span style="color: #3d85c6;">&nbsp;=========|_|==============|___/=/_/_/_/</span><br /><span style="color: #3d85c6;">&nbsp;:: Spring Boot :: &nbsp; &nbsp; &nbsp; &nbsp;(v1.5.3.RELEASE)</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">2017-05-22 13:39:22.910 &nbsp;INFO 8875 --- [ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; main] p.i.b.h.d.HttpieSpringbootApplication &nbsp; &nbsp;: Starting HttpieSpringbootApplication on pas-macbook with PID 8875 (/Users/pasapicella/pivotal/DemoProjects/spring-starter/pivotal/httpie-springboot/target/classes started by pasapicella in /Users/pasapicella/pivotal/DemoProjects/spring-starter/pivotal/httpie-springboot)</span><br /><div><span style="color: #3d85c6;"><br /></span></div><div><span style="color: #3d85c6;">...</span></div><div><span style="color: #3d85c6;"><br /></span></div><div><div><span style="color: #3d85c6;">2017-05-22 13:39:25.948 &nbsp;INFO 8875 --- [ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)</span></div><div><span style="color: #3d85c6;">2017-05-22 13:39:25.952 &nbsp;INFO 8875 --- [ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; main] p.i.b.h.d.HttpieSpringbootApplication &nbsp; &nbsp;: Started HttpieSpringbootApplication in 3.282 seconds (JVM running for 3.676)</span></div></div><div><br /></div>Now we can test HTTPIE and here are some endpoints<br /><br />3. Here are some examples with output<br /><br /><b>** All Employees **</b><br /><br /><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ <b>http http://localhost:8080/api/employee/emps</b></span><br /><span style="color: #3d85c6;">HTTP/1.1 200</span><br /><span style="color: #3d85c6;">Content-Type: application/json;charset=UTF-8</span><br /><span style="color: #3d85c6;">Date: Mon, 22 May 2017 01:26:43 GMT</span><br /><span style="color: #3d85c6;">Transfer-Encoding: chunked</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">[</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; {</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "firstName": "pas",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "id": 1,</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "job": "CEO",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "lastName": "Apicella"</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; },</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; {</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "firstName": "lucia",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "id": 2,</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "job": "CIO",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "lastName": "Apicella"</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; },</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; {</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "firstName": "lucas",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "id": 3,</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "job": "MANAGER",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "lastName": "Apicella"</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; },</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; {</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "firstName": "siena",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "id": 4,</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "job": "CLERK",</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; &nbsp; &nbsp; "lastName": "Apicella"</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; }</span><br /><span style="color: #3d85c6;">]</span><br /><div><br /></div><div><div><b>** Find Employee by {employeeId} **</b></div><div><br /></div><div><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ <b>http http://localhost:8080/api/employee/emp/1</b></span></div><div><span style="color: #3d85c6;">HTTP/1.1 200</span></div><div><span style="color: #3d85c6;">Content-Type: application/json;charset=UTF-8</span></div><div><span style="color: #3d85c6;">Date: Mon, 22 May 2017 01:31:32 GMT</span></div><div><span style="color: #3d85c6;">Transfer-Encoding: chunked</span></div><div><span style="color: #3d85c6;"><br /></span></div><div><span style="color: #3d85c6;">{</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "firstName": "pas",</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "id": 1,</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "job": "CEO",</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "lastName": "Apicella"</span></div><div><span style="color: #3d85c6;">}</span></div><div><br /></div><div><b>** POST new employee **</b></div><div><br /></div><div><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ <b>http POST http://localhost:8080/api/employee/emps firstName=john lastName=black job=CLERK</b></span></div><div><span style="color: #3d85c6;">HTTP/1.1 200</span></div><div><span style="color: #3d85c6;">Content-Type: application/json;charset=UTF-8</span></div><div><span style="color: #3d85c6;">Date: Mon, 22 May 2017 02:32:34 GMT</span></div><div><span style="color: #3d85c6;">Transfer-Encoding: chunked</span></div><div><span style="color: #3d85c6;"><br /></span></div><div><span style="color: #3d85c6;">{</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "firstName": "john",</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "id": 5,</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "job": "CLERK",</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "lastName": "black"</span></div><div><span style="color: #3d85c6;">}</span></div><div><br /></div><div><b>** POST with updated employee object **</b></div><div><br /></div><div><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ <b>http POST http://localhost:8080/api/employee/emps id:=5 firstName=john lastName=black job=CLEANER</b></span></div><div><span style="color: #3d85c6;">HTTP/1.1 200</span></div><div><span style="color: #3d85c6;">Content-Type: application/json;charset=UTF-8</span></div><div><span style="color: #3d85c6;">Date: Mon, 22 May 2017 02:36:06 GMT</span></div><div><span style="color: #3d85c6;">Transfer-Encoding: chunked</span></div><div><span style="color: #3d85c6;"><br /></span></div><div><span style="color: #3d85c6;">{</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "firstName": "john",</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "id": 5,</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "job": "CLEANER",</span></div><div><span style="color: #3d85c6;">&nbsp; &nbsp; "lastName": "black"</span></div><div><span style="color: #3d85c6;">}</span></div><div><br /></div><div><b>** Delete employee with {employeeId} 5 **</b></div><div><br /></div><div><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ <b>http DELETE http://localhost:8080/api/employee/emps/5</b></span></div><div><span style="color: #3d85c6;">HTTP/1.1 200</span></div><div><span style="color: #3d85c6;">Content-Length: 0</span></div><div><span style="color: #3d85c6;">Date: Mon, 22 May 2017 02:36:56 GMT</span></div></div><br /><div class="blogger-post-footer">http://feeds.feedburner.com/TheBlasFromPas</div><img src="http://feeds.feedburner.com/~r/blogspot/PEqWE/~4/gr7fUyL4drw" height="1" width="1" alt=""/> Pas Apicella tag:blogger.com,1999:blog-6527688743456205256.post-3451498933135502997 Sun May 21 2017 23:58:00 GMT-0400 (EDT) 12cR1 RAC Posts -- 11 : Managing Services in RAC (with PDB) (Video) http://hemantoracledba.blogspot.com/2017/05/12cr1-rac-posts-11-managing-services-in.html <div dir="ltr" style="text-align: left;" trbidi="on">I have uploaded a <a href="https://youtu.be/ffq0LbnyVMw" target="_blank">video on managing services</a> (add, start, check, remove) in a 12c RAC database with a Pluggable Database.<br />.<br />.<br />.<br /><br /><br /></div> Hemant K Chitale tag:blogger.com,1999:blog-1931548025515710472.post-3100146421350382739 Sun May 21 2017 12:01:00 GMT-0400 (EDT) Running Node.js applications from GitHub in generic Docker Container https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/ <p>This article shows how I create a generic Docker Container Image to run any Node.JS application based on sources for that application on GitHub. The usage of this image is shown in this picture:</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-56.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-55.png?resize=702%2C298&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Any Node.JS application in any public GitHub repo can be run using this Docker Container Image. When a container is run from this image, the url for the GitHub Repo is passed in as environment variable &#8211; as well as (optionally) the directory in the repo to run the application from, the name of the file to run and the specific version of the Node runtime to use. An example of the command line to use:</p> <p>docker run -e &#8220;GIT_URL=https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&#8221; -e &#8220;APP_PORT=8080&#8221; -p 8005:8080 -e &#8220;APP_HOME=part1&#8221;  -e &#8220;APP_STARTUP=requestCounter.js&#8221;   lucasjellema/node-app-runner</p> <p>This command will run the script requestCounter.js in the part1 directory in the repo found in GitHub at the URL specified. It passes an additional environment variable APP_PORT to the runtime &#8211; to be used in the node application (process.env.APP_PORT). It maps port 8080 inside the container to port 8005 on the host in the standard Docker way.</p> <p>To run an entirely different Node.js application, I can use this command:</p> <p>docker run -e &#8220;GIT_URL=<a href="https://github.com/lucasjellema/nodejs-serversentevents-quickstart&quot;">https://github.com/lucasjellema/nodejs-serversentevents-quickstart&#8221;</a>  -p 8010:8888 -e&#8221;PORT=8888&#8243; -e &#8220;APP_HOME=.&#8221;  -e &#8220;APP_STARTUP=app.js&#8221;   lucasjellema/node-app-runner</p> <p>The same image is started, passing a different GIT_URL and different instructions regarding the directory and the script to run &#8211; and also a different environment variable called PORT.</p> <p>Note: this work is based on the Docker Image created by jakubknejzlik &#8211; see <a title="https://hub.docker.com/r/jakubknejzlik/docker-git-node-app/" href="https://hub.docker.com/r/jakubknejzlik/docker-git-node-app/">https://hub.docker.com/r/jakubknejzlik/docker-git-node-app/</a> and <a title="https://github.com/jakubknejzlik/docker-git-node-app/blob/master/Dockerfile" href="https://github.com/jakubknejzlik/docker-git-node-app/blob/master/Dockerfile">https://github.com/jakubknejzlik/docker-git-node-app/blob/master/Dockerfile</a>.</p> <p>My own sources are part of the GitHub Repository at <a title="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017" href="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017">https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017</a> &#8211; with resources for a workshop on Microservices, Choreography, Docker, Kubernetes, Node.jS, Kafka and more.</p> <p>The steps described in this article:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-57.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-56.png?resize=529%2C334&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>1. Docker file to build the container</p> <p>2. bootstrap.sh file to run when the container is started</p> <p>3. Create image from the container</p> <p>4. Push image to public Docker Hub Registry (<a title="https://hub.docker.com/r/lucasjellema/node-app-runner/" href="https://hub.docker.com/r/lucasjellema/node-app-runner/">https://hub.docker.com/r/lucasjellema/node-app-runner/</a>)</p> <p>(5. Create Node.js application and push to GitHub)</p> <p>6. Run Node.js application from GitHub repository by starting a Docker container from the image created in the previous steps</p> <p>&nbsp;</p> <h3>1. Docker file to build the container</h3> <p>The Docker file is shown here</p> <pre class="brush: plain; title: ; notranslate"> FROM node ENV NODE_VERSION stable ENV NPM_SCRIPT start ENV GIT_URL https://github.com/heroku/node-js-sample ENV APP_PORT 3000 ENV APP_HOME . ENV APP_STARTUP &quot;&quot; # JUST_RUN specifies whether node should be installed and git should be cloned ENV JUST_RUN N COPY ./docker-work /code WORKDIR /code #RUN chown -R app:app /code/* RUN chmod +x /code/bootstrap.sh RUN npm install -g n --silent RUN n stable ENTRYPOINT [&quot;/code/bootstrap.sh&quot;] </pre> <p>It starts from the Docker Image node &#8211; the official base image (see <a title="https://hub.docker.com/_/node/" href="https://hub.docker.com/_/node/">https://hub.docker.com/_/node/</a> for details). The scripts defines a number of environment variables with (default) values; these values can be overwritten when a container is run. The contents of directory <em>docker-work</em> (off the current working directory) is copied into directory /code inside the Docker image. The file bootstrap.sh &#8211; which is in that <em>docker-work</em> directory &#8211; is made executable. NPM package n is installed (<a title="https://www.npmjs.com/package/n" href="https://www.npmjs.com/package/n">https://www.npmjs.com/package/n</a>) for doing version management of Node.js and the currently <em>stable </em>release of Node.js is installed &#8211; in addition to the version of Node.js shipped in the Node Docker image . Finally, the entrypoint is set to bootstrap.sh &#8211; meaning that when a container is started based on the image, this file will be executed.</p> <p>&nbsp;</p> <h3>2. bootstrap.sh file to run when the container is started</h3> <p>The file bootstrap.sh is executed when the container is started. This file takes care of</p> <p>* install a special version of the Node.js runtime if required</p> <p>* cloning the Git repository &#8211; to bring the application sources into the container</p> <p>* installing all required node-modules by running npm install</p> <p>* running the Node.js application</p> <p>The file uses a number of environment variables for these actions:</p> <p>&#8211; NODE_VERSION &#8211; if a specific version of Node runtime is required</p> <p>&#8211; GIT_URL &#8211; the URL to the Git repository that contains the application sources</p> <p>&#8211; APP_HOME &#8211; the directory within the repository that contains package.json and the start script for the application to run</p> <p>&#8211; APP_STARTUP &#8211; the file that should be executed (node $APP_STARTUP); when this parameter is not passed, the application is started with npm start &#8211; based on the start script in package.json</p> <p>&#8211; JUST_RUN &#8211; when this variable has the value Y, then the container will not attempt to install a new version of Node.js nor will it clone the Git repo (again)</p> <pre class="brush: bash; title: ; notranslate"> #!/bin/bash if [ &quot;$JUST_RUN&quot; = &quot;N&quot; ]; then echo switching node to version $NODE_VERSION n $NODE_VERSION --quiet fi echo node version: `node --version` if [ &quot;$JUST_RUN&quot; = &quot;N&quot; ]; then git clone $GIT_URL app fi cd app cd $APP_HOME echo Application Home: $APP_HOME if [ &quot;$JUST_RUN&quot; = &quot;N&quot; ]; then if [ &quot;$YARN_INSTALL&quot; = &quot;1&quot; ]; then yarn install --production --silent else npm install --production --silent fi fi if [ &quot;$APP_STARTUP&quot; = &quot;&quot; ]; then npm run $NPM_SCRIPT else node $APP_STARTUP fi </pre> <p>&nbsp;</p> <h3>3. Build container image</h3> <p>In my environment, I am working on a Windows7 laptop. On this laptop, I have installed Docker Tools. I am running in the Docker Tools Quickstart terminal (fka boot2docker) &#8211; Docker Machine on a Linux client running a small Oracle VirtualBox VM.</p> <p>Using this command I build the container image from the Dockerfile:</p> <blockquote><p>docker build -t lucasjellema/node-app-runner .</p></blockquote> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTMLb25b94a.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="SNAGHTMLb25b94a" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTMLb25b94a_thumb.png?resize=500%2C540&#038;ssl=1" alt="SNAGHTMLb25b94a" border="0" data-recalc-dims="1" /></a></p> <p>To inspect whether the image contains the setup, I can run the image and start a Bash shell &#8211; just check on the contents of the file system:</p> <blockquote><p>docker run  -it &#8211;entrypoint /bin/bash  lucasjellema/node-app-runner</p></blockquote> <p>I can now try out the image, using a command like this:</p> <blockquote><p>docker run -e &#8220;GIT_URL=<a href="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&quot;">https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&#8243;</a> -e &#8220;APP_PORT=8080&#8221; -p 8004:8080 -e &#8220;APP_HOME=part1&#8221;  -e &#8220;APP_STARTUP=requestCounter.js&#8221;   lucasjellema/node-app-runner</p></blockquote> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-58.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-57.png?resize=593%2C126&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>This runs a container, clones the Git repo at the indicated URL to directory /code/app , navigate into directory /code/app/part1, performs an npm install to get required modules and runs requestCounter.js with Node.js, listening at port 8004 for http requests on the host that are forwarded to port 8080 inside the container.</p> <p>In order to access the application on my Windows host, I need to know the IP address of Docker Machine &#8211; the Linux VM instance that runs the Docker server inside VirtualBox. This is done using</p> <blockquote><p>docker-machine ip default</p></blockquote> <p>which will return the IP address assigned to the VM.</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-59.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-58.png?resize=244%2C44&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>I can then access the Node.js application at <a href="http://IP_ADDRESS:8004">http://IP_ADDRESS:8004</a>.</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-60.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-59.png?resize=244%2C230&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>4. (optional) Push image to public Docker Hub Registry (<a title="https://hub.docker.com/r/lucasjellema/node-app-runner/" href="https://hub.docker.com/r/lucasjellema/node-app-runner/">https://hub.docker.com/r/lucasjellema/node-app-runner/</a>)</p> <p>The image has proven itself, and we can now push it to a public or private registry. To push to Docker Hub:</p> <blockquote><p>docker login</p> <p>docker push lucasjellema/node-app-runner</p></blockquote> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-61.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-60.png?resize=642%2C118&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>5. Create Node.js application and push to GitHub</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-62.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-61.png?resize=702%2C278&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>6. Run Node.js application from GitHub repository by starting a Docker container from the image created in the previous steps</p> <p>I have several Node.js applications that I would like to run &#8211; each in their own container, listening at their own port. This is now very simple and straightforward &#8211; using several calls to docker run, each with different values for GIT_URL, APP_HOME and APP_STARTUP as well as APP_PORT or PORT.</p> <p>For example &#8211; run three containers in parallel:</p> <blockquote><p>docker run -e &#8220;GIT_URL=<a href="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&quot;">https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&#8243;</a> -e &#8220;APP_PORT=8080&#8221; -p 8001:8080 -e &#8220;APP_HOME=part1&#8221;  -e &#8220;APP_STARTUP=requestCounter.js&#8221;   lucasjellema/node-app-runner</p> <p>docker run -e &#8220;GIT_URL=<a href="https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&quot;">https://github.com/lucasjellema/microservices-choreography-kubernetes-workshop-june2017&#8243;</a> -e &#8220;APP_PORT=8080&#8221; -p 8005:8080 -e &#8220;APP_HOME=part1&#8221;  -e &#8220;APP_STARTUP=requestCounter-2.js&#8221;   lucasjellema/node-app-runner</p> <p>docker run -e &#8220;GIT_URL=<a href="https://github.com/lucasjellema/nodejs-serversentevents-quickstart&quot;">https://github.com/lucasjellema/nodejs-serversentevents-quickstart&#8221;</a>  -p 8010:8888 -e&#8221;PORT=8888&#8243; -e &#8220;APP_HOME=.&#8221;  -e &#8220;APP_STARTUP=app.js&#8221;   lucasjellema/node-app-runner</p></blockquote> <p>We can look at the logging from a container:</p> <blockquote><p>docker logs &lt;container id&gt;</p></blockquote> <p>We can stop each container:</p> <blockquote><p>docker stop &lt;container id&gt;</p></blockquote> <p>list all containers &#8211; running and stopped:</p> <blockquote><p>docker container ls -all</p></blockquote> <p>restart a container (now the time to restart is very short):</p> <blockquote><p>docker start &lt;container id&gt;</p></blockquote> <h3>7. Turn Container into Image</h3> <p>Note: it is easy to turn one of these containers running a specific Node.js application itself into an image from which subsequent containers can be run. This image would contain the correct version of Node.js as well as the application and all its dependent modules &#8211; allowing for a faster startup time. The steps:</p> <blockquote><p>docker commit CONTAINER_ID NAME_OF_IMAGE</p></blockquote> <p>for example:</p> <blockquote><p>docker commit a771 request-counter</p></blockquote> <p>Subsequently we can run a container based on this image; note that this time we do not specify the GIT_URL &#8211; because the application and all node_modules are baked into the image. The environment variables used in bootstrap.sh and in the application can still be passed. The startup time for this container should be very short &#8211; since hardly any preparation needs to be performed:</p> <blockquote><p>docker run  -e &#8220;APP_PORT=8080&#8221; -p 8004:8080 -e &#8220;APP_HOME=part1&#8221; -e &#8220;JUST_RUN=Y&#8221; -e &#8220;APP_STARTUP=requestCounter.js&#8221;   request-counter</p></blockquote> <p>&nbsp;</p> <h3>Notes</h3> <p>Note: remove old containers</p> <p>list exited containers:</p> <blockquote><p>docker ps -aq -f status=exited</p></blockquote> <p>remove them (<a href="http://blog.yohanliyanage.com/2015/05/docker-clean-up-after-yourself/)">http://blog.yohanliyanage.com/2015/05/docker-clean-up-after-yourself/)</a></p> <blockquote><p>docker rm -v $(docker ps -a -q -f status=exited)</p></blockquote> <p>remove dangling images</p> <p>list them:</p> <blockquote><p>docker images -f &#8220;dangling=true&#8221; -q</p></blockquote> <p>Remove them:</p> <blockquote><p>docker rmi $(docker images -f &#8220;dangling=true&#8221; -q)</p></blockquote> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/21/running-node-js-applications-from-github-in-generic-docker-container/">Running Node.js applications from GitHub in generic Docker Container</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=44905 Sun May 21 2017 07:27:16 GMT-0400 (EDT) LEAP#302 Game of Life on the Boldport Club Matrix http://blog.tardate.com/2017/05/leap302-game-of-life-on-the-boldport-club-matrix.html <p>This is a quick and dirty implementation of <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Conway’s Game of Life</a> on the <a href="../TheMatrix">Boldport Matrix</a>, mainly to learn a bit more about using the AS1130 LED driver. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheMatrix/GameOfLife">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/xJM7nuiDj8w" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheMatrix/GameOfLife"><img src="http://leap.tardate.com/BoldportClub/TheMatrix/GameOfLife/assets/GameOfLife_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap302-game-of-life-on-the-boldport-club-matrix.html Sun May 21 2017 01:15:38 GMT-0400 (EDT) LEAP#301 DHT11 Sensor Basics http://blog.tardate.com/2017/05/leap301-dht11-sensor-basics.html <p>The DHT11 sensor is a very cheap and common sensor that provides readings of relative humidity (20-80% ±5%) and temperature (0-50°C ±2°C). For a first test, I’m using a simple DHT11 library from the arduino playground. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/playground/DHT11/Basics">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/DHT11/Basics"><img src="http://leap.tardate.com/playground/DHT11/Basics/assets/Basics_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap301-dht11-sensor-basics.html Sat May 20 2017 07:05:27 GMT-0400 (EDT) Thoughts on GLOC Conference and ORDS/REST Demos http://www.thatjeffsmith.com/archive/2017/05/thoughts-on-gloc-conference-and-ordsrest-demos/ <p>I had a very, very enjoyable time at the <a href="https://www.neooug.org/gloc/" target="_blank">Great Lakes Oracle Conference</a> this week in Cleveland (OHIO! &#8211; Just in case Joel is reading this.)</p> <p>About 400 people attended, and I think it&#8217;s become one of the best conferences in the US, esp for the bang you get for your buck.</p> <p>I did two talks.</p> <p>For the first one, they had me in the &#8216;big&#8217; room &#8211; right after the day&#8217;s Keynote. The Keynote topic was technical writing and how to use less BS (except he didn&#8217;t say BS).</p> <p>One of the takeaways that stuck for me was on jargon &#8211; and boy do we at Oracle love our jargon. We love our acronyms too. And my REST talk uses a lot of it. So I quickly added a slide on JSON.</p> <p><iframe src="//www.slideshare.net/slideshow/embed_code/key/btnpdcqOIA7gMm?startSlide=9" 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> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/hillbillyToad/auto-rest-enabling-your-oracle-database-tables" title="REST Enabling Your Oracle Database" target="_blank">REST Enabling Your Oracle Database</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/hillbillyToad">Jeff Smith</a></strong> </div> <p>I also took a bit more time to talk about what REST is, and how that equates to something like a database.</p> <p>One of the things I REALLY appreciated as a speaker was a full hour to present the topic. I need every minute of that for a talk like this. I&#8217;d like to see smaller conferences aim for hour long talks again. It seems we&#8217;re on the slippery slope to 45 minutes, and I feel rushed at that time period.<br /> <div id="attachment_6172" style="width: 752px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/rest1.jpg"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/rest1-1024x1024.jpg" alt="" width="742" height="742" class="size-large wp-image-6172" /></a><p class="wp-caption-text">Ric actually helped me form my talk with some nice discussion earlier that morning &#8211; thanks bud!</p></div> <!-- 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>This talk focuses quite a bit on a feature we offer &#8211; the ability to auto publish a REST API for your tables and views. I won&#8217;t say it&#8217;s controversial, but I will say it&#8217;s probably more practical to write custom RESTful Services in the &#8216;real world.&#8217; But if I&#8217;m introducing the concept of REST enabling a database, then this AUTO feature works very nicely to get folks into the game. Thanks again <a href="https://twitter.com/RicVanDyke" target="_blank">Ric</a> for reminding me that I need to make this point more succinctly. </p> <p>I need to rethink this talk so that&#8217;s more obvious, or I need a 90 minute talk vs the 60!</p> <p>I ended the conference with another packed room, and I talked about SQL Developer in all of it&#8217;s incarnations.<div id="attachment_6173" style="width: 752px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/sqldev.jpg"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/sqldev-1024x1024.jpg" alt="" width="742" height="742" class="size-large wp-image-6173" /></a><p class="wp-caption-text">I secretly turned this into a tips &#038; tricks talk, muwahahahaha.</p></div> <p>I got one of my least favorite questions in this talk &#8211; &#8216;why is your tool better than ________?&#8217; </p> <p>That&#8217;s not my question to answer &#8211; I think it&#8217;s yours to answer. Some folks want a checklist of things we do that &#8216;they&#8217; don&#8217;t. That&#8217;s a really weird game to play, but I get it.</p> <p>My ultimate answer lies in about 500 or so blog posts here, and I guess you could really say I voted with my feet about 6 years ago when I came over to Oracle took this job.</p> <p>I don&#8217;t normally do conference or travel wrap-up posts, but I always enjoy reading <a href="https://oracle-base.com/blog/2017/04/30/oracle-code-prague-the-journey-home/" target="_blank">Tim&#8217;s</a>, so I figured, why not?</p> <p>Happy weekend everybody. It&#8217;s time to go to the neighbors for a cook-out.</p> thatjeffsmith http://www.thatjeffsmith.com/?p=6171 Fri May 19 2017 18:10:44 GMT-0400 (EDT) 255 columns https://jonathanlewis.wordpress.com/2017/05/19/255-columns-2/ <p>This is one of my &#8220;black hole&#8221; articles &#8211; I drafted it six months ago, but forgot to publish it.</p> <p>A <a href="https://community.oracle.com/thread/3991274"><em><strong>recent post on OTN</strong></em></a> highlighted some of the interesting oddities that appear when you create tables with more than 255 columns. In fact this was a more subtle case than usual because it reminded us that it&#8217;s possible to have a partitioned table which <em><strong>appears</strong> </em>to have less than the critical 255 columns while actually having more than 255 columns thanks to the anomaly of how Oracle handles dropping columns in a partitioned table.  (For a useful insight see <a href="https://orastory.wordpress.com/2014/11/11/oltp-compression-drop-column-partition-exchange/"><em><strong>this note from Dominic Brooks</strong></em></a> &#8211; and for a nice thought about preparing simple tables for an exchange with such a partitioned tables look at the 12.2 feature of <em>&#8220;create table for exchange&#8221;</em> in <a href="https://sqlmaria.com/2017/05/16/extremely-useful-partitioning-enhancements-in-oracle-database-12c/"><em><strong>Maria Colgan&#8217;s recent article</strong></em></a>)</p> <p>The thread took me down the path of trying to recreate some notes I wrote a long time ago and can no longer find and the OTN problem wasn&#8217;t the basic one I had assumed anyway, but I thought I&#8217;d publish a bit of the work I had done so that you can see <a href="https://jonathanlewis.wordpress.com/2015/02/19/255-columns/"><em><strong>another of the funny effects</strong></em></a> that appear when your table definition has too many columns (and you use them).</p> <p>The OP told us about a table with more than 350 columns, so here&#8217;s a little script I wrote to generate a table with 365 columns and some data. (It turned out that the OP had more than 390 columns in the table, but 30+ had been &#8220;dropped&#8221;.)</p> <pre class="brush: plain; title: ; notranslate"> rem rem Script: wide_table_2.sql rem Author: Jonathan Lewis rem Dated: Nov 2016 rem Purpose: rem rem Last tested rem 11.2.0.4 rem create sequence s1; declare m_statement_1 varchar2(32767) := 'create table t1(col0001 varchar2(10),'; m_statement_2 varchar2(32767) := 'insert into t1 values(lpad(s1.nextval,10),'; begin for i in 2 .. 365 loop m_statement_1 := m_statement_1 || 'col' || to_char(i,'FM0000') || ' varchar2(100),' ; m_statement_2 := m_statement_2 || case when i in (2,3,4) -- case when i in (122,123,124) -- case when i in (262,263,264) then 'dbms_random.string(''U'',ceil(dbms_random.value(0,100))),' when i = 365 then 'lpad(s1.currval,7))' else '''COL' || to_char(i,'FM0000') || ''',' end ; end loop; m_statement_1 := substr(m_statement_1, 1, length(m_statement_1) - 1); m_statement_1 := m_statement_1 || ') pctfree 25'; execute immediate m_statement_1; for i in 1..10000 loop execute immediate m_statement_2; end loop; end; / </pre> <p>I&#8217;ve taken a fairly simple approach to building a string that creates a table &#8211; and it&#8217;s easy to adjust the number of columns &#8211; and a string to insert some values into that table. The insert statement will insert a row number into the first and last columns of the table and generate a random length string for a few of the columns. I&#8217;ve picked three possible sets of three columns for the random length string; one set is definitely going to be in the first row piece, one set is definitely going to be in the last row piece, and (since the row will split 110/255) one will be somewhere inside whichever is the larger row piece.</p> <p>If I wanted to do something more sophisticated I&#8217;d probably have to switch to a PL/SQL array for the two statements strings &#8211; 32,767 characters doesn&#8217;t give me much freedom to play if I wanted to test a table with 1,000 columns.</p> <p>Having created and populated my table, I performed the following three tests on it:</p> <pre class="brush: plain; title: ; notranslate"> analyze table t1 compute statistics; prompt ==== prompt CTAS prompt ==== create table t1a pctfree 25 as select * from t1; analyze table t1a compute statistics; select table_name, num_rows, avg_row_len, blocks, chain_cnt from user_tables where table_name like 'T1%' ; prompt ====== prompt Insert prompt ====== truncate table t1a; insert into t1a select * from t1; analyze table t1a compute statistics; select table_name, num_rows, avg_row_len, blocks, chain_cnt from user_tables where table_name like 'T1%' ; prompt ============= prompt Insert append prompt ============= truncate table t1a; insert /*+ append */ into t1a select * from t1; analyze table t1a compute statistics; select table_name, num_rows, avg_row_len, blocks, chain_cnt from user_tables where table_name like 'T1%' ; </pre> <p>The first test creates a new table (<em><strong>t1a</strong></em>, at <em><strong>pctfree 25</strong></em>, matching the original) copying the original table with a simple <em>&#8220;create as select&#8221;</em>.</p> <p>The second test truncates this table and does a basic <em>&#8220;insert as select&#8221;</em> to repopulate it.</p> <p>Third test truncates the table again and does an <em>&#8220;insert as select&#8221;</em> with the <em><strong>/*+ append */</strong></em> hint to repopulate it.</p> <p>In all three cases (and with three variations of where the longer random strings went) I used the <em><strong>analyze</strong></em> command to gather stats on the tables so that I could get a count of the <a href="https://jonathanlewis.wordpress.com/2009/04/30/analyze-this/"><em><strong>number of chained rows</strong></em></a>; and I dumped a couple of blocks from the tables to see what the inserted rows looked like.</p> <p>Here&#8217;s a summary of the results from 11.2.0.4 when the random-length columns are near the start of the row (the position didn&#8217;t really affect the outcome, and the results for 12.1.0.2 and 12.2.0.1 were very similar):</p> <pre class="brush: plain; title: ; notranslate"> ==== CTAS ==== TABLE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS CHAIN_CNT -------------------- ---------- ----------- ---------- ---------- T1 10000 3062 6676 3313 T1A 10000 3062 9504 237 ====== Insert ====== TABLE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS CHAIN_CNT -------------------- ---------- ----------- ---------- ---------- T1 10000 3062 6676 3313 T1A 10000 3062 6676 3287 ============= Insert append ============= TABLE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS CHAIN_CNT -------------------- ---------- ----------- ---------- ---------- T1 10000 3062 6676 3313 T1A 10000 3062 9504 237 </pre> <p>As you can see we get two <span style="text-decoration:underline;"><strong>significantly different</strong></span> results: the <em>CTAS</em> and the <em>&#8220;insert append&#8221;</em> produce tables reporting 9,504 blocks and 237 chained rows, while the original table (single row inserts) and the regular <em>&#8220;insert as select&#8221;</em> produce tables with 6,676 blocks and 3,133 chained rows. It seems that the CTAS (which would also cover <em>&#8220;alter table move&#8221;</em>) and direct path insert have minimised the number of chained rows at a cost of a dramatically increased number of blocks. (The scale of the difference happens to be particularly extreme in this case &#8211; I didn&#8217;t do this deliberately it was simply a consequence of the way I happened to generate the data and the length of the rows.)</p> <p>We know, of course, that every row in this table will consist of two row pieces, one of 110 columns and one of 255 columns; so every row is in some respects chained due to the potential for <strong><em>intra</em></strong>-block chaining of those two pieces, but the analyze command reports only <em><strong>inter</strong></em>-block chaining i.e. only those rows that start in one block and end in another block &#8211; intra-block chaining doesn&#8217;t count as &#8220;proper&#8221; chaining (at least in this version of Oracle).</p> <p>There are two questions to address in these results: the first is <em>&#8220;What&#8217;s happening?&#8221;</em>, the second, which we ask when we get the answer to the first, is <em>&#8220;How come the direct path method still gives us some chained rows?&#8221;</em></p> <p>I believe the answer to the first question is that the direct path method attempts to avoid chaining unavoidable row-pieces. Even if it means leaving a huge amount of empty space in a block Oracle starts a new row in a new block if there isn&#8217;t enough space for both of the anticipated row-pieces to fit in the current block. I think this may be a feature to help Exadata and it&#8217;s use of direct path reads for smart scans, where a relatively small number of chained rows (which might be outside the current Exadata storage unit &#8211; and even in the disk space managed by another cell server) could have a catastrophic impact on performance because the system would have to do a single block read to pick up the extra piece &#8211; which could have a devastating impact on the performance.</p> <p>So why do some rows still see chaining under this strategy &#8211; I think it&#8217;s because there&#8217;s a small error in the arithmetic somewhere (possibly visible only in ASSM tablespaces, perhaps related to row-piece headers) where Oracle thinks there&#8217;s enough space for both row pieces but there isn&#8217;t quite so it tries to insert both pieces and has to chain the second one. (I&#8217;ll corroborate this hypothesis with some analysis of block dumps in a moment).</p> <p>So you have a choice &#8211; lots of wasted space and a little row-chaining, or maximum packing of data and (potentially) lots of row-chaining. But there&#8217;s more: I&#8217;ve said we get one row piece of 110 columns and one of 255 columns for each row, but the point at which the split occurs and the order in which the pieces are inserted depends on the method used.</p> <ul> <li>Single row inserts (initial table creation, typical OLTP processing): The split occurred at <em><strong>column 111</strong></em> &#8211; so the <em><strong>leading 110</strong></em> columns are in one row piece and the <em><strong>trailing 255</strong></em> columns are in the other &#8211; and the row piece with the <em><strong>trailing</strong></em> columns is inserted first.</li> <li>Array inserts (normal): Exactly the same as the single row inserts.</li> <li>Direct path inserts / CTAS: The split occurred at <em><strong>column 256</strong></em>, with the <em><strong>leading 255</strong></em> column row-piece inserted first and the <em><strong>trailing 110</strong></em> column row-piece inserted second.</li> </ul> <p>I&#8217;m not sure that this particular detail matters very much in normal circumstances when you consider the dramatic difference in size that can appear in the comparison between direct path and normal inserts, but maybe there&#8217;s someone who will notice a performance (or even space) side effect because of this inconsistency. We will see in a later post, though, that this difference can have an enormous impact if you subsequently add columns to the table and populate them.</p> <p>I said I&#8217;d come back to the row-chaining anomaly. One of the little details that I didn&#8217;t include in my code listing was the call to <em>&#8220;analyze table report chained rows&#8221;</em> that I did (after executing $ORACLE_HOME/rdbms/admin/utlchain.sql) to list the head rowids of the chained rows into the <em><strong>chained_rows</strong></em> table. After doing this I ran a simple pl/sql loop to dump all the relevant blocks to the trace file:</p> <pre class="brush: plain; title: ; notranslate"> begin for r in ( select dbms_rowid.rowid_relative_fno(head_rowid) file#, dbms_rowid.rowid_block_number(head_rowid) block# from chained_rows ) loop execute immediate 'alter system dump datafile ' || r.file# || ' block ' || r.block#; end loop; end; / </pre> <p>Here&#8217;s a little extract from the resulting trace file showing you what the start of a row piece looks like when dumped:</p> <pre class="brush: plain; title: ; notranslate"> tab 0, row 0, @0x1765 tl: 2075 fb: --H-F--- lb: 0x0 cc: 255 nrid: 0x01401bc4.1 col 0: [10] 20 20 20 20 20 20 20 33 36 32 col 1: [19] 41 52 43 4a 4a 42 4e 55 46 4b 48 4c 45 47 4c 58 4c 4e 56 col 2: [ 8] 59 4b 51 46 4a 50 53 55 col 3: [17] 53 58 59 4e 4a 49 54 4a 41 5a 5a 51 44 44 4b 58 4d col 4: [ 7] 43 4f 4c 30 30 30 35 col 5: [ 7] 43 4f 4c 30 30 30 36 </pre> <p>A convenient thing to check is the cc: entry (end of 2nd line). You can see that this row piece has 255 columns, and if you look at the first six columns dumped you can see that it&#8217;s the row numbered 362 (33 36 32), then there are three columns of different length strings, then two columns with the values &#8216;COL00005&#8217; and &#8216;COL0007&#8217; respectively. It&#8217;s the &#8220;cc:&#8221; entry that&#8217;s useful though. I&#8217;m going to do a bit of simple unix hackery:</p> <pre class="brush: plain; title: ; notranslate"> grep &quot; cc: &quot; test_ora_24398.trc | sed &quot;s/^.*cc: //&quot; | sort | uniq -c | sort -n 1 1 5 2 112 108 125 109 237 110 474 255 </pre> <p>In my 237 blocks with chained rows I had 474 row pieces of 255 columns and 237 row pieces of 110 columns; then I had 125 row pieces that had lost (and therefore chained) one column and 112 row pieces that had lost and therefore chained 2 columns. I also had a couple of small &#8220;tail-end&#8221; pieces from earlier blocks scattered in these blocks. These figures suggest that there&#8217;s a small error (actually no more than about 20 bytes) in the calculation Oracle does to decide if it can fit a whole row into the current block or whether it has to go on to the next empty block.</p> <h3>Conclusions</h3> <p>When copying a table defined with more than 255 columns there&#8217;s the potential for a huge variation in the space usage and chain count depending on whether you do a CTAS (or insert /*+ append */) or a simple insert. You have to decide which option is the biggest threat to your available resources.</p> <p>There is a little anomaly with the way in which rows are split that is also dependent on the method used for copying &#8211; this may also have some effect, though perhaps small enough to be ignored when compared with the space/chaining difference as far as ordinary OLTP processing is concerned. But there are  some important side effects we will consider in a later post.</p> <p>Even though CTAS/direct path insert can eliminate a lot of row chaining it is still possible to find some row chaining in the resulting data. This may be the result of a calculation error (or possibly a deliberate space saving compromise).</p> <p>Note that any comments about using CTAS to copy a table also apply to <em>&#8220;alter table move&#8221;</em> and to using <em><strong>expdp/impdp</strong></em>.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/16582/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/16582/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonathanlewis.wordpress.com&#038;blog=491988&#038;post=16582&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=16582 Fri May 19 2017 12:49:39 GMT-0400 (EDT) Grumpy Old Man Having a Moan http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/xpDBZ85pGJg/ <p><img class="alignleft wp-image-7140" src="https://oracle-base.com/blog/wp-content/uploads/2017/05/elderly-152866_640.png" alt="" width="150" height="195" />This post is just going to be me moaning, so feel free to stop reading now and go about your day. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I am a regular guy, with a regular job. I don&#8217;t wake up every morning wondering how I can selflessly serve the Oracle community. It isn&#8217;t my mission to make sure you never have to think when you do your job. It is not my job to respond to your questions in a timescale that fits in with some SLA you seem to have arbitrarily assigned to the interaction. I don&#8217;t review every product, book, whitepaper, article, blog post, tweet that is produced. My mission in life is not to sell your product.</p> <p>Some days I feel totally exasperated by all of this community stuff. I know some people think this is my job, but it&#8217;s not. I know some people think the website is done by a team of people, but it&#8217;s not. It&#8217;s just me using my *spare time* to learn new stuff, and I happen to put the notes I take during that process on the internet so others can read them. That&#8217;s it.</p> <p>I like interacting with people. It&#8217;s nice that what *I have to do to learn new stuff* ends up being useful to other people. I really appreciate it when people contact me with corrections, as it helps me and therefore other readers. What is really hard to deal with is the constant, unreasonable demands from people who don&#8217;t seem to understand I am not here solely to serve them.</p> <p>From a community perspective, the content I produce has more value than the rest of the stuff I do, so anything that pulls me away from that is a problem.</p> <p>I am one person with a couple of hours a day to dedicate to this stuff. I&#8217;ve just got to protect that time a little better. If that means I am not as *available*, so be it.</p> <p>Grumpy rant over, for now&#8230; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Cheers</p> <p>Tim&#8230;</p> <p>PS. I have been waiting to post this for a while because I don&#8217;t want to offend anyone who might think it is about them. Literally every time I&#8217;ve thought it would be &#8220;safe&#8221; to post it, someone has jumped in with some amazing request that has made me delay the post again. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>PPS. I understand it is a nice problem to have and I know I&#8217;m not the only person in the community with this issue. <img src="https://s.w.org/images/core/emoji/2.2.1/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/2017/05/19/grumpy-old-man-having-a-moan/">Grumpy Old Man Having a Moan</a> was first posted on May 19, 2017 at 1:37 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/xpDBZ85pGJg" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7139 Fri May 19 2017 08:37:02 GMT-0400 (EDT) NEW ODTUG Kscope17 Content http://www.odtug.com/p/bl/et/blogaid=719&source=1 Stay up to date on all things Kscope17: Introducing the Lunch and Learn, New Oracle Professional Tracks, In the Cloud sessions, On-Prem sessions, and the Kscope17 Schedule at a Glance. ODTUG http://www.odtug.com/p/bl/et/blogaid=719&source=1 Thu May 18 2017 16:37:23 GMT-0400 (EDT) LEAP#300 The Matrix LED Test http://blog.tardate.com/2017/05/leap300-the-matrix-led-test.html <p>The <a href="https://github.com/LuckyResistor/LRAS1130">LRAS1130</a> Arduino library from @luckyresistor is an easy way to get started with the BoldportClub Matrix and an Arduino. I’m using a slightly modified version of the LedTest sketch from the library here. LED test = all passing! As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheMatrix/LedTest">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/BoldportClub/TheMatrix/LedTest"><img src="http://leap.tardate.com/BoldportClub/TheMatrix/LedTest/assets/LedTest_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap300-the-matrix-led-test.html Thu May 18 2017 07:39:01 GMT-0400 (EDT) Sequential Asynchronous calls in Node.JS – using callbacks, async and ES6 Promises https://technology.amis.nl/2017/05/18/sequential-asynchronous-calls-in-node-js-using-callbacks-async-and-es6-promises/ <p>One of the challenges with programming in JavaScript (ECMA Script) in general and Node.JS in particular is having to deal with asynchronous operations. Whenever a call is made to a function that will handle the request asynchronously, care has to be taken to be prepared to receive the result from the function in an asynchronous fashion. Additionally, we have to ensure that the program flow does not continue prematurely &#8211; only those steps that can be performed without the result from the function call can proceed. Orchestrating multiple asynchronous &#8211; some of them sequential or chained and others possibly in parallel &#8211; and gathering the results from those calls in the proper way is not trivial.</p> <p>Traditionally, we used callback functions to program the asynchronous interaction: the caller passed a reference to a function to the asynchronous operation and when done with the asynchronous operation, the called function would invoke this callback function to hand it the outcome. The call(ed)back function would then take over and continue flow of the program. A simple example of a callback function is seen whenever an action is scheduled for execution using setTimeout():</p> <pre class="brush: jscript; title: ; notranslate"> setTimeout(function () { console.log(&quot;Now I am doing my thing &quot;); }, 1000); </pre> <p>or perhaps more explicitly:</p> <pre class="brush: jscript; title: ; notranslate"> function cb() { console.log(&quot;Now I am doing my thing &quot;); } setTimeout(cb, 1000); </pre> <h3>Chain of Asynchronous Actions</h3> <p>With multiple mutually dependent (chained) calls, using callback functions results in nested program logic that quickly becomes hard to read, debug and maintain. An example is shown here:</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-55.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-54.png?resize=702%2C289&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Function readElementFromJsonFile does what its name says: it reads the value of a specific element from the file specified in the input parameter. It does so asynchronously and it will call the callback function to return the result when it has been obtained. Using this function, we are after the final value. Starting with file step1.json, we read the name of the nextfile element which indicates the next file to read, in this case step2.json. This file in turn indicates that nextStep.json should be inspected and so on. Clearly we have a case of a chain of asynchronous actions where each action’s output provides the input for the next action.</p> <p>In classic callback oriented JavaScript, the code for the chain of calls looks like this &#8211; the nested structure we have come to expect from using callback functions to handle asynchronous situations:</p> <pre class="brush: jscript; title: ; notranslate"> // the classic approach with nested callbacks var fs = require('fs'); var step1 = &quot;/step1.json&quot;; function readElementFromJsonFile(fileName, elementToRead, cb) { var elementToRetrieve = 'nextfile'; if (elementToRead) { elementToRetrieve = elementToRead; } console.log('file to read from ' + fileName); fs.readFile(__dirname + '/' + fileName, &quot;utf8&quot;, function (err, data) { var element = &quot;&quot;; if (err) return cb(err); try { element = JSON.parse(data)[elementToRetrieve]; } catch (e) { return cb(e); } console.log('value of element read = ' + element); cb(null, element); }); }//readElementFromJsonFile readElementFromJsonFile(step1, null, function (err, data) { if (err) return err; readElementFromJsonFile(data, null, function (err, data) { if (err) return err; readElementFromJsonFile(data, null, function (err, data) { if (err) return err; readElementFromJsonFile(data, null, function (err, data) { if (err) return err; readElementFromJsonFile(data, 'actualValue', function (err, data) { if (err) return err; console.log(&quot;Final value = &quot; + data); }); }); }); }); }); </pre> <p>The arrival of the Promise in ES6 &#8211; a native language mechanism that is therefore available in recent versions of Node.JS &#8211; makes things a little bit different and more organized, readable and maintainable. The function readElementFromJsonFile() will now return a Promise &#8211; a placeholder for the eventual result of the asynchronous operation. Even though the result will be provided through the Promise object at a later moment, we can program as if the Promise represents that result right now &#8211; and we can anticipate in our code at what to do when the function delivers on its Promise (by calling the built in function <em>resolve</em> inside the Promise).</p> <p>The result of the resolution of a Promise is a value &#8211; in the case of function <em>readElementFromJsonFile</em> it is the value read from the file. The then() operation that is executed when the Promise is resolved with that value, calls the function that it was given as a parameter. The result (resolution outcome) of the Promise is passes as input into this function. In the code sample below we see how <em>readElementFromJsonFile(parameters)</em>.then(<em>readElementFromJsonFile</em>) is used. This means: when the Promise returned from the first call to the function is resolved, then call the function again, this time using the outcome of the first call as input to the second call. With the fourth <em>then</em> this is a little bit more explicit: since in the final call to the function <em>readElementFromJsonFile</em> we need to pass not just the outcome from the previous call to the function as an input parameter but also the name of the element to read from the file. Therefore we use an anonymous function that takes the resolution result as input and makes the call to the function with the additional parameter. Something similar happens with the final <em>then</em> &#8211; where the result from the previous call is simply printed to the output.</p> <p>The code for our example of subsequently and asynchronously reading the files becomes:</p> <pre class="brush: jscript; title: ; notranslate"> var fs = require('fs'); var step1 = &quot;step1.json&quot;; function readElementFromJsonFile(fileName, elementToRead) { return new Promise((resolve, reject) =&gt; { var elementToRetrieve = 'nextfile'; if (elementToRead) { elementToRetrieve = elementToRead; } console.log('file to read from ' + fileName); fs.readFile(__dirname + '/' + fileName, &quot;utf8&quot;, function (err, data) { var element = &quot;&quot;; if (err) return reject(err); try { element = JSON.parse(data)[elementToRetrieve]; } catch (e) { reject(e); } console.log('element read = ' + element); resolve(element); }); })// promise } readElementFromJsonFile(step1) .then(readElementFromJsonFile) .then(readElementFromJsonFile) .then(readElementFromJsonFile) .then(function (filename) { return readElementFromJsonFile(filename, 'actualValue') }) .then(function (value) { console.log('Value read after processing five files = ' + value); }) </pre> <h3>Scheduled Actions as Promise or how to Promisify setTimeout</h3> <p>The setTimeout() built in expects a call back function. It does not currently return a Promise. Something like:</p> <p>setTimeout(1000).then(myFunc)</p> <p>would be nice but does not exist.</p> <p>This <a href="http://stackoverflow.com/questions/39538473/using-settimeout-on-promise-chain" target="_blank" rel="noopener noreferrer">entry on Stackoverflow</a> has a nice solution for working with setTimeout Promise style:</p> <pre class="brush: jscript; title: ; notranslate"> function delay(t) { return new Promise(function(resolve) { setTimeout(resolve, t) }); } function myFunc() { console.log('At last I can work my magic!'); } delay(1000).then(myFunc); </pre> <p>The post <a rel="nofollow" href="https://technolamis.nl/2017/05/18/sequential-asynchronous-calls-in-node-js-using-callbacks-async-and-es6-promises/">Sequential Asynchronous calls in Node.JS &#8211; using callbacks, async and ES6 Promises</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=44880 Thu May 18 2017 05:38:00 GMT-0400 (EDT) LEAP#299 The Boldport Club Matrix http://blog.tardate.com/2017/05/leap299-the-boldport-club-matrix.html <p>The Matrix is an I²C-controlled 24x5 LED matrix display, powered by an AMS AS1130 LED driver. It’s made of 0.2mm thick circuit board so it can slightly bend. A few can be chained together for a larger display. With 120 0805 LEDs and an SSOP-28 AS1130, this kit is another great excuse to fire up the hot-air and get a <a href="https://www.oshstencils.com/#projects/b0f4128d644cff5424abcb2829a05980179f08fc">stencil from OSHStencils</a>. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheMatrix">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/BoldportClub/TheMatrix"><img src="http://leap.tardate.com/BoldportClub/TheMatrix/assets/TheMatrix_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap299-the-boldport-club-matrix.html Wed May 17 2017 10:54:42 GMT-0400 (EDT) Oracle Database standard Geo Location Support using Locator (included in every edition!) https://technology.amis.nl/2017/05/17/oracle-database-standard-geo-location-support-using-locator-included-in-every-edition/ <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-48.png?ssl=1"><img style="background-image: none; float: right; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-47.png?resize=244%2C232&#038;ssl=1" alt="image" align="right" border="0" data-recalc-dims="1" /></a>Many databases have native support for locations en geodata &#8211; and determining distance and closest locations (within a certain perimeter). Oracle Database has the [Graph and] Spatial Option &#8211; that supports even the most advanced and exotic forms of location related data querying (including multidimensional shapes and probably relativistic effects); this option comes on top of Enterprise Edition and carries additional costs. What may be not as well know is the Locator functionality that is part of every edition of the Oracle Database &#8211; including XE and SE, (without any additional costs) &#8211; with geo support as found in most databases. In this article I will give a very brief introduction of what this Locator feature can be used for.</p> <p>See for extensive documentation on Locator:  <a title="https://docs.oracle.com/database/121/SPATL/sdo_locator.htm#SPATL340" href="https://docs.oracle.com/database/121/SPATL/sdo_locator.htm#SPATL340" target="_blank" rel="noopener noreferrer">Oracle Database 12c Documenation &#8211; Locator</a> (and <a title="http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_locator.htm#SPATL340" href="http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_locator.htm#SPATL340">http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_locator.htm#SPATL340</a> for Oracle Database 11g).</p> <p>I will assume the legacy data model of DEPT and EMP (download DDL script for creating SCOTT’s database schema objects: <a title="https://github.com/lucasjellema/sig-nosql-mongodb/blob/master/hr-queries/scott_build.sql" href="https://github.com/lucasjellema/sig-nosql-mongodb/blob/master/hr-queries/scott_build.sql">scott_build.sql</a>).</p> <p>&nbsp;</p> <h3>1. Prepare a table for Geo Spatial Data</h3> <p>&#8212; add geospatial data for departments (longitude, lattitude)</p> <pre class="brush: sql; title: ; notranslate"> alter table dept add (geo_location SDO_GEOMETRY) </pre> <p>SDO_GEOMETRY is an object type that describes and supports any type of geometry. Examples of SDO_GTYPE values include 2001 for a two-dimensional point. The SRID value 8307 is associated with the widely used WGS84 longitude/latitude coordinate system.</p> <p>&nbsp;</p> <h3>2. Add geo information to records in table</h3> <p>Now that a column has been added to hold the SDO_GEOMETRY object, we can start loading location data into the table.</p> <pre class="brush: sql; title: ; notranslate"> update dept set geo_location = SDO_GEOMETRY(2001, 8307,SDO_POINT_TYPE (-96.8005, 32.7801,NULL), NULL, NULL) where loc = 'DALLAS' update dept set geo_location = SDO_GEOMETRY(2001, 8307,SDO_POINT_TYPE (-73.935242, 40.730610,NULL), NULL, NULL) where loc = 'NEW YORK' update dept set geo_location = SDO_GEOMETRY(2001, 8307,SDO_POINT_TYPE ( -71.0598, 42.3584,NULL), NULL, NULL) where loc = 'BOSTON' update dept set geo_location = SDO_GEOMETRY(2001, 8307,SDO_POINT_TYPE (-87.6298, 41.8781,NULL), NULL, NULL) where loc = 'CHICAGO' </pre> <p>&nbsp;</p> <h3>3. Prepare meta data in USER_SDO_GEOM_METADATA</h3> <p>For each spatial column (type SDO_GEOMETRY), you must insert an appropriate row into the USER_SDO_GEOM_METADATA view to reflect the dimensional information for the area in which the data is located. You must do this before creating spatial indexes</p> <pre class="brush: sql; title: ; notranslate"> -- The USER_SDO_GEOM_METADATA view has the following definition: -- ( TABLE_NAME VARCHAR2(32), -- COLUMN_NAME VARCHAR2(32), -- DIMINFO SDO_DIM_ARRAY, -- SRID NUMBER --); -- insert dimensional information for the spatial column -- the dimensional range is the entire Earth, and the coordinate system is the widely used WGS84 (longitude/latitude) system (spatial reference ID = 8307 INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('DEPT', 'GEO_LOCATION', SDO_DIM_ARRAY (SDO_DIM_ELEMENT('LONG', -180.0, 180.0, 0.5), SDO_DIM_ELEMENT('LAT', -90.0, 90.0, 0.5)), 8307); </pre> <p>&nbsp;</p> <h3>4. Create the Geo Spatial Index</h3> <p>Create index on the column geo_location that holds the SO_GEOMETRY object:</p> <pre class="brush: sql; title: ; notranslate"> CREATE INDEX dept_spatial_idx ON dept(geo_location) INDEXTYPE IS mdsys.spatial_index; </pre> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-49.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-48.png?resize=410%2C271&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <h3>5. Start querying with Location based conditions</h3> <p>List all departments, ordered by their distance from Washington DC</p> <pre class="brush: sql; title: ; notranslate"> SELECT d.loc , SDO_GEOM.SDO_DISTANCE ( SDO_GEOMETRY(2001, 8307,SDO_POINT_TYPE ( -77.0364, 38.8951,NULL), NULL, NULL) /* Washington DC */ , d.geo_location , 0.005 , 'unit=KM' ) &quot;distance from Washington&quot; from dept d order by 2 </pre> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-50.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-49.png?resize=701%2C259&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a><br /> We find all departments  within 500 km from Washington DC and get the distance for each department in the property distance in km :</p> <pre class="brush: sql; title: ; notranslate"> with d as ( SELECT d.loc , SDO_GEOM.SDO_DISTANCE ( SDO_GEOMETRY(2001, 8307,SDO_POINT_TYPE ( -77.0364, 38.8951,NULL), NULL, NULL) , d.geo_location , 0.005 , 'unit=KM' ) distance from dept d order by 2 ) select d.* from d where d.distance &lt; 500 </pre> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-51.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-50.png?resize=244%2C72&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Find two closest neighbouring departments for NEW YORK:</p> <p>&nbsp;</p> <pre class="brush: sql; title: ; notranslate"> SELECT /*+ LEADING(d) INDEX(dn dept_spatial_idx) */ d.deptno, d.loc, dn.deptno neighbour_deptno, dn.loc neighbour_loc, sdo_nn_distance (1) distance FROM dept d cross join dept dn WHERE d.deptno = 10 /* NEW YORK */ and dn.deptno != 10 AND sdo_nn /* is dn in set of 3 closest neighbours to d */ (dn.geo_location, d.geo_location, 'sdo_num_res=3', 1) = 'TRUE' ORDER BY distance; </pre> <p>(note: the hint in the first line is not required on Oracle Database 12c, but it is on 11g &#8211; see <a href="https://community.oracle.com/thread/3696687" target="_blank" rel="noopener noreferrer">forum thread</a>) Here are examples for the use of the <a href="https://docs.oracle.com/database/121/SPATL/sdo_nn-examples.htm#SPATL1282" target="_blank" rel="noopener noreferrer">SDO_NN operator</a>.</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-52.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-51.png?resize=505%2C298&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-53.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-52.png?resize=244%2C72&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Distance matrix, using pivot:</p> <p>&nbsp;</p> <pre class="brush: sql; title: ; notranslate"> with distances as (SELECT /*+ LEADING(d) INDEX(dn dept_spatial_idx) */ d.deptno, d.loc, dn.deptno neighbour_deptno, dn.loc neighbour_loc, trunc(sdo_nn_distance (1)) distance FROM dept d cross join dept dn WHERE sdo_nn /* is dn in set of 3 closest neighbours to d */ (dn.geo_location, d.geo_location, 'sdo_num_res=3 unit=km', 1) = 'TRUE' ) SELECT * FROM (SELECT loc, neighbour_loc, distance distance FROM distances) PIVOT ( max(distance) AS distance FOR (neighbour_loc) IN ('NEW YORK' AS NEWYORK, 'BOSTON' AS BOSTON, 'CHICAGO' AS CHICAGO, 'DALLAS' as DALLAS) ); </pre> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-54.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-53.png?resize=563%2C95&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/17/oracle-database-standard-geo-location-support-using-locator-included-in-every-edition/">Oracle Database standard Geo Location Support using Locator (included in every edition!)</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=44874 Wed May 17 2017 09:59:00 GMT-0400 (EDT) OFS and DBFS Questions (Oracle 12.2) http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/FC-6U-SZcyE/ <p><img class="alignright wp-image-7145" src="https://oracle-base.com/blog/wp-content/uploads/2017/05/folder-303891_640.png" alt="" width="150" height="135" /><br /> I pushed out some new articles yesterday.</p> <ul> <li><a href="/articles/12c/ofs-and-dbfs-enhancements-12cr2">Oracle File System (OFS) and Database File System (DBFS) Enhancements in Oracle Database 12c Release 2 (12.2)</a></li> <li><a href="/articles/12c/securefiles-enhancements-12c">SecureFiles Enhancements in Oracle Database 12c (12.1 and 12.2)</a></li> </ul> <p>The SecureFiles article is mostly links to other articles, but it was requested by a reader. In the process of doing that I noticed the new OFS feature in 12.2, which took me down a rabbit hole for a few days.</p> <p>I try to keep the main website for how-to articles, and the blog is where I post more opinion-based stuff. I got some questions, related to the OFS article, so I thought I would give some answers/opinions here. I could be wrong! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p><strong>Q: Isn&#8217;t this just renamed DBFS?</strong></p> <p><strong>A:</strong> No. If you compare the objects created for a DBFS and OFS file system they are different. They still do the same job (represent a file system and hold files in BLOBs in the database), but they are distinct file systems. This is not a straight &#8220;re-brand&#8221; of DBFS.</p> <p>In addition, OFS is both the name of a file server, the OFSD background process is the OFS server, and a specific type of database file system, the OFS file system. The OFS file system is &#8220;similar&#8221; to DBFS. The OFS server process can mount both OFS and DBFS file systems.</p> <p>I think it&#8217;s important to remember to use the terms &#8220;OFS server&#8221; and &#8220;OFS file system&#8221; so that people understand what bit you are talking about. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p><strong>Q: There are now two database file systems (OFS and DBFS). Which should I use?</strong></p> <p><strong>A:</strong> In my opinion, if you are happy with the restriction that you can only create the file system objects in the root container, or a non-CDB instance, you should probably use the OFS file system. It&#8217;s marginally easier to create and I&#8217;m guessing that is what the developers of the OFS server would prefer you to use. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> If this restriction is a problem, use DBFS to create a file system in a PDB or a non-sys user.</p> <p>If you need HTTP(S), WebDav or FTP access to the file system, DBFS is a better choice as those features come &#8220;out of the box&#8221; with DBFS from 12.1 onward.</p> <p>Pick the one that matches your use case.</p> <p><strong>Q: Will OFS eventually replace DBFS?</strong></p> <p><strong>A:</strong> I have no idea. What I can say is DBFS has some enhancements in 12.2 (<a href="http://docs.oracle.com/database/122/ADLOB/DBFS-securefiles-store.htm#ADLOB-GUID-90F97F5A-8163-4634-813F-7EE372032479">POSIX File Locking</a>) and it does some stuff &#8220;out of the box&#8221; that OFS doesn&#8217;t (<a href="/articles/12c/dbfs-enhancements-12cr1">HTTP(s), WebDav and FTP</a>). It also plays well with multitenant. I&#8217;ve tried it and it works the same in a 12.2 PDB as it does in 11gR2.</p> <p>IMHO if the plan were to replace DBFS with OFS, OFS would need to play well with multitenant and have the HTTP(S), WebDav and FTP (or preferably sFTP) support.</p> <p>Until stated otherwise, I&#8217;m going to assume they will coexist and each serve slightly different use cases.</p> <p><strong>Q: Automatic mounting of DBFS using FUSE through &#8220;/etc/fstab&#8221; is confusing because of timing issues. Is OFS better?</strong></p> <p><strong>A:</strong> Yes. The problem with any kind of auto-mount of a database file system is the database must be up before the mount is attempted. If you get the timing wrong it doesn&#8217;t work. The great thing about OFS is the mount/unmount is controlled by the OFSD process, so file systems mounted with the &#8220;persist&#8221; option will be mounted on instance startup and unmounted on instance shutdown. Great! No timing issues!</p> <p>You have to be aware of the potential issues around a manual unmount of the file system and the impact of a shutdown abort, but you test all your failure situations before going live right?</p> <p>From my limited testing, this aspect of OFS server feels really solid. It did what it said it would. I have no examples of heavy usage to refer to at this time.</p> <p><strong>Q: Is OFS Server a NFS Server.</strong></p> <p><strong>A:</strong> No it isn&#8217;t and I think the term &#8220;NFS in the database&#8221; from the documentation is confusing. A file system mounted by OFS server can be exported using a NFS server, allowing NFS access to the database file system (OFS or DBFS). The database itself is not acting as a NFS server. So what you have is the NFS server on the OS exporting the FUSE file system, which is held in the DB. I would give that more emphasis in the docs if it were me. This totally confused me, so I reached out on Twitter and Oracle came to the rescue, which was cool, but I don&#8217;t feel that should be necessary to get a DB feature working. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I think it&#8217;s cool you can export it using the OS NFS server, but that doesn&#8217;t make Oracle a NFS server. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p><strong>Q: Any issues with the NFS over FUSE?</strong></p> <p><strong>A:</strong> Once you throw the NFS server into the mix you get timing issues again. During my (rather limited) testing I&#8217;ve had a few issues that could only be fixed by restarting the NFS server on the OS. Once I did that everything was golden.</p> <p>From a resilience perspective, I&#8217;m not sure how I feel about this. Remember, I&#8217;m new to this feature and I&#8217;m not a NFS guru either, so don&#8217;t let me put you off.</p> <p>As a general point, there does seem to be a lot of posts on the interwebs of people having issues with NFS over FUSE, so I&#8217;m not how solid this is as a technology. It does work though. Like I said, I&#8217;m no expert!</p> <p><strong>Q: How do you &#8220;feel&#8221; about the new OFS feature?</strong></p> <p><strong>A:</strong> I used iFS in Oracle 8i. It worked fine, but was a massive resource hog. I&#8217;ve used the &#8220;file system&#8221; in the XML DB repository for some basic file handling. It works fine. I&#8217;ve used DBFS for some minor things and it&#8217;s fine, provided you a re careful with mounting it using FUSE. Having used OFS for a few days I &#8220;feel&#8221; like it is the cleanest experience of accessing a database file system from the database server. I like it. <img src="https://s.w.org/images/core/emoji/2.2.1/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/2017/05/17/ofs-and-dbfs-questions/">OFS and DBFS Questions (Oracle 12.2)</a> was first posted on May 17, 2017 at 2:23 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/FC-6U-SZcyE" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7143 Wed May 17 2017 09:23:52 GMT-0400 (EDT) ORDS, RESTful Services, and $URI http://www.thatjeffsmith.com/archive/2017/05/ords-restful-services-and-uri/ <p>Someone asked:</p> <p>I see reference to a &#8216;$URI&#8217; in an ORDS GET Handler example, can you explain what this is?</p> <p>Yes. Or, I can with the help of some of our <a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/documentation/listener-dev-guide-1979546.html#about_uris" target="_blank">DOCS</a>. </p> <p>The appropriate section would be:</p> <p><em>Columns in result sets whose first character is $ are given special treatment, they are assumed to denote columns that must be transformed into URIs, these are called Hyperlink Columns. Thus naming columns with a leading $ is a way to generate hyperlinks in resources. When a Hyperlink Column is encountered it’s value is prepended with the URI of the resource in which the column is being rendered, to produce a new URI.</em></p> <p>Ok, so if we see a column with $ &#8211; it&#8217;s going to be a link.</p> <p>And then, we take the value of the column and append it to the end of the current URI.</p> <p>Let&#8217;s see this in practice.</p> <div id="attachment_6164" style="width: 681px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri1.png" alt="" width="671" height="471" class="size-full wp-image-6164" /></a><p class="wp-caption-text">/examples/uri/ is what we&#8217;re working with</p></div> <p>And the code behind this GET handler is VERY simple:</p> <div id="attachment_6165" style="width: 375px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri2.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri2.png" alt="" width="365" height="219" class="size-full wp-image-6165" /></a><p class="wp-caption-text">I need to alias my value with &#8220;$something&#8221; &#8211; ORDS then knows to treat this as a URI</p></div> <p>Save/publish the code &#8211; now I want to call it.</p> <div id="attachment_6166" style="width: 686px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri3.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri3.png" alt="" width="676" height="602" class="size-full wp-image-6166" /></a><p class="wp-caption-text">Note the query results via JSON include the URI as a link.</p></div> <h3>A practical example</h3> <p>Maybe I want to see a list of something, so I write a SELECT * FROM something. But, I also want to include a link to each item as part of the results.</p> <p>Module: /examples/<br /> URI Pattern: uri/<br /> Code behind the GET:</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> employee_id <span class="st0">&quot;$uri&quot;</span><span class="sy0">,</span> rn<span class="sy0">,</span> employee_id<span class="sy0">,</span> first_name<span class="sy0">,</span> Job_id<span class="sy0">,</span> hire_date<span class="sy0">,</span> manager_id<span class="sy0">,</span> salary<span class="sy0">,</span> department_id <span class="kw1">FROM</span> <span class="br0">&#40;</span> <span class="kw1">SELECT</span> employees<span class="sy0">.*</span> <span class="sy0">,</span> <span class="kw1">ROW_NUMBER</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">OVER</span> <span class="br0">&#40;</span><span class="kw1">ORDER</span> <span class="kw1">BY</span> employee_id<span class="br0">&#41;</span> rn <span class="kw1">FROM</span> employees <span class="br0">&#41;</span> tmp</pre></div></div></div></div></div></div></div> <p>So we&#8217;re querying the EMPLOYEE ID and aliasing it with &#8220;$uri&#8221;&#8230;and then includes the other elements of my employees. </p> <p>So let&#8217;s run that.</p> <div id="attachment_6167" style="width: 628px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri_links1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri_links1.png" alt="" width="618" height="776" class="size-full wp-image-6167" /></a><p class="wp-caption-text">So we have the employee record itself, and the link is listed afterwards, note the link is the existing URI with the employee ID tacked onto the end of it.</p></div> <p>If I click on one of the links, e.g. &#8220;http://localhost:8888/ords/peeps/examples/uri/101&#8221; I get a 404.</p> <p>/peeps/examples/uri/ &#8212; that definitely exists &#8211; I just wrote it <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>But, I need one to handle the links we&#8217;re returning.</p> <p>So let&#8217;s build that. </p> <p>Module: /examples/<br /> URI Pattern: uri/{empid}<br /> Code behind the GET:</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> employee_id<span class="sy0">,</span> first_name<span class="sy0">,</span> Job_id<span class="sy0">,</span> hire_date<span class="sy0">,</span> manager_id<span class="sy0">,</span> salary<span class="sy0">,</span> department_id <span class="kw1">FROM</span> employees <span class="kw1">WHERE</span> employee_id <span class="sy0">=</span> :empid</pre></div></div></div></div></div></div></div> <p>So let&#8217;s publish our new URI Template and Handler, and then try to click on our link again.</p> <div id="attachment_6168" style="width: 694px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri_links2.png"><img src=ttp://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri_links2.png" alt="" width="684" height="614" class="size-full wp-image-6168" /></a><p class="wp-caption-text">Ta-da!</p></div> <h3>$Whatever</h3> <p>You can call these anything you want. But, your code will need to know what to do with it.</p> <div id="attachment_6169" style="width: 832px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri-whatever.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/uri-whatever.png" alt="" width="822" height="387" class="size-full wp-image-6169" /></a><p class="wp-caption-text">Savvy?</p></div> <!-- Easy AdSense Unfiltered [count: 3 is not less than 3] --> thatjeffsmith http://www.thatjeffsmith.com/?p=6163 Tue May 16 2017 15:25:58 GMT-0400 (EDT) Fastest creation of a Lean VirtualBox VM Image with Oracle Database 11gR2 XE, the Node.JS 7.x and the Oracle DB Driver for Node https://technology.amis.nl/2017/05/16/fastest-creation-of-a-lean-virtualbox-vm-image-with-oracle-database-11gr2-xe-the-node-js-7-x-and-the-oracle-db-driver-for-node/ <p> For a workshop on Node.js I needed a VM to demonstrate and students try out the Oracle DB Driver for Node. I wanted a lean VM with the bare minimum: Oracle Database XE, Node, the Oracle DB Driver for Node and the Git client (for fetching sources from GitHub). I stumbled across the OXAR repository in GitHub (<a title="https://github.com/OraOpenSource/OXAR" href="https://github.com/OraOpenSource/OXAR">https://github.com/OraOpenSource/OXAR</a> ) &#8211; Oracle XE &amp; APEX build script along with images for popular cloud platforms <a href="http://www.oraopensource.com/oxar/">http://www.oraopensource.com/oxar/</a> . Using the sources I found here, I could create my VM in a few simple, largely automated steps. I ended up with a 4.5 GB sized VM image (which exports as a 1.5 GB appliance) that runs in 1 GB. It is more than adequate for my needs.</p> <p>The steps &#8211; for myself if I need to go through them again and of course for you, the reader, to also create this handsome, useful VM.</p> <p>The steps for creating your own VM image are as follows: </p> <p>1. make sure that you have Vagrant and VirtualBox installed locally (<a title="https://www.vagrantup.com/" href="https://www.vagrantup.com/">https://www.vagrantup.com/</a> and <a title="https://www.virtualbox.org/" href="https://www.virtualbox.org/">https://www.virtualbox.org/</a>) </p> <p>2. get the OXAR repository content</p> <p>git clone <a href="https://github.com/OraOpenSource/OXAR">https://github.com/OraOpenSource/OXAR</a> </p> <p>3. Download Oracle 11gR2 XE&nbsp; installer for Linux from OTN: <a title="http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html" href="http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html">http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html</a> and copy the downloaded file oracle-xe-11.2.0-1.0.x86_64.rpm.zip (the Linux installer for Oracle 11gR2 XE Database downloaded from OTN) to the OXAR/files directory<br /><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-38.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-37.png?resize=505%2C200&#038;ssl=1" data-recalc-dims="1"></a> </p> <p>4. edit the file config.properties in the OXAR root directory </p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML93536f.png?ssl=1"><img title="SNAGHTML93536f" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="SNAGHTML93536f" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML93536f_thumb.png?resize=531%2C502&#038;ssl=1" data-recalc-dims="1"></a> </p> <p>– set parameter OOS_ORACLE_FILE_URL to file:///vagrant/files/oracle-xe-11.2.0-1.0.x86_64.rpm.zip and save the change: </p> <p>OOS_ORACLE_FILE_URL=file:///vagrant/files/oracle-xe-11.2.0-1.0.x86_64.rpm.zip </p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-39.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-38.png?resize=702%2C492&#038;ssl=1" data-recalc-dims="1"></a> </p> <p>Use the OOS_MODULE_XXX flags to specify which components should be installed. Here I have chosen not to install APEX and NODE4ORDS. </p> <p>5. run vagrant using the statement: </p> <p>vagrant up </p> <p>this will run for a file, download the CentOS base image and create the VM (with NAT network configuration), install all of Git client, Oracle 11gR2 XE Database, Node and Node OracleDB Driver<br /><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML9564ec.png?ssl=1"><img title="SNAGHTML9564ec" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="SNAGHTML9564ec" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML9564ec_thumb.png?resize=685%2C432&#038;ssl=1" data-recalc-dims="1"></a> </p> <p>6. after rebooting the system, the VM will be started (or you can start it using vagrant up again or by using the VirtualBox manager). </p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML973989.png?ssl=1"><img title="SNAGHTML973989" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="SNAGHTML973989" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML973989_thumb.png?resize=600%2C416&#038;ssl=1" data-recalc-dims="1"></a></p> <p>You can start an SSH session into it by connecting to localhost:50022, then login to Linux using vagrant/vagrant</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-40.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-39.png?resize=702%2C347&#038;ssl=1" data-recalc-dims="1"></a> </p> <p>7. connect to the database using sqlplus hr/oracle </p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-41.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-40.png?resize=609%2C412&#038;ssl=1" data-recalc-dims="1"></a></p> <p>8. Try out Node.js</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-42.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-41.png?resize=347%2C50&#038;ssl=1" data-recalc-dims="1"></a></p> <p>9. To try out Node against Oracle Database using the driver, you can clone the GitHub Repository:</p> <p>git clone <a title="https://github.com/lucasjellema/nodejs-oracledbdriver-quickstart" href="https://github.com/lucasjellema/nodejs-oracledbdriver-quickstart">https://github.com/lucasjellema/nodejs-oracledbdriver-quickstart</a></p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-43.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-42.png?resize=649%2C87&#038;ssl=1" data-recalc-dims="1"></a></p> <p>Next, cd into the newly created directory</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-44.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-43.png?resize=524%2C54&#038;ssl=1" data-recalc-dims="1"></a></p> <p>and run the file select.js:</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-45.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-44.png?resize=544%2C56&#038;ssl=1" data-recalc-dims="1"></a></p> <p>10. To try out PL/SQL as well:</p> <p>Create the procedure get_salary using the file get_salary_proc.sql</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-46.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-45.png?resize=606%2C200&#038;ssl=1" data-recalc-dims="1"></a></p> <p>Run Node program plsql.js:</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-47.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-46.png?resize=604%2C42&#038;ssl=1" data-recalc-dims="1"></a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/16/fastest-creation-of-a-lean-virtualbox-vm-image-with-oracle-database-11gr2-xe-the-node-js-7-x-and-the-oracle-db-driver-for-node/">Fastest creation of a Lean VirtualBox VM Image with Oracle Database 11gR2 XE, the Node.JS 7.x and the Oracle DB Driver for Node</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=44855 Tue May 16 2017 12:05:00 GMT-0400 (EDT) LEAP#298 The Golden Hind http://blog.tardate.com/2017/05/leap298-the-golden-hind.html <p>A nice diversion .. a simple kit of the <strong>Golden Hind</strong> (Model 9209) ended up in my shopping cart on an impulse. I’ve been curious about the recent popularity of these <em>mini 3D metal models</em>. I am guessing the availability and affordability of precision laser cutting equipment might have something to do with it. The <strong>Metal Earth</strong> brand is often seen in toy retailers (it even <a href="https://www.reddit.com/r/metalearth/">has its own sub-reddit</a>!), but the model designs all see to be common from a few Chinese manufacturers. The model I have here comes from <a href="https://mqfun.en.alibaba.com/">Shantou Mini Qute Trading Co. Ltd.</a> As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Kraft/GoldenHind">all notes in the Little Electronics &amp; Arduino Projects repo on GitHub</a> <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Kraft/GoldenHind"><img src="http://leap.tardate.com/Kraft/GoldenHind/assets/GoldenHind_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap298-the-golden-hind.html Tue May 16 2017 11:13:35 GMT-0400 (EDT) Oracle Forms 12c: frmconfighelper - enable_ohs http://dirknachbar.blogspot.com/2017/05/oracle-forms-12c-frmconfighelper.html Yesterday I was blogging about how to create new Forms Managed Servers and how to deploy a new formsapp into them with the frmconfighelper tool (<a href="http://dirknachbar.blogspot.com/2017/05/oracle-forms-122120-multiple-managed.html" target="_blank">http://dirknachbar.blogspot.com/2017/05/oracle-forms-122120-multiple-managed.html</a>).<br /><br />Today I was testing the function enable_ohs from the frmconfighelper tool, which is mainly dedicated to generate a forms.conf file in your Oracle HTTP Server which contains the directives for your Forms Environment.<br /><br /><pre class="brush:bash">oracle@server&gt; cd $ORACLE_HOME/forms/provision<br />oracle@server&gt; ./frmconfighelper.sh<br />using log file /home/oracle/frmconfighelper/logs/frmconfighelper_2017_05_15_20_49_31.log ..........<br />-----------------------------------------------------------------<br /> Forms configuration helper script <br />-----------------------------------------------------------------<br /> This script helps administrators perform some of the Forms <br /> related configuration tasks <br /> <br />**Important**: - Please backup the Weblogic domain before <br /> performing any administration tasks on it using <br /> this script. <br /> - You can run enable_sso, enable_webgate <br /> and enable_sso_ssl options only once. <br /> <br /> frmconfighelper.sh &lt;option&gt; &lt;arguments&gt; <br /> <br /> options: <br /> - enable_ohs &lt;domain-home&gt; &lt;ohs-instance&gt; &lt;forms-managed-server1-host&gt; <br /> &lt;forms-managed-server1-port&gt; [&lt;forms-managed-server2-host&gt; <br /> &lt;forms-managed-server2-port&gt;..] <br />. . .<br />. . .<br /></pre><br />As you can see from the above listing, the tool will generate a forms.conf file under the $DOMAIN_HOME/config/fmwconfig/components/OHS/&lt;OHS_INSTANCE&gt;/moduleconf with your provided Servers on which your Forms Managed Servers are running and their Port. <br />But the disadvantage of the function enable_ohs is, that: <br /><br /><ul><li>the Location tag in the forms.conf is hardcoded with /forms</li><li>the directive is only for a Forms Cluster Environment</li></ul>In case you have just a single Managed Server, you can not use it.<br />In case you have created a new Managed Server with an own defined Context Root (<a href="http://dirknachbar.blogspot.com/2017/05/oracle-forms-122120-multiple-managed.html" target="_blank">see my blogpost from 15th May 2017</a>) you can not use it.<br />So, I had a closer look on the frmconfighelper.sh and did some modifications, so that I have now 2 functions for enable_ohs: <br /><ul><li>enable_ohs_cluster</li><li>enable_ohs_single</li></ul>You can find my modified frmconfighelper.sh here for download, as its too long to provided here as inline text:&nbsp;<a href="https://drive.google.com/file/d/0Bziqha1Q1rglcng4dGhDM0p6TDA/view?usp=sharing" target="_blank">https://drive.google.com/file/d/0Bziqha1Q1rglcng4dGhDM0p6TDA/view?usp=sharing</a><br />Transfer the new version to your target server, make a backup copy of the original frmconfighelper.sh under $ORACLE_HOME/forms/provision and place my modified frmconfighelper.sh in the same location.<br /><br />The enable_ohs_cluster is mainly the same as the original version, just extended for one parameter for the Root-Context of your Formsapp<br /><br /><pre class="brush:bash">oracle@server&gt; ./frmconfighelper.sh<br />. . .<br />. . .<br /> enable_ohs_cluster: <br /> - domain-home : Domain Home directory <br /> - ohs-instance : OHS instance name (example ohs1) <br /> - Forms Context : Root Context (example forms) <br /> - forms-managed-server(n)-host : Forms managed server host <br /> - forms-managed-server(n)-port : Forms managed server port <br />. . .<br />. . .<br /> examples: <br /> <br /> enable ohs cluster routing to forms managed servers <br /> ./frmconfighelper.sh enable_ohs_cluster /scratch/user_projects/domain/base_domain ohs1 sales wlshost.example.com 9001 wlshost.example.com 9010<br /></pre><br />The enable_ohs_single is newly added and will generate you a forms.conf with the correct directive for a single Forms Managed Server and the flexibility to provide your own Root-Context.<br /><pre class="brush:bash">oracle@server&gt; ./frmconfighelper.sh<br />. . .<br />. . .<br /> enable_ohs_single: <br /> - domain-home : Domain Home directory <br /> - ohs-instance : OHS instance name (example ohs1) <br /> - Forms Context : Root Context (example forms) <br /> - forms-managed-server-host : Forms managed server host <br /> - forms-managed-server-port : Forms managed server port <br />. . .<br />. . .<br /> examples: <br /><br /> enable ohs single routing to forms managed server <br /> ./frmconfighelper.sh enable_ohs_single /scratch/user_projects/domain/base_domain ohs1 finance wlshost.example.com 9020<br /></pre><br />After you have executed either the enable_ohs_cluster or enable_ohs_single function, keep in mind that you have to restart your OHS, so that the newly added config file will be captured by the OHS.<br /><br /> Dirk Nachbar tag:blogger.com,1999:blog-4344684978957885806.post-3960028414121623195 Tue May 16 2017 09:36:00 GMT-0400 (EDT) STIGS, SCAP, OVAL, Oracle Databases and ERP Security https://www.integrigy.com/security-resources/stigs-scap-oval-oracle-databases-and-erp-security <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>Last week’s unprecedented ransomware cyber attacks (<a data-jsb_prepared="nzltk23vux" href="http://preview.tinyurl.com/lhjfjgk" rel="noreferrer">http://preview.tinyurl.com/lhjfjgk</a>) caught me working through some research on security automation. The cyber attacks evidently were attributed to an unpatched Windows XP vulnerability. When challenged with securing 1,000s of assets such as all the Windows desktops and Linux servers in an organization, automation quickly becomes a requirement.</p> <p>Automation is increasingly coming up in our client conversations about how to secure the technology ‘stack’ supporting large ERP implementations such as the Oracle E-Business Suite, PeopleSoft, and SAP. For example, how do you from a security professional perspective, communicate an objective risk assessment comprehensive of both the secure baseline configuration (control adherence/violation) and security patch levels (patch/unpatched CVEs) for the Linux operating systems, virtualization software, web server, database and the ERP application itself? Without automation, it is not feasible to promptly produce risk-based assessments of the complete technology stack and to produce results that are readily expressed in a common risk measurement (e.g. CVE) not requiring deep subject matter expertise.</p> <p>Automation, however, can only be considered after requirements have been defined. I have long used Security Technical Implementation Guides (STIGs) in both my research and work with clients to define security requirements. STIGs are secure configuration standards developed by the US Department of Defense for products such as the Oracle RDBMS and are freely available (<a data-jsb_prepared="7ec0hfkxgp" href="http://iase.disa.mil/stigs/Pages/index.aspx" rel="noreferrer">http://iase.disa.mil/stigs/Pages/index.aspx</a>). While most clients do not need their databases hardened to military specifications, STIGs are an invaluable source of security best practice thinking.</p> <p>STIGs (security checklists) are only available in xml format – not PDF files. DISA does provide a utility to view and work with STIGs (<a data-jsb_prepared="jdtrlwillc" href="http://iase.disa.mil/stigs/Pages/stig-viewing-guidance.aspx" rel="noreferrer">http://iase.disa.mil/stigs/Pages/stig-viewing-guidance.aspx</a>) which allows you to manually execute the checklist, record your findings and then export the results. See this YouTube (<a data-jsb_prepared="3h3n7xp1k8" href="https://www.youtube.com/watch?v=-h_lj5sWo4A" rel="noreferrer">https://www.youtube.com/watch?v=-h_lj5sWo4A</a>) posting for a great summary of the STIG Viewer and how to use it.</p> <h3>Security Content Automation Protocol (SCAP)</h3> <p>To answer the question of how do you automate STIG and/or security checklists, again the Department of Defense has thought through the challenges and has created the Security Content Automation Protocol (SCAP).</p> <p>SCAP is a multi-purpose framework to automate the security scanning of configurations, vulnerabilities, patch checking and compliance. SCAP content is developed by the National Institute of Standards and Technologies (NIST) and the components are described in the table below. The key point is that SCAP security content (checklists) is free and that the SCAP content scanning tools are available both in open source and commercial options.</p> <table border="1" cellpadding="1" cellspacing="1" style="width: 500px;"> <tbody> <tr> <td style="text-align: center;"> <p><strong>SCAP Component</strong></p> </td> <td style="text-align: center;"><strong>Description</strong></td> </tr> <tr> <td>eXtensible Checklist Configuration Description Format (XCCDF)</td> <td>XML-based language for specifying checklists and reporting the results of checklist evaluations.</td> </tr> <tr> <td>Open Vulnerability and Assessment Language (OVAL)</td> <td>XML-based language for specifying test procedures to detect machine state</td> </tr> <tr> <td>Common Vulnerabilities and Exposures (CVE)</td> <td>Nomenclature and dictionary of security-related security flaws</td> </tr> <tr> <td>Common Configuration Enumeration (CCE)</td> <td>Nomenclature and dictionary of software security configuration issues</td> </tr> <tr> <td>Common Vulnerability Scoring System (CVSS)</td> <td>Methodology for measuring the relative security of software flaws</td> </tr> <tr> <td>Open Checklist Interactive Language (OCIL)</td> <td>XML-based language for specifying security checks that require human interaction or that otherwise cannot be bundled by OVAL</td> </tr> <tr> <td>Asset Reporting Format (ARF)</td> <td>Standardized data model for sharing information about assets to facilitate the reporting, correlating, and fusing of asset security information.</td> </tr> </tbody> </table> <h3>&nbsp;</h3> <h3>OpenSCAP</h3> <p>There are many tools, Integrigy’s AppSentry included (<a data-jsb_prepared="fqmd79ttau" href="https://www.integrigy.com/products/appsentry" rel="noreferrer">https://www.integrigy.com/products/appsentry</a>), that will perform a STIG scan of an Oracle database. The question I was researching this week, is could I use a single SCAP tool to automate the scanning of both the Linux server and the database as well as possibly ERP configurations for PeopleSoft and/or the Oracle E-Business Suite – can could I possibly do this with open source software?</p> <p>The first tool I considered was OpenSCAP (<a data-jsb_prepared="oc2bkgyc2k" href="https://www.open-scap.org/" rel="noreferrer">https://www.open-scap.org/</a>). This open source tool is easy to install either on your laptop or Linux database server and has remote scanning capabilities. The example below shows the capabilities of the GUI tool ‘SCAP Workbench’ and the freely available content that is installed by default for scanning a Linux server.</p> <p>This exercise quickly confirmed that there is a great deal of security automation available for Linux system security configurations. Here, though, is where I hit a wall: could OpenSCAP work with Oracle databases? While the SCAP standards clearly showed support for scanning SQL database configurations using OVAL’s SQL probes (e.g. sql_test, sql57_test etc…), I may be corrected, but the standard build of OpenSCAP do not appear to include the SQL probes.</p> <p style="margin-left: 80px;"><img alt="" class="media-image" height="396" width="480" typeof="foaf:Image" src="https://www.integrigy.com/files/styles/large/public/example%20of%20scap-workbench%20on%20oel.jpeg?itok=5NBCEgHA" /></p> <p>&nbsp;</p> <h3>JOVAL</h3> <p>To obtain the SQL probes for SCAP scanning of database configurations, after some research, I obtained an evaluation copy of Joval Professional (<a data-jsb_prepared="he23q5b2ko" href="http://jovalcm.com/" rel="noreferrer">http://jovalcm.com/</a>). Joval describes themselves as allowing you to <em>Scan anything from anywhere</em> and to allow continuous configuration assessments for developers, enterprises, content authors and security professionals.</p> <p>The installation of Joval Professional was quick and I was able to scan my laptop and remotely scan the remote Oracle Linux server without issues. The screen shot below shows the results of the remote scan of the Linux server running the Oracle RDBMS.</p> <p style="margin-left: 40px;"><img alt="" class="media-image" height="301" width="480" typeof="foaf:Image" src="https://www.integrigy.com/files/styles/large/public/Joval%20oel6%20patch%20scan_0.jpeg?itok=V2A_vpY7" /></p> <p>With a bit of experimentation (and great customer service from Joval), I was able to quickly prove I could develop OVAL content for automated SCAP scanning of Oracle databases, either for standard database security checks or for Oracle E-Business and/or PeopleSoft configurations. One key concern with the proof-of-concept is that connection string hardcodes the user name and password. The hardcoding is certainly a security issue, but JOVAL (as well as OpenSCAP) offers python bindings. The screen shot below is a single OVAL scan that included two SQL checks as well as checks against content in the sqlnet.ora file using the OVAL probe:&nbsp;textfilecontent54_test.&nbsp;</p> <p style="margin-left: 40px;"><img alt="" class="media-image" height="360" width="480" typeof="foaf:Image" src="https://www.integrigy.com/files/styles/large/public/joval%20with%20sqlnet%20and%20sql%20tests.jpeg?itok=TyMO1Z0W" /></p> <p>My OVAL definition is referenced below. I am providing it as an example for others. The key points you will know is for the JOVAL connection string for Oracle:</p> <pre style="margin-left: 40px;"><code>Engine: oracle Version values: 11.2.0, 11.1.0, 10.2.0, 10.1.0, 9.2.0, 9.0.1 Connection string (do not use JDBC syntax): user=&lt;username&gt;;password=&lt;password&gt;;SID=&lt;instance name&gt;</code> </pre><p>If you want to replicate the proof-of-concept:</p> <ol> <li>Download a trial version of Joval Professional.</li> <li>Run a scan of your local laptop</li> <li>Run a remote scan of Linux server running your Oracle RDBMS</li> <li>Edit sample benchmark file (here) for your database</li> <li>Upload the edited sample benchmark into Joval</li> <li>Run the sample benchmark scan</li> </ol> <h3>What Next?</h3> <p>Having proven I can use OVAL to write Oracle and ERP audit checks, I will spend a bit more time expanding the POC. I am also interested in automation options for Joval and OpenSCAP exports to a NoSQL database such as MongoDB using the Asset Reporting Format (ARF) <a data-jsb_prepared="szlqv38999" href="https://scap.nist.gov/specifications/arf/" rel="noreferrer">(https://scap.nist.gov/specifications/arf/).</a> Both Joval and OpenScap have standard functionality to export results using ARF.</p> <p>If you have any questions, please contact us at&nbsp;<a data-jsb_prepared="bxhfojpj85" href="mailto:info@integrigy.com" rel="noreferrer">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h1>References</h1> <p>Sample Oracle OVAL benchmark definition:&nbsp;<a data-jsb_prepared="jjeyzy3k8e" href="/security-resources/scap-oval-example-check-oracle" rel="noreferrer">SCAP OVAL Example Check for Oracle</a></p> <p><strong>SCAP</strong></p> <p>NIST SCAP site: <a data-jsb_prepared="igychfuv1a" href="https://scap.nist.gov/" rel="noreferrer">https://scap.nist.gov/</a></p> <p>SCAP content: <a data-jsb_prepared="yd4h610aqn" href="https://nvd.nist.gov/ncp/repository?scap" rel="noreferrer">https://nvd.nist.gov/ncp/repository?scap</a></p> <p>Oracle Linux Security Guide – Using OpenSCAP:&nbsp;<a data-jsb_prepared="xecqs3wh6y" href="https://docs.oracle.com/cd/E37670_01/E36387/html/ol-scap-sec.html" rel="noreferrer">https://docs.oracle.com/cd/E37670_01/E36387/html/ol-scap-sec.html</a></p> <p>Great summary of SCAP: <a data-jsb_prepared="y464qgzeqy" href="https://energy.gov/sites/prod/files/cioprod/documents/Technical_Introduction_to_SCAP_-_Charles_Schmidt.pdf" rel="noreferrer">https://energy.gov/sites/prod/files/cioprod/documents/Technical_Introduction_to_SCAP_-_Charles_Schmidt.pdf</a></p> <p><strong>OVAL</strong></p> <p>Writing OVAL content <a data-jsb_prepared="vrwysqui93" href="https://oval.mitre.org/documents/docs-07/Writing_an_OVAL_Definition.pdf" rel="noreferrer">https://oval.mitre.org/documents/docs-07/Writing_an_OVAL_Definition.pdf</a></p> <p>OVAL tutorial&nbsp;<a data-jsb_prepared="rg00aa6b6a" href="https://nvd.nist.gov/scap/docs/conference%20presentations/workshops/OVAL%20Tutorial%202%20-%20%20Definitions.pdf" rel="noreferrer">https://nvd.nist.gov/scap/docs/conference%20presentations/workshops/OVAL%20Tutorial%202%20-%20%20Definitions.pdf</a></p> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/scap-oval" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">SCAP OVAL</a>, <a href="/tags/security-strategy-and-standards" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Security Strategy and Standards</a>, <a href="/tags/fismadod" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">FISMA/DOD</a>, <a href="/tags/oracle-database" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle Database</a>, <a href="/tags/oracle-e-business-suite" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle E-Business Suite</a> mmiller 579 at https://www.integrigy.com Tue May 16 2017 07:00:00 GMT-0400 (EDT) Oracle Forms 12.2.1.2.0 - Multiple Managed Servers via frmconfighelper http://dirknachbar.blogspot.com/2017/05/oracle-forms-122120-multiple-managed.html In October 2016 I was blogging <a href="http://dirknachbar.blogspot.com/2016/10/oracle-forms-12c-multiple-managed.html" target="_blank">how to create multiple Oracle Forms 12c Multiple Managed Servers</a>.<br />In case you are already on the latest Oracle Forms 12.2.1.2.0 Release, you can now create in a really comfortable way multiple Oracle Forms Managed Servers and deploy the necessary formsapp into your newly created Managed Server.<br /><br />Since Oracle Forms 12.2.1 there is a small not really well know tool added to Oracle Forms - frmconfighelper. According the documentation (12.2.1.0.0 / 12.2.1.1.0 / 12.2.1.2.0) the frmconfighelper tool contains 5 functions (<a href="http://docs.oracle.com/middleware/12212/formsandreports/deploy-forms/GUID-AE8C9D19-BC55-4AD7-A6F0-A36843E3FE83.htm#FSDEP860" target="_blank">http://docs.oracle.com/middleware/12212/formsandreports/deploy-forms/GUID-AE8C9D19-BC55-4AD7-A6F0-A36843E3FE83.htm#FSDEP860</a>) :<br /><ul><li>enable_ohs</li><li>deploy_app</li><li>update_app</li><li>enable_sso</li><li>enable_webgate</li></ul>But when you call the frmconfighelper in Forms 12.2.1.2.0 you will find some functions which are not documented :-)<br /><br /><pre class="brush:bash">oracle@server&gt; cd $ORACLE_HOME/forms/provision<br />oracle@server&gt; ./frmconfighelper<br />using log file /home/oracle/frmconfighelper/logs/frmconfighelper_2017_05_15_20_49_31.log ..........<br />-----------------------------------------------------------------<br /> Forms configuration helper script <br />-----------------------------------------------------------------<br /> This script helps administrators perform some of the Forms <br /> related configuration tasks <br /> <br />**Important**: - Please backup the Weblogic domain before <br /> performing any administration tasks on it using <br /> this script. <br /> - You can run enable_sso, enable_webgate <br /> and enable_sso_ssl options only once. <br /> <br /> frmconfighelper.sh &lt;option&gt; &lt;arguments&gt; <br /> <br /> options: <br /> - enable_ohs &lt;domain-home&gt; &lt;ohs-instance&gt; &lt;forms-managed-server1-host&gt; <br /> &lt;forms-managed-server1-port&gt; [&lt;forms-managed-server2-host&gt; <br /> &lt;forms-managed-server2-port&gt;..] <br /> <br /> - create_machine &lt;wls-machine-name&gt; &lt;machine-host-name&gt; <br /> <br /> - create_managed_server &lt;managed-server-name&gt; &lt;wls-machine-name&gt; <br /> &lt;managed-server-port&gt; &lt;standalone&gt; <br /> <br /> - deploy_app &lt;new-context-root&gt; &lt;new-servlet-alias&gt; &lt;target&gt;<br /> <br /> - update_app &lt;new-context-root&gt; &lt;new-servlet-alias&gt;<br /> <br /> - enable_sso &lt;oam-host&gt; &lt;oam-port&gt; &lt;ohs-host&gt; &lt;ohs-port&gt; <br /> &lt;domain-home&gt; &lt;ohs-instance&gt; <br /> <br /> - enable_sso_ssl &lt;oam-host&gt; &lt;oam-port&gt; &lt;ohs-host&gt; &lt;ohs-ssl-port&gt; <br /> &lt;ohs-non-ssl-port&gt; &lt;domain-home&gt; &lt;ohs-instance&gt; <br /> <br /> - enable_webgate &lt;domain home&gt; &lt;ohs-instance&gt; <br /> <br /> - help (or no option): prints help <br /> <br />-----------------------------------------------------------------<br /> options description: <br /> <br />. . .<br />. . .<br /></pre><br />As you can see, under Oracle Forms 12.2.1.2.0 the frmconfighelper contains in reality 8 functions, so 3 more than documented:<br /><ul><li>create_machine</li><li>create_managed_server</li><li>enable_sso_ssl</li></ul><div>Within this blogpost I will focus on the create_managed_server function in combination with the function deploy_app.</div><div><br /></div><div>Lets say, you have a running Oracle Forms &amp; Reports 12.2.1.2.0 environment with the 2 classical Managed Servers MS_FORMS &amp; MS_REPORTS.</div>Now you are having the requirements to create a new Managed Server called MS_HR_APP for an independent Oracle Forms Application. Under Forms 11g you can achieve this by following the MOS Note 955822.1 which was not really straight forward. Now with Oracle Forms 12.2.1.2.0 you just need 2 commands :-)<br /><br />The first command is using the function create_managed_server, which comes with following options: <br /><br /><ul><li>create_managed_server:</li><ul><li>managed-server-name: Managed server name - wls-machine-name : WLS machine name</li><li>managed-server-port: Managed server port number</li><li>standalone (optional): indicates standalone managed server which is not part of any cluster.</li></ul></ul><pre class="brush:bash">oracle@server&gt; cd $ORACLE_HOME/forms/provision<br />oracle@server&gt; ./frmconfighelper.sh create_managed_server MS_HR_APP AdminServerMachine 9010 standalone<br /><br />running frmconfighelper.sh create_managed_server<br />using log file /home/oracle/frmconfighelper/logs/frmconfighelper_2017_05_15_21_33_56.log ..........<br /><br />Initializing WebLogic Scripting Tool (WLST) ...<br /><br />Welcome to WebLogic Server Administration Scripting Shell<br /><br />Type help() for help on available commands<br /><br />frmconfighelper.py output<br />-------------------------------b-e-g-i-n--------------------------------------------<br />Please enter your username :weblogic<br />Please enter your password :<br />Please enter your server URL [t3://localhost:7001] :<br />Connecting to t3://localhost:7001 with userid weblogic ...<br />Successfully connected to Admin Server "AS_FRDEVEL" that belongs to domain "FRDEVEL".<br /><br />Warning: An insecure protocol was used to connect to the server. <br />To ensure on-the-wire security, the SSL port or Admin port should be used instead.<br /><br />processCreateManagedServer<br />processing createManagedServer MS_HR_APP<br />createServer MBean: [MBeanServerInvocationHandler]com.bea:Name=MS_HR_APP,Type=Server<br />configuring standalone managed server<br />Target JRF components to "MS_HR_APP"<br />Copying JRF configuration files from /u00/app/oracle/product/fmw-fr-12.2.1.2.0/oracle_common/modules to /u00/app/oracle/user_projects/domains/FRDEVEL/config/fmwconfig/servers/MS_HR_APP<br />Update JRF changes to domain /u00/app/oracle/user_projects/domains/FRDEVEL in online mode<br />frmconfighelper.py script returning ...<br />------------------------------------------------------------------------------------<br />command :createManagedServer succeeded... <br /><br />-------------------------------e-n-d------------------------------------------------<br /></pre><br />Now we have created a new standalone Managed Server for our next step to deploy the formsapp into it by using an own context root and an own servlet alias. To deploy the formsapp we will use the function deploy_app from the frmconfighelper: <br /><pre class="brush:bash">oracle@server&gt; cd $ORACLE_HOME/forms/provision<br />oracle@server&gt; ./frmconfighelper.sh deploy_app hrapp hrappservlet MS_HR_APP<br /><br />running frmconfighelper.sh deploy_app<br />using log file /home/oracle/frmconfighelper/logs/frmconfighelper_2017_05_15_21_39_59.log ..........<br /><br />Initializing WebLogic Scripting Tool (WLST) ...<br /><br />Welcome to WebLogic Server Administration Scripting Shell<br /><br />Type help() for help on available commands<br /><br />frmconfighelper.py output<br />-------------------------------b-e-g-i-n--------------------------------------------<br />Please enter your username :weblogic<br />Please enter your password :<br />Please enter your server URL [t3://localhost:7001] :<br />Connecting to t3://localhost:7001 with userid weblogic ...<br />Successfully connected to Admin Server "AS_FRDEVEL" that belongs to domain "FRDEVEL".<br /><br />Warning: An insecure protocol was used to connect to the server. <br />To ensure on-the-wire security, the SSL port or Admin port should be used instead.<br /><br />processDeployApp<br />deploying the formsapp.dependencies library to target MS_HR_APP<br />&lt;May 15, 2017 9:40:19 PM CEST&gt; &lt;Info&gt; &lt;J2EE Deployment SPI&gt; &lt;BEA-260121&gt; &lt;Initiating deploy operation for application, oracle.formsapp.dependencieslib#12.2.1@12.2.1 [archive: /u00/app/oracle/product/fmw-fr-12.2.1.2.0/forms/j2ee/formsapp_deps.jar], to MS_HR_APP .&gt; <br />deploying custom Forms JavaEE application hrappapp<br />&lt;May 15, 2017 9:40:20 PM CEST&gt; &lt;Info&gt; &lt;J2EE Deployment SPI&gt; &lt;BEA-260121&gt; &lt;Initiating deploy operation for application, hrappapp [archive: /u00/app/oracle/product/fmw-fr-12.2.1.2.0/forms/j2ee/hrapp.ear], to MS_HR_APP .&gt; <br />frmconfighelper.py script returning ...<br />------------------------------------------------------------------------------------<br />command :deployApp succeeded... <br /><br />-------------------------------e-n-d------------------------------------------------<br />&lt;May 15, 2017 9:40:23 PM CEST&gt; &lt;Warning&gt; &lt;JNDI&gt; &lt;BEA-050001&gt; &lt;WLContext.close() was called in a different thread than the one in which it was created.&gt; <br /></pre><br />When you login to your WebLogic Server Console, you will find under Domain Structure / Environment / Servers your newly created Managed Server MS_HR_APP, assigned to the Machine AdminServerMachine.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-_APWdejo5Iw/WRoFkBTR98I/AAAAAAAAAnM/5QQMfsMkyJsDYPVC8NQG4AgeJGLQMRQrACLcB/s1600/01_frmconfighelper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://2.bp.blogspot.com/-_APWdejo5Iw/WRoFkBTR98I/AAAAAAAAAnM/5QQMfsMkyJsDYPVC8NQG4AgeJGLQMRQrACLcB/s640/01_frmconfighelper.png" width="640" /></a></div><br /><br />Under Domain Structure / Deployments you will find the newly deploy formsapp called hrappapp, which is targeted to the above created Managed Server MS_HR_APP:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-bTg1ceG8XgQ/WRoGjbu4uXI/AAAAAAAAAnQ/l3Y_jMW-7DEPoYVBg49z3N-QRrW5UucIQCLcB/s1600/02_frmconfighelper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="128" src="https://4.bp.blogspot.com/-bTg1ceG8XgQ/WRoGjbu4uXI/AAAAAAAAAnQ/l3Y_jMW-7DEPoYVBg49z3N-QRrW5UucIQCLcB/s640/02_frmconfighelper.png" width="640" /></a></div><br />Just start the above create Managed Server MS_HR_APP, the deployment will become active and you can open a browser and point to: http://servername:9010/hrapp/hrappservlet<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-JdEeNg86jhQ/WRoICLfzTGI/AAAAAAAAAnU/UCR_dIKkF7Avap8gp1p9sDKOAmChp6cwgCLcB/s1600/03_frmconfighelper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="364" src="https://1.bp.blogspot.com/-JdEeNg86jhQ/WRoICLfzTGI/AAAAAAAAAnU/UCR_dIKkF7Avap8gp1p9sDKOAmChp6cwgCLcB/s640/03_frmconfighelper.png" width="640" /></a></div><br />Under the $DOMAIN_HOME/config/fmwconfig/servers/MS_HR_APP/applications/hrappapp_12.2.1/config directory you will find the standard configuration files for your Forms Applications, e.g. formsweb.cfg, default.env<br /> <style type="text/css">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #000000; background-color: #ffffff} span.s1 {font-variant-ligatures: no-common-ligatures} </style> <br />Also you can configure your new formsapp via the Enterprise Manager Fusion Middleware Control http://servername:7001/em<br /><br />Navigate via the Target Navigation to the Forms Tree and click on forms<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-9e-H4CmjkQs/WRoKY45gkII/AAAAAAAAAnY/khSiEMfpe8gein38yqBXhhRQ9cvYkgbkwCLcB/s1600/04_frmconfighelper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="550" src="https://4.bp.blogspot.com/-9e-H4CmjkQs/WRoKY45gkII/AAAAAAAAAnY/khSiEMfpe8gein38yqBXhhRQ9cvYkgbkwCLcB/s640/04_frmconfighelper.png" width="640" /></a></div><br />And you will find the new formsapp called hrappapp:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-FaUE5wFxrXI/WRoKh6teb1I/AAAAAAAAAnc/8QeURttHziUT63-zVAHHQw_BlJ5-OI2igCLcB/s1600/05_frmconfighelper.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://3.bp.blogspot.com/-FaUE5wFxrXI/WRoKh6teb1I/AAAAAAAAAnc/8QeURttHziUT63-zVAHHQw_BlJ5-OI2igCLcB/s640/05_frmconfighelper.png" width="640" /></a></div><br />The function create_managed_server in combination with deploy_app enables you to created quickly and stable and bullet-proofed multiple Oracle Forms Managed Servers including the required formsapp deployment including context root naming and alias servlet naming.<br /><br /><br /><br /> Dirk Nachbar tag:blogger.com,1999:blog-4344684978957885806.post-7182227429554011619 Mon May 15 2017 16:11:00 GMT-0400 (EDT) Where in the World is Goth Girl- Week 20, 2017 http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/ <div id="tweetbutton6785" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Fworld-goth-girl-week-20-2017%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Fworld-goth-girl-week-20-2017%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"><p>After looking at my upcoming schedule for 2017, I realized that I need to start posting on where and what conference(s) I&#8217;m at regularly.</p> <p style="text-align: center;"><a href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/earth-spinning-rotating-animation-14/" rel="attachment wp-att-6786"><img class="alignnone wp-image-6786" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/earth-spinning-rotating-animation-14.gif?resize=201%2C194" alt="" data-recalc-dims="1" /></a></p> <p>With that realization, I present &#8220;Where in the World is Goth Girl&#8221; posts that will help keep track of me, (before my husband has a homing device surgically implanted in my brain&#8230;.:))</p> <p>This week I&#8217;m in Manhattan for <a href="http://www.dbta.com/DataSummit/2017/Kellyn-Pot'Vin-Gorman.aspx">Data Summit 2017</a>, presenting on Wednesday on Database Virtualization.  As soon as I&#8217;m done presenting on Wednesday, I&#8217;m heading to the airport to fly to Cleveland for the second day of NEOOUG,<a href="https://www.neooug.org/gloc/"> Great Lakes Oracle Conference</a>, (GLOC) 2017 to present twice on Thursday morning before we fly out that evening for home.</p> <p><a href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/screen-shot-2017-05-15-at-2-49-45-pm/" rel="attachment wp-att-6788"><img class="wp-image-6788 aligncenter" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.49.45-PM.png?resize=270%2C119" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.49.45-PM.png?w=468 468w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.49.45-PM.png?resize=300%2C132 300w" sizes="(max-width: 270px) 100vw, 270px" data-recalc-dims="1" /></a></p> <p>I have two slide decks that I&#8217;ve just gone through and revamped for the events and I&#8217;m rather proud of my entertaining and aestethically pleasing, powerpoint accomplishment.  Seriously, how can you not love slides like this?</p> <p><a href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/screen-shot-2017-05-15-at-2-47-29-pm/" rel="attachment wp-att-6787"><img class="alignnone size-large wp-image-6787" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.47.29-PM.png?resize=600%2C336" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.47.29-PM.png?resize=1024%2C573 1024w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.47.29-PM.png?resize=300%2C168 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.47.29-PM.png?resize=768%2C430 768w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.47.29-PM.png?w=1554 1554w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.47.29-PM.png?w=1200 1200w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <p>I&#8217;ll be speaking on Database Virtualization and the Cloud at both events and then my second session at GLOC will be on Test Data Management for DBAs.  As many people know- I try to connect with as many people as I can while at events, so if you see a Linkedin connection or Twitter follow from DBAKevlar, it&#8217;s just me being social!</p> <p style="text-align: center;"><a href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/screen-shot-2017-05-15-at-2-51-29-pm/" rel="attachment wp-att-6789"><img class="alignnone wp-image-6789" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.51.29-PM.png?resize=441%2C222" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.51.29-PM.png?w=966 966w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.51.29-PM.png?resize=300%2C151 300w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-15-at-2.51.29-PM.png?resize=768%2C386 768w" sizes="(max-width: 441px) 100vw, 441px" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <!-- Easy Plugin for AdSense Unfiltered [count: 3 is not less than 3] --></div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/data-summit/" rel="tag">Data Summit</a>, <a href="http://dbakevlar.com/tag/events/" rel="tag">Events</a>, <a href="http://dbakevlar.com/tag/gloc/" rel="tag">GLOC</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/2017/05/world-goth-girl-week-20-2017/&title=Where in the World is Goth Girl- Week 20, 2017"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" 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/2017/05/world-goth-girl-week-20-2017/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/05/world-goth-girl-week-20-2017/&title=Where in the World is Goth Girl- Week 20, 2017"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/05/world-goth-girl-week-20-2017/&title=Where in the World is Goth Girl- Week 20, 2017"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/05/world-goth-girl-week-20-2017/&title=Where in the World is Goth Girl- Week 20, 2017"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/05/world-goth-girl-week-20-2017/#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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/06/buckle-up-baby/" >Buckle Up, Baby!</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2011/06/round-robin-and-parallel-forced-to-serial/" >Round Robin and Parallel Forced to Serial</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2011/10/the-no_invalidate-option-in-dbms_stats-with-10g/" >The NO_INVALIDATE Option in DBMS_STATS with 10g</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/05/world-geek-goth-girl-week-21/" >Where in the World is Geek Goth Girl- Week 21</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2009/11/utilizing-separate-temp-tablespace/" >Utilizing Separate Temp Tablespace</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/">Where in the World is Goth Girl- Week 20, 2017</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/05/world-goth-girl-week-20-2017/">Where in the World is Goth Girl- Week 20, 2017</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6785 Mon May 15 2017 14:53:12 GMT-0400 (EDT) Server Sent Events from Node.js to Web Client – pushing user command line input to all Subscribed Browser Sessions https://technology.amis.nl/2017/05/15/server-sent-events-from-node-js-to-web-client-pushing-user-command-line-input-to-all-subscribed-browser-sessions/ <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-31.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-30.png?resize=603%2C251&#038;ssl=1" align="right" data-recalc-dims="1"></a>Node can push messages to browser clients, using WebSockets and the simpler Server Sent Events (SSE) mechanism. We will use the latter in this article &#8211; to push updates (event) to all subscribed browser clients. </p> <p>The browser loads index.html from the Node.js server. This file contains a JavaScript fragment that makes an AJAX call to the Node.js server (URL: /updates ) to register as a SSE Client. As part of that subscription, a callback function is registered that will be called when the browser receives SSE events from the Node.js server on this channel.</p> <p>The Node application &#8211; apart from initializing an Express HTTP Server that handles incoming requests &#8211; for index.html and for the /updates path &#8211; also uses NPM package <em>prompt</em> to run a loop to request user input on the command line. Whenever the user types some input, it is published as an SSE event by the application and pushed to the SSE Clients: the browsers. The callback handler function in the browser received the SSE event and in this case simply writes the contents to the UI.</p> <p>More glamorous and useful applications of this mechanism are not hard to conceive of.</p> <p>GitHub Repository with sources for this article:&nbsp; <a title="https://github.com/lucasjellema/nodejs-serversentevents-quickstart" href="https://github.com/lucasjellema/nodejs-serversentevents-quickstart">https://github.com/lucasjellema/nodejs-serversentevents-quickstart</a> . </p> <p>&nbsp;</p> <p>The application is very straightforward:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-32.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-31.png?resize=702%2C260&#038;ssl=1" data-recalc-dims="1"></a></p> <p>Inspect file app.js. This file serves a static file – index.html – and exposes a single endpoint &#8211; /updates – where SSE clients can register. </p> <pre class="brush: jscript; title: ; notranslate"> var express = require('express'); //npm install express var bodyParser = require('body-parser'); // npm install body-parser var http = require('http'); var sseMW = require('./sse'); var prompt = require('prompt'); //https://www.npmjs.com/package/prompt var APP_VERSION = &quot;0.8&quot;; var PORT = process.env.PORT || 3000; var app = express(); var server = http.createServer(app); server.listen(PORT, function () { console.log('Server running, version ' + APP_VERSION + ', Express is listening... at ' + PORT + &quot; for requests&quot;); }); app.use(bodyParser.json()); // for parsing application/json app.use(express.static(__dirname + '/public')) //configure sseMW.sseMiddleware as function to get a stab at incoming requests, in this case by adding a Connection property to the request app.use(sseMW.sseMiddleware) // Realtime updates var sseClients = new sseMW.Topic(); app.get('/updates', function (req, res) { console.log(&quot;res (should have sseConnection)= &quot; + res.sseConnection); var sseConnection = res.sseConnection; console.log(&quot;sseConnection= &quot;); sseConnection.setup(); sseClients.add(sseConnection); }); </pre> <p>File index.html contains a JavaScript fragment, where the client registers with the SSE Server – at the /updates endpoint. A listener is associated with this SSE connection – to read the consumed message and update the UI subsequently, in the plainest way imaginable.</p> <pre class="brush: jscript; title: ; notranslate"> &lt;html&gt; &lt;head&gt; &lt;title&gt;A static web page with dynamic pushed updated&lt;/title&gt; &lt;script&gt; // assume that API service is published on same server that is the server of this HTML file var source = new EventSource(&quot;../updates&quot;); source.onmessage = function(event) { var data = JSON.parse(event.data); var inputCell= document.getElementById(&quot;input&quot;); inputCell.innerHTML = JSON.stringify(data) + ';'+ inputCell.innerHTML; };//onMessage &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Hello World!&lt;/h1&gt; Are you having fun today? &lt;br/&gt; &lt;div id=&quot;input&quot;&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; </pre> <p>Back to app.js: it uses the prompt module to solicit input from the user on the command line. Every piece of input is published as server sent event to all SSE clients, to be published in the browser UI. </p> <pre class="brush: jscript; title: ; notranslate"> var m; updateSseClients = function (message) { console.log(&quot;update all Sse Client with message &quot; + message); this.m = message; sseClients.forEach(function (sseConnection) { console.log(&quot;send sse message global m&quot; + this.m); sseConnection.send(this.m); } , this // this second argument to forEach is the thisArg (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) ); } promptForInput(); // go into loop where user can provide input var timeToExit = false; var allInput = []; function promptForInput() { prompt.get(['yourInput'], function (err, result) { console.log('Your Input:' + result.yourInput); // send input to function that forwards it to all SSE clients updateSseClients(result.yourInput); timeToExit = ('exit' == result.yourInput) if (timeToExit) { wrapItUp(); } else { allInput.push(result.yourInput); promptForInput(); } }); } function wrapItUp() { console.log('It was nice talking to you. Goodbye!'); // final recap of the dialog: console.log(&quot;All your input:\n &quot; + JSON.stringify(allInput)); } </pre> <p>You can look at file sse.js for some more details on how the SSE clients and topics internals are implemented. You will notice that there is not too much to it.</p> <pre class="brush: jscript; title: ; notranslate"> &quot;use strict&quot;; console.log(&quot;loading sse.js&quot;); // ... with this middleware: function sseMiddleware(req, res, next) { console.log(&quot; sseMiddleware is activated with &quot; + req + &quot; res: &quot; + res); res.sseConnection = new Connection(res); console.log(&quot; res has now connection res: &quot; + res.sseConnection); next(); } exports.sseMiddleware = sseMiddleware; /** * A Connection is a simple SSE manager for 1 client. */ var Connection = (function () { function Connection(res) { console.log(&quot; sseMiddleware construct connection for response &quot;); this.res = res; } Connection.prototype.setup = function () { console.log(&quot;set up SSE stream for response&quot;); this.res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); }; Connection.prototype.send = function (data) { console.log(&quot;send event to SSE stream &quot; + JSON.stringify(data)); this.res.write(&quot;data: &quot; + JSON.stringify(data) + &quot;\n\n&quot;); }; return Connection; } ()); exports.Connection = Connection; /** * A Topic handles a bundle of connections with cleanup after lost connection. */ var Topic = (function () { function Topic() { console.log(&quot; constructor for Topic&quot;); this.connections = []; } Topic.prototype.add = function (conn) { var connections = this.connections; connections.push(conn); console.log('New client connected, the number of clients is now: ', connections.length); conn.res.on('close', function () { var i = connections.indexOf(conn); if (i &gt;= 0) { connections.splice(i, 1); } console.log('Client disconnected, now: ', connections.length); }); }; Topic.prototype.forEach = function (cb) { this.connections.forEach(cb); }; return Topic; } ()); exports.Topic = Topic; </pre> <p>Run app.js on the command line:&nbsp; node app.js</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-33.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-32.png?resize=681%2C63&#038;ssl=1" data-recalc-dims="1"></a></p> <p>And open your browser at <a href="http://127.0.0.1:3000/">http://127.0.0.1:3000/</a>.<br /><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-34.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-33.png?resize=210%2C185&#038;ssl=1" data-recalc-dims="1"></a></p> <p>Type some input on the command line. This input should appear in the browser.<br /><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-35.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-34.png?resize=649%2C302&#038;ssl=1" data-recalc-dims="1"></a></p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-36.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-35.png?resize=396%2C197&#038;ssl=1" data-recalc-dims="1"></a></p> <p>Open a second browser window at the same URL. Type some more input on the command line. This input should appear in all browsers. </p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-37.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-36.png?resize=702%2C297&#038;ssl=1" data-recalc-dims="1"></a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/15/server-sent-events-from-node-js-to-web-client-pushing-user-command-line-input-to-all-subscribed-browser-sessions/">Server Sent Events from Node.js to Web Client &#8211; pushing user command line input to all Subscribed Browser Sessions</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=44825 Mon May 15 2017 11:55:54 GMT-0400 (EDT) Quickest way to get going with Node.js and MongoDB – using the mongodb Node driver and a free MongoDB instance in the cloud with mLab https://technology.amis.nl/2017/05/15/quickest-way-to-get-going-with-node-js-and-mongodb-using-the-mongodb-node-driver-and-a-free-mongodb-instance-in-the-cloud-with-mlab/ <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-23.png?ssl=1"><img style="background-image: none; float: right; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-22.png?resize=244%2C126&#038;ssl=1" alt="image" align="right" border="0" data-recalc-dims="1" /></a>While preparing for a workshop on Node.js, I ran into the by far quickest way to get some a simple Node.js application  running against a  MongoDB database. I stumbled into mLab (<a title="https://mlab.com/" href="https://mlab.com/">https://mlab.com/</a>) for database hosting. This company offers various plans for cloud based MongoDB environments &#8211; including a free plan for an environment with up to 500 MB data. Plenty for a quick trial of the Node.JS =&gt; MongoDB interaction. So here are my steps:</p> <p>1. Sign Up for an mLab account (confirm email address via link in email)</p> <p>2. Login to mLab</p> <p>3. Create a new deployment of type Sandbox:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-24.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-23.png?resize=543%2C415&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Set database name: <em>world</em></p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-25.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-24.png?resize=529%2C308&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>and press the button to create the new MongoDB deployment.</p> <p>4. After a little while, the database is created. Click on the Users tab to create a user &#8211; authentication is required for remote access:<br /> <a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-26.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-25.png?resize=674%2C319&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-27.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-26.png?resize=669%2C281&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Download source from GitHub Repository: <a title="https://github.com/lucasjellema/nodejs-mongodb-quickstart" href="https://github.com/lucasjellema/nodejs-mongodb-quickstart">https://github.com/lucasjellema/nodejs-mongodb-quickstart</a></p> <p>&nbsp;</p> <p>5. optional: Load data into this cloud based MongoDB database, for example by loading a csv file. This requires a local installation of theMongoDB toolset. Navigate to directory country-queries. The run this command:</p> <p>mongoimport &#8211;host dsYOURINSTANCE.mlab.com:yourport &#8211;db world &#8211;collection countries &#8211;drop &#8211;file countries.csv  &#8211;type csv &#8211;fieldFile countriesFields.txt -u YOURUSERNAME -p YOURPASSWORD</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML1abdb3.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="SNAGHTML1abdb3" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML1abdb3_thumb.png?resize=642%2C267&#038;ssl=1" alt="SNAGHTML1abdb3" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>6. Create a new Node application using npm:</p> <p>npm init mongodb-client</p> <p>&nbsp;</p> <p>7. Download and Add a dependency for mongdb driver:</p> <p>npm install mongodb &#8211;save</p> <p>&nbsp;</p> <p>8. Create app.js with the following code:</p> <pre class="brush: jscript; title: ; notranslate"> var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var cloud = true; var mongodbHost = '127.0.0.1'; var mongodbPort = '27017'; var authenticate =''; //cloud if (cloud) { mongodbHost = 'YOURHOST.mlab.com'; mongodbPort = 'YOURPORT'; authenticate = 'YOURUSER:YOURPASSWORD@' } var mongodbDatabase = 'world'; // connect string for mongodb server running locally, connecting to a database called test var url = 'mongodb://'+authenticate+mongodbHost+':'+mongodbPort + '/' + mongodbDatabase; // find and CRUD: http://mongodb.github.io/node-mongodb-native/2.0/tutorials/crud_operations/ // aggregation: http://mongodb.github.io/node-mongodb-native/2.0/tutorials/aggregation/ MongoClient.connect(url, function(err, db) { assert.equal(null, err); console.log(&quot;Connected correctly to server.&quot;); //var cursor = collection.find({}); // find top 20 countries by size db.collection('countries').find({},{&quot;sort&quot;: [[&quot;area&quot;,-1]]}).limit(20).toArray(function(err, results){ console.log(&quot;Country One &quot; +JSON.stringify(results[0])); console.log(&quot;Name of Country Four &quot; +results[3].name+ &quot; and size: &quot; +results[3].area); db.close(); console.log(&quot;Connection to database is closed.&quot;); }); }) //connect() </pre> <p>And run the application:</p> <p>node app</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-28.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-27.png?resize=702%2C73&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>9. Instead of creating your own new application, run the files index.js, query.js and crud.js from the GitHub repository  (do not forget to run npm install in the directory that contains these sources, to download the mongodb module and make sure that you set the right values for mongodbHost, mongodbPort and authenticate)</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-29.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-28.png?resize=461%2C309&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Set connection details:<br /> <a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML25b902.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="SNAGHTML25b902" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/SNAGHTML25b902_thumb.png?resize=643%2C425&#038;ssl=1" alt="SNAGHTML25b902" border="0" data-recalc-dims="1" /></a></p> <p>Then</p> <p>node index (or node query or node crud)</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-30.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-29.png?resize=565%2C329&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/15/quickest-way-to-get-going-with-node-js-and-mongodb-using-the-mongodb-node-driver-and-a-free-mongodb-instance-in-the-cloud-with-mlab/">Quickest way to get going with Node.js and MongoDB &#8211; using the mongodb Node driver and a free MongoDB instance in the cloud with mLab</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=44807 Mon May 15 2017 10:21:41 GMT-0400 (EDT) LEAP#297 CD4070 Oscillator http://blog.tardate.com/2017/05/leap297-cd4070-oscillator.html <p>This is a widely-shared circuit of a “square wave generator with CD4070”. I had a few spare minutes so I thought I’d give it a go. Should be straight-forward, looks like a familiar oscillator circuit based on logic gates. Well, not so fast. I found this configuration extremely temperamental on a breadboard, and the output is more sinusoid than square. It also made me wonder about the performance of this circuit with buffered and unbuffered versions of the chip. Ultimately, I came up with three workable variants of this circuit. All interesting, but none worth much for practical purposes as the stability and output characteristics are very poor. But they do work, after a fashion! As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/CD4070/Oscillator">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/CD4070/Oscillator"><img src="http://leap.tardate.com/Electronics101/CD4070/Oscillator/assets/Oscillator_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap297-cd4070-oscillator.html Mon May 15 2017 09:21:57 GMT-0400 (EDT) 12c Patching Resume with Nonrolling Option While Analyze - JSON Magic http://www.fahdmirza.com/2017/05/12c-patching-resume-with-nonrolling.html <div dir="ltr" style="text-align: left;" trbidi="on">I was engaged in an interesting Oracle 12c patching today.&nbsp; Patch applicability was checked by using:<br /><br />"$GRID_HOME/OPatch/opatchauto apply /u01/app/oracle/software/24436306 -analyze"<br /><br />and it failed because its a non-rolling patch:<br /><br /><br /><a name='more'></a><br /><br /><br />"OPATCHAUTO-72085: Cannot execute in rolling mode, as execution mode is set to non-rolling for patch ID 24315824.<br />OPATCHAUTO-72085: Execute in non-rolling mode by adding option '-nonrolling' during execution. e.g. <oraclehome>/OPatch/opatchauto apply <patch_location> -nonrolling<br />After fixing the cause of failure Run opatchauto resume with <b>session id "F7ET</b> "]"</patch_location></oraclehome><br /><br />So now I wanted to analyze the patch with non-rolling option.<br /><br /><br />$GRID_HOME/OPatch/opatchauto apply /u01/app/oracle/software/24436306 -analyze -nonrolling<br /><br />OPatchauto session is initiated at Mon May 15 01:32:43 2017<br />Exception in thread "main" java.lang.NoClassDefFoundError: oracle/ops/mgmt/cluster/NoSuchExecutableException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.oracle.glcm.patch.auto.db.util.SystemInfoGenerator.loadOptions(SystemInfoGenerator.java:322)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.oracle.glcm.patch.auto.db.util.SystemInfoGenerator.validateOptions(SystemInfoGenerator.java:280)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.oracle.glcm.patch.auto.db.util.SystemInfoGenerator.main(SystemInfoGenerator.java:134)<br />Caused by: java.lang.ClassNotFoundException: oracle.ops.mgmt.cluster.NoSuchExecutableException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.net.URLClassLoader.findClass(URLClassLoader.java:381)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.loadClass(ClassLoader.java:424)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.lang.ClassLoader.loadClass(ClassLoader.java:357)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... 3 more<br /><br />OPatchauto session completed at Mon May 15 01:32:44 2017<br />Time taken to complete the session 0 minute, 1 second<br /><br />opatchauto bootstrapping failed with error code 1.<br />"<br /><br /><br /><b>Solution:</b><br /><br />In 12c, we have the patching sessions with their configuration in JSON files.<br /><br />So go to directory $grid_home/OPatch/auto/dbsessioninfo/<br /><br />and find the JSON file with <b>session id F7ET</b>, which was given in above error.<br /><br />Edit this file and change the flag of non-rolling to TRUE.<br /><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "key" : "nonrolling",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "value" : "false"<br />&nbsp;&nbsp;&nbsp; },<br /><br />Change above to :<br /><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "key" : "nonrolling",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "value" : "true"<br />&nbsp;&nbsp;&nbsp; },<br /><br />Save the file and run the opatchauto analyze again with resume session<br /><br />$GRID_HOME/OPatch/opatchauto resume -session <b>F7ET</b><br /><br />and it works!!!<br /><br />Happy Patching!!! <br /><br /></div> Fahd Mirza tag:blogger.com,1999:blog-3496259157130184660.post-4009015039396043864 Mon May 15 2017 02:41:00 GMT-0400 (EDT) Oracle 12c Release 2 Partitioning New Features https://gavinsoorma.com/2017/05/oracle-12c-release-2-partitioning-new-features/ <p>A number of enhancements to the Oracle database Partitioning option have been introduced in Oracle Database 12c Release 2.</p> <p>These include:</p> <ul> <li>Automatic List Partitioning</li> <li>Multi-Column List Partitioning</li> <li>Read-only Partitions</li> <li>Filtered Partition maintenance operations</li> <li>Online conversion of non-partitioned to partitioned table</li> <li>Partitioned External Tables</li> </ul> <p>&nbsp;</p> <p>Similar to the interval partitioning method </p><div class="mgm_private_no_access"><div style="border-style:solid; border-width:1px; margin-bottom:1em; background-color:#E4F2FD; border-color:#C6D9E9; margin:5px; font-family:'Lucida Grande','Lucida Sans Unicode',Tahoma,Verdana,sans-serif; font-size:13px; color:#333333;"> <div style="margin: 5px 10px;">You need to be logged in to see this part of the content. Please <a href="https://gavinsoorma.com/login/?redirect_to=https://gavinsoorma.com/2017/05/oracle-12c-release-2-partitioning-new-features/"><b>Login</b></a> to access. </div> </div></div> Gavin Soorma https://gavinsoorma.com/?p=7620 Mon May 15 2017 00:06:58 GMT-0400 (EDT) 12c MultiTenant Posts -- 1 : Creating a PDB in a different directory http://hemantoracledba.blogspot.com/2017/05/12c-multitenant-posts-1-creating-pdb-in.html <div dir="ltr" style="text-align: left;" trbidi="on">What if the current (default) location for Pluggable Databases is running out of space and, yet, you want to create an Oracle Managed Files Pluggable Database ?<br /><br />First, I start with this configuration :<br /><br /><pre>SQL&gt; select con_id, file#, substr(name,1,56)<br /> 2 from v$datafile<br /> 3 order by 1,2;<br /><br /> CON_ID FILE#<br />---------- ----------<br />SUBSTR(NAME,1,56)<br />--------------------------------------------------------------------------------<br /> 1 1<br />/u01/app/oracle/oradata/orcl12c/system01.dbf<br /><br /> 1 3<br />/u01/app/oracle/oradata/orcl12c/sysaux01.dbf<br /><br /> 1 7<br />/u01/app/oracle/oradata/orcl12c/users01.dbf<br /><br /> 1 15<br />/u01/app/oracle/oradata/orcl12c/undotbs2.dbf<br /><br /> 2 5<br />/u01/app/oracle/oradata/orcl12c/pdbseed/system01.dbf<br /><br /> 2 6<br />/u01/app/oracle/oradata/orcl12c/pdbseed/sysaux01.dbf<br /><br /> 2 8<br />/u01/app/oracle/oradata/orcl12c/pdbseed/undotbs01.dbf<br /><br /> 3 9<br />/u01/app/oracle/oradata/orcl12c/orcl/system01.dbf<br /><br /> 3 10<br />/u01/app/oracle/oradata/orcl12c/orcl/sysaux01.dbf<br /><br /> 3 11<br />/u01/app/oracle/oradata/orcl12c/orcl/undotbs01.dbf<br /><br /> 3 12<br />/u01/app/oracle/oradata/orcl12c/orcl/users01.dbf<br /><br /> 3 13<br />/u01/app/oracle/oradata/orcl12c/orcl/APEX_19913751733706<br /><br /> 3 14<br />/u01/app/oracle/oradata/orcl12c/orcl/APEX_19931956603709<br /><br /><br />13 rows selected.<br /><br />SQL&gt; <br /></pre><br /><br />Currently, I have one Pluggable Database (CON_ID=3) but none of the database files are OMF. &nbsp;I don't have enough space in /u01 and want to create the new PDB in /u02 and also use OMF. &nbsp;As long as I have /u02/oradata precreated by the system administrator, I can :<br /><br /><pre>SQL&gt; show parameter db_create_file<br /><br />NAME TYPE VALUE<br />------------------------------------ ----------- ------------------------------<br />db_create_file_dest string<br />SQL&gt; alter session set db_create_file_dest='/u02/oradata'; <br /><br />Session altered.<br /><br />SQL&gt; create pluggable database NEWPDB admin user newpdb_adm identified by newpdb_adm;<br /><br />Pluggable database created.<br /><br />SQL&gt; alter pluggable database NEWPDB open;<br /><br />Pluggable database altered.<br /><br />SQL&gt; select con_id, open_mode <br /> 2 from v$pdbs<br /> 3 where name = 'NEWPDB'<br /> 4 /<br /><br /> CON_ID OPEN_MODE<br />---------- ----------<br /> 4 READ WRITE<br /><br />SQL&gt; <br />SQL&gt; select file#, name <br /> 2 from v$datafile<br /> 3 where con_id=4<br /> 4 order by file#<br /> 5 /<br /><br /> FILE#<br />----------<br />NAME<br />--------------------------------------------------------------------------------<br /> 16<br />/u02/oradata/ORCL12C/4F793A6D323D1344E0530100007FABC7/datafile/o1_mf_system_dkj7<br />f8go_.dbf<br /><br /> 17<br />/u02/oradata/ORCL12C/4F793A6D323D1344E0530100007FABC7/datafile/o1_mf_sysaux_dkj7<br />f8hf_.dbf<br /><br /> 18<br />/u02/oradata/ORCL12C/4F793A6D323D1344E0530100007FABC7/datafile/o1_mf_undotbs1_dk<br />j7f8hg_.dbf<br /><br /><br />SQL&gt; <br />SQL&gt; show parameter db_unique_name<br /><br />NAME TYPE VALUE<br />------------------------------------ ----------- ------------------------------<br />db_unique_name string orcl12c<br />SQL&gt; <br /></pre><br /><br />Note how the parent folder name "ORCL12C" is inherited from the DB_UNIQUE_NAME. &nbsp;I can now proceed to setup this new PDB. &nbsp;Later, I &nbsp;can migrate it as an OMF PDB to another Container Database.<br />.<br />.<br />.</div> Hemant K Chitale tag:blogger.com,1999:blog-1931548025515710472.post-8906483579137605449 Sun May 14 2017 05:12:00 GMT-0400 (EDT) TCO cloud calculator Oracle and AWS https://technology.amis.nl/2017/05/14/tco-cloud-calculator-oracle-and-aws/ <p>One of the main reasons to move to the cloud is the promise of a decreasing Total Cost of Ownership. But the calculation of the TCO (IaaS) is not always easy to do. Luckily some cloud-providers provide also the so-called TCO-calculators for comparising the TCO of your IT on-premise with the Cloud-solutions. I was already aware of <a href="https://awstcocalculator.com/" target="_blank" rel="noopener noreferrer">Amazon’s AWS TCO calculator</a>, but it came to my attention that <a href="https://oracle.valuestoryapp.com/iaas/" target="_blank" rel="noopener noreferrer">Oracle has got on too</a>.  This post is about a small test to show some differences.</p> <p><span id="more-44766"></span></p> <p>Let’s assume we own a company and our subject of attention is 4 outdated servers, with 2 quad core cpu’s each, and we want to know if there’s a business case to go to the cloud. And I will keep in mind I&#8217;m using TCO calculators from providers&#8230; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Start filling in the numbers, at first with the AWS’s TCO calculator. Default it is in &#8216;basic&#8217; mode, with an option to go &#8216;advanced&#8217;. Used the basic mode for this purpose with default metrics. In the advanced mode you are able to finetune, adapting the figures to fit your own situation.</p> <p>&nbsp;</p> <h2>TCO Cloud calculator AWS</h2> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image96.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image96_thumb.png?resize=702%2C442&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>That’s quite an easy exercise. That’s it. The result at AWS:</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-9.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-8.png?resize=702%2C440&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>But the total amount of server-costs seems quite high. About 40k per year. This can’t be right, can it?</p> <p>An overview-look at the most interesting component, the server on-premises component:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-20.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-19.png?resize=459%2C440&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>A lot of Overhead has been calculated.  Under the button ‘Calculations’  a more detailed story of this overhead:</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-21.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-20.png?resize=468%2C251&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Ok. Let’s take a look at Oracle.</p> <h2>TCO Cloud calculator Oracle</h2> <p>Let’s run the same test with Oracle’s TCO calculator. Here you must first take a decision .</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-10.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-9.png?resize=459%2C449&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>A bit confusing for me, does it differ what to choose?</p> <p>Clicked two of them:  ‘Migrating your Data Center’ and ‘Lifting and Shifting Infrastructure Operations’. The only difference I could detect is slightly increased storage costs when chosing for ‘Migrating Your Data Center’.</p> <p>Quite a different start anyhow.</p> <p>&nbsp;</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-11.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-10.png?resize=702%2C283&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>No need to fill in the number of cores here….</p> <p>Next step, storage 1 TB</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-12.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-11.png?resize=702%2C288&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Next step, default network requirements:</p> <p>&nbsp;</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-13.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-12.png?resize=702%2C178&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Next step, what kind of service:</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-14.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-13.png?resize=702%2C294&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Next step, what kind of storage service:</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-15.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-14.png?resize=702%2C294&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Next step, what kind of networking service:</p> <p>&nbsp;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-16.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-15.png?resize=702%2C294&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>Next step, the result:</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-17.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-16.png?resize=702%2C373&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>This seems a lot cheaper, at least on-premises.  Big difference: the costly part here is IT Labor instead of Overhead / Facilities at on-premises:</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-22.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-21.png?resize=702%2C428&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <h2>Offered Cloud solutions</h2> <p>A big difference what you get in the cloud: at Oracle we get one instance with 6 OCPU for our 4 servers with in total 32 cores:</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-18.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-17.png?resize=702%2C140&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>&nbsp;</p> <p>And with AWS we get 4 instances with 32 virtual CPU’s:</p> <p>&nbsp;</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-19.png?ssl=1"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-18.png?resize=702%2C280&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>This makes it very difficult to compare the two methodologies for me, and even harder to judge.</p> <p>&nbsp;</p> <h2>Examples</h2> <p>&nbsp;</p> <p>I ran another test with 1 server. So now we have two cases to compare.</p> <p>&nbsp;</p> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="bottom" width="64">Case</td> <td valign="bottom" width="83">Virtual?</td> <td valign="bottom" width="67">#servers</td> <td valign="bottom" width="133">#cpu/server</td> <td valign="bottom" width="169">#cores/cpu</td> </tr> <tr> <td valign="bottom" width="64">1</td> <td valign="bottom" width="83">No</td> <td valign="bottom" width="67">4</td> <td valign="bottom" width="133">2</td> <td valign="bottom" width="169">4</td> </tr> <tr> <td valign="bottom" width="64">2</td> <td valign="bottom" width="83">No</td> <td valign="bottom" width="67">1</td> <td valign="bottom" width="133">2</td> <td valign="bottom" width="169">4</td> </tr> </tbody> </table> <p>&nbsp;</p> <p>What is the  outcome per case ?</p> <p>&nbsp;</p> <h2>AWS TCO Calculator (basic)</h2> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="bottom" width="64"></td> <td valign="bottom" width="83">TCO AWS</td> <td valign="bottom" width="67"></td> <td valign="bottom" width="133"></td> <td valign="bottom" width="169"></td> </tr> <tr> <td valign="bottom" width="64"></td> <td valign="bottom" width="83">On Premise</td> <td valign="bottom" width="67">Cloud</td> <td valign="bottom" width="133">Overhead On-prem</td> <td valign="bottom" width="169">Offered solution</td> </tr> <tr> <td valign="bottom" width="64">1</td> <td valign="bottom" width="83">186.512</td> <td valign="bottom" width="67">147.534</td> <td valign="bottom" width="133">75.089</td> <td valign="bottom" width="169">4 x r3.8xlarge, 32 vCPU</td> </tr> <tr> <td valign="bottom" width="64">2</td> <td valign="bottom" width="83">140.260</td> <td valign="bottom" width="67">37.925</td> <td valign="bottom" width="133">61.540</td> <td valign="bottom" width="169">1 x r3.8xlarge, 8 vCPU</td> </tr> </tbody> </table> <p>&nbsp;</p> <h2>Oracle TCO calculator</h2> <table border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="bottom" width="64"></td> <td valign="bottom" width="83">TCO Oracle</td> <td valign="bottom" width="67">Cloud</td> <td valign="bottom" width="133">Overhead On-prem</td> <td valign="bottom" width="169">Offered solution</td> </tr> <tr> <td valign="bottom" width="64">1</td> <td valign="bottom" width="83">108.441</td> <td valign="bottom" width="67">58.300</td> <td valign="bottom" width="133">37.985</td> <td valign="bottom" width="169">1 x OC6</td> </tr> <tr> <td valign="bottom" width="64">2</td> <td valign="bottom" width="83">34.996</td> <td valign="bottom" width="67">16.398</td> <td valign="bottom" width="133">19.240</td> <td valign="bottom" width="169">1 x OC2M  *)</td> </tr> </tbody> </table> <p>*) 2 <a href="https://docs.oracle.com/cloud/latest/computecs_common/OCSUG/GUID-1DD0FA71-AC7B-461C-B8C1-14892725AA69.htm#OCSUG210">OCPU&#8217;s with 4vCPU</a></p> <p>But what does it mean? I tend to say ‘Absolutely nothing’. Most of all disappointment in the differences of the TCO on-premise. I know every company is different, but this is quite a big difference.</p> <p>But this needs more investigation and examples to fill in and there are a lot of financial people to judge the usability of these TCO calculators. Just try it, pick the metrics you think is best for your company, it could be helpful after all.</p> <h2>Resources</h2> <p>Oracle TCO calculator:  <a href="https://oracle.valuestoryapp.com/iaas/">https://oracle.valuestoryapp.com/iaas/</a></p> <p>AWS TCO calculator: <a title="https://awstcocalculator.com/" href="https://awstcocalculator.com/">https://awstcocalculator.com/</a></p> <p>Machine shapes in Oracle Cloud: <a href="https://docs.oracle.com/cloud/latest/computecs_common/OCSUG/GUID-1DD0FA71-AC7B-461C-B8C1-14892725AA69.htm#OCSUG210">https://docs.oracle.com/cloud/latest/computecs_common/OCSUG/GUID-1DD0FA71-AC7B-461C-B8C1-14892725AA69.htm#OCSUG210</a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/14/tco-cloud-calculator-oracle-and-aws/">TCO cloud calculator Oracle and AWS</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=44766 Sun May 14 2017 04:53:25 GMT-0400 (EDT) LEAP#296 Solar Pendulum on a Boldport QSOP Breakout http://blog.tardate.com/2017/05/leap296-solar-pendulum-on-a-boldport-qsop-breakout.html <p>I had a spare BoldPort QSOP Breakout board and for a while had been pondering some interesting use for it. I think I finally found one … a solar pendulum! I discovered some new and creative solar wobble/flip-flap toys while travelling recently, which started me wondering how they work. Design details are scant, much hidden behind patent walls. The trick appears to be in the switching of capacitor-backed pulses through a coil. What is quite impressive is how well they work with only modest internal lighting and very small photovoltaic cells. The final approach I used was inspired by a <a href="http://nutsvolts.texterity.com/nutsvolts/201208/?folio=32&amp;pg=32#pg32">Nuts &amp; Volts article</a> As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/QSOPBreakout/SolarPendulum">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/buP3zrMjN94" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/QSOPBreakout/SolarPendulum"><img src="http://leap.tardate.com/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_3.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap296-solar-pendulum-on-a-boldport-qsop-breakout.html Sun May 14 2017 02:06:24 GMT-0400 (EDT) LEAP#295 Frequency Counter Kit http://blog.tardate.com/2017/05/leap295-frequency-counter-kit.html <p>Not that I really need another frequency counter, but it is interesting to see how this one is constructed. <a href="https://www.youtube.com/watch?v=Nhb0MjQBvNo">Julian Ilett has a video on a similar kit</a> and his investigation of the circuit was thorough, including the discovery that the kits available are deritative from original work by Wolfgang “Wolf” Büscher, DL4YHF (see <a href="http://www.qsl.net/dl4yhf/freq_counter/freq_counter.html">Frequency counter with a PIC and minimum hardware</a>). As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Equipment/FrequencyCounterKit">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/Equipment/FrequencyCounterKit"><img src="http://leap.tardate.com/Equipment/FrequencyCounterKit/assets/FrequencyCounterKit_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap295-frequency-counter-kit.html Fri May 12 2017 20:05:14 GMT-0400 (EDT) SSH Into the Oracle Database Cloud Service http://dbaontap.com/2017/05/12/ssh-into-the-oracle-database-cloud-service/ <p>One of the things that make us feel comfortable when working with a database is the ability to ssh into the server, connect to the database, and use sqlplus or sqlcl to interact with the database. You might not know it, but even though the Oracle Database Cloud Service is a PaaS solution, you still ...</p> <p>The post <a rel="nofollow" href="http://dbaontap.com/2017/05/12/ssh-into-the-oracle-database-cloud-service/">SSH Into the Oracle Database Cloud Service</a> appeared first on <a rel="nofollow" href="http://dbaontap.com">dbaonTp</a>.</p> DB http://dbaontap.com/?p=1304 Fri May 12 2017 16:31:49 GMT-0400 (EDT) LEAP#294 CD4060 Crystal Oscillator http://blog.tardate.com/2017/05/leap294-cd4060-crystal-oscillator.html <p>The CD4060 datasheet describes a crystal oscillator configuration for self-driving the ripple counter. Using a crystal provides very precise (but fixed) frequency control. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/CD4060/CrystalOscillator">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/CD4060/CrystalOscillator"><img src="http://leap.tardate.com/Electronics101/CD4060/CrystalOscillator/assets/CrystalOscillator_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap294-cd4060-crystal-oscillator.html Fri May 12 2017 08:31:25 GMT-0400 (EDT) LEAP#293 CD4060 RC Oscillator http://blog.tardate.com/2017/05/leap293-cd4060-rc-oscillator.html <p>The CD4060 datasheet describes an RC oscillator configuration for self-driving the ripple counter with a 50% duty cycle. This is pretty handy, and is used for example in circuits that need a self-running binary counter or frequency divider. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/CD4060/RCOscillator">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/CD4060/RCOscillator"><img src="http://leap.tardate.com/Electronics101/CD4060/RCOscillator/assets/RCOscillator_build.jpg" alt="hero_image" /></a> <img src="http://leap.tardate.com/Electronics101/CD4060/RCOscillator/assets/scope_ripple_count.gif" alt="scope_ripple_count" /></p> http://blog.tardate.com/2017/05/leap293-cd4060-rc-oscillator.html Wed May 10 2017 21:30:22 GMT-0400 (EDT) Oracle SOA Suite: Two-way SSL with TLS1.2 made easy (slightly less complicated) https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/ <p>Transport layer security (TLS) is not an easy topic. Many blogs have been written about this already. Surprisingly though, I did not find a single blog which was more or less complete and provided me with everything I needed to know to get this working on SOA Suite 12.2.1. In this blog I try to make the topic more easy to understand and provide a complete end to end example.</p> <p>Suppose you only want an implementation and do not care much about the explanation, you can skip the &#8216;Some basics&#8217; section, only execute the commands in bold in the &#8216;Lets get started!&#8217; section and the steps in the &#8216;WebLogic and SOA Suite&#8217; section. Do take into consideration any existing SSL related configuration on your own system.</p> <p><span id="more-44717"></span></p> <h1>Some basics</h1> <h2>SSL/TLS</h2> <p>SSL stands for Secure Sockets Layer. SSL is the predecessor of TLS. SSL should be considered insecure since in October 2014 <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security#POODLE_attack">the POODLE attack</a> was announced. TLS currently has 4 versions. TLS 1.0, 1.1, 1.2 and 1.3. 1.3 is not widely supported/adopted yet. SSL/TLS provide integrity checks, security and authentication.</p> <h2>Identity</h2> <p>A server which hosts traffic on a port which has SSL/TLS enabled, has an identity keystore. This identity keystore contains a private key and a public key/certificate. The public key/certificate can safely be given to other parties. With websites when visiting an HTTPS website (HTTP with SSL enabled), the public key is send to you. The other party / client can use the public key to encrypt messages meant for the server. The only one who can decrypt the messages is the one having the private key of the server. This is usually only the server.</p> <h2>Trust</h2> <p>Can you trust a server? You can use a certificate authority to create a signed public key. If someone trust the certificate authority, that someone also automatically trusts the signed key. With websites you often see a green lock when a certain website uses HTTPS with a public certificate signed by a (by your webbrowser) trusted certificate authority.</p> <p>Usually a truststore is used to store trusted certificate authorities or specific trusted certificates. If you have many servers in your application landscape, it is recommended to use a certificate authority since it is cumbersome to load every public key of every server in every truststore. Trusting a single certificate authority makes things a lot easier.</p> <h2>Certificate authority</h2> <p>A certificate authority has a private key which it can use to sign a so-called certificate signing request. From this certificate signing request you can create a signed public key.</p> <p>Certain companies such as Google and Microsoft provide certain checks to confirm someones identity before providing them with a signed public key. You can pay these companies to provide those checks and give you a signed certificate. Most of these companies are trusted certificate authorities by default in several OSs and browsers. This way for a website for example, you do not have to make changes on a client for your certificate to be trusted.</p> <p>If you run several servers within your internal company network, you often do not require these external checks. You can create your own certificate authority private key and create a signed public key yourself. This certificate authority is not trusted by default so you should trust the public certificate of your self-signed certificate authority in order establish trust.</p> <h2>Cipher</h2> <p>A cipher is an algorithm for encryption and decryption. With SSL, during the handshake phase (the phase which establishes an SSL session), a cipher is determined. The client usually provides a list of the ciphers it supports and the server chooses which one to use. During an SSL handshake you can see in logfiles which cipher is chosen.</p> <h1>Lets get started!</h1> <p>I used 2 SOA Suite 12.2.1.2 installations (complete, no quickstart) in 2 different VM&#8217;s for this example. soaserver1 and soaserver2. I used a host-only network with fixed IP&#8217;s in VirtualBox and added IP/hostname mappings in the hosts files of the two servers.</p> <h2>Create a self-signed certificate autority</h2> <p>A blog explaining the topic on creating your own certificate authority can be found <a href="https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/">here</a>. This is just my short summary with some corrections. Do read it for some easy to understand background information.</p> <p>This simple example uses <a href="https://www.openssl.org/">OpenSSL</a>. OpenSSL is installed by default on most Linux environments and can also be installed on other OSs.</p> <p>First create a private key for your certificate authority:</p> <p><strong>openssl genrsa -des3 -out rootCA.key 2048</strong></p> <p>I create an <a href="https://en.wikipedia.org/wiki/RSA_(cryptosystem)">RSA</a> key and protect it with the <a href="https://en.wikipedia.org/wiki/Triple_DES">DES3</a> cipher algorithm based on a password. I want my key to have a length of 2048 bytes. You can also choose for <a href="https://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a> keys. They can be smaller when comparing to RSA keys to provide the same level of protection. ECDSA (Elliptic Curve Digital Signature Algorithm) ciphers use ECC keys. <span style="text-decoration: underline;">Keep this key private!</span> It allows you to sign public keys (see later in this post) and create trust.</p> <p>Next I self-sign this generated key. This creates a public signed key for the certificate authority. I can load this key in truststores to achieve trust for keys which are signed with this certificate:</p> <p><strong>openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem -subj &#8216;/CN=Conclusion/OU=Integration/O=AMIS/L=Nieuwegein/ST=Utrecht/C=NL&#8217; -extensions v3_ca</strong></p> <p>Lets break this down:</p> <ul> <li>req: do a request</li> <li>x509: this defines the format of the key to be generated. In the x509 standard, several pieces of metadata can be stored with the certificate and the certificate authority structure is also part of the x509 standard. Read more <a href="https://en.wikipedia.org/wiki/X.509">here</a>.</li> <li>new: generate a new key</li> <li>nodes: this is actually &#8216;no DES&#8217;. My public key does not need to be protected with a password.</li> <li>key: specifies the private key to sign</li> <li>sha256: <a href="https://en.wikipedia.org/wiki/SHA-2">secure hash algorithm</a>. Hashing is used to provide data integrity functionality. Creating a hash of a transmission allows you to check at a later time if the transmission has been tampered with.</li> <li>days: specifies the validity of the generated certificate</li> <li>subj: provides some metadata for the certificate</li> <li>extensions v3_ca: this adds a metadata field to the certificate indicating that it is a certificate of a certificate authority. If this extension is not added, certain validations might fail</li> </ul> <p>You can use the certificate authority private key and certificate as server identity but you shouldn&#8217;t. This will give certain validation errors because of the &#8216;extensions v3_ca&#8217;.</p> <h2>Create server identity keys</h2> <p>Next we create a private key which will be used as identity of the WebLogic server</p> <p><strong>openssl genrsa -des3 -out soaserver1.key 2048</strong></p> <p>After we have created this private key, we can create a certificate signing request for this private key</p> <p><strong>openssl req -new -key soaserver1.key -out soaserver1.csr -subj &#8216;/CN=soaserver1/OU=Integration/O=AMIS/L=Nieuwegein/ST=Utrecht/C=NL&#8217;</strong></p> <p>This is pretty similar as to what we have done for the certificate authority. However mind the subj clause here. The common name should match the server hostname. This will be used later for verification of the identity of the server by the client. In order to allow two-way SSL, I added the server hostname to IP mapping to every servers hosts file. In an enterprise you would use a DNS (domain name system) for this since you do not want to maintain every mapping in every server locally.</p> <p>Next sign the certificate using the information in the private key and certificate of the certificate authority.</p> <p><strong>openssl x509 -req -in soaserver1.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out soaserver1.crt -days 1024 -sha256</strong></p> <p>This is very similar to signing the certificate authority certificate. Mind that a validity with a longer period than the validity of the certificate authority key is of course useless. Createserial creates a new file rootCA.srl. This serial number is unique for every signed certificate. You should save it so at a later time you can check if a certificate has been tampered with.</p> <p>The next time you sign a certificate, you can use:</p> <p><strong>openssl x509 -req -in soaserver1.csr -CA rootCA.pem -CAkey rootCA.key -CAserial rootCA.srl -out soaserver1.crt -days 1024 -sha256</strong></p> <p>This will increase the previous serial with 1, making sure it is unique.</p> <h2>Creating an identity keystore</h2> <p>Now you have a signed certificate and a private key. Time to make a Java keystore (JKS) which can be used in WebLogic server and SOA Suite and other pieces of Java.</p> <p><strong>openssl pkcs12 -export -in soaserver1.crt -inkey soaserver1.key -chain -CAfile rootCA.pem -name &#8220;soaserver1&#8221; -out soaserver1.p12</strong></p> <p><strong>keytool -importkeystore -deststorepass Welcome01 -destkeystore soaserver1identity.jks -srckeystore soaserver1.p12 -srcstoretype PKCS12</strong></p> <p>The above steps;</p> <ul> <li>creating a private key</li> <li>creating a certificate signing request</li> <li>signing the certificate with the private key of the certificate authority</li> <li>creating an identity keystore</li> </ul> <p>need to be done for every server.</p> <h2>Creating a trust keystore</h2> <p>Here you can pick the fruits of the above work of using a certificate authority to sign your server private keys. You can use the certificate authority certificate in a truststore and every key signed with the certificate is trusted. You do not need to load every specific server certificate into every truststore the server needs access to. Creating a truststore is easy and you can do this once and use the same trust.jks file in all your servers.</p> <p><strong>keytool -import -alias rootCA -file rootCA.pem -keystore trust.jks -storepass Welcome01</strong></p> <h1>WebLogic and SOA Suite</h1> <p>It is interesting to notice the incoming WebLogic configuration differs from the SOA Suite outgoing configuration. This is of course not surprising since a server usually only has a single identity, but an integration product like SOA Suite should able to interact with multiple protected external resources, maybe requiring different ciphers and keys for each of them. Also SOA Suite in the past (I&#8217;m not sure if that is still the case) could run on <a href="https://docs.oracle.com/cd/E17904_01/doc.1111/e17852/manage_was_soa.htm#THIRD855">IBM WebSphere</a> instead of WebLogic Server. Thus I can understand Oracle chose to provide a more generic implementation of SSL in the SOA Suite than the WebLogic specific one.</p> <h2>WebLogic</h2> <p>The WebLogic server configuration is pretty straightforward. In this example I&#8217;m only looking at SSL for incoming and outgoing messages for SOA Suite. The WebLogic specific configuration is only relevant for incoming connections. Basically the steps are as followed:</p> <ul> <li>Enable SSL for the managed server</li> <li>Specify keystores for identity and trust</li> <li>Configure incoming SSL specifics</li> <li>Force the server to use TLS1.2</li> </ul> <h3>Enable SSL for the managed server</h3> <p>First Enable the listen port for SSL. In WebLogic console, environment, servers, specify your server, configuration, general and indicate &#8216;SSL Listen port enabled&#8217;. You can also specify the SSL port here.</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?ssl=1"><img data-attachment-id="44728" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureenablelistenport/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?fit=1600%2C737&amp;ssl=1" data-orig-size="1600,737" 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="CaptureEnableListenPort" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?fit=300%2C138&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?fit=702%2C324&amp;ssl=1" class="aligncenter size-medium wp-image-44728" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?resize=300%2C138&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?resize=300%2C138&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?resize=768%2C354&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?resize=1024%2C472&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureEnableListenPort.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <h3>Specify the keystores for identity and trust</h3> <p>In WebLogic console, environment, servers, specify your server, configuration, keystores. You can specify the identity and trust keystores you have created during the above steps.</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?ssl=1"><img data-attachment-id="44732" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturesetidentityandtrust/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?fit=1600%2C718&amp;ssl=1" data-orig-size="1600,718" 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="CaptureSetIdentityAndTrust" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?fit=300%2C135&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?fit=702%2C315&amp;ssl=1" class="aligncenter size-medium wp-image-44732" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?resize=300%2C135&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?resize=300%2C135&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?resize=768%2C345&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?resize=1024%2C460&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetIdentityAndTrust.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <h3>Configure incoming SSL specifics</h3> <p>In WebLogic console, environment, servers, specify your server, configuration, SSL. You can specify the identity key used for the server and several checks which can be done when establishing the SSL connection.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?ssl=1"><img data-attachment-id="44725" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureconfiguressl1/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?fit=1600%2C710&amp;ssl=1" data-orig-size="1600,710" 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="CaptureConfigureSSL1" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?fit=300%2C133&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?fit=702%2C311&amp;ssl=1" class="aligncenter size-medium wp-image-44725" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?resize=300%2C133&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?resize=300%2C133&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?resize=768%2C341&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?resize=1024%2C454&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL1.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?ssl=1"><img data-attachment-id="44726" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureconfiguressl2/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?fit=1600%2C682&amp;ssl=1" data-orig-size="1600,682" 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="CaptureConfigureSSL2" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?fit=300%2C128&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?fit=702%2C299&amp;ssl=1" class="aligncenter size-medium wp-image-44726" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?resize=300%2C128&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?resize=300%2C128&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?resize=768%2C327&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?resize=1024%2C436&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureSSL2.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p>Some important settings:</p> <ul> <li>BEA Hostname verifier. This indicates the CN field in the certificate is checked against the server hostname.</li> <li>Client certs requested and enforced. If set, Two-Way SSL will be used and the client won&#8217;t be able to connect unless it presents a trusted certificate.</li> <li>Buildin SSL Validation and Cert Path Validators. This checks the certificate chain.</li> </ul> <p>It is important to understand what these checks do. A host name verifier ensures the host name in the URL to which the client connects matches the host name in the digital certificate that the server sends back as part of the SSL connection. This helps prevent man in the middle attacks where the client might connect to a different URL.</p> <p>The below situation is something you won&#8217;t prevent even with this checks. I could connect without problems with the soaserver2 WebLogic server from soaserver1 with the certificate of soaserver2. Also when using the private key of soaserver1 as identity on soaserver2, soaserver2 would not complain about this. FireFox would though and most likely also other clients.</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?ssl=1"><img data-attachment-id="44729" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturefailedclientconnection/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?fit=1238%2C715&amp;ssl=1" data-orig-size="1238,715" 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="CaptureFailedClientConnection" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?fit=300%2C173&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?fit=702%2C405&amp;ssl=1" class="aligncenter size-medium wp-image-44729" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?resize=300%2C173&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?resize=300%2C173&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?resize=768%2C444&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?resize=1024%2C591&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureFailedClientConnection.png?w=1238&amp;ssl=1 1238w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <h3>Force TLS1.2</h3> <p>If you want to force WebLogic / SOA Suite to use TLS 1.2 you can specify the following JVM parameters in the setDomainEnv.sh file.</p> <p>-Dweblogic.security.SSL.minimumProtocolVersion=TLSv1.2 -Dhttps.protocols=TLSv1.2</p> <h2>SOA Suite</h2> <p>The SOA Suite configuration is a bit more elaborate in that it requires configuration in different places of which not all can be done from the GUI.</p> <p>The steps which need to be performed are:</p> <ul> <li>Specify the identity store used by SOA</li> <li>Create a keystore password credential in the credential store</li> <li>Configure composite to use two-way SSL</li> </ul> <h3>Specify identity store</h3> <p>First you have to specify the identity store which the SOA Suite will use for outbound connections. You can find this setting by going to SOA, soa-infra, SOA Administration, Common Properties, (scroll down), &#8216;More SOA Infra Advanced Configuration Properties&#8230;&#8217;</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?ssl=1"><img data-attachment-id="44734" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturesoainfra/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?fit=509%2C870&amp;ssl=1" data-orig-size="509,870" 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="CaptureSOAinfra" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?fit=176%2C300&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?fit=509%2C870&amp;ssl=1" class="aligncenter size-medium wp-image-44734" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?resize=176%2C300&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?resize=176%2C300&amp;ssl=1 176w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSOAinfra.png?w=509&amp;ssl=1 509w" sizes="(max-width: 176px) 100vw, 176px" data-recalc-dims="1" /></a></p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?ssl=1"><img data-attachment-id="44733" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturesettruststore/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?fit=1600%2C725&amp;ssl=1" data-orig-size="1600,725" 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="CaptureSetTruststore" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?fit=300%2C136&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?fit=702%2C318&amp;ssl=1" class="aligncenter size-medium wp-image-44733" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?resize=300%2C136&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?resize=300%2C136&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?resize=768%2C348&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?resize=1024%2C464&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSetTruststore.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p>Here you have to specify the servers identity keystore. In my case /home/oracle/certs/soaserver1identity.jks.</p> <h3>Create a keystore password credential in the credential store</h3> <p>Next you have to specify the keystore password. If you forget to do this, you will encounter errors like:</p> <p>On the client:<br /> &lt;May 7, 2017, 12:58:43,939 PM CEST&gt; &lt;Error&gt; &lt;oracle.integration.platform.blocks.soap&gt; &lt;BEA-000000&gt; <strong>&lt;Unable to create SSL Socket Factory&gt;</strong></p> <p>On the server:<br /> [2017-05-07T12:26:02.364+02:00] [soa_server1] [NOTIFICATION] [] [oracle.integration.platform.common.SSLSocketFactoryManagerImpl] [tid: [ACTIVE].ExecuteThread: &#8217;25&#8217; for queue: &#8216;weblogic.kernel.Default (self-tuning)&#8217;] [userId: &lt;anonymous&gt;] [ecid: cd874e6b-9d05-4d97-a54d-ff9a3b8358e8-00000098,0] [APP: soa-infra] [partition-name: DOMAIN] [tenant-name: GLOBAL] <strong>Could not obtain keystore location or password</strong></p> <p>You can set the keystore password by going to your domain, Security, Credentials. You can create a credential map SOA with a keyname/user of KeyStorePassword with the password you have used for your keystore. It will use the same password for the key as for the keystore if not specified. You can create a KeyPassword entry for the password for the key if they differ.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?ssl=1"><img data-attachment-id="44727" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturecredentialstorewhere/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?fit=575%2C837&amp;ssl=1" data-orig-size="575,837" 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="CaptureCredentialStoreWhere" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?fit=206%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?fit=575%2C837&amp;ssl=1" class="aligncenter size-medium wp-image-44727" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?resize=206%2C300&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?resize=206%2C300&amp;ssl=1 206w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureCredentialStoreWhere.png?w=575&amp;ssl=1 575w" sizes="(max-width: 206px) 100vw, 206px" data-recalc-dims="1" /></a>   <a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?ssl=1"><img data-attachment-id="44724" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureconfigurekeystorepassword/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?fit=1600%2C726&amp;ssl=1" data-orig-size="1600,726" 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="CaptureConfigureKeystorePassword" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?fit=300%2C136&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?fit=702%2C319&amp;ssl=1" class="aligncenter size-medium wp-image-44724" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?resize=300%2C136&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?resize=300%2C136&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?resize=768%2C348&amp;ssl=1 768w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?resize=1024%2C465&amp;ssl=1 1024w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureKeystorePassword.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <h3>Configure composite to use two-way SSL</h3> <p>This step is easy. You have to add a binding property to your reference which indicates you want to use two-way SSL.</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?ssl=1"><img data-attachment-id="44722" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturebinding-property/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?fit=1600%2C616&amp;ssl=1" data-orig-size="1600,616" 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="CaptureBinding property" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?fit=300%2C116&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?fit=702%2C270&amp;ssl=1" class="aligncenter size-medium wp-image-44722" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?resize=300%2C116&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?resize=300%2C116&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?resize=768%2C296&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?resize=1024%2C394&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureBinding-property.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p>In the composite.xml file on your reference you can add:</p> <p>&lt;property name=&#8221;oracle.soa.two.way.ssl.enabled&#8221;&gt;true&lt;/property&gt;</p> <p>This causes the composite binding to use the identity (with the credential store password) for outbound SSL specified in the previously configured MBean.</p> <p>You should of course also not forget to set the endpoint to a port which hosts HTTPS and indicate in the URL that it should use HTTPS to call this endpoint. In my example I&#8217;ve overridden the URL in the EM. Be aware though that overriding the endpoint URL might still cause the original endpoint to be called when the overridden endpoint is not accessible (if for example the SSL connection has issues).</p> <h1>Some useful tips</h1> <p>If you want to debug SSL connections, the following tips might help you.</p> <h2>FireFox</h2> <p>It might appear strange to use a webbrowser to test SSL connections, but which piece of software uses SSL more than a browser? FireFox is very clear in its error messages what has gone wrong which greatly helps with debugging. FireFox uses its own certificate store and can provide certificates to login to a server. You can configure them from FireFox, Preferences, Advanced, Certificates, View Certificates. Here you can import client certificates such as the p12 files you have generated in an earlier step.</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?ssl=1"><img data-attachment-id="44723" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureconfigurecertificates/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?fit=1496%2C728&amp;ssl=1" data-orig-size="1496,728" 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="CaptureConfigureCertificates" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?fit=300%2C146&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?fit=702%2C341&amp;ssl=1" class="aligncenter size-medium wp-image-44723" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?resize=300%2C146&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?resize=300%2C146&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?resize=768%2C374&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?resize=1024%2C498&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?w=1496&amp;ssl=1 1496w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureConfigureCertificates.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p>This provides for a very easy way to check whether a server can be accessed with SSL and if the server certificate has been correctly generated / set-up. FireFox also extensively checks certificates to provide the green-lock icons people are quite familiar with.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?ssl=1"><img data-attachment-id="44721" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capture02-13/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?fit=466%2C246&amp;ssl=1" data-orig-size="466,246" 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="Capture02" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?fit=300%2C158&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?fit=466%2C246&amp;ssl=1" class="aligncenter size-medium wp-image-44721" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?resize=300%2C158&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?resize=300%2C158&amp;ssl=1 300w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?resize=351%2C185&amp;ssl=1 351w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/Capture02.png?w=466&amp;ssl=1 466w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p>In this case I have SSL enabled for soaserver1 on port 7002. I open https://soaserver1:7002 in FireFox (do not forget the HTTPS part). Since I have enabled &#8216;Client certs requested and enforced&#8217; in the WebLogic SSL configuration, it will ask me for a client key.</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?ssl=1"><img data-attachment-id="44731" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureprovidecertificate/" data-orig-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?fit=1438%2C594&amp;ssl=1" data-orig-size="1438,594" 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="CaptureProvideCertificate" data-image-description="" data-medium-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?fit=300%2C124&amp;ssl=1" data-large-file="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?fit=702%2C290&amp;ssl=1" class="aligncenter size-medium wp-image-44731" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?resize=300%2C124&#038;ssl=1" alt="" srcset="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?resize=300%2C124&amp;ssl=1 300w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?resize=768%2C317&amp;ssl=1 768w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?resize=1024%2C423&amp;ssl=1 1024w, https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureProvideCertificate.png?w=1438&amp;ssl=1 1438w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <p>In this case you can check whether a client certificate will be trusted. When opening https://soaserver1:7002 and you get a 404 message, the WebLogic server is responding to you after the SSL handshake has succeeded.</p> <p>In FireFox you can tweak the cipher suites which are used. Read about this <a href="https://support.mozilla.org/nl/questions/916646">here</a>. Do mind that SSL connections can be cached and FireFox can remember to send specific keys. If you run FireFox on soaserver1 and open a link on soaserver1, Wireshark (read below) will not detect traffic on the same interface which is used to access soaserver2.</p> <h2>Wireshark</h2> <p>Use <a href="https://www.wireshark.org/">Wireshark</a> to monitor connections/handshakes.</p> <ul> <li>You can confirm the SSL/TLS version being used</li> <li>You can see the number of messages which have crossed the wire (allows you to distinguish retries of for example a handshake fails)</li> <li>Allows you to decrypt SSL traffic (if you have the private key)</li> <li>It allows you to confirm an SSL connection is actually being set up. If you do not see it in Wireshark, no message has been send and the connection build-up fails on the client. This for example happens when the SOA, KeyStorePassword entry has not been set in the SOA Suite credential store.</li> </ul> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?ssl=1"><img data-attachment-id="44736" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturesuccesfulsslconnection/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?fit=1600%2C869&amp;ssl=1" data-orig-size="1600,869" 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="CaptureSuccesfulSSLConnection" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?fit=300%2C163&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?fit=702%2C381&amp;ssl=1" class="aligncenter size-medium wp-image-44736" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?resize=300%2C163&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?resize=300%2C163&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?resize=768%2C417&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?resize=1024%2C556&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSuccesfulSSLConnection.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <h2>SSL debug logging</h2> <p>If you want to see what is happening with your SSL connection, it is very helpful to provide some JVM switches in setDomainEnv.</p> <p>-Dweblogic.security.SSL.verbose -Djavax.net.debug=all -Dssl.debug=true</p> <p>You can also enable WebLogic SSL debugging in WebLogic console. Open a server and enable weblogic.security.SSL</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?ssl=1"><img data-attachment-id="44735" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/capturessl-debugging/" data-orig-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?fit=1600%2C825&amp;ssl=1" data-orig-size="1600,825" 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="CaptureSSL debugging" data-image-description="" data-medium-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?fit=300%2C155&amp;ssl=1" data-large-file="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?fit=702%2C362&amp;ssl=1" class="aligncenter size-medium wp-image-44735" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?resize=300%2C155&#038;ssl=1" alt="" srcset="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?resize=300%2C155&amp;ssl=1 300w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?resize=768%2C396&amp;ssl=1 768w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?resize=1024%2C528&amp;ssl=1 1024w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?w=1600&amp;ssl=1 1600w, https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CaptureSSL-debugging.png?w=1404&amp;ssl=1 1404w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></a></p> <h2>Portecle</h2> <p><a href="http://portecle.sourceforge.net/">Portecle</a> is a handy and freely available tool if you want to manage keystores and look at key details.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?ssl=1"><img data-attachment-id="44730" data-permalink="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/captureportecle/" data-orig-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?fit=599%2C608&amp;ssl=1" data-orig-size="599,608" 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="CapturePortecle" data-image-description="" data-medium-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?fit=296%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?fit=599%2C608&amp;ssl=1" class="aligncenter size-medium wp-image-44730" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?resize=296%2C300&#038;ssl=1" alt="" srcset="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?resize=296%2C300&amp;ssl=1 296w, https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/CapturePortecle.png?w=599&amp;ssl=1 599w" sizes="(max-width: 296px) 100vw, 296px" data-recalc-dims="1" /></a></p> <h2>Which service is called?</h2> <p>Suppose you have process A on server X which calls process B on server Y. For testing you first deploy process B on server X and use the WSDL of process B locally from process A. Next you override the endpoint to refer to the SSL port of server Y. What happens if the SSL connection cannot be established? By default, there are 3 retries after which the process falls back to using the endpoint as specified in the WSDL file. When testing it might seem the call from process A on X to B on Y works but it is actually a local call because the local call is the fallback for the remote call. In this case you should confirm an instance of B is created on Y.</p> <p>You can also use the following binding properties in the composite.xml to tweak the failover behavior:</p> <p>&lt;property name=&#8221;oracle.webservices.endpoint.failover&#8221;&gt;false&lt;/property&gt;<br /> &lt;property name=&#8221;endpointURI&#8221; many=&#8221;false&#8221; override=&#8221;may&#8221;&gt;HTTPENDPOINT&lt;/property&gt;</p> <h1>Finally</h1> <h2>Performance impact</h2> <p>Using SSL of course has a performance impact. 1-way SSL is faster than 2-way SSL. Using encryption is slower than not using encryption. Key length and cipher suites also play a major role in how fast your SSL connection will be. I have not measured the precise cost of the different options, but you should consider what you need and what you are willing to pay for it in terms of performance impact.</p> <ul> <li>One way SSL allows the client to verify the server identity (certificate, hostname). The server provides the client with a public key but not the other way around.</li> <li>Two way SSL also allows the server to verify the client. The client also needs to provide a public key.</li> </ul> <p>SSL verifies host identities, keys, certificate chains. It does not allow you to provide (specific user) application authentication or authorization. You could do it with SSL but it would require giving every user a specific certificate. There are better ways to do that such as WS-Security, SAML or OAuth.</p> <h2>Entropy</h2> <p>If you use a server which has a lot of SSL connections, the random number generator is asked often for a new random number. Random numbers are generated by using entropy (a measure of randomness/disorder), which is a limited resource, especially in virtualized environments.</p> <p>There is a setting which allows WebLogic server to recycle random numbers at the cost of security (the random number generator becomes predictable). Read more about that <a href="http://weblogic-wonders.com/weblogic/2010/11/10/issues-relating-to-urandomrandom-on-weblogic-server-in-linux-environment/">here</a>.</p> <p>-Djava.security.egd=file:/dev/./urandom</p> <p>Oracle does not recommend using this recycling mechanism in production environments since if you can predict the random number generator, you have introduced a security vulnerability which can be exploited. Next to speeding up SSL connections, your server startup will most likely also be improved.</p> <h2>CRLs</h2> <p>I&#8217;ve not talked about a lot of things such as certificate revocation lists (CRLs). These lists contain keys which have been compromised. Compromised means the private key of a certificate authority has become public. Using the private CA key, someone is able to create new certificates which are being trusted by people who trust the CA. If a person can do such a thing, he is able to gain access to systems. Remember private keys can also be used to decrypt traffic? This is of course an issue on the internet but also when you have your own certificate authority. More generally speaking, if a private key is compromised, all trust should be revoked since you cannot count anymore on that for example a server is the sole owner of the key and is the only one who can decrypt traffic.</p> <h2>JDBC and SSL</h2> <p>Read more about this in the whitepaper <a href="http://www.oracle.com/technetwork/topics/wp-oracle-jdbc-thin-ssl-130128.pdf">here</a>. It requires Oracle Advanced Security (OAS), which is an Oracle Database Enterprise Edition option. The US Government does not allow double encryption (you can imagine why..). If you configure Oracle Advanced Security to use SSL encryption and another encryption method concurrently, then the connection fails. See SSL Usage issues <a href="https://docs.oracle.com/cd/E36909_01/network.1111/e10746.pdf">here</a>.</p> <h2>Other things</h2> <p>I have not talked about securing the connection between managed servers in a cluster and between the NodeManager and managed servers. You can read more about that <a href="https://oracle-base.com/articles/11g/weblogic-configure-ssl-for-a-managed-server">here</a>. Do mind though that using trust can be more efficient than specifically putting every public key in every truststore. Especially when you have many servers.</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/10/oracle-soa-suite-two-way-ssl-with-tls1-2/">Oracle SOA Suite: Two-way SSL with TLS1.2 made easy (slightly less complicated)</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Maarten Smeets https://technology.amis.nl/?p=44717 Wed May 10 2017 15:14:31 GMT-0400 (EDT) Insider View of a Delphix VDB Rewind http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/ <div id="tweetbutton6767" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Finsider-view-delphix-vdb-rewind%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Finsider-view-delphix-vdb-rewind%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"><p>I love questions-  They give me something to write about that I don&#8217;t have to come up with from my experience or challenges&#8230;:)</p> <p>So in my <a href="http://dbakevlar.com/2017/05/devops-roll-dice/">last post</a>, Paul asked:</p> <blockquote><p>I am not sure what happens to the other changes which happened while the release was happening? Presumably they are also lost? Presumably the database has to go down while the data is reverted?</p></blockquote> <h3><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/question/" rel="attachment wp-att-6777"><img class="alignnone size-full wp-image-6777" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/question.gif?resize=540%2C250" alt="" data-recalc-dims="1" /></a></h3> <h3>The Setup</h3> <p>In our scenario to answer this question, I&#8217;m going to perform the following on the VEmp_826 virtualized database:</p> <ol> <li>Add a table</li> <li>Add an index</li> <li>Include transactions, both inserts and deletes</li> <li>Rewind the database using the Admin Console</li> </ol> <p>As I&#8217;m about to make these changes to my database, I <strong>take a snapshot</strong> which is then displayed in the Delphix Admin console using the &#8220;Camera&#8221; icon in the Configuration pane.</p> <p><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-9-37-55-am/" rel="attachment wp-att-6768"><img class="alignnone wp-image-6768" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.37.55-AM.png?resize=319%2C258" alt="" srcset="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.37.55-AM.png?w=532 532w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.37.55-AM.png?resize=300%2C242 300w" sizes="(max-width: 319px) 100vw, 319px" data-recalc-dims="1" /></a></p> <p>Note the SNC Range listing on each of them.  Those are the SCNs available in that snapshot and the timestamp is listed, as well.</p> <p>Now I log into my target host that the VDB resides on.  Even though this is hosted on AWS, it really is no different for me than logging into any remote box.  I set my environment and log in as the schema owner to perform the tasks we&#8217;ve listed above.</p> <p><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-9-40-47-am/" rel="attachment wp-att-6769"><img class="alignnone wp-image-6769" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.40.47-AM.png?resize=386%2C202" alt="" srcset="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.40.47-AM.png?resize=1024%2C536 1024w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.40.47-AM.png?resize=300%2C157 300w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.40.47-AM.png?resize=768%2C402 768w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.40.47-AM.png?w=1154 1154w" sizes="(max-width: 386px) 100vw, 386px" data-recalc-dims="1" /></a></p> <h3>Create Table</h3> <p class="p1">So we&#8217;ll create a table, index and some support objects for our test:</p> <pre class="p1">CREATE TABLE REW_TST ( C1 NUMBER NOT NULL ,C2 VARCHAR2(255) ,CDATE TIMESTAMP ); CREATE INDEX PK_INX_RT ON REW_TST (C1); CREATE SEQUENCE RT_SEQ START WITH 1; CREATE OR REPLACE TRIGGER RW_BIR BEFORE INSERT ON REW_TST FOR EACH ROW BEGIN <span class="Apple-converted-space">  </span>SELECT C1_SEQ.NEXTVAL <span class="Apple-converted-space">  </span>INTO <span class="Apple-converted-space">  </span>:new.C1 <span class="Apple-converted-space">  </span>FROM <span class="Apple-converted-space">  </span>DUAL; END; /</pre> <p class="p1">Now that it&#8217;s all created, we&#8217;ll <strong>take ANOTHER snapshot</strong>.</p> <p class="p1"><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-9-48-23-am/" rel="attachment wp-att-6770"><img class="alignnone size-large wp-image-6770" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.48.23-AM.png?resize=600%2C179" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.48.23-AM.png?resize=1024%2C305 1024w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.48.23-AM.png?resize=300%2C89 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.48.23-AM.png?resize=768%2C229 768w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.48.23-AM.png?w=1200 1200w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.48.23-AM.png?w=1800 1800w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <h3 class="p1">Add Data to Kinder Table</h3> <p class="p1">This snapshot takes just a couple seconds and is about 10 minutes after our first one and contains the changes that were made to the database since we took the initial change.</p> <p class="p1">Now I&#8217;ll add a couple rows from another transaction into the KINDER_TBL from yesterday:</p> <pre class="p1">INSERT INTO KINDER_TBL VALUES (1,dbms_random.string('A', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (2,dbms_random.string('B', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (3,dbms_random.string('C', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (4,dbms_random.string('D', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (5,dbms_random.string('E', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (6, dbms_random.string('F', 200), SYSDATE); INSERT INTO  KINDER_TBL VALUES (7,dbms_random.string('G', 200), SYSDATE); COMMIT;</pre> <p class="p1"><strong>We&#8217;ll take another snapshot</strong>:</p> <p class="p1"><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-9-56-43-am/" rel="attachment wp-att-6771"><img class="alignnone size-large wp-image-6771" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.56.43-AM.png?resize=600%2C274" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.56.43-AM.png?resize=1024%2C467 1024w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.56.43-AM.png?resize=300%2C137 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.56.43-AM.png?resize=768%2C350 768w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.56.43-AM.png?w=1200 1200w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-9.56.43-AM.png?w=1800 1800w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <h3 class="p1">Add Data to the New Table</h3> <p class="p1">Now let&#8217;s add a ton of rows to the new table we&#8217;ve created:</p> <pre class="p1">SQL&gt; Begin For IDS in 1..10000 Loop INSERT INTO REW_TST (C2) VALUES (dbms_random.string('X', 200)); Commit; End loop; End;  <span class="Apple-converted-space">  </span>/</pre> <p class="p1"><strong>And take another snapshot.</strong></p> <p class="p1">Now that I have all of my snapshots for the critical times in the release change, there is a secondary option that is available.</p> <h3 class="p1">Snapshots at the DBA Level</h3> <p class="p1">As I pointed out earlier, there is a range of SCNs in each snapshot.  Notice that I can now provision by time or SCN from the Admin Console:</p> <p class="p1"><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-10-01-36-am/" rel="attachment wp-att-6772"><img class="alignnone size-large wp-image-6772" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.01.36-AM.png?resize=600%2C361" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.01.36-AM.png?resize=1024%2C616 1024w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.01.36-AM.png?resize=300%2C181 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.01.36-AM.png?resize=768%2C462 768w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.01.36-AM.png?w=1200 1200w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.01.36-AM.png?w=1800 1800w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <p class="p1">So I could easily go back to any of my SET beginning or ending SCN by the snapshot OR I could click on the up/down arrows or type the exact SCN I want to pinpoint for the recovery. Once I&#8217;ve decided on the correct SCN to recover to, then click on Refresh VDB and it will go to that SCN, just like doing a recovery via RMAN, but instead of having to type out the commands and the time constraints, this would be an incredibly quick recovery.</p> <p class="p1">Notice that I can go back to any of my snapshots, too.  For the purpose of this test, we&#8217;re going to go back to just before I added the data to the new table by clicking on the Selected SCN and clicking Rewind VDB.</p> <p class="p1">Note that now <strong>this is the final snapshot</strong> shown in the system, no longer displaying the one that was taken after we inserted the 10K rows into REW_TST.</p> <p class="p1">If we look at our SQL*Plus connection to the database, we&#8217;ll see that it&#8217;s no longer connected from our 10K row check on our new table:</p> <p class="p1"><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-10-11-27-am/" rel="attachment wp-att-6773"><img class="alignnone wp-image-6773" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.11.27-AM.png?resize=276%2C193" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.11.27-AM.png?w=540 540w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.11.27-AM.png?resize=300%2C210 300w" sizes="(max-width: 276px) 100vw, 276px" data-recalc-dims="1" /></a></p> <p class="p1">And if I connect back in, what do I have for my data in the tables I worked on?</p> <p class="p1"><a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/screen-shot-2017-05-10-at-10-26-57-am/" rel="attachment wp-att-6774"><img class="alignnone wp-image-6774" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.26.57-AM.png?resize=357%2C212" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.26.57-AM.png?w=658 658w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-10-at-10.26.57-AM.png?resize=300%2C178 300w" sizes="(max-width: 357px) 100vw, 357px" data-recalc-dims="1" /></a></p> <p class="p1">Pssst-  there are fourteen rows instead of seven because I inserted another 7 yesterday when I created the table&#8230; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p class="p1">I think that answers a lot of the questions posed by Paul, but I&#8217;m going to jump in a little deeper on one-</p> <h3 class="p1">Database Outage During a Rewind</h3> <p class="p1">Yes, the database did experience an outage as the VDB was put back to the point in time or SCN requested by the User Interface or Command line interface for Delphix.  You can see this from querying the database:</p> <pre class="p1">SQL&gt; select to_char(startup_time,'DD-MM-YYYY HH24:MI:SS') startup_time <span class="s1"> from v$instance;</span> <span class="s1">STARTUP_TIME</span> <span class="s1">-------------------</span> <span class="s1">10-05-2017 12:11:49</span></pre> <p class="p1">The entire database is restored back to this time and the Dsource, the database the VDB is sourced from and keeps track of everything going on in all VDBs, has pushed the database back, yet the snapshots from before this time exist, (tracked by the Delphix Engine.)</p> <p class="p1">If you view the alert log for the VDB, you&#8217;ll also see the tail of the recovery steps, including our requested SCN:</p> <pre><span class="s1">alter database recover datafile list clear</span> <span class="s1">Completed: alter database recover datafile list clear</span> <span class="s1">alter database recover datafile list</span> <span class="s1"> 1 , 2 , 3 , 4</span> <span class="s1">Completed: alter database recover datafile list</span> <span class="s1">alter database recover if needed</span> <span class="s1"> start until change<strong> 2258846</strong></span> <span class="s1">Media Recovery Start</span> <span class="s1"> started logmerger process</span> <span class="s1">Parallel Media Recovery started with 2 slaves</span> <span class="s1">Wed May 10 12:11:05 2017</span> <span class="s1">Recovery of Online Redo Log: Thread 1 Group 3 Seq 81 Reading mem 0</span> <span class="s1"><span class="Apple-converted-space">  </span>Mem# 0: /mnt/provision/VEmp_826/datafile/VEMP_826/onlinelog/o1_mf_3_dk3r6nho_.log </span>Incomplete recovery applied all redo ever generated. Recovery completed through change <strong>2258846</strong> time 05/10/2017 11:55:30 <strong>Media Recovery Complete (VEmp826)</strong></pre> <p class="p1">Any other changes around the change that you&#8217;re tracking from are impacted by a rewind, so if there are two developers working on the same database, they could impact each other, but with the small footprint of a VDB, why wouldn&#8217;t you just give them each their own VDB and merge the changes at the end of the development cycle?  The glorious reasons for adoption virtualization technology is to have the ability to work in 2 week sprints and be more agile than our older, waterfall methods that are laden with problems.</p> <p class="p1">Let me know if you have any more questions-  I live for questions that offer me some incentive to go look at what&#8217;s going on under the covers!</p> <p class="p1"> <!-- Easy Plugin for AdSense Unfiltered [count: 3 is not less than 3] --></div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/delphix-rewind/" rel="tag">Delphix Rewind</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/2017/05/insider-view-delphix-vdb-rewind/&title=Insider View of a Delphix VDB Rewind"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" 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/2017/05/insider-view-delphix-vdb-rewind/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/05/insider-view-delphix-vdb-rewind/&title=Insider View of a Delphix VDB Rewind"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/05/insider-view-delphix-vdb-rewind/&title=Insider View of a Delphix VDB Rewind"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/05/insider-view-delphix-vdb-rewind/&title=Insider View of a Delphix VDB Rewind"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/05/insider-view-delphix-vdb-rewind/#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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/05/for-my-sister-kristi/" >For My Sister, Kristi</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/05/em13c-applying-system-patches-with-the-oms-patcher/" >EM13c- Applying System Patches with the OMS Patcher</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/03/rmoug-wit-honest-comment-and-honest-response/" >RMOUG WIT- Honest Comment and Honest Response</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2011/02/pulling-the-trigger/" >Pulling the Trigger</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/" >Delivering Migration Projects on Time</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/">Insider View of a Delphix VDB Rewind</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/05/insider-view-delphix-vdb-rewind/">Insider View of a Delphix VDB Rewind</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6767 Wed May 10 2017 13:03:31 GMT-0400 (EDT) Quantum Space https://jonathanlewis.wordpress.com/2017/05/10/quantum-space/ <p>Here&#8217;s a not very serious note that makes a serious point.  I&#8217;ve got a small tablespace made up of 4 files, and here&#8217;s a little report I can run against the data dictionary for that tablespace:</p> <pre class="brush: plain; title: ; notranslate"> select 'File space' What, nvl(sum(user_bytes)/1048576,0) MB from dba_data_files where tablespace_name = 'LOB_TEST' union all select 'Free space', nvl(sum(bytes/1048576),0) from dba_free_space where tablespace_name = 'LOB_TEST' union all select 'Extents', nvl(sum(bytes/1048576),0) from dba_extents where tablespace_name = 'LOB_TEST' union all select 'Segments', nvl(sum(bytes/1048576),0) from dba_segments where tablespace_name = 'LOB_TEST' ; </pre> <p>The name of the tablespace isn&#8217;t significant &#8211; it happens to be a tablespace I created to do some tests relating to space allocation with securefile LOBs, and it&#8217;s been hanging around ever since.</p> <p>The query first reports the &#8220;user&#8221; space defined by the files &#8211; remember that there will be some space for header information and other metadata, and there may be some space near the end of the file which is smaller than the minimum extent allowed for that tablespace.</p> <p>After the statement of total possible usable space we get: the free space, the space taken up by used extents, and the space taken up by segments.</p> <p>Here&#8217;s the result I get currently:</p> <pre class="brush: plain; title: ; notranslate"> WHAT MB ---------- ---------- File space 196 Free space 196 Extents 0 Segments 196 </pre> <p>The total usable space is 196MB, of which 196MB are free with no space allocated to extents &#8212; except 196MB HAS been allocated to segments. Depending how you look at it the tablespace is either full, or empty.</p> <p>If you&#8217;re in the know the puzzle resolves itself if you query for the segment names, which look like: <strong><em>&#8220;BIN$TrDKUCvcVQbgUwEAAH9K2Q==$0&#8221;</em></strong> &#8211; I have one segment that is in the recycle bin, so I can recover it from the bin if I need it, but until I do Oracle can reuse the space if it wants it. Like Schrodinger&#8217;s cat the objects is both alive and dead until someone decides to peek.</p> <p>After a call to <strong><em>&#8220;purge recyclebin&#8221;</em></strong> the result changes to:</p> <pre class="brush: plain; title: ; notranslate"> WHAT MB ---------- ---------- File space 196 Free space 196 Extents 0 Segments 0 </pre> <p>On a production system you might need to issue <em><strong>&#8220;purge dba_recyclebin&#8221;</strong></em> (if you have the appropriate privilege) to resolve the apparent contradiction as the call to <em><strong>&#8220;purge recyclebin&#8221;</strong></em> applies only to objects in your own schema.</p> <p>This note was prompted by a question on the OTN database forum about contradiction between a traditional SQL statement to report free and used space and a screen dump from Enterprise Manager.  I don&#8217;t think the thread reached a firm conlusion &#8211; but apart from the potential for the recyclebin to confuse the issue, there are extra possibilities thanks to auto-extensible data files, and the Enterprise Manager&#8217;s scope for querying a complete different set of views such as <em><strong>dba_tablespace_usage_metrics</strong></em> and <em><strong>v$filespace_usage</strong></em>. In fact the EM code clearly had at least one error in it (which makes any of its results suspect) because it managed to report the critical tablespace as 390% used!</p> <p>&nbsp;</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/17126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/17126/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonathanlewis.wordpress.com&#038;blog=491988&#038;post=17126&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17126 Wed May 10 2017 08:31:27 GMT-0400 (EDT) May ODTUG News http://www.odtug.com/p/bl/et/blogaid=717&source=1 Stay up to date on all things ODTUG: Read about the ODTUG Innovation Award, Kscope17 Updates, ODTUG Community News and Upcoming ODTUG Webinars. ODTUG http://www.odtug.com/p/bl/et/blogaid=717&source=1 Tue May 09 2017 14:15:07 GMT-0400 (EDT) Its All About the DevOps Roll of the Dice http://dbakevlar.com/2017/05/devops-roll-dice/ <div id="tweetbutton6746" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Fdevops-roll-dice%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Fdevops-roll-dice%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"><p>Different combination in the game of tech create a winning roll of the dice and other times create a loss.  Better communication between teams can offer a better opportunity to deter from holes in development cycle tools, especially when DevOps is the solution you&#8217;re striving for.</p> <p>It doesn&#8217;t hurt to have a map to help guide you.  This interactive map from <a href="https://xebialabs.com/periodic-table-of-devops-tools/">XebiaLabs</a> can help offer a little clarity to the solutions, but there&#8217;s definitely some holes in multiple places that could be clarified a bit more.<br /> <iframe style="border: 0px #FFFFFF none;" src="https://xebialabs.com/periodic-table-of-devops-tools/embed/" name="Periodic Table of DevOps" width="1170px" height="620px" frameborder="1" marginwidth="0px" marginheight="0px" scrolling="no"></iframe><br /> The power of this periodic table of DevOps tools, isn&#8217;t just that they are broken up by the tool type, but that you&#8217;re able to easily filter by open source, freemium, paid or enterprise level tools.  This assists in reach the goals of your solution.  As we all get educated, I&#8217;ll focus horizontally in future posts, but today, we&#8217;ll take a vertical look at the Database Management tier and where I specialize first.</p> <h2>Apples aren&#8217;t Apfel</h2> <p>When comparisons are made, it&#8217;s common to have the inability to do apple to apples.  Focusing on the Database Management toolsets, such as Delphix, I can tell you that only Redgate I view as a competitor and this only happened recently with their introduction of SQL Clone.  The rest of the products shown don&#8217;t offer any virtualization, (our strongest feature) in their product and we consider Liquidbase and Datical partners in many use cases.</p> <p>Any tool is better than nothing, even one that helps you choose tools.  So let&#8217;s first start to discern what the &#8220;Database Management&#8221;  tools are supposed to accomplish and then create one of our own.  The overall goal appears to be version control for your database, which is a pretty cool concept.</p> <h3>DBMaestro</h3> <p>The first product on the list is something I do like because the natural &#8220;control issues&#8221; I have as a DBA.  You want to know that changes to a database occurred in a controlled, documented and organized manner.  DBMaestro allows for this and has some pretty awesome ways of doing it.  Considering that DevOps is embracing agility at an ever increasing rate, having version control capabilities that will work with both Oracle SQL Developer and Microsoft Visual Studio are highly attractive.  The versioning is still as a code change level and not at the data level, but it&#8217;s still worthy of discussion.</p> <p>That it offers all of this through a simple UI is very attractive to the newer generation of developers and DBAs will still want to be part of it.</p> <h3>Liquibase</h3> <p>This is the first of two companies we partner with that are in the list.  It&#8217;s very different from DBMaestro, as it&#8217;s the only open source in the database management products and is works with XML, JSON, SQL and other formats. You can build just about anything you require and the product has an extensive support community, so if you need to find an example, it&#8217;s pretty simple to do so online.</p> <p>I really like the fact that Liquibase takes compliance into consideration and has the capability to delay SQL transactions from performing without the approval from the appropriate responsible party.  It may not be version control of your data, but at least you can closely monitor and time out the changes to it.</p> <p>Where Liquibase partners with Delphix is that we can perform continuous delivery via Liquibase and Delphix can then version control the data tier.  We can be used for versioning, branching and refreshing from a previous snapshot if there was a negative outcome in a development or test scenario, making continuous deployment a reality without requiring &#8220;backup scripts&#8221; for the data changes.</p> <h3>Redgate SQL Control</h3> <p>Everybody love a great user interface and like most, there&#8217;s a pretty big price tag that goes along with the ease of use when adding up all the different products that&#8217;s offered.  There&#8217;s just a ton that you can do with Redgate and you can do most of it for Oracle, MSSQL and MySQL, which is way cool.  Monitor, develop, virtualize, but the main recognition that you&#8217;re getting with the periodic table for DevOps tools is for version control and comparisons.  This comes from the SQL Control product from Redgate and offers quite a full quite of products for the developer and the DBA.</p> <h3>Datical</h3> <p>This is another product that we&#8217;ve partnered with repeatedly.  The idea that we, as DBAs can review and monitor any and all changes to a database is very attractive to any IT shop. Having it simplified into a tool is incredibly beneficial to any business who wants to deliver continuously and when implemented with Delphix, then the data can be delivered as fast as the rest of the business.</p> <h3>Idera</h3> <p>Idera&#8217;s DB Change Manager can give IT a safety net to ensure that changes intended are the changes that happen in the environment.  Idera, just like many of the others on the list supports multiple database platforms, which is a keen feature of a database change control tool, but no virtualization or copy data management, (CDM) tool exists or at least, not one exists any longer.</p> <h3>Fitting in</h3> <p>So where does Delphix fit in with all of these products?  We touched on it a little bit as I mentioned each of these tools. Delphix is recognized for the ability to deploy and that it does so as part of continuous delivery is awesome, but as I stated, it&#8217;s not a direct apple to apples comparison as we not only offer versioning control, but we do so at the data level.</p> <h3>Delphix Jet Stream</h3> <p>So let&#8217;s create an example-</p> <p>We can do versioning and track changes in releases in the way of our Jet Stream product.  Jet Stream is the much loved product for our developers and testers.</p> <p>I&#8217;ve often appreciated any tool set that allowed others not only to fish instead of me fishing for them,  Offering the Developer or Tester access to the administration console meant for a DBA can only set them up to fail.</p> <p>Jet Stream&#8217;s interface is really clean and easy to use.  It has a clear left hand panel with options to access and the interaction is direct on what the user will be doing.  I can create bookmarks, naming versions, which allows me the ability to</p> <p><a href="http://dbakevlar.com/2017/05/devops-roll-dice/screen-shot-2017-05-08-at-2-09-53-pm/" rel="attachment wp-att-6754"><img class="alignnone size-large wp-image-6754" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-08-at-2.09.53-PM.png?resize=600%2C292" alt="" srcset="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-08-at-2.09.53-PM.png?resize=1024%2C499 1024w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-08-at-2.09.53-PM.png?resize=300%2C146 300w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-08-at-2.09.53-PM.png?resize=768%2C375 768w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-08-at-2.09.53-PM.png?w=1200 1200w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-08-at-2.09.53-PM.png?w=1800 1800w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <p>If a developer is using Jet Stream, they would make changes as part of a release and once complete, create a bookmark, (a snapshot in time) of their container, (A container here is made up of the database, application tier and anything else we want included that Delphix can virtualize.)</p> <p>We&#8217;ve started our new test run of a new development deployment.  We&#8217;ve made an initial book mark singing the beginning of the test and then a second bookmark to say the first set of changes were completed.</p> <p><a href="http://dbakevlar.com/2017/05/devops-roll-dice/screen-shot-2017-05-09-at-10-48-59-am/" rel="attachment wp-att-6760"><img class="alignnone size-large wp-image-6760" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.48.59-AM.png?resize=600%2C137" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.48.59-AM.png?resize=1024%2C234 1024w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.48.59-AM.png?resize=300%2C69 300w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.48.59-AM.png?resize=768%2C176 768w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.48.59-AM.png?w=1200 1200w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.48.59-AM.png?w=1800 1800w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <p>At this time, there&#8217;s a script that removes 20 rows from a table.  The check queries all verified that this is the delete statement that should remove the 20 rows in question.</p> <pre class="p1"><span class="s1">SQL&gt; delete from kinder_tbl </span><span class="s1"><span class="Apple-converted-space"> </span>where c2 like '%40%';</span> <span class="s1">143256 rows deleted.</span> SQL&gt; commit; SQL&gt; insert into kinder_tbl values (...</pre> <p class="p1">When the tester performs the release and hits this step, the catastrophic change to the data occurs.</p> <p><strong>Whoops, thats not 20 rows.</strong></p> <p>Now, the developer could grovel to the DBA to use archaic processing like flashback database or worse, import the data back into a second table and merge the missing rows, etc.  There&#8217;s a few ways to skin this cat, but what if the developer could recover the data himself?</p> <p>This developer was using Jet Stream and can simply go into the console, where they&#8217;ve been taking that extra couple seconds to bookmark each milestone during the release to the database, which INCLUDES marking the changes to the data!</p> <p><a href="http://dbakevlar.com/2017/05/devops-roll-dice/screen-shot-2017-05-09-at-10-54-55-am/" rel="attachment wp-att-6761"><img class="alignnone wp-image-6761" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.54.55-AM.png?resize=508%2C232" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.54.55-AM.png?resize=1024%2C468 1024w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.54.55-AM.png?resize=300%2C137 300w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.54.55-AM.png?resize=768%2C351 768w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.54.55-AM.png?w=1200 1200w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-09-at-10.54.55-AM.png?w=1800 1800w" sizes="(max-width: 508px) 100vw, 508px" data-recalc-dims="1" /></a></p> <p>If we inspect the bookmarks, we can see that the second of three occurred before the delete of data.  This makes it simple to use the &#8220;rewind&#8221; option, (bottom right icon next to the trash can for removing the bookmark) to revert the data changes.  Keep in mind that this will revert the database back to the point in time when the bookmark was performed, so ALL changes will be reverted to that point in time.</p> <p>Once that is done, we can verify quickly that our data is returned and no need to bother the DBA or the concern that catastrophic change to data has impacted the development or test environment.</p> <pre class="p1"><span class="s1">SQL&gt; select count(*) from kinder_tbl</span> <span class="s1"><span class="Apple-converted-space">  </span>where c2 like '%40%';</span> <span class="s1"><span class="Apple-converted-space">  </span>COUNT(*)</span> <span class="s1">----------</span> <span class="s1"><span class="Apple-converted-space">    </span>143256</span></pre> <p class="p1">I plan on going though different combinations of tools in the periodic table of DevOps tools and show what strengths and drawbacks there are to choices in implementation in upcoming posts, so until the next post, have a great week!</p> <p>&nbsp;</p> <p>&nbsp;</p> <!-- Easy Plugin for AdSense Unfiltered [count: 3 is not less than 3] --></div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/delphix/" rel="tag">Delphix</a>, <a href="http://dbakevlar.com/tag/devops/" rel="tag">DevOps</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/2017/05/devops-roll-dice/&title=Its All About the DevOps Roll of the Dice"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" 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/2017/05/devops-roll-dice/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/05/devops-roll-dice/&title=Its All About the DevOps Roll of the Dice"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/05/devops-roll-dice/&title=Its All About the DevOps Roll of the Dice"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/05/devops-roll-dice/&title=Its All About the DevOps Roll of the Dice"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/05/devops-roll-dice/#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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/10/em12c-agent-deployment-on-windows/" >Easy EM12c Agent Deployment on Windows</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/11/application-performance-monitoring-first-view/" >Application Performance Monitoring- First View</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/02/the-ten-rules-of-database-administration/" >The Ten Rules of Database Administration</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2015/10/devops-jetpack-for-developers-jetstream-setup/" >DevOps Jetpack for Developers: Jetstream Setup</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/11/removing-redundant-startuprestart-for-the-oms-service-in-windows/" >Removing Redundant Startup/Restart for the OMS Service in Windows</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/05/devops-roll-dice/">Its All About the DevOps Roll of the Dice</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/05/devops-roll-dice/">Its All About the DevOps Roll of the Dice</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6746 Tue May 09 2017 13:09:43 GMT-0400 (EDT) LEAP#292 H823 Audio Effects Chip http://blog.tardate.com/2017/05/leap292-h823-audio-effects-chip.html <p>Potted music chips! Figuring them out is half the fun;-) The H823 chip arrived in kit and so far I have been unable to find a source for the music chip alone, or indeed anything approximating a datasheet. But after a bit of tinkering, I was able to get it sussed and control it in all its 1-bit glory.. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/AudioEffectsChips/H823">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/RdeabhoCZKI" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/AudioEffectsChips/H823"><img src="http://leap.tardate.com/Electronics101/AudioEffectsChips/H823/assets/H823_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap292-h823-audio-effects-chip.html Tue May 09 2017 07:22:19 GMT-0400 (EDT) And…? Formatting in Version 4.2 http://www.thatjeffsmith.com/archive/2017/05/and-formatting-in-version-4-2/ <p>&#8220;I do not want a line break after the and statement.&#8221;</p> <p>I&#8217;ve seen this come up a few times, so let&#8217;s answer that right now.</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> <span class="nu0">1</span> <span class="kw1">FROM</span> dual <span class="kw1">WHERE</span> <span class="nu0">1</span><span class="sy0">=</span><span class="nu0">2</span> <span class="kw1">AND</span> <span class="nu0">2</span><span class="sy0">=</span><span class="nu0">3</span> <span class="kw1">AND</span> <span class="nu0">3</span><span class="sy0">=</span><span class="nu0">4</span></pre></div></div></div></div></div></div></div> <p>Default formatting changes that to</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> <span class="nu0">1</span> <span class="kw1">FROM</span> dual <span class="kw1">WHERE</span> <span class="nu0">1</span> <span class="sy0">=</span> <span class="nu0">2</span> <span class="kw1">AND</span> <span class="nu0">2</span> <span class="sy0">=</span> <span class="nu0">3</span> <span class="kw1">AND</span> <span class="nu0">3</span> <span class="sy0">=</span> <span class="nu0">4</span></pre></div></div></div></div></div></div></div> <p>This is NOT what the person asking for help wants.</p> <h3>To the Preferences!</h3> <div id="attachment_6157" style="width: 532px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/and1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/and1.png" alt="" width="522" height="495" class="size-full wp-image-6157" /></a><p class="wp-caption-text">Boolean connector&#8230;.an AND or OR for example</p></div> <p>So let&#8217;s change that and see what happens.</p> <div id="attachment_6158" style="width: 580px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/and2.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/and2.png" alt="" width="570" height="621" class="size-full wp-image-6158" /></a><p class="wp-caption-text">And&#8230;</p></div> <p>Or&#8230;</p> <div id="attachment_6159" style="width: 622px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/and3.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/and3.png" alt="" width="612" height="573" class="size-full wp-image-6159" /></a><p class="wp-caption-text">Ta-da.</p></div> <p>Speaking of OR</p> <div id="attachment_6160" style="width: 319px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/or1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/05/or1.png" alt="" width="309" height="206" class="size-full wp-image-6160" /></a><p class="wp-caption-text">Don&#8217;t use my code, it&#8217;s worthless.</p></div> <!-- Easy AdSense Unfiltered [count: 3 is not less than 3] --> thatjeffsmith http://www.thatjeffsmith.com/?p=6156 Tue May 09 2017 07:12:42 GMT-0400 (EDT) Oracle E-Business Suite APPS_NE Security Risks https://www.integrigy.com/security-resources/oracle-e-business-suite-appsne-security-risks <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>The most recent version of the Oracle E-Business Suite, Release 12.2, introduces on-line patching to reduce downtime requirements. This new technical functionality is based on Edition-based redefinition provided by the Oracle 11gR2 database. For the E-Business Suite to make use of Editioning, Oracle has added a new schema to the ‘APPS’ family – the APPS_NE schema.</p> <p>The APPS_NE schema is the owner of those objects previously owned by APPS that cannot be Editioned or in other words; the APPS_NEW is the APPS schema for the non-editioned database objects. &nbsp;</p> <p>There are several security implications with regard to APPS_NE:</p> <ul> <li>The same password must be shared among APPLSYS, APPS, and APPS_NE. The default password for APPS_NE is 'APPS.'</li> <li>APPS_NE has similar elevated system privileges to APPS (e.g. SELECT ANY TABLE), but is not identical. See the listing below for the 56 privileges granted to APPS_NE.</li> <li>APPS_NE must be logged, audited and monitored APPS_NE as you do APPS. APPS_NE needs to be added to your audit scripts and procedures as well as monitoring solutions</li> </ul> <p>The following lists summarize the system privilege differences between APPS and APPS_NE</p> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><strong>-- APPS_NE has 3 privileges APPS does not &nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;">CREATE MATERIALIZED VIEW</div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;">CREATE SEQUENCE</div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;">DROP ANY TYPE</div> <p>&nbsp;</p> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><strong>-- APPS has 18 privileges that APPS_NE does not</strong></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY PROCEDURE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER DATABASE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ANALYZE ANY DICTIONARY</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CHANGE NOTIFICATION</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY DIRECTORY</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY EDITION</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY PROCEDURE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE EXTERNAL JOB</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE JOB</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE PUBLIC DATABASE LINK</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE PUBLIC SYNONYM</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DEQUEUE ANY QUEUE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY EDITION</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY PROCEDURE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP PUBLIC SYNONYM</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ENQUEUE ANY QUEUE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>EXECUTE ANY TYPE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>MANAGE ANY QUEUE</code></div> <p style="margin-left: 40px;">&nbsp;</p> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><strong>-- APPS_NE has 56 system privileges</strong></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY CLUSTER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY INDEX</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY MATERIALIZED VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY OUTLINE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY ROLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY SEQUENCE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY TRIGGER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER ANY TYPE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER SESSION</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ALTER SYSTEM</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>ANALYZE ANY</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>COMMENT ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY CLUSTER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY CONTEXT</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY INDEX</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY MATERIALIZED VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY OUTLINE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY SEQUENCE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY SYNONYM</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY TRIGGER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY TYPE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ANY VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE DATABASE LINK</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE MATERIALIZED VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE PROCEDURE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE ROLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE SEQUENCE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE SESSION</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE SYNONYM</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE TRIGGER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE TYPE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>CREATE VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DELETE ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY CLUSTER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY CONTEXT</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY INDEX</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY MATERIALIZED VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY OUTLINE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY ROLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY SEQUENCE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY SYNONYM</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY TRIGGER</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY TYPE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>DROP ANY VIEW</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>EXECUTE ANY PROCEDURE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>GLOBAL QUERY REWRITE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>GRANT ANY ROLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>INSERT ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>LOCK ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>SELECT ANY SEQUENCE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>SELECT ANY TABLE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>UNLIMITED TABLESPACE</code></div> <div style="background-color: rgb(238, 238, 238); border: 1px solid rgb(204, 204, 204); padding: 5px 10px; margin-left: 40px; background-position: initial initial; background-repeat: initial initial;"><code>UPDATE ANY TABLE</code></div> <p>&nbsp;</p> <p>If you have any questions, please contact us at&nbsp;<a data-jsb_prepared="ifkpxuuc1w" href="mailto:info@integrigy.com" rel="noreferrer">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h2>References</h2> <ul> <li><a data-jsb_prepared="832xrlwike" href="/security-resources/oracle-e-business-suite-applsys-apps-and-appsne" rel="noreferrer">Oracle E-Business Suite APPLSYS, APPS and APPS_NE</a></li> <li>Integrigy Webinar&nbsp;<a data-jsb_prepared="bx5tx52gx6" href="http://da.integrigy.com/security-resources/new-security-features-oracle-e-business-suite-122" rel="noreferrer">New Security Features in Oracle E-Business Suite 12.2</a></li> </ul> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/oracle-e-business-suite" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle E-Business Suite</a> mmiller 576 at https://www.integrigy.com Tue May 09 2017 07:00:00 GMT-0400 (EDT) Fully unintended CPU Patch Download for Oracle WebLogic Server http://dirknachbar.blogspot.com/2017/05/fully-unintended-cpu-patch-download-for.html In case you are owning different versions of Oracle WebLogic Server, e.g. 10.3.6, 12.1.3, 12.2.1.2 and so on and you are regularly applying the Oracle Critical Patch Updates, you will have to download various different Patches.<br /><br />Mainly you will have to click through different Websites and My Oracle Support Notes until you can download the required patches.<br /><br />For this purpose I have developed a handy script, with which you can perform a fully unintended download of the latest Oracle WebLogic Server CPU Patches.<br /><br />All what you need is:<br /><ul><li>a Linux Server with Internet Connection</li><li>a My Oracle Support Login</li><li>the getMosPatch from Maris Elsins&nbsp;<a href="https://github.com/MarisElsins/getMOSPatch" target="_blank">https://github.com/MarisElsins/getMOSPatch</a></li></ul><h4>Instructions</h4>At first generate the required folder structure on your Linux Server:<br /><br /><pre class="brush:bash">root@server&gt; cd /<br />root@server&gt; mkdir -p CPU_TOOL/em_catalog<br />root@server&gt; mkdir -p CPU_TOOL/archive<br />root@server&gt; mkdir CPU_PATCHES<br /></pre><br />Create in the directory CPU_TOOL the following 2 files: <br /><b><u>patch_download.ksh</u></b> (afterwards make it executable chmod +x patch_download.ksh <br /><br /><pre class="brush:bash">#!/bin/ksh<br /># Author: Dirk Nachbar, http://dirknachbar.blogspot.com<br />#<br /># Purpose: Wrapper Script for automated Critical Patch Update<br /># download from My Oracle Suppurt (MOS)<br /># <br /># Requirements: getMOSPatch, Author: Maris Elsins<br /># Source: https://github.com/MarisElsins/getMOSPatch<br />#<br />#<br /># Parameters: -i &lt;PropertiesFile&gt; <br /># e.g.: -i mos.properties<br />#<br />#<br /># Exit Codes:<br /># - 1 = Exit Code of Usage Function<br /># - 2 = Missing Property or Value in configfile<br />#<br />#---------------------------------------------------------------------<br /><br /><br />#---------------------------------------------------------------------<br /># CONSTANTS<br />#---------------------------------------------------------------------<br /><br />MyName="$(basename $0)"<br />StartDate="$(date '+%Y-%m-%d_%H:%M:%S')"<br />LogDir=/work/logs<br />WorkDir=`pwd`<br /><br />#---------------------------------------------------------------------<br />Usage()<br />#<br /># PURPOSE: Displays the Usage of the script<br />#---------------------------------------------------------------------<br />{<br />cat &lt;&lt; EOF<br />Usage: patch_download.ksh -i &lt;ConfigFile&gt;<br /> Wrapper Script for automated Critical Patch Update<br /> download from My Oracle Support (MOS)<br /> for Oracle WebLogic Server Release 10.3.6, 12.1.x, 12.2.x<br /><br />Parameters:<br /> -i: config file with required parameters<br /><br />EOF<br />exit 1<br />}<br /><br />#---------------------------------------------------------------------<br />DoMsg()<br />#<br /># PURPOSE: Displays the TimeStamp in front of each status line<br />#---------------------------------------------------------------------<br />{<br /> if [ "${DoAppend}" = "TRUE" ]; then<br /> echo "`date +%Y-%m-%d_%H:%M:%S` `printf "%05d" $$` ${1}" | tee -a ${LogFile}<br /> else<br /> echo "`date +%Y-%m-%d_%H:%M:%S` `printf "%05d" $$` ${1}"<br /> fi<br /><br /> shift<br /><br /> while [ "${1}" != "" ]; do<br /><br /> if [ "${DoAppend}" = "TRUE" ]; then<br /> echo " ${1}" | tee -a ${LogFile}<br /> else<br /> echo " ${1}"<br /> fi<br /><br /> shift<br /> done<br />}<br /><br /><br />#---------------------------------------------------------------------<br />CheckParams()<br />#<br /># PURPOSE: Checks the input Parmeter -i<br />#---------------------------------------------------------------------<br />{<br /> if [ "${ConfigFile}" = "" ] ; then<br /> DoMsg " ERR: Missing parameter(s), the flags -i must be used."<br /> Usage<br /> fi<br />}<br /><br /><br />#---------------------------------------------------------------------<br />ReadParams()<br />#<br /># PURPOSE: Reads the Parmeters of the Configfile and validate them<br />#---------------------------------------------------------------------<br />{<br />DoMsg "Reading provided Configuration File"<br />DoMsg "..."<br /><br />TheMOSUser="$(cat ${ConfigFile} | grep -i "^MOSUser=" | head -n 1 | cut -d= -f2-)"<br />TheMOSPassword="$(cat ${ConfigFile} | grep -i "^MOSPassword=" | head -n 1 | cut -d= -f2-)"<br />TheUploadDir="$(cat ${ConfigFile} | grep -i "^UploadDir=" | head -n 1 | cut -d= -f2-)"<br /><br /> if [ "${TheMOSUser}" = "" ] ; then<br /> echo " ERR: Missing value MOSUser in the provided Config File."<br /> exit 2<br /> fi<br /><br /> if [ "${TheMOSPassword}" = "" ] ; then<br /> echo " ERR: Missing value MOSPassword in the provided Config File."<br /> exit 2<br /> fi<br /><br /> if [ "${TheUploadDir}" = "" ] ; then<br /> echo " ERR: Missing value UploadDir in the provided Config File."<br /> exit 2<br /> fi<br />}<br /><br /><br />#---------------------------------------------------------------------<br />DownloadEMCatalog()<br />#<br /># PURPOSE: Download of actual Patch List from MOS<br />#---------------------------------------------------------------------<br />{<br /><br />DoMsg "Starting to download latest Version of em_catalog.zip from My Oracle Support"<br /><br /># Cleanup the em_catalog directory from previous executions<br />rm -f ${WorkDir}/em_catalog/*.*<br /><br />TheCookieFile=/tmp/$$.cookies<br />TheEM_CatalogLogFile=${LogDir}/wget_em_catalog_download_${StartDate}.log<br /><br /># Contact updates site so that we can get SSO Params for logging in<br />SSO_Response=`wget https://updates.oracle.com/Orion/Services/download 2&gt;&amp;1|grep Location`<br /><br /># Extract request parameters for SSO<br />SSO_Token=`echo $SSO_Response| cut -d '=' -f 2|cut -d ' ' -f 1`<br />SSO_Server=`echo $SSO_Response| cut -d ' ' -f 2|cut -d 'p' -f 1,2`<br />SSO_Auth_URL=sso/auth<br />Auth_Data="ssousername=${TheMOSUser}&amp;password=${TheMOSPassword}&amp;site2pstoretoken=$SSO_Token"<br /><br />wget --post-data $Auth_Data --save-cookies=${TheCookieFile} --keep-session-cookies $SSO_Server$SSO_Auth_URL &gt;&gt; ${TheEM_CatalogLogFile} 2&gt;&amp;1<br />wget --load-cookies=${TheCookieFile} --save-cookies=${TheCookieFile} --keep-session-cookies "https://updates.oracle.com/download/em_catalog.zip" -O em_catalog.zip &gt;&gt; ${TheEM_CatalogLogFile} 2&gt;&amp;1<br /><br /># Cleanup the Cookie File<br />rm -f ${TheCookieFile}<br />rm -f auth<br /><br /># Extract the em_catalog.zip<br />unzip ${WorkDir}/em_catalog.zip -d ${WorkDir}/em_catalog/<br /><br />mv ${WorkDir}/em_catalog.zip ${WorkDir}/archive/em_catalog_${StartDate}.zip<br /><br />DoMsg "Done to download latest Version of em_catalog.zip from My Oracle Support"<br /><br />}<br /><br />#---------------------------------------------------------------------<br />#<br />DownloadPatches()<br /># PURPOSE: Download the actual Patches for Oracle WLS<br />#---------------------------------------------------------------------<br />{<br /><br /># Calculate actual Quarter Year<br />TheQYear=`echo $(date +%Y)_Q$(( ($(date +%-m)-1)/3+1 ))`<br />TheDownloadLogFile=${LogDir}/download_patches_${StartDate}.log<br />DoMsg "Starting to download Oracle WLS&nbsp;CPU's" | tee -a ${TheDownloadLogFile}<br /><br /><br /># Patch Download for WLS&nbsp;10.3.6<br />PatchNumber=`grep -B 2 "&lt;psu_bundle&gt;WLS 10.3" em_catalog/patch_recommendations.xml | grep "&lt;name&gt;" | sed -e 's,.*&lt;name&gt;\([^&lt;]*\)&lt;/name&gt;.*,\1,g'`<br /><br />ThePatchDir=${TheUploadDir}/WLS10.3.6.0/${TheQYear}/${PatchNumber}<br />mkdir -p ${ThePatchDir}<br />cd ${ThePatchDir}<br /><br />DoMsg "Downloading CPU Patch ${PatchNumber} for WLS 10.3.6" | tee ${TheDownloadLogFile}<br /><br />java -jar ${WorkDir}/getMOSPatch/getMOSPatch.jar MOSUser=${TheMOSUser} MOSPass=${TheMOSPassword} patch=${PatchNumber} regexp=.*Generic.* download=all platform=1234P &gt;&gt; ${TheDownloadLogFile}<br /><br />cd ${TheUploadDir}/WLS10.3.6.0<br />rm -f actual<br />ln -s ${ThePatchDir} actual<br />cd ${WorkDir}<br /><br /># Patch Download for WLS 12.1.2<br />PatchNumber=`grep -B 2 "&lt;psu_bundle&gt;WLS 12.1.2" em_catalog/patch_recommendations.xml | grep "&lt;name&gt;" | sed -e 's,.*&lt;name&gt;\([^&lt;]*\)&lt;/name&gt;.*,\1,g'`<br /><br />ThePatchDir=${TheUploadDir}/WLS12.1.2.0.0/${TheQYear}/${PatchNumber}<br />mkdir -p ${ThePatchDir}<br />cd ${ThePatchDir}<br /><br />DoMsg "Downloading CPU Patch ${PatchNumber} for WLS 12.1.2" | tee -a ${TheDownloadLogFile}<br /><br />java -jar ${WorkDir}/getMOSPatch/getMOSPatch.jar MOSUser=${TheMOSUser} MOSPass=${TheMOSPassword} patch=${PatchNumber} regexp=.*Generic.* download=all platform=1234P &gt;&gt; ${TheDownloadLogFile}<br /><br />cd ${TheUploadDir}/WLS12.1.2.0.0<br />rm -f actual<br />ln -s ${ThePatchDir} actual<br />cd ${WorkDir}<br /><br /># Patch Download for WLS&nbsp;12.1.3<br />PatchNumber=`grep -B 2 "&lt;psu_bundle&gt;Oracle WebLogic Server 12.1.3" em_catalog/patch_recommendations.xml | grep "&lt;name&gt;" | sed -e 's,.*&lt;name&gt;\([^&lt;]*\)&lt;/name&gt;.*,\1,g'`<br /><br />ThePatchDir=${TheUploadDir}/WLS12.1.3.0.0/${TheQYear}/${PatchNumber}<br />mkdir -p ${ThePatchDir}<br />cd ${ThePatchDir}<br /><br />DoMsg "Downloading CPU Patch ${PatchNumber} for WLS 12.1.3" | tee -a ${TheDownloadLogFile}<br /><br />java -jar ${WorkDir}/getMOSPatch/getMOSPatch.jar MOSUser=${TheMOSUser} MOSPass=${TheMOSPassword} patch=${PatchNumber} regexp=.*Generic.* download=all platform=1234P &gt;&gt; ${TheDownloadLogFile}<br /><br />cd ${TheUploadDir}/WLS12.1.3.0.0<br />rm -f actual<br />ln -s ${ThePatchDir} actual<br />cd ${WorkDir}<br /><br /># Patch Download for WLS&nbsp;12.2.1.0<br />PatchNumber=`grep -B 2 "&lt;psu_bundle&gt;Oracle WebLogic Server 12.2.1.0" em_catalog/patch_recommendations.xml | grep "&lt;name&gt;" | sed -e 's,.*&lt;name&gt;\([^&lt;]*\)&lt;/name&gt;.*,\1,g'`<br /><br />ThePatchDir=${TheUploadDir}/WLS12.2.1.0.0/${TheQYear}/${PatchNumber}<br />mkdir -p ${ThePatchDir}<br />cd ${ThePatchDir}<br /><br />DoMsg "Downloading CPU Patch ${PatchNumber} for WLS 12.2.1.0" | tee -a ${TheDownloadLogFile}<br /><br />java -jar ${WorkDir}/getMOSPatch/getMOSPatch.jar MOSUser=${TheMOSUser} MOSPass=${TheMOSPassword} patch=${PatchNumber} regexp=.*Generic.* download=all platform=1234P &gt;&gt; ${TheDownloadLogFile}<br /><br />cd ${TheUploadDir}/WLS12.2.1.0.0<br />rm -f actual<br />ln -s ${ThePatchDir} actual<br />cd ${WorkDir}<br /><br /># Patch Download for WLS&nbsp;12.2.1.1<br />PatchNumber=`grep -B 2 "&lt;psu_bundle&gt;Oracle WebLogic Server 12.2.1.1" em_catalog/patch_recommendations.xml | grep "&lt;name&gt;" | sed -e 's,.*&lt;name&gt;\([^&lt;]*\)&lt;/name&gt;.*,\1,g'`<br /><br />ThePatchDir=${TheUploadDir}/WLS12.2.1.1.0/${TheQYear}/${PatchNumber}<br />mkdir -p ${ThePatchDir}<br />cd ${ThePatchDir}<br /><br />DoMsg "Downloading CPU Patch ${PatchNumber} for WLS 12.2.1.1" | tee -a ${TheDownloadLogFile}<br /><br />java -jar ${WorkDir}/getMOSPatch/getMOSPatch.jar MOSUser=${TheMOSUser} MOSPass=${TheMOSPassword} patch=${PatchNumber} regexp=.*Generic.* download=all platform=1234P &gt;&gt; ${TheDownloadLogFile}<br /><br />cd ${TheUploadDir}/WLS12.2.1.1.0<br />rm -f actual<br />ln -s ${ThePatchDir} actual<br />cd ${WorkDir}<br /><br /># Patch Download for WLS&nbsp;12.2.1.2<br />PatchNumber=`grep -B 2 "&lt;psu_bundle&gt;Oracle WebLogic Server 12.2.1.2" em_catalog/patch_recommendations.xml | grep "&lt;name&gt;" | sed -e 's,.*&lt;name&gt;\([^&lt;]*\)&lt;/name&gt;.*,\1,g'`<br /><br />ThePatchDir=${TheUploadDir}/WLS12.2.1.2.0/${TheQYear}/${PatchNumber}<br />mkdir -p ${ThePatchDir}<br />cd ${ThePatchDir}<br /><br />DoMsg "Downloading CPU Patch ${PatchNumber} for WLS 12.2.1.2" | tee -a ${TheDownloadLogFile}<br /><br />java -jar ${WorkDir}/getMOSPatch/getMOSPatch.jar MOSUser=${TheMOSUser} MOSPass=${TheMOSPassword} patch=${PatchNumber} regexp=.*Generic.* download=all platform=1234P &gt;&gt; ${TheDownloadLogFile}<br /><br />cd ${TheUploadDir}/WLS12.2.1.2.0<br />rm -f actual<br />ln -s ${ThePatchDir} actual<br />cd ${WorkDir}<br /><br />DoMsg "Done to download Oracle WLS&nbsp;CPU's" | tee -a ${TheDownloadLogFile}<br /><br />}<br /><br />#---------------------------------------------------------------------<br /># MAIN<br />#---------------------------------------------------------------------<br /><br />ConfigFile=""<br /><br /># All required ConfigParameters are initially set to empty<br />TheMOSUser=<br />TheMOSPassword=<br /><br />while getopts i: CurOpt; do<br /> case ${CurOpt} in<br /> i) ConfigFile="${OPTARG}" ;;<br /> ?) Usage<br /> exit 1 ;;<br /> esac<br />done<br /><br />shift $((${OPTIND}-1))<br /><br />if [ $# -ne 0 ]; then<br /> Usage<br />fi<br /><br /># Check Input Params<br />CheckParams<br /><br /># Read the Params from the Config File<br />ReadParams<br /># Downloading EM Catalog zip file<br />DownloadEMCatalog<br /># Downloading the latest available Patches<br />DownloadPatches<br /><br /></pre><br /><b><u>mos.properties </u></b><br /><pre class="brush:bash"># Configuration File for Automated Critical Patch Download<br />#<br /># Author: Dirk Nachbar, http://dirknachbar.blogspot.com<br />#<br /><br /># My Oracle Support Credentials<br /><br />MOSUser=&lt;your_email&gt;<br />MOSPassword=&lt;your_mos_password&gt;<br /><br /># Upload Directory for CPU&nbsp;Patches<br /><br />UploadDir=/CPU_PATCHES<br /><br /></pre>Download the getMOSPatch.jar from&nbsp;<a href="https://github.com/MarisElsins/getMOSPatch" target="_blank">https://github.com/MarisElsins/getMOSPatch</a> and place it under /CPU_TOOL/getMOSPatch<br /><br /><pre class="brush:bash">root@server&gt; mkdir -p /CPU_TOOL/getMOSPatch<br />root@server&gt; cp /tmp/getMOSPatch.jar /CPU_TOOL/getMOSPatch<br /></pre><br />Make sure that you have a java 1.6 or higher in your PATH <br /><pre class="brush:bash">root@server&gt; which java<br />/bin/java<br />root@server&gt; java -version<br />openjdk version "1.8.0_102"<br />OpenJDK Runtime Environment (build 1.8.0_102-b14)<br />OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)</pre><h4>How does it work? </h4>The trick behind the unintended CPU download is really simple, I am using the em_catalog.zip provided by My Oracle Support, which is used by Oracle Cloud Control for the so called Offline Patching (see MOS Note <a href="https://support.oracle.com/epmos/faces/DocContentDisplay?id=1931891.1" target="_blank">https://support.oracle.com/epmos/faces/DocContentDisplay?id=1931891.1</a>) <br />In the patch_download.ksh script within the function DownloadEMCatalog() I am downloading the latest version of the em_catalog.zip, place it in the subdirectory /CPU_TOOL/em_catalog, unzip the file.<br />In the function DownloadPatches() I am using grep to identify the latest available CPU Patches for various WebLogic Server Releases within the file /CPU_TOOL/em_catalog/patch_recommendations.xml and through Maris Elsins' getMOSPatch I am downloading unintended the identified Patches, place them in the directory /CPU_PATCHES/WLS/&lt;VersionNumber&gt;/YYYY_Q[1|2|3|4] and creating a symlink on the latest CPU Patch to actual.<br /><h4>Get your Patches</h4>To download the latest available patches, simply execute following commands:<br /><br /><pre class="brush:bash">root@server&gt; cd /CPU_TOOL<br />root@server&gt; ./patch_download.ksh -i mos.properties<br /><br />2017-05-09_11:46:19 08102 Reading provided Configuration File<br />2017-05-09_11:46:19 08102 ...<br />2017-05-09_11:46:19 08102 Starting to download latest Version of em_catalog.zip from My Oracle Support<br />Archive: /CPU_TOOL/em_catalog.zip<br /> inflating: /CPU_TOOL/em_catalog/aru_products.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_releases.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_platforms.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_languages.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_product_groups.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_product_releases.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_component_releases.xml <br /> inflating: /CPU_TOOL/em_catalog/aru_targets.xml <br /> inflating: /CPU_TOOL/em_catalog/components.xml <br /> inflating: /CPU_TOOL/em_catalog/certifications.xml <br /> inflating: /CPU_TOOL/em_catalog/patch_recommendations.xml <br /> extracting: /CPU_TOOL/em_catalog/README.txt <br />2017-05-09_11:46:56 08102 Done to download latest Version of em_catalog.zip from My Oracle Support<br />2017-05-09_11:46:56 08102 Starting to download Oracle WLS&nbsp;CPU's<br />2017-05-09_11:46:57 08102 Downloading CPU Patch 25388747 for WLS 10.3.6<br />2017-05-09_11:47:39 08102 Downloading CPU Patch 22505331 for WLS 12.1.2<br />2017-05-09_11:48:07 08102 Downloading CPU Patch 25388793 for WLS 12.1.3<br />2017-05-09_11:48:34 08102 Downloading CPU Patch 25388847 for WLS 12.2.1.0<br />2017-05-09_11:48:54 08102 Downloading CPU Patch 25388843 for WLS 12.2.1.1<br />2017-05-09_11:49:18 08102 Downloading CPU Patch 25388866 for WLS 12.2.1.2<br />2017-05-09_11:49:41 08102 Done to download Oracle WLS&nbsp;CPU's<br /><br /></pre><br />Now you will find under the directory /CPU_PATCHES/WLS&lt;VersionNumber&gt;/YYYY_Q[1|2|3|4] the latest available CPU Patch for your Oracle WebLogic Server. <br />You can easily change in the mos.properties configuration file the target location for the CPU Patches to e.g. a mounted NAS drive, which you can attach to your WebLogic hosts, so that the patches are immediately available on your hosts for WebLogic Server. <br /><br /> Dirk Nachbar tag:blogger.com,1999:blog-4344684978957885806.post-4191364898088438674 Tue May 09 2017 05:58:00 GMT-0400 (EDT) BGOUG and OGh just around the corner! http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/svKex0Vxsyw/ <p><img class="size-full wp-image-7137 alignright" src="https://oracle-base.com/blog/wp-content/uploads/2017/05/bgoug.png" alt="" width="235" height="147" />Just a quick heads-up about a couple of events happening in the near future.</p> <p>First we have the <a href="http://www.bgoug.org/en/events/details/99.html">BGOUG Spring event in Pravets</a>, Bulgaria. Having missed a couple of years before the last event, I&#8217;m trying to make up by doing two events in six months. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>About a week after I get back from Bulgaria I&#8217;m off to the Netherlands for the <a href="https://www.ogh.nl/page.aspx?lang=en&amp;event=368">OGh Tech Experience 2017 at Rijtuigenloods</a>. This should be like the best bits of the <a href="https://oracle-base.com/blog/2016/06/03/amis-25-beyond-the-horizon-day-1/">AMIS</a> and <a href="https://oracle-base.com/blog/2016/06/08/ogh-oracle-dba-and-sql-celebration-day-2016/">OGh</a> events from last year rolled into one!</p> <p>If you are coming to one (or both) of the events, I&#8217;ll see you there. If not, why not? <img src="https://s.w.org/images/core/emoji/2.2.1/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/2017/05/09/bgoug-and-ogh-just-around-the-corner/">BGOUG and OGh just around the corner!</a> was first posted on May 9, 2017 at 7:57 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/svKex0Vxsyw" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7136 Tue May 09 2017 02:57:09 GMT-0400 (EDT) 12cR1 RAC Posts -- 10 : Video on Database Startup http://hemantoracledba.blogspot.com/2017/05/12cr1-rac-posts-10-video-on-database.html <div dir="ltr" style="text-align: left;" trbidi="on">I've created a short video on manually starting up a RAC database that has a PDB with two custom services. &nbsp;If a database is shutdown before the cluster is shutdown, the cluster startup does not automatically startup the database instance, so I demonstrate a manual startup.<br /><br />See the video at: &nbsp;<a href="https://youtu.be/saFvo9QhYSI">https://youtu.be/saFvo9QhYSI</a><br /><br /><br />.<br />.<br />.</div> Hemant K Chitale tag:blogger.com,1999:blog-1931548025515710472.post-7083075704958908423 Mon May 08 2017 10:38:00 GMT-0400 (EDT) LEAP#291 CD4060 Music-Light Kit http://blog.tardate.com/2017/05/leap291-cd4060-music-light-kit.html <p>Learning how to use the CD4060 14-Stage Ripple Carry Binary Counter by building a music/LED-effects kit. I’m not sure what you would actually use this for, but it is an interesting demonstration of the CD4060 14-Stage Ripple Carry Binary Counter. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/CD4060/MusicLightKit">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/oUgnn1maLc8" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/Electronics101/CD4060/MusicLightKit"><img src="http://leap.tardate.com/Electronics101/CD4060/MusicLightKit/assets/MusicLightKit_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap291-cd4060-music-light-kit.html Mon May 08 2017 09:06:24 GMT-0400 (EDT) opt_estimate https://jonathanlewis.wordpress.com/2017/05/08/opt_estimate/ <p>The <em><strong>opt_estimate</strong></em> hint is one of many that shouldn&#8217;t be used in end-user code and isn&#8217;t officially documented. Nevertheless &#8211; like so many other hints &#8211; it&#8217;s a hint that is hard to ignore when you see it floating around the code generated by the Oracle software. This note is prompted by <a href="http://twitter.com/OracleSK/status/860058841475690497"><em><strong>a twitter question</strong></em></a> from fellow Oak Table member Stefan Koehler asking the about working of the hint&#8217;s <em><strong>index_filter</strong></em> parameter. Checking my library I knew the answer was yes &#8211; so after a quick exchange on twitter I said I&#8217;d write up a short note about my example, and this is it.</p> <p>Although the hint is not one that you should use it&#8217;s worth writing this note as a reminder of the significance to index range scans of the <em><strong>access</strong></em> predicates and <em><strong>filter</strong></em> predicates that Oracle reports in the <a href="https://jonathanlewis.wordpress.com/2006/12/22/dbms_xplan-again/"><em><strong>predicate section</strong></em></a> of an execution plan.</p> <p>When a query does an index range scan it&#8217;s going to walk through a (logically) consecutive set of index leaf blocks, looking at each individual index entry in turn (and those index entries will be correctly &#8220;sorted&#8221; within the leaf block) to see if it should use the rowid it finds there to visit the table. For &#8220;perfect&#8221; use of an index Oracle may be able to identify the starting and ending positions it needs in the index and know that it should use every rowid in between to visit the table &#8211; there will no &#8220;wasted&#8221;examinations of index entries on the way; however in a query involving a multi-column index and multiple predicates Oracle might have to use predicates on the first column(s) of the index to identify the starting and ending positions, but use further predicates on later columns in the index to decide whether or not to use each index entry to visit the table.</p> <p>The predicates that Oracle can use to identify the range of leaf blocks it should visit are called <em><strong>access</strong></em> predicates, and the predicates that Oracle can use to further eliminate rowids as it walks along the leaf blocks are called <em><strong>filter</strong></em> predicates.</p> <p>The simplest way to demonstrate this is with a query of the form: <em>&#8220;Index_Column<strong>1</strong> = &#8230; and Index_Column<strong>3</strong> = &#8230;&#8221;</em>, and that&#8217;s what I&#8217;ll be using in my model:</p> <pre class="brush: plain; title: ; notranslate"> rem rem Script: opt_est_ind_filter.sql rem Author: Jonathan Lewis rem rem Last tested rem 11.2.0.4 rem 10.2.0.5 rem create table t1 nologging as with generator as ( select rownum id from dual connect by level &lt;= 1e4 ) select rownum id, mod(rownum - 1,100) n1, rownum n2, mod(rownum - 1, 100) n3, lpad(rownum,10,'0') v1, lpad('x',100,'x') padding from generator v1, generator v2 where rownum &lt;= 1e6 -- &gt; comment to bypass WordPress formatting issue ; create index t1_i1 on t1(n1,n2,n3) nologging; begin dbms_stats.gather_table_stats( ownname =&gt; user, tabname =&gt; 'T1', method_opt =&gt; 'for all columns size 1' ); end; / select leaf_blocks from user_indexes where index_name = 'T1_I1'; </pre> <p>The number of leaf blocks in the index was 3,062.</p> <p>I&#8217;ve defined <em><strong>n1</strong></em> and <em><strong>n3</strong></em> to match, and for any value between 0 and 99 there are 10,000 rows in the table where <em><strong>n1</strong></em> and <em><strong>n3</strong></em> hold that value. However, in the absence of a <a href="https://jonathanlewis.wordpress.com/?s=%22column+group%22"><em><strong>column group</strong></em></a> defined on <em><strong>(n1, n3)</strong></em>, the optimizer is going to use its standard <em>&#8220;no correlation&#8221;</em> arithmetic to decide that there are 10,000 possible combinations of <em><strong>n1</strong></em> and <em><strong>n3</strong></em>, and 100 rows per combination. Let&#8217;s see what this does for a simple query:</p> <pre class="brush: plain; title: ; notranslate"> set autotrace traceonly explain select count(v1) from t1 where n1 = 0 and n3 = 0 ; set autotrace off -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 17 | 134 (1)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 17 | | | | 2 | TABLE ACCESS BY INDEX ROWID| T1 | 100 | 1700 | 134 (1)| 00:00:01 | |* 3 | INDEX RANGE SCAN | T1_I1 | 100 | | 34 (3)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access(&quot;N1&quot;=0 AND &quot;N3&quot;=0) filter(&quot;N3&quot;=0) </pre> <p>The plan shows an index range scan where <em>n3=0</em> is used as a filter predicate and <em>n1=0</em> (with a tiny bit of extra accuracy from the <em>n3=0</em>) predicate is used as the access predicate, and the optimizer has calculated that 100 rowids will be retrieved from the index and used to find 100 rows in the table.</p> <p>The cost of the range scan is 34: The optimizer&#8217;s estimate is that the scale of the initial access to the index will be due to the predicate <em>n1 = 0</em> which is responsible for 1% of the index &#8211; giving us 3,062/100 leaf blocks (rounded up). Added to that there will be a little extra cost for the trip down the <em><strong>blevel</strong></em> of the index and a little extra for the CPU usage.</p> <p>Now let&#8217;s tell the optimizer that its cardinality estimate is out by a factor of 25 (rather than 100 we actually know it to be) in one of two different ways:</p> <pre class="brush: plain; title: ; notranslate"> prompt ============================ prompt index_scan - scale_rows = 25 prompt ============================ select /*+ qb_name(main) index(@main t1(n1, n2, n3)) opt_estimate(@main index_scan t1, t1_i1, scale_rows=25) */ count(v1) from t1 where n1 = 0 and n3 = 0 ; prompt ============================== prompt index_filter - scale_rows = 25 prompt ============================== select /*+ qb_name(main) index(@main t1(n1, n2, n3)) opt_estimate(@main index_filter t1, t1_i1, scale_rows=25) */ count(v1) from t1 where n1 = 0 and n3 = 0 ; </pre> <p>In both examples I&#8217;ve hinted the index to stop the optimizer from switching to a tablescan; but in the first case I&#8217;ve told Oracle that the entire index range scan has to be scaled up by a factor of 25 while in the second case I&#8217;ve told Oracle that its estimate due to the final filter has to be scaled up by a factor of 25. How does this affect the costs and cardinalities of the plans:</p> <pre class="brush: plain; title: ; notranslate"> ============================ index_scan - scale_rows = 25 ============================ -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 17 | 3285 (1)| 00:00:17 | | 1 | SORT AGGREGATE | | 1 | 17 | | | | 2 | TABLE ACCESS BY INDEX ROWID| T1 | 100 | 1700 | 3285 (1)| 00:00:17 | |* 3 | INDEX RANGE SCAN | T1_I1 | 2500 | | 782 (2)| 00:00:04 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access(&quot;N1&quot;=0 AND &quot;N3&quot;=0) filter(&quot;N3&quot;=0) ============================== index_filter - scale_rows = 25 ============================== -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 17 | 2537 (1)| 00:00:13 | | 1 | SORT AGGREGATE | | 1 | 17 | | | | 2 | TABLE ACCESS BY INDEX ROWID| T1 | 100 | 1700 | 2537 (1)| 00:00:13 | |* 3 | INDEX RANGE SCAN | T1_I1 | 2500 | | 34 (3)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access(&quot;N1&quot;=0 AND &quot;N3&quot;=0) filter(&quot;N3&quot;=0) </pre> <p>In both cases the cardinality estimate has gone up by a factor of 25 for the index range scan. Notice, though, that the optimizer is now suffering from cognitive dissonance &#8211; it &#8220;knows&#8221; that it&#8217;s got 2,500 rowids to use to visit the table, it &#8220;knows&#8221; there are no extra predicates to eliminate rows from the table when it gets there, but it also &#8220;knows&#8221; that it&#8217;s going to find only 100 rows. Messing around with <em><strong>opt_estimate()</strong></em> and <em><strong>cardinality()</strong></em> hints is difficult to get right.</p> <p>More significantly for the purposes of this note, are the costs. When we use the <em><strong>index_filter</strong></em> parameter the optimizer still thinks it&#8217;s going to access the same number of leaf blocks and the only correction it has to make is the number of rowids it finds in those blocks &#8211; so the index range scan cost hasn&#8217;t changed (though I supposed in some cases it might change slightly due to increased CPU costs). When we use the <em><strong>index_scan</strong></em> parameter the optimizer scales up its estimate of the number of leaf blocks (hence cost), which we can see in the figures 782 / 25 = 31.28. (Without going into the trace file and checking exact details that&#8217;s close enough to the previously reported 34 for me to think it&#8217;s allowing for 25 times the number of leaf blocks plus a chunk more CPU)</p> <h3>Conclusion</h3> <p>As I said at the outset, <em><strong>opt_estimate()</strong></em> really isn&#8217;t a hint you should be playing with, but I hope that this note has helped shed some light on the significance of access predicates and filter predicates in relation to the costs of index range scans.</p> <h3>Footnote</h3> <p>There were two significant details in the notes I had in my script. First was the frequency of the expression &#8220;it looks as if&#8221; &#8211; which is my shorthand for &#8220;I really ought to do some more tests before I publish any conclusions&#8221;; second was that my most recent testing had been on 10.2.0.5 (where the results were slightly different thanks to sampling in the statistics). Given that Stefan Koehler had mentioned 11.2.0.3 as his version I ran up an instance of 11.1.0.7 &#8211; and found that the <em><strong>index_filter</strong></em> example didn&#8217;t scale up the cardinality &#8211; so maybe his problem is a version problem.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/17121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/17121/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonhanlewis.wordpress.com&#038;blog=491988&#038;post=17121&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17121 Mon May 08 2017 03:04:30 GMT-0400 (EDT) LEAP#290 The Boldport Club PissOff http://blog.tardate.com/2017/05/leap290-the-boldport-club-pissoff.html <p>The PissOff project was a great opportunity to play with hot-air reflow in a neat circuit involving an ARM Cortex M0, audio amplifier, and an SD card. As always, <a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/PissOff">all notes, schematics and code are in the Little Electronics &amp; Arduino Projects repo on GitHub</a></p> <iframe class="youtube-embed" src="https://www.youtube.com/embed/Mg5YBKnUVIM" frameborder="0" allowfullscreen=""></iframe> <p><a href="https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/PissOff"><img src="http://leap.tardate.com/BoldportClub/PissOff/assets/PissOff_build.jpg" alt="hero_image" /></a></p> http://blog.tardate.com/2017/05/leap290-the-boldport-club-pissoff.html Sun May 07 2017 21:24:07 GMT-0400 (EDT) Consequences of stopping Oracle support https://technology.amis.nl/2017/05/07/consequences-of-stopping-oracle-support/ <p>When buying licenses for Oracle, the first year support is mostly part of the deal. After that, a Customer may decide to stop paying for the yearly technical support of the Oracle licenses. The consequences of that decision is not always clear to customers. Most <a href="http://www.oracle.com/us/corporate/pricing/olsa-ire-v122304-070683.pdf">OLSA</a>’s will contain the sentence   “<em>If you decide not to purchase technical support, you may not update any unsupported program licenses with new versions of the program</em>.”</p> <p>This is correct, but there is more to think of.  This post will cover the elements that should be considered when deciding on stopping the support.</p> <p><span id="more-44705"></span></p> <h2>Unsupported actions</h2> <p>The <a href="http://www.oracle.com/us/support/library/057419.pdf" target="_blank" rel="noopener noreferrer">Technical Support Policy</a> of Oracle clarifies a bit more of what actions a customer is not entitled to do when stopping the support:</p> <blockquote><p>Customers with unsupported programs are not entitled to download, receive, or apply updates, maintenance  releases, patches, telephone assistance, or any other technical support services for unsupported programs.</p></blockquote> <p>This means the software instantly become legacy, AND a substantial risk. The Oracle software will not be upgraded or patched, the environment  (O.S., client software, middleware, other connected software) does. With the possible effect the application might not work in the future.</p> <h2>Audit-ranking</h2> <p>However Oracle claims that the departments Support, Accountmanagement and LMS acts more or less seperated and will not share this kind of information, it is naive to assume that the decision of stopping support of (part of) the Oracle licenses has no consequences regarding the rank of the customer on LMS’s list for submitting an audit.</p> <p>&nbsp;</p> <h2>Matching Service Levels</h2> <p>The support of the license to be stopped could be part of a socalled ‘subset’. Then the following rule applies according to the Support Policy:</p> <blockquote><p>You may desupport a subset of licenses in a license set only if you agree to terminate that subset of licenses.</p></blockquote> <p>The definition of a license subset is quite a definition, but here are two examples:</p> <blockquote><p>Oracle Database Enterprise Edition with RAC, Diagnostic and Tuning Pack.</p> <p>Weblogic Suite with SOA Suite</p></blockquote> <p>So stopping support of the options is a ‘Matching Service Level’ – thing, what LMS will translate as incompliancy, and the chance that My Oracle Support is not willing to help when submitting a Service Request.</p> <p>&nbsp;</p> <p><img src="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTNNDMWfR5TBGzQkgPP_4Wbl2Keu-x4XItbDCfSKfmP2t-0V0DU" alt="Afbeeldingsresultaat voor oracle reinstatement fee" width="537" height="357" /></p> <h2>Repricing</h2> <p>Support of Oracle software is related to CSI-numbers, and there may be several CSI-numbers in one contract. And a customer may have more contracts, all with ther own negotiated discounts. The following line in the Support Policy is important when stopping support of a line-item :</p> <blockquote><p>Pricing for support is based upon the level of support and the volume of licenses for which support is ordered. In the event that a subset of licenses on a single order is terminated or if the level of support is reduced, support for the remaining licenses on that license order will be priced at <strong>Oracle&#8217;s list price for support in effect at the time of termination or reduction minus the applicable</strong> <strong>standard discount</strong>.</p></blockquote> <p>This is ‘Repricing’, also called ‘<em>Pricing following Reduction</em> ‘. So, the updated support renewal, then, would be recalculated at a less optimal discount. Ending up being no savings – just less product on support for the same costs.</p> <p>This is mostly the case of terminating a license and not for terminating support (however this is a &#8216;reduced level of support&#8217;), but it&#8217;s important to know.</p> <p>Terminating a license within a CSI-number – in stead of stopping support &#8211; is in some cases by the way not a reason for repricing. E.g. when there has been a reorganisation of contracts in the past.</p> <h2>Reinstatement</h2> <p>When a customer decides – for what reason – to reinstate the support, there will be a reinstatement-fee.</p> <p>The reinstatement fee is computed as follows:</p> <blockquote><p>a) if technical support lapsed, then the reinstatement fee is 150% of the last annual technical support fee you paid for the relevant program;</p> <p>b) if you never acquired technical support for the relevant programs, then the reinstatement fee is 150% of the net technical support fee that would have been charged</p></blockquote> <h2>Engineered Systems</h2> <p>Stopping support of a productline also has a peculiar effect on products, running on engineered systems.</p> <p>The lifecycle managment of engineered systems are maintained by so-called  ‘bundle-patches’. These bundle-patches contains patches of storage-firmware, bios-updates, o.s-updates, and .. Oracle software patches.</p> <p>So, when stopping Oracle support you still receive the database and middleware-patches through the bundle-patches, which is not allowed. And however it could be possible to not use these patches, it will break the life cycle managment of the engineered system. I don’t think this is advisable.</p> <h2>Prerequisites</h2> <p>The prerequisites of making such a decision:</p> <ul> <li>An overview of all the Oracle contracts at your firm, what seems pretty obvious, but takes quite an effort sometimes.</li> <li>An overview of what licences you are actually using, compared to what you are entitled to.</li> </ul> <h2>Recap</h2> <p>The OPEX (<em>Operational</em> of Operating Expenditures) can be decreased, in some cases substantially, but before jumping into action and conclusions, contact someone who understands the risks, and is able to look further ahead in the future, together with you.</p> <h2>Resources</h2> <p>Example OLSA: <a title="http://www.oracle.com/us/corporate/pricing/olsa-ire-v122304-070683.pdf" href="http://www.oracle.com/us/corporate/pricing/olsa-ire-v122304-070683.pdf">http://www.oracle.com/us/corporate/pricing/olsa-ire-v122304-070683.pdf</a></p> <p>Oracle Software Technical Support Policies :  <a href="http://www.oracle.com/us/support/library/057419.pdf">http://www.oracle.com/us/support/library/057419.pdf</a></p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/07/consequences-of-stopping-oracle-support/">Consequences of stopping Oracle support</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=44705 Sun May 07 2017 04:40:29 GMT-0400 (EDT) Database Administration : Dead or Alive? http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/b74tHF9Vbzk/ <p><img class="wp-image-7133 alignright" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/autopsy-2025516_640.png" alt="" width="150" height="118" />I get this type of question a lot at the moment. It&#8217;s not surprising as I&#8217;ve done a few things of late that seem to have got people a bit riled up.</p> <ul> <li>During my cloud database talks I&#8217;ve been saying things like, if you think a DBAs job is just to install, backup and patch the database, the cloud has taken your job.</li> <li>I happened to mention the <a href="/blog/2017/03/13/should-i-learn-cloud/">Oracle Cloud Apps DBA role does not exist</a>. I thought I made it clear what I was saying, but a number of readers thought I was saying they shouldn&#8217;t go to work next week as they&#8217;ve been fired.</li> <li>I&#8217;ve recently been doing some sessions with a title beginning with &#8220;Making the RDBMS relevant again&#8230;&#8221;, which suggests maybe it isn&#8217;t currently relevant.</li> </ul> <p>I&#8217;ve been doing Oracle database development and DBA work for nearly 22 years. In that time the job of an Oracle DBA has changed a lot. Despite this, having people who understand what is going on below the surface has remained in demand. If you keep trying to be an old-school DBA you are going to find yourself in a very dark place very quickly. If you keep your ear to the ground and try to move with the times there will always be a role for you. Good people always land on their feet.</p> <p>The way you move depends on your interests and the demands of your company. Some will move closer to an architecture role related to the infrastructure, which is pretty important when dealing with the cloud services, docker, DevOps, continuous deployment etc. Some will align themselves more closely to development, which is of greater importance in the new world. Others will completely move away from RDBMs into other technologies related to data or elsewhere.</p> <p>The next question is typically, &#8220;When?&#8221; I&#8217;m not saying we should all run around screaming and pulling out our hair, but we should also not turn a blind eye to the way the world is changing. I can pretty much guarantee there will be comments by people telling me I&#8217;m wrong and the DBA role will exist forever, to which I will reply, &#8220;Denial is not just a river in Africa!&#8221; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Some companies, especially those that are more development led, will transform rapidly. DevOps, continuous deployment and technologies like Docker have the power to transform a company rapidly, whether on-prem or on the cloud. In all cases, someone needs to help build and maintain the layers that contain databases and app servers, and that could be you, but I don&#8217;t see the same volume of work we currently have, because if done properly it should be a build once, deploy many approach. For some companies that are into automation, this is already a reality. Very soon it will be true for much more of us.</p> <p>Some companies will be slow in moving forward and their staff will wonder what all the fuss is about, until they apply for their next job and realise there isn&#8217;t one for them!</p> <p>Having said all that, I did an &#8220;unconference&#8221; session at OOW in 2007 called “The Oracle DBA… A dying breed?” and we&#8217;re still here now. The important point is you need to take responsibility and shape your own destiny. Don&#8217;t sit idly by an watch the world take your job. It&#8217;s easier than ever to learn new things and prepare for the future, so do it! <img src="https://s.w.org/images/core/emoji/2.2.1/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/2017/05/06/database-administration-dead-or-alive/">Database Administration : Dead or Alive?</a> was first posted on May 6, 2017 at 9:23 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/b74tHF9Vbzk" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7124 Sat May 06 2017 04:23:05 GMT-0400 (EDT) The Hello World of Machine Learning – with Python, Pandas, Jupyter doing Iris classification based on quintessential set of flower data https://technology.amis.nl/2017/05/06/the-hello-world-of-machine-learning-with-python-pandas-jupyter-doing-iris-classification-based-on-quintessential-set-of-flower-data/ <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-7.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-6.png?resize=391%2C188&#038;ssl=1" align="right" data-recalc-dims="1"></a>Plenty of articles describe this hello world of Machine Learning. I will merely list some references and personal notes &#8211; primarily for my own convenience.</p> <p>The objective is: get a first hands on exposure to machine learning &#8211; using a well known example (Iris classification) and using commonly used technology (Python). After this first step, a second step seems logical: doing the same thing with my own set of data.</p> <p>Useful Resources:</p> <ul> <li>To set up an isolated environment in which to work with Python and friends: How to Create a Linux Virtual Machine For Machine Learning Development With Python 3 (Jason Brownlee) &#8211; <a title="http://machinelearningmastery.com/linux-virtual-machine-machine-learning-development-python-3/" href="http://machinelearningmastery.com/linux-virtual-machine-machine-learning-development-python-3/">http://machinelearningmastery.com/linux-virtual-machine-machine-learning-development-python-3/</a></li> <li>To work through a well known example of machine learning using Python: Your First Machine Learning Project in Python Step-By-Step (Jason Brownlee) &#8211; <a title="http://machinelearningmastery.com/machine-learning-in-python-step-by-step/" href="http://machinelearningmastery.com/machine-learning-in-python-step-by-step/">http://machinelearningmastery.com/machine-learning-in-python-step-by-step/</a></li> <li>Machine Learning Notebook &#8211; example of step by step data analysis pipeline on Iris data set:&nbsp; <a title="https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-science-notebook/Example%20Machine%20Learning%20Notebook.ipynb" href="https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-science-notebook/Example%20Machine%20Learning%20Notebook.ipynb">https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-science-notebook/Example%20Machine%20Learning%20Notebook.ipynb</a>&nbsp;</li> </ul> <p>Starting time: 6.55 AM</p> <p>6.55 AM Download and install latest version of Oracle Virtual Box (5.1.22)</p> <p>7.00 AM Download Fedora 64-bit ISO image (<a title="https://getfedora.org/en/workstation/download/" href="https://getfedora.org/en/workstation/download/">https://getfedora.org/en/workstation/download/</a>) </p> <p>7.21 AM Create Fedora VM and install Fedora Linux on it from ISO image (create users root/root and python/python); reboot, complete installation, run dnf update (updates worth 850 MB, 1348 upgrade actions &#8211; I regret this step), install Virtual Box Guest Addition (non trivial) using this article: <a title="https://fedoramagazine.org/install-fedora-virtualbox-guest/" href="https://fedoramagazine.org/install-fedora-virtualbox-guest/">https://fedoramagazine.org/install-fedora-virtualbox-guest/</a>. </p> <p>8.44 AM Save a Snapshot of the VM to retain its fresh, mint, new car smell&nbsp; condition.</p> <p>8.45 AM Install Python environment for Machine Learning (Python plus relevant libraries; possibly install Notebook server)</p> <p>8.55 AM Save another snapshot of the VM in its current state</p> <p>now the environment has been prepared, it is time for the real action &#8211; based on the second article in the list of resources.</p> <p>10.05 AM start on machine learning notebook sample &#8211; working through Iris classification</p> <p>10.15 AM done with sample; that was quick. And pretty impressive.</p> <p>&nbsp;</p> <p>It seems the Anaconda distribution of Python may be valuable to use. I have downloaded and installed: <a title="https://www.continuum.io/downloads" href="https://www.continuum.io/downloads">https://www.continuum.io/downloads</a> . </p> <p>Note: to make the contents of a shared Host Directory available to all users</p> <blockquote> <p>cd (go to home directory of current user)</p> <p>mkdir share (in the home directory of the user)</p> <p>sudo mount -t vboxsf Downloads&nbsp; ~/share/ (this makes the shared folder called Downloads in Virtual Box Host available as directory share in guest (Fedora)</p> </blockquote> <p>Let’s see about this thing with Jupyter Notebooks (fka as IPython). Installing the Jupyter notebook is discussed here: <a title="https://github.com/rasbt/python-machine-learning-book/blob/master/code/ch01/README.md" href="https://github.com/rasbt/python-machine-learning-book/blob/master/code/ch01/README.md">https://github.com/rasbt/python-machine-learning-book/blob/master/code/ch01/README.md</a> . Since I installed Anaconda (4.3.1 for Python 3.6) I have the Jupyter app installed already.</p> <p>With the following command, I download a number of notebooks:</p> <blockquote> <p>git clone <a title="https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects" href="https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects">https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects</a></p> </blockquote> <p>Let’s try to run one.</p> <blockquote> <p>cd /home/python/Data-Analysis-and-Machine-Learning-Projects/example-data-science-notebook</p> <p>jupyter notebook &#8216;Example Machine Learning Notebook.ipynb&#8217; </p> </blockquote> <p>And the notebook opens in my browser:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-8.png?ssl=1"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-7.png?resize=510%2C289&#038;ssl=1" data-recalc-dims="1"></a></p> <p>I can run the notebook, walk through it step by step, edit the notebook’s contents and run the changed steps. Hey mum, I’m a Data Scientist!</p> <p>Oh, it’s 11.55 AM right now. </p> <p>&nbsp;</p> <p>Some further interesting reads to get going with Python, Pandas and Jupyter Notebooks &#8211; and with data:</p> <ul> <li>10 minute intro into Pandas &#8211; data analysis library for Python &#8211; <a title="http://pandas.pydata.org/pandas-docs/stable/10min.html" href="http://pandas.pydata.org/pandas-docs/stable/10min.html">http://pandas.pydata.org/pandas-docs/stable/10min.html</a></li> <li>Tutorials to get going with Pandas &#8211; <a title="http://pandas.pydata.org/pandas-docs/stable/tutorials.html" href="http://pandas.pydata.org/pandas-docs/stable/tutorials.html">http://pandas.pydata.org/pandas-docs/stable/tutorials.html</a></li> <li>Processing JSON with Python and analyzing the data as well ( Including map and heatmap) &#8211; <a title="https://www.dataquest.io/blog/python-json-tutorial/" href="https://www.dataquest.io/blog/python-json-tutorial/">https://www.dataquest.io/blog/python-json-tutorial/</a>&nbsp;</li> </ul> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/06/the-hello-world-of-machine-learning-with-python-pandas-jupyter-doing-iris-classification-based-on-quintessential-set-of-flower-data/">The Hello World of Machine Learning &#8211; with Python, Pandas, Jupyter doing Iris classification based on quintessential set of flower data</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=44702 Sat May 06 2017 02:58:43 GMT-0400 (EDT) 10 Things I Love About Tech- Python Edition http://dbakevlar.com/2017/05/10-things-love-tech-python-edition/ <div id="tweetbutton6739" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2F10-things-love-tech-python-edition%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2F10-things-love-tech-python-edition%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"><p>So since I already complained about what I hate about tech from a diversity and culture perspective, I felt I needed to explain all the things I love about tech and why I wouldn&#8217;t want to be anywhere else.</p> <p>Everyone would expect me to start with databases or virtualization, but I thought I&#8217;d keep everyone on their toes and start with my favorite programming language- PYTHON!</p> <p><a href="http://dbakevlar.com/2017/05/10-things-love-tech-python-edition/monty-python/" rel="attachment wp-att-6742"><img class="alignnone wp-image-6742" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/monty-python.gif?resize=327%2C252" alt="" data-recalc-dims="1" /></a></p> <p><strong>1.Timed Pauses, Stops and Waits</strong></p> <p>Sometimes systems are just too fast for humans.  It&#8217;s important to have proper delays between tasks so that people are able to interact or systems are able to respond to each other in the proper amount of time.  This is where the &#8220;sleep&#8221; command comes in.  Just like in Bash shell, sleep is used to tell a command to wait:</p> <pre><span class="nd">@logged</span><span class="p">(</span><span class="s2">"%b </span><span class="si">%d</span><span class="s2"> %Y - %H:%M:%S"</span><span class="p">)</span> <span class="k">def</span> <span class="nf">add2</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="k">return</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span></pre> <p>The command above translates to &#8220;Time to sleep [in seconds] and then proceed with the next command[s].&#8221;  This comes in handy as you time out spaces between tasks and is a common command you&#8217;ll see in any python program.</p> <p><strong>2. Context Managers</strong></p> <p>The ability to write to files or create scripts dynamically is an important one in any programming language.  We write and append to files as needed and this is something we can do with Python using context management.  Simply open a file, write to it and then remember to close it afterwards, (which I didn&#8217;t add</p> <pre>&gt;&gt;&gt;file = open(“/var/testfile.txt”,”w”)    &gt;&gt;&gt;file.write(“#Fix File Script”)  &gt;&gt;&gt;file.write(“mv /var/testfile.txt /usr/mvfile.sh”)  &gt;&gt;&gt;file.write(“chmod 774 /var/testfile.txt”)  &gt;&gt;&gt;file.write(“exit”)    &gt;&gt;&gt;file.close()</pre> <p><strong>3.  Generators</strong></p> <p>As DBAs, we understand the value of a sequence.  We use them all the time in databases and create them with the simple command:</p> <pre xml:space="preserve">CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;</pre> <p>In programming languages, often its just as easy and with Python, we&#8217;re able to do all kinds of tasks via a function in a sequential manner.  There are distinct requirements to use a generator, but one of them is to use the word yield, as each function call must yield a value of some sort.</p> <pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">f</span><span class="p">(): </span>... <span class="nb">print</span><span class="p">(</span><span class="s2">"-- Ready --"</span><span class="p">) </span>... <span class="k">yield</span> 1 ... <span class="nb">print</span><span class="p">(</span><span class="s2">"-- Set --"</span><span class="p">) </span>... <span class="k">yield</span> 2 ... <span class="nb">print</span><span class="p">(</span><span class="s2">"-- Go --"</span><span class="p">) ... yield 3 </span>&gt;&gt;&gt; <span class="n">gen</span> <span class="o">=</span> <span class="n">f</span><span class="p">() </span>&gt;&gt;&gt; <span class="nb">next</span><span class="p">(</span><span class="n">gen</span><span class="p">) </span>-- Ready -- 1 &gt;&gt;&gt; <span class="nb">next</span><span class="p">(</span><span class="n">gen</span><span class="p">) </span>-- Set -- 2 &gt;&gt;&gt; <span class="nb">next</span><span class="p">(</span><span class="n">gen</span><span class="p">) </span>-- Go -- 3</pre> <p>Each of the yield values are stored in the object created by this function.  As you can see, this could be a bit cumbersome, so how can we do it in a simpler manner with Python?</p> <p><strong>4.  Iterators</strong></p> <p>Another way to perform something sequentially and simply, is to use an iterator.  While the iterator can save us a lot of time by building out from a list-</p> <pre><span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span> &gt;&gt;&gt; <span class="nb">iter&l/span><span class="p">(</span><span class="n">f</span><span class="p">) </span>&lt;...iterator object at ...&gt; &gt;&gt;&gt; <span class="n">f</span><span class="o">.</span><span class="n">__iter__</span><span class="p">() </span></pre> <p>We can save even more time by using a file as an iterator.  Yes, you heard me-  The file is the iterator and at no time does it create a separate object.  Keep in mind, only sequential access with a single thread is allowed here, too.</p> <div class="highlight-default"> <div class="highlight"> <pre><span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'/home/python/dbakevlar/file.txt'</span><span class="p">) </span>&gt;&gt;&gt; <span class="n">f</span> <span class="ow">is</span> <span class="n">f</span><span class="o">.</span><span class="n">__iter__</span><span class="p">() </span>True</pre> <div class="newline"><strong>5.  Replacing Values</strong></div> <div class="newline">Sometimes what data is shown, isn&#8217;t the data you want returned.  This is pretty easy to change in Python and why its such a common language to use.</div> <div class="newline"></div> </div> <pre class="newline"><span class="hljs-meta">&gt;&gt;&gt; local</span> = [80031, 80204, 80221] <span class="hljs-meta">&gt;&gt;&gt; "Westminster","Denver","Aurora"</span> = local <span class="hljs-meta">&gt;&gt;&gt; Westminster</span> <span class="hljs-number">80031</span> <span class="hljs-meta">&gt;&gt;&gt; Denver</span> <span class="hljs-number">80204</span> <span class="hljs-meta">&gt;&gt;&gt; Aurora</span> <span class="hljs-number">80221</span></pre> <div class="newline"></div> <div class="highlight"> <div class="newline"><strong>6.  Decorator Function</strong></div> <div class="newline">No, this doesn&#8217;t mean we all become Martha Stewart, but these are gorgeous functions that make it easy to do a lot with very little.  In Python, decorators are functions (or objects that can be called) that require an input of optional arguments, a function or class, and return a function or class.</div> </div> </div> <div class="newline"> <p>&nbsp;</p> <pre class="lang-py prettyprint prettyprinted"><code><span class="kwd">from inspect import</span><span class="pln"> getargspec as gas </span><span class="kwd">def</span><span class="pln"> decorate</span><span class="pun">(</span><span class="pln">fn</span><span class="pun">):</span><span class="pln"> argspec </span><span class="pun">=</span><span class="pln"> gas</span><span class="pun">(</span><span class="pln">fn</span><span class="pun">)</span><span class="pln"> scd_argname </span><span class="pun">=</span><span class="pln"> argspec</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span> <span class="kwd">def</span><span class="pln"> inner</span><span class="pun">(*</span><span class="pln">args</span><span class="pun">,</span> <span class="pun">**</span><span class="pln">kwargs</span><span class="pun">):</span><span class="pln"> special_value </span><span class="pun">=</span> <span class="pun">(</span><span class="pln">kwargs</span><span class="pun">[scd</span><span class="pln">_argname</span><span class="pun">]</span> <span class="kwd">if</span><span class="pln"> scd_argname </span><span class="kwd">in</span><span class="pln"> kwargs </span><span class="kwd">else</span><span class="pln"> args</span><span class="pun">[</span><span class="lit">1</span><span class="pun">])</span> <span class="kwd">if</span><span class="pln"> special_value </span><span class="pun">==</span> <span class="lit">2</span><span class="pun">:</span> <span class="kwd">print</span> <span class="str">"nada"</span> <span class="kwd">else</span><span class="pun">:</span> <span class="kwd">print</span> <span class="str">"nada happening"</span> <span class="kwd">return</span><span class="pln"> fn</span><span class="pun">(*</span><span class="pln">args</span><span class="pun">,</span> <span class="pun">**</span><span class="pln">kwargs</span><span class="pun">)</span> <span class="kwd">return</span><span class="pln"> inner </span><span class="lit">@decorate</span> <span class="kwd">def</span><span class="pln"> nada</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="lit">3</span><span class="pun">):</span> <span class="kwd">pass</span> <span class="pun">nada(</span><span class="lit">1</span><span class="pun">,</span><span class="lit">2</span><span class="pun">,</span><span class="lit">3</span><span class="pun">)</span> <span class="pun">nada(</span><span class="lit">1</span><span class="pun">,</span><span class="pln">b</span><span class="pun">=</span><span class="lit">2</span><span class="pun">,</span><span class="pln">c</span><span class="pun">=</span><span class="lit">4</span><span class="pun">)</span> <span class="pun">nada(</span><span class="lit">1</span><span class="pun">,</span><span class="lit">3</span><span class="pun">,</span><span class="lit">5</span><span class="pun">)</span> <span class="pun">nada(</span><span class="lit">1</span><span class="pun">,</span><span class="pln">b</span><span class="pun">=</span><span class="lit">6</span><span class="pun">,</span><span class="pln">c</span><span class="pun">=</span><span class="lit">5</span><span class="pun">)</span></code></pre> </div> <div class="highlight-default"> <div class="newline">Note that nada can return the correct values depending on the arguments and is as flexible as we need it to be for a given program, wrapping functions inside another function.</div> <div class="newline"></div> <div class="newline"><strong>7.  Unpacking with a Range</strong></div> <div class="newline">So I&#8217;ve decided I&#8217;m working with a range of 10, but I&#8217;ll have a set to the first value of 10, (which starts with 0, not 1, peeps) and then B can be anywhere in the range:</div> <div class="newline"></div> </div> <pre class="newline">&gt;&gt;&gt; a, *rest, b = range(10) &gt;&gt;&gt; a 0 &gt;&gt;&gt; b 9 &gt;&gt;&gt; rest [1, 2, 3, 4, 5, 6, 7, 8]</pre> <div class="newline"></div> <div class="newline">We could also just say we have b that&#8217;s a value anywhere in our range:</div> <div class="newline"></div> <pre class="newline">&gt;&gt;&gt; *rest, b = range(10) &gt;&gt; rest [0, 1, 2, 3, 4, 5, 6, 7, 8] &gt;&gt;&gt; b 9</pre> <div class="newline"></div> <div class="highlight-default"> <div class="newline"><strong>8. Reversing Any String</strong></div> <div class="newline">Sometimes you just need to reverse what you see.  Now for reversing searches on zipcodes, it&#8217;s very valuable to search by reversing the zipcode and index to remove &#8220;hot spots&#8221; on location searches.  The ability to reverse data easily in Python can ease this:</div> <div class="newline"></div> </div> <pre class="newline"><span class="hljs-meta">&gt;&gt;&gt; Geocode</span> = <span class="hljs-string">"80031"</span> <span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">print</span> a[::<span class="hljs-number">-1</span>] 13008</pre> <div class="newline"></div> <div class="highlight-default"> <div class="newline"></div> <div class="newline"><strong>9. Named String Formatting</strong></div> <div class="newline">Formatting of text is quite simple in Python.  There&#8217;s not a lot of complicated additions, just give a few parameter names and go!</div> </div> <div class="newline"> <pre><span class="k">print</span><span class="p">(</span><span class="s2">"The </span><span class="si">%(foo)s</span><span class="s2"> is </span><span class="si">%(bar)i</span><span class="s2">."</span> <span class="o">%</span> <span class="p">{</span><span class="s1">'foo'</span><span class="p">:</span> <span class="s1">'answer'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">:</span><span class="mi">42</span><span class="p">})</span></pre> </div> <div class="newline">The answer is always 42&#8230; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></div> <div class="newline"></div> <div class="highlight-default"> <div class="newline"><strong>10.  Cool Mathematic Functions:</strong></div> <pre class="newline">math.gcd(a)</pre> </div> <div class="newline">Return the greatest common divisor, (GCD) for the value provided.</div> <div class="newline"></div> <div class="highlight-default"> <pre class="newline">math.isfinite(b)</pre> <dl class="function"> <dd>Return TRUE if x is neither an infinity nor a Not a Number, (NaN), otherwise FALSE.  Interesting enough, 0.0 is considered finite.</dd> </dl> </div> <pre><span class="nb">min</span><span class="p">(a</span><span class="p">),</span> <span class="nb">max</span><span class="p">(b</span><span class="p">)</span></pre> <div class="highlight-default"> <p>Just as you would expect, these functions return the min and the max values for what is shown.</p> <p>There are a lot more ways that make Python my favorite language to teach anyone just coming into programming, but it&#8217;s also robust enough to support an enterprise environment, too.</p> <div class="newline">If you&#8217;d like to learn more, I really like the tutorials and slides from the following sites:</div> <div class="newline"><a href="https://docs.python.org/3/howto/functional.html">Functional Programming with Python</a></div> <div class="newline"><a href="http://www.dabeaz.com/coroutines/">Generators from David Beazley</a></div> <div class="newline"><a href="https://wiki.python.org/moin/PythonDecorators">Python Wiki on Decorators</a></div> <div class="newline"></div> </div> <p>&nbsp;</p> <!-- Easy Plugin for AdSense Unfiltered [count: 3 is not less than 3] --></div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/python/" rel="tag">Python</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/2017/05/10-things-love-tech-python-edition/&title=10 Things I Love About Tech- Python Edition"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" border="0" align="absmiddle" data-recalc-dims="1"> </a> </td><td align="center" width="177%" valign="top"> <span class="sb_title">Facebook</span><br> <a href="http://www.facebook.com/share.php?u=http://dbakevlar.com/2017/05/10-things-love-tech-python-edition/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/05/10-things-love-tech-python-edition/&title=10 Things I Love About Tech- Python Edition"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/05/10-things-love-tech-python-edition/&title=10 Things I Love About Tech- Python Edition"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/05/10-things-love-tech-python-edition/&title=10 Things I Love About Tech- Python Edition"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/05/10-things-love-tech-python-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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/02/empowering-slides-tips-powerpoint/" >Empowering Your Slides- Tips with PowerPoint</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2014/10/em12c-release-4-health-overview/" >EM12c Release 4, Health Overview</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=600" 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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/01/rmoug-2013-all-the-glory-half-the-calories-of-other-conferences/" >RMOUG 2013, All the Glory, Half the Calories of Other Conferences!</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2016/12/expanded-ace-recognition-at-rmoug-training-days/" >Expanded ACE Recognition at RMOUG Training Days</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/05/10-things-love-tech-python-edition/">10 Things I Love About Tech- Python Edition</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/05/10-things-love-tech-python-edition/">10 Things I Love About Tech- Python Edition</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6739 Fri May 05 2017 16:19:19 GMT-0400 (EDT) If at first you don’t succeed, give up? http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/HGvc3Kbc7Rk/ <p>Over the years I&#8217;ve noticed people have very different attitudes to problem resolution.</p> <p><img class="size-full wp-image-7131 alignnone" src="https://oracle-base.com/blog/wp-content/uploads/2017/05/homer-simpson-so-far-if-at-first-you-dont-succeed-give-up.jpg" alt="" width="400" height="400" /></p> <p>For some people the first hint of a problem leads them to believe what they are trying to do is impossible. I remember having a discussion with a former colleague about their solution to a problem. When I asked why they used a particular approach they said, &#8220;I tried to do it one way but it wouldn&#8217;t compile, so I used this approach instead.&#8221; I kid you not! Something as simple as a compilation failure was enough to make them lose confidence in their approach. If I changed tack every time something didn&#8217;t compile I&#8217;d never finish anything. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>When you are trying to get to grips with something new it can feel a little like you are banging your head against a brick wall at times. When it gets like that you have to take a step back and ask yourself whether you have exhausted all the possibilities. In my case, I often get into this state because I&#8217;m <a href="http://www.urbandictionary.com/define.php?term=in%20the%20weeds">in the weeds</a> and I&#8217;m rushing to complete tasks. I believe I&#8217;ve tried every possibility, but actually I&#8217;ve missed out something, or tried two things at once (to &#8220;save time&#8221;) that cancelled each other out. I have to ask myself, &#8220;What was my last good state?&#8221;, switch back to that point and start again in a more controlled and meticulous manner.</p> <p>It&#8217;s a bit like looking for &#8220;lost&#8221; keys. You convince yourself you&#8217;ve checked everywhere and can&#8217;t find them, then eventually you start from scratch and search properly, only to find them sitting on your desk in the usual place, but with a solitary piece of paper over them. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I&#8217;m not saying you should keep banging your head against a brick wall forever, but you have to learn tactics for solving problems, one of which is being honest with yourself. Have you really tried, or did you just make a quick stab at it then give up?</p> <p>If you&#8217;re a follower of the blog you may be thinking I&#8217;m going to say something about people having a passive approach to learning and not taking personal responsibility for their own development, but I&#8217;m not going to. <img src="https://s.w.org/images/core/emoji/2.2.1/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/2017/05/05/if-at-first-you-dont-succeed-give-up/">If at first you don&#8217;t succeed, give up?</a> was first posted on May 5, 2017 at 6:59 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/HGvc3Kbc7Rk" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7130 Fri May 05 2017 13:59:59 GMT-0400 (EDT) Golden Gate 12c and DIY Sequence Replication with PL/SQL https://technology.amis.nl/2017/05/05/golden-gate-12c-diy-sequence-replication-plsql/ <p>Recently, while migrating AIX 11gR2 Databases to Oracle Linux 12cR1 on an ODA X5-2, our <a href="https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/additional_config.htm#GIORA190">setup</a> of Sequence Replication by Oracle Golden Gate appeared to be faulty. The target side sequences were not automatically incremented.</p> <p>The problem came to light during the migration of acceptance databases, and under some time pressure it was devised to generate drop + create statements (<strong> <em>start with = DBA_SEQUENCES.LAST_NUMBER + DBA_SEQUENCES.INCREMENT_BY</em></strong> ) of all sequences in the Source, and to run these statements on the Target. Although this eventually resulted in the desired result, there were 2 side effects:</p> <ul> <em><strong>With a total of 1270 sequences, the operation as a whole took more than an hour.</strong></em><br /> <em><strong>Packages and triggers referencing these sequences became invalid.</strong></em></ul> <p>Further research revealed that the Golden Gate Sequence Replication of Production suffered the same problem and I wondered if I could find a better solution with now a bit more time at hand. Well, I discovered that to set any desired sequence &#8220;currval&#8221; value, a one-time temporary adjustment of the increment and subsequent call to the sequence &#8220;nextval&#8221; pseudo column is sufficient. What follows is the output of a quick test, but check out what happens with <strong><em>&#8220;USER_SEQUENCES.LAST_NUMBER&#8221;</em></strong>, and what it really means in combination with the cache.</p> <p><strong><strong>Create a test sequence</strong></strong></p> <pre class="brush: plain; title: ; notranslate"> CREATE SEQUENCE TEST_SEQ_01 START WITH 10 INCREMENT BY 1000 MINVALUE 10 CACHE 20 NOCYCLE NOORDER; -- the sequence returns no current value yet SELECT TEST_SEQ_01.CURRVAL from dual; ORA-08002: sequence TEST_SEQ_01.CURRVAL is not yet defined in this session. -- check out last_number... it equals nextval because the cache doesn't exist yet SELECT MIN_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER FROM user_sequences WHERE sequence_name = 'TEST_SEQ_01'; MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER 10 1000 20 10 -- generate the first number and create the cache SELECT TEST_SEQ_01.NEXTVAL from dual; NEXTVAL 10 -- last_number is updated as the highest possible number of the cache SELECT MIN_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER FROM user_sequences WHERE sequence_name = 'TEST_SEQ_01'; MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER 10 1000 20 20010 -- and now a current value is returned SELECT TEST_SEQ_01.CURRVAL from dual; CURRVAL 10 </pre> <p><strong><strong>Set the current sequence value = 20000 without recreating the sequence</strong></strong></p> <pre class="brush: plain; title: ; notranslate"> -- adjust the increment ALTER SEQUENCE TEST_SEQ_01 INCREMENT BY 19990; -- last_number equals the sequence next value -- the last &quot;alter sequence&quot; command must have flushed the cache SELECT MIN_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER FROM user_sequences WHERE sequence_name = 'TEST_SEQ_01'; MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER 10 19990 20 20000 -- generate the next value and create a new cache SELECT TEST_SEQ_01.NEXTVAL from dual NEXTVAL 20000 -- last_number is updated as the highest possible number of the cache SELECT MIN_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER FROM user_sequences WHERE sequence_name = 'TEST_SEQ_01'; MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER 10 19990 20 419800 -- the sequence has the desired current value SELECT TEST_SEQ_01.CURRVAL from dual CURRVAL 20000 </pre> <p><strong><strong>Reset the increment</strong></strong></p> <pre class="brush: plain; title: ; notranslate"> -- set the increment_by value back to original ALTER SEQUENCE TEST_SEQ_01 INCREMENT BY 1000; -- again, the cache is flushed and last_number equals the next value SELECT MIN_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER FROM user_sequences WHERE sequence_name = 'TEST_SEQ_01'; MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER 10 1000 20 21000 -- generate the next value and create a new cache SELECT TEST_SEQ_01.NEXTVAL from dual NEXTVAL 21000 -- last_number is updated as the highest possible numbf the cache SELECT MIN_VALUE, INCREMENT_BY, CACHE_SIZE, LAST_NUMBER FROM user_sequences WHERE sequence_name = 'TEST_SEQ_01'; MIN_VALUE INCREMENT_BY CACHE_SIZE LAST_NUMBER 10 1000 20 41000 -- the increment is back to 1000 SELECT TEST_SEQ_01.NEXTVAL from dual NEXTVAL 22000 </pre> <p>This test shows that <strong><em>&#8220;USER_SEQUENCES.LAST_NUMBER&#8221;</em></strong>:<strong><em></p> <li>Is identical with sequence &#8220;nextval&#8221; directly after a &#8220;create sequence&#8221; or &#8220;alter sequence&#8221; command, because the cache is not there yet after first definition or gets flushed with an alter. <li>Is updated and saved to disk as the highest possible cache number after a call to &#8220;nextval&#8221;.</li> <li>Serves as safeguard ( i.e. after a crash ) to ensure that sequence numbers do not conflict with numbers previously issued.</li> <p></em></strong><br /> I decided to use &#8220;DBA_SEQUENCES.LAST_NUMBER&#8221; instead of the &#8220;currval&#8221; pseudo column to compare sequences in Source and Target. The reason is that &#8220;currval&#8221; is only ( and by definition ) the value returned by my sessions last call to &#8220;nextval&#8221;. If my session has not called &#8220;nextval&#8221; yet, &#8220;currval&#8221; is undefined. So I would have to &#8220;nextval&#8221; 1270 sequences in Source and also in Target before I could even start with the comparison, while last_numbers are already there to compare with. Also, this activity is unwanted during the short inactive Source and inactive Target migration stage and would take too much time. Last but not least, an exact match of sequence &#8220;currval&#8221; values is not really necessary&#8230; a guarantee of higher sequence &#8220;currval&#8221; values in Target compared to those in Source is quite enough. </p> <p>The next short piece of code is what I eventually came up with and used in the Production migration. It took less than 3 minutes processing time, did not render any Oracle object invalid, and contributed highly to a very limited migration inactivity time.</p> <pre class="brush: plain; title: ; notranslate"> -- Code assumes: -- 1. &quot;nocycle&quot; sequences with positive &quot;increment_by&quot; values -- 2. identical number of sequences and sequence DDL in Source and Target Database -- Grant 'alter any sequence' and 'select any sequence' to the owner -- Replace the database link and schema names with your own -- Run the code from Target declare v_ret PLS_INTEGER := 0; v_dummy VARCHAR2(100); v_ln number := 0; v_ib number := 0; v_cz number := 0; v_incr number := 0; begin for i in ( select sequence_owner so , sequence_name sn , last_number ln , increment_by ib , cache_size cz from dba_sequences@&lt;DBLINK_FROM_SOURCE2TARGET&gt; where sequence_owner in ('&lt;SCHEMA01&gt;','&lt;SCHEMA02&gt;','&lt;SCHEMA03&gt;','&lt;SCHEMA04&gt;') ) loop select last_number , increment_by , cache_size into v_ln , v_ib , v_cz from dba_sequences where sequence_owner = i.so and sequence_name = i.sn; -- set the difference in last_numbers as increment if target.last_number &lt; source.last_number if v_ln &lt; i.ln then v_incr := i.ln - v_ln; -- set the cache as increment if last_numbers match elsif v_ln = i.ln then v_incr := v_ib * v_cz; end if; if v_ln &lt;= i.ln then execute immediate 'alter sequence '||i.so||'.'||i.sn||' increment by '||v_incr; execute immediate 'select '||i.so||'.'||i.sn||'.nextval from dual' into v_dummy; execute immediate 'alter sequence '||i.so||'.'||i.sn||' increment by '||v_ib; v_ret := v_ret +1; end if; end loop; dbms_output.put_line('Nr. sequences adjusted: '||v_ret); end; / </pre> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/05/golden-gate-12c-diy-sequence-replication-plsql/">Golden Gate 12c and DIY Sequence Replication with PL/SQL</a> appeared first on <a rel="nofollow" href="https://technology.amis.nl">AMIS Oracle and Java Blog</a>.</p> Harry Dragstra https://technology.amis.nl/?p=44677 Fri May 05 2017 11:58:28 GMT-0400 (EDT) BI and Reporting Kscope17 Track Highlights – Tracy McMullen http://www.odtug.com/p/bl/et/blogaid=716&source=1 Tracy McMullen, BI and Reporting Track Lead for ODTUG Kscope17, shares her top five BI and Reporting Track Sessions with reasons why they are her "don't miss sessions" at Kscope17: ODTUG http://www.odtug.com/p/bl/et/blogaid=716&source=1 Fri May 05 2017 09:54:00 GMT-0400 (EDT) remote transaction timeout http://laurentschneider.com/wordpress/2017/05/remote-transaction-timeout.html <p>If you access one table via database link and the row is locked, you may get a timeout</p> <p><pre><code> SQL&gt; update emp@l set sal=sal+1 where ename=&#039;SCOTT&#039;; 1 row updated. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt; update emp@l set sal=sal+2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where ename=&#039;SCOTT&#039;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update emp@l set sal=sal+2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR at line 1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORA-02049: timeout: distributed &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transaction waiting for lock &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORA-02063: preceding line from L &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Elapsed: 00:01:00.00 SQL&gt; sho parameter distr NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VALUE --------------------------- ------- distributed_lock_timeout&nbsp;&nbsp;&nbsp;&nbsp;60 </code></pre></p> <p>This timeout (default 60 seconds) could be tuned, maybe to 300 seconds, if you are doing huge remote transactions </p> <p>But what if you don&#8217;t want to wait one minute to get an exception? Lock the row before update then !</p> <p><pre><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt; select ename, sal from emp@l &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where ename=&#039;SCOTT&#039; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for update wait 2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select ename, sal from emp@l &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR at line 1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORA-30006: resource busy; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acquire with WAIT timeout expired &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORA-02063: preceding line from L &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Elapsed: 00:00:02.01 </code></pre></p> <p>If you want to wait only 2 seconds and not one minute, or even NOWAIT (0 second), then lock the row first. Depending on your application, waiting one minute to get an exception may be unacceptable</p> Laurent Schneider http://laurentschneider.com/?p=2442 Fri May 05 2017 09:08:13 GMT-0400 (EDT) Recommended Approach for Oracle E-Business Suite 12.2 Mobile and Web Services Security https://www.integrigy.com/security-resources/recommended-approach-oracle-e-business-suite-122-mobile-and-web-services-security <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>This is the eleventh and final posting in a blog series summarizing the new Oracle E-Business Suite 12.2 Mobile and web services functionality and recommendations for securing them.</p> <p>Deploying Internet-based Oracle E-Business Suite web services requires proper configuration of the URL Firewall, both the url_fw.conf and url_fw_ws.conf and the use of a WAF – ideally the Oracle API Gateway. This recommendation applies equally to all whose only use of web services is the Oracle Supplier Network (OSN). One opening of the attack surface exposed to the Internet exposes the entire Oracle E-Business Suite.</p> <p style="margin-left: 40px;"><img alt="" src="/files/images/EBS12-2_Recommendation.jpg" style="width: 335px; height: 225px;"></p> <p>For Mobile and Smartphone applications, due to the overall complexity and additional license requirements, it is recommended to continue using VPN for deployment instead of using an External Node.&nbsp;</p> <p style="margin-left: 40px;"><img alt="" src="/files/images/EBS12-2_Recommendation2.jpg" style="width: 333px; height: 222px;"></p> <p>If you have any questions, please contact us at <a href="mailto:info@integrigy.com">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h3>Reference</h3> <div class="grammarly-disable-indicator"> <ul> <li><a data-jsb_prepared="ykbfl5hty6" href="/security-resources/oracle-e-business-suite-mobile-and-web-services-security-0" rel="noreferrer">Oracle E-Business Suite Mobile and Web Services Security</a>&nbsp;- Integrigy Whitepaper</li> <li><a data-jsb_prepared="q6ttrgzbhv" href="/security-resources/oracle-e-business-suite-mobile-and-web-services-security" rel="noreferrer">Oracle E-Business Suite Mobile and Web Services Security</a>&nbsp;- Integrigy Webinar</li> <li><a data-jsb_prepared="k36k44qei1" href="https://support.oracle.com/rs?type=doc&amp;id=1375670.1" rel="noreferrer">Oracle E-Business Suite Release 12.2 Configuration in a DMZ</a>&nbsp;(Note 1375670.1)</li> </ul> </div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/web-services" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Web Services</a>, <a href="/tags/dmzexternal" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">DMZ/External</a>, <a href="/tags/oracle-e-business-suite" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle E-Business Suite</a> mmiller 554 at https://www.integrigy.com Fri May 05 2017 07:00:00 GMT-0400 (EDT) Smooth, easy, lightweight – Node.js and Express style REST API with Java SE https://technology.amis.nl/2017/05/04/smooth-easy-lightweight-node-js-and-express-style-rest-api-with-java-se/ <p>It is easy to be seduced by some of the attractive qualities of Node (aka Node.js) &#8211; the JavaScript technology that makes server side development fun again. Developing light weight applications that handle HTTP requests in a rapid, straightforward way with little overhead and no bloated infrastructure is easy as pie &#8211; and feels a long way from the traditional Java development. I like Node. I feel the attraction. I have used Node for simple and more complex applications. It’s cool.</p> <p>I have realized that what is so nice about Node, is also largely available with Java. Of course, there are many ways of doing Java development that is not lightweight and rapid and low overhead at all. As I am sure we can find ways to spoil Node development. More importantly, there are ways to make Java development comparably breezy as Node development. In this article I take a brief look at the development of a REST API using nothing but the [Oracle] Java Runtime and Maven as the package manager (Java’s equivalent to Node’s npm). Using the Java 8 JDK and Maven I am able to program and run a REST API from my command line, running locally on my laptop, using under two dozen lines of code. In a way to that is very similar to what I would do with Node and the Express library. The steps described below can be executed in less than 15 minutes &#8211; similar to what Node based development of this type of REST API foundation would require.</p> <p>The source code accompanying this article is in GitHub: <a title="https://github.com/lucasjellema/java-express-style-rest-api" href="https://github.com/lucasjellema/java-express-style-rest-api">https://github.com/lucasjellema/java-express-style-rest-api</a> &#8211; but it is not a lot of code at all.</p> <p><a href="https://github.com/lucasjellema/java-express-style-rest-api" target="_blank" rel="noopener noreferrer"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image.png?resize=244%2C174&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>The final result of this article is simple: a REST API running locally that handles simple GET and POST requests. The logic of the API has to be implemented (and some JSON processing may have to be added, which granted is in Java more complex than in Node) &#8211; but that is fairly evident to do.</p> <p>Here is a screenshot of Postman where the REST API is invoked:</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-1.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb.png?resize=702%2C347&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>and here is the command line for the running REST API:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-2.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-1.png?resize=682%2C81&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>The application is started with a single command line (compare to <em>npm start</em>) and listens on port 8765 on localhost to process incoming requests.</p> <p>The steps for implementing this REST API and running it locally are described below.</p> <h3>Implementation of REST API</h3> <p>Again, the only two prerequisites for these steps are: a locally installed Oracle JDK 8 (<a title="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html">http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html</a>) and Maven 3 environment (<a title="https://maven.apache.org/download.cgi" href="https://maven.apache.org/download.cgi">https://maven.apache.org/download.cgi</a>)</p> <p>1. Create scaffold for new application using Maven (compare npm init)</p> <blockquote><p>mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=nl.amis.rest -DartifactId=my-rest</p></blockquote> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-3.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-2.png?resize=702%2C301&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>2. Edit Maven&#8217;s pom.xml to add dependencies for Jersey and Jersey Container (compare package.json and npm install &#8211;save)</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-4.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-3.png?resize=462%2C241&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>Note: also add <em>build</em> section in pom.xml with explicit indication of Java 1.8 as source and target version (to ensure Lambda expressions are supported)</p> <p>&nbsp;</p> <p>3. Retrieve required libraries (jar files) using Maven (compare npm install)</p> <blockquote><p>mvn install dependency:copy-dependencies</p></blockquote> <p>This will install all required JARs into directory target\dependency &#8211; compare to node-modules in a Node application.</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-5.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-4.png?resize=580%2C292&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>4. Edit Java class App to create the most simple and straightforward http request serving application conceivable &#8211; use imports for required dependencies (compare require instructions in node application)</p> <pre class="brush: java; title: ; notranslate"> package nl.amis.rest; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpServer; public class App { private final static int port = 8765; public static void main(String[] args) throws IOException { HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); server.createContext(&quot;/app&quot;, (HttpExchange t) -&amp;gt; { byte[] response = &quot;Hello World from HttpServer&quot;.getBytes(); t.sendResponseHeaders(200, response.length); OutputStream os = t.getResponseBody(); os.write(response); os.close(); }); server.setExecutor(null); // creates a default executor server.start(); System.out.println(&quot;HTTP Server is running and listening at &quot; + server.getAddress() + &quot;/app&quot;); } } </pre> <p>&nbsp;</p> <p>and invoke it:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image-6.png?ssl=1"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/05/image_thumb-5.png?resize=244%2C111&#038;ssl=1" alt="image" border="0" data-recalc-dims="1" /></a></p> <p>5. Class App2.java builds on App2 to add the REST API capabilities &#8211; using class Api as the REST Resource (@Path Api) with the Resource Methods to handle GET and POST requests)</p> <pre class="brush: java; title: ; notranslate"> package nl.amis.rest; import java.io.IOException; import com.sun.net.httpserver.HttpServer; import java.net.URI; import javax.ws.rs.core.UriBuilder; import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory; import org.glassfish.jersey.server.ResourceConfig; public class App2 { private final static int port = 8765; private final static String host = &quot;http://localhost/app&quot;; public static void main(String[] args) throws IOException { URI baseUri = UriBuilder.fromUri(host).port(port).build(); ResourceConfig config = new ResourceConfig(Api.class); HttpServer server = JdkHttpServerFactory.createHttpServer(baseUri, config); System.out.println(&quot;HTTP Server is running and listening at &quot;+baseUri+&quot;/api&quot; ); } } </pre> <p>and</p> <pre class="brush: java; title: ; notranslate"> package nl.amis.rest; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.Request; @Path(&quot;api&quot;) public class Api { @POST @Consumes(&quot;application/json&quot;) @Produces(&quot;text/plain&quot;) public String postApiMessage(@Context Request request, String json) { System.out.println(&quot;received event:&quot; + json); return &quot;post message received &quot; + json; } @GET @Produces(&quot;text/plain&quot;) public String getApiMessage(@Context Request request) { return &quot;nothing to report from getApiMessage.&quot;; } } </pre> <p>6. Build application using Maven (this step does not really exist for node applications; programming errors come out at run time )</p> <blockquote><p>mvn package</p></blockquote> <p>This creates a JAR file &#8211; my-rest-1.0-SNAPSHOT.jar, 6 KB &#8211; that can be shipped, cloud deployed or simply executed (as in the next section)</p> <p>&nbsp;</p> <p>7. Run application which starts the REST API at <a href="http://localhost:8765">http://localhost:8765</a></p> <blockquote><p>java -cp target/my-rest-1.0-SNAPSHOT.jar;target/dependency/* nl.amis.rest.App</p> <p>or</p> <p>java -cp target/my-rest-1.0-SNAPSHOT.jar;target/dependency/* nl.amis.rest.App2</p></blockquote> <p>&nbsp;</p> <h2>Resources</h2> <p>Get URL parameters using JDK HTTP server  http://www.rgagnon.com/javadetails/java-get-url-parameters-using-jdk-http-server.html</p> <p>Example of reading headers and of downloading (PDF) file through HTTP Server: http://www.rgagnon.com/javadetails/java-have-a-simple-http-server.html</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/05/04/smooth-easy-lightweight-node-js-and-express-style-rest-api-with-java-se/">Smooth, easy, lightweight &#8211; Node.js and Express style REST API with Java SE</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=44665 Thu May 04 2017 06:28:47 GMT-0400 (EDT) JDev/ADF sample - Batch Requests Support in ADF BC REST http://andrejusb-samples.blogspot.com/2017/05/jdevadf-sample-batch-requests-support.html <div dir="ltr" style="text-align: left;" trbidi="on"><ul><li><a href="http://andrejusb.blogspot.lt/2017/05/batch-requests-support-in-adf-bc-rest.html" target="_blank">Batch Requests Support in ADF BC REST</a>. ADF BC REST provides a set of enterprise features for REST, one of them support for batch requests. In single REST batch call we can execute multiple update, insert, delete and get operations. This is important functionality, it allows to minimize number of REST calls from the client and improves client performance. Take a read about it in developer guide - <a href="http://docs.oracle.com/middleware/12212/adf/develop/GUID-589F3905-5A8D-402D-B2D2-3BEEB2D7DDD4.htm#ADFFD54207" target="_blank">22.13.7 Making Batch Requests</a>.</li></ul><ol>Download - <a href="https://github.com/abaranovskis-redsamurai/jetcrud" target="_blank">jetcrud</a></ol></div> Andrejus Baranovskis tag:blogger.com,1999:blog-4301764760924839143.post-1777802700609836643 Wed May 03 2017 10:53:00 GMT-0400 (EDT) Creating a Sandbox for Learning Node.js and Oracle Database https://jsao.io/2017/05/creating-a-sandbox-for-learning-nodejs-and-oracle-database/ <p>With Oracle Database 12.2 now available and Node.js 8 just around the corner, this is a great time to create a local sandbox for learning. Thanks to some prebuilt VMs provided by Oracle, you can have such an environment up and running in less than 20 minutes (excluding download times) without spending a dime! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f604.png" alt="😄" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br /> <span id="more-1884"></span><br /> In this post, I&#8217;ll walk you through the creation of such a sandbox. Here&#8217;s an overview of what we&#8217;ll be working through:</p> <ul> <li><a href="#install-virtualbox">Part 1: Install VirtualBox</a></li> <li><a href="#import-db-vm">Part 2: Import Database App Development VM</a></li> <li><a href="#install-nodejs-and-git">Part 3: Install Node.js and Git</a></li> <li><a href="#install-driver">Part 4: Install the Node.js Driver and Run a Test</a></li> </ul> <h4 id="install-virtualbox">Part 1: Install VirtualBox</h4> <p>The first thing you&#8217;ll want to do is install <a href="https://www.virtualbox.org/">VirtualBox 5.1 or later</a>. What is VirtualBox? From <a href="https://www.virtualbox.org/manual/ch01.html">the online documentation</a>:</p> <blockquote><p> VirtualBox is a cross-platform virtualization application. What does that mean? For one thing, it installs on your existing Intel or AMD-based computers, whether they are running Windows, Mac, Linux or Solaris operating systems. Secondly, it extends the capabilities of your existing computer so that it can run multiple operating systems (inside multiple virtual machines) at the same time. </p></blockquote> <p>VirtualBox is a great solution for this type of sandbox because we don&#8217;t have to install any software on our host operating system which would consume resources when not in use. I will not cover the installation process in any detail as it will vary depending on your host OS. Just <a href="https://www.virtualbox.org/wiki/Downloads">navigate to the downloads page</a> and download &#038; install the appropriate binaries for your OS.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries.png" rel="prettyPhoto[gallery-YE9O]"><img src="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries.png" alt="" width="802" height="169" class="alignnone size-full wp-image-1893" srcset="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries.png 802w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries-300x63.png 300w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries-768x162.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <h4 id="import-db-vm">Part 2: Import the Database App Development VM</h4> <p>Oracle provides a number of pre-built development VMs that are great for learning Oracle technology as you don&#8217;t have to muddle through complicated installs to get going. Head to<br /> <a href="http://www.oracle.com/technetwork/community/developer-vm/index.html">http://www.oracle.com/technetwork/community/developer-vm/index.html</a> and scroll down until you see the Database App Development VM.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/b-app-dev-vm-12.2.png" rel="prettyPhoto[gallery-YE9O]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2.png" alt="" width="802" height="330" class="alignnone size-full wp-image-1897" srcset="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2.png 802w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2-300x123.png 300w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2-768x316.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>Check out all the goodies in that VM! Note that Oracle Database 12.2.0.1 includes a number of enhancements for working with JSON. See the <a href="https://docs.oracle.com/database/122/ADJSN/toc.htm">Database JSON Developer&#8217;s Guide</a> for details and give them a go once the VM is up and running. </p> <p>Click the link that says <span class="inline-code">Downloads and Instructions</span>. On the next page, accept the license agreement and then click the link to download the VM.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-license-agreement.png" rel="prettyPhoto[gallery-YE9O]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-license-agreement.png" alt="" width="802" height="330" class="alignnone size-full wp-image-1900" /></a></p> <p>If you&#8217;ve not already authenticated with your Oracle account, you&#8217;ll be redirected to a page to do so before the download begins. If you don&#8217;t have an account just click the Create Account button on that page to create your free account. </p> <p>Once the download completes you&#8217;ll be ready to import the VM into VirtualBox. Open VirtualBox and click <span class="inline-code">File > Import Appliance</span>. Use the appliance import wizard to select the <span class="inline-code">DeveloperDaysVM2017-03-02_12</span> file you downloaded and click <span class="inline-code">Import</span>.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import.png" rel="prettyPhoto[gallery-YE9O]"><img src="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import.png" alt="" width="802" height="465" class="alignnone size-full wp-image-1903" srcset="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import.png 802w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import-300x174.png 300w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import-768x445.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>The import process will begin once you accept the license agreement. After a few minutes, you should see the following screen.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import.png" rel="prettyPhoto[gallery-YE9O]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import.png" alt="" width="802" height="564" class="alignnone size-full wp-image-1908" srcset="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import.png 802w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import-300x211.png 300w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import-768x540.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>If you click the <span class="inline-code">Start</span> button a new window will open up with the VM running a terminal inside (you can resize the VM window as needed). </p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running.png" rel="prettyPhoto[gallery-YE9O]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running.png" alt="" width="802" height="645" class="alignnone size-full wp-image-1911" srcset="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running.png 802w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running-300x241.png 300w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running-768x618.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>Here are a few tips to get you started inside the VM:</p> <ul> <li>The password for everthing is: <span class="inline-code">oracle</span></li> <li>Double-click the large START icon on the desktop to open a browser with labs on a variety of Oracle technology.</li> <li>To access APEX, navigate the browser to http://localhost:8080/apex. Log in using <span class="inline-code">OBE</span> for the workspace and username fields and <span class="inline-code">oracle</span> for the password.</li> <li>To be able to copy/paste things between the host and guest OS, go to the VirtualBox menu bar and select <span class="inline-code">Devices > Shared Clipboard > Bidirectional</span>. Trust me, this will come in handy!</li> </ul> <p>With the VM up and running we&#8217;re ready to install Node.js and Git.</p> <h4 id="install-nodejs-and-git">Part 3: Install Node.js and Git</h4> <p>The current <a href="https://github.com/nodejs/LTS#lts-schedule1">LTS</a> version of Node.js is v6. We&#8217;ll use that version for now but I&#8217;ll update this post when v8 is released at the end of May, 2017 as it brings async/await. Git will be used to install the Node.js driver for Oracle Database in the next step.</p> <p>Open a terminal and switch to the root user:</p> <pre class="crayon-plain-tag">su - root # password is oracle</pre> <p>Run the following commands as the root user:</p> <pre class="crayon-plain-tag">curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - yum install nodejs -y yum install git -y</pre> <p>That&#8217;s all there is to it, Node.js and Git are ready to go. On to the driver!</p> <h4 id="install-driver">Part 4: Install the Node.js Driver and Run a Test</h4> <p>Example scripts for the driver can be found at: <a href="https://github.com/oracle/node-oracledb/tree/master/examples">https://github.com/oracle/node-oracledb/tree/master/examples</a>. The easiest way to start running the examples is to use Git to clone the driver repo from GitHub. From there we can copy the examples into our own directory, change the password in <span class="inline-code">dbconfig.js</span>, install the driver, and start testing! </p> <p>Close the previously opened terminal and open a new one (user should be oracle). Then run the following commands:</p> <pre class="crayon-plain-tag">cd ~ echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib' &gt;&gt; .bashrc source .bashrc git clone https://github.com/oracle/node-oracledb.git mkdir -p projects/oracledb-examples cp node-oracledb/examples/* projects/oracledb-examples cd projects/oracledb-examples sed -i -e 's/&quot;welcome&quot;/&quot;oracle&quot;/' dbconfig.js npm install oracledb node select1.js</pre> </p> <p>Running subsequent examples only requires <span class="inline-code">node</span> followed by the name of the example you&#8217;d like to run:</p> <pre class="crayon-plain-tag">cd ~/projects/oracledb-examples node resultset1.js</pre> </p> <p>Enjoy your new sandbox!</p> danmcghan https://jsao.io/?p=1884 Wed May 03 2017 08:25:03 GMT-0400 (EDT) Ten Things I Really Hate About Tech Today http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/ <div id="tweetbutton6718" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Ften-things-really-hate-tech-today%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F05%2Ften-things-really-hate-tech-today%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"><p>I love working in tech.  I can honestly say that nothing gives me greater satisfaction than working on a technical challenge or having a brilliant conversation about technology with peers.  Other days I feel like a broken record having the same conversations with the women in technology around me, facing a lack of diversity and the consistent exclusion in tech.  Until this changes, the beatings will continue and my expression may often look similar to Alan Rickman&#8217;s below:</p> <p><a href="http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/mad_snape/" rel="attachment wp-att-6720"><img class="alignnone wp-image-6720" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/05/mad_snape.gif?resize=439%2C332" alt="" data-recalc-dims="1" /></a></p> <p><em>“Rants are good for the soul and even better for the world. Some times, some things just need to be said.” </em></p> <p><a href="https://www.delphix.com/">Delphix</a> has done an incredible job with diversity and inclusion.  They&#8217;ve actually created a Diversity Counsil, a charter and initiatives to address many of these challenges I&#8217;ve listed below.  It&#8217;s an impressive and powerful move by an incredible company.</p> <p>So for the rest of you, listen up, build a bridge, get past it and just stop doing the things on this list.  It hurts me to my core to hear that so many are still experiencing these-</p> <ol> <li><strong> Interview for Team Acceptance</strong></li> </ol> <p><em>“I’d like you to come in for a final interview to make sure you fit in with the team.”</em></p> <p>This is almost a guaranteed step in the interview process and yes, upon first view, it sounds reasonable that a manager would want to ensure a candidate worked well with their peers. This practice was first embraced in the technical field with good intentions, but it has direct correlation to limiting team diversity.</p> <p>Remember back to school- think about how each clique developed simply by how you looked, your background and your preferences? Yeah, this is exactly what continues to happen in tech- white, geeky dude clique.</p> <p>One of the things I noticed from many of the <a href="http://www.bubble-jobs.co.uk/blog/b2c/4-tips-on-acing-a-meet-the-team-interview/">articles on team interviews</a> is that they often occur in a social situation, over drinks, including beers or other alcoholic beverages. This is bound to deter from diversity in candidates who might find it uncomfortable for one reason or another and hinder them from making it to the final interview stages.</p> <p>The end result is teams with limited skills and they aren’t able to balance out for each other’s weaknesses and strengths. Often the team members are so much alike they’re unable to innovate at the level that’s required in tech.</p> <p><strong>Yo, hiring manager-</strong> kudos having the team meet the candidate, but do your job and create a team that has the diversity to weather storms, differing demands and requirements. Create a tech team that has the <a href="https://www.americanprogress.org/issues/economy/news/2012/07/12/11900/the-top-10-economic-facts-of-diversity-in-the-workplace/">diversity that will create the technology of tomorrow to serve the diverse ecosystem</a> of today.</p> <ol start="2"> <li><strong> Hurt Feelings</strong></li> </ol> <p><em>“It’s difficult working with women, they get their feelings hurt.”</em></p> <p>I don’t know how often I’ve heard this from both men and women about working with women. Don’t be surprised; if you say to me, “I don’t want to hurt your feelings…” I stop you mid-sentence and tell you it’s not my feelings you need to worry about. I’m more analytical than 90% of the people I work with and my assertiveness or passion isn&#8217;t any different than my male counterparts.</p> <p>Even <a href="http://www.cnn.com/2010/LIVING/10/25/o.glass.ego/">CNN distinguishes</a> between women’s feelings and men’s ego and yet, I know for a fact that talk of ego resonates with me more than feelings. The same ego persists for the guys that have delayed deadlines in projects or sabotaged a colleague, all because their “egos were bruised.” I think it’s easier to refer to a man’s ego than ever refer to his feelings, but let’s be honest- the situation often stems from the same source.</p> <p>Culture often dictates to people, “just stroke his ego and you’ll get along fine with him.”   We’ll often claim a bruised ego in the safety of male approval, where we brush off a woman who’s dared to claim value for herself. Instead of just asking women to toughen up and tell others to just suffer through a man’s bruised ego, tell everyone to stand down- <strong>We’re all in this together.</strong></p> <ol start="3"> <li><strong> The Silent Treatment</strong></li> </ol> <p><em>“Women fail at collaboration.”</em></p> <p>I was reading an article on <a href="https://www.forbes.com/sites/womensmedia/2014/11/28/why-women-fail-at-collaboration/2/#466d47b1543e">why women fail at collaboration</a>. If I had a dollar for every time I’ve contributed to a conversation among a group of tech guys on a forum or in a slack channel and heard nothing but crickets, well, I’d most likely be <a href="http://cdn.blessthisstuff.com/imagens/stuff/img_property_3_islands_amalfi_coast.jpg">here</a> instead of writing this post. Seriously, the same conversation, one of my male peers enters the conversation or says almost the same thing and there are a slew of responses.</p> <p>Many women mention this issue and we&#8217;re all a bit perplexed by it, but what I have gleamed so far is- ½ the folks, (both men and women) are simply observing, trying to figure the woman contributor out and the other ½ is freaked out and doesn’t know how to respond. If this continues for an extended period of time, the woman simply gives up and stops wasting her time.</p> <p>Women are still told, (not as directly as in the olden days) to not speak unless we&#8217;re spoken to.  This often creates a scenario where women end up looking for an invitation to be part of the conversation, yet we don’t offer this and when they do speak up, (I&#8217;m one of the mouthy ones) I can confirm that someone will advise her to speak less or to be more conservative. I’ve NEVER heard anyone tell a man to step back when owning a conversation.</p> <p>Even worse are those hell bent on silencing the woman in the conversation. These guys are commonly “equal-opportunity bullies” and have no doubt, they will go after men in the group they see as a threat, too. The only target identifier these guys need is a willingness to give someone else the benefit of the doubt.</p> <p>My recommendation- If you’re not engaging the women in the room- start doing so. If a woman asks a question, assume she already knows 90% of the answer, but would like to collaborate. This will eliminate 80% of our favorite hobby- &#8220;mansplaining.&#8221; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> If you’re the one who’s out to prove you’re the <a href="https://www.forbes.com/sites/johnbaldoni/2012/07/26/never-act-like-the-smartest-guy-in-the-room/#3a9a86a6797d">smartest guy in the room</a>&#8211; <strong>just stop</strong>. The only thing you&#8217;re proving to anyone is that you&#8217;re a liability to the company.</p> <ol start="4"> <li><strong> Crediting Others for a Woman’s Contributions</strong></li> </ol> <p><em>“Great Job on XXXXX &lt;female employee&gt; and &lt;male colleague that shouldn’t be listed&gt;!” </em></p> <p>There is significant concern with gaining men’s approval and we do this by ensuring men get credit for their contributions.  There is absolutely nothing wrong in recognizing what other&#8217;s accomplish. However, no one realizes how often I hear from women who’ve performed over 90% of the work on a task, project or an event, where a man has been recognized publicly as 50%-100% the contributor or even worse, men are officially offered a role that a woman&#8217;s been previously or continually fulfilling. Numerous articles can be found where <a href="https://www.bustle.com/p/9-times-men-were-given-credit-for-womens-historic-accomplishments-41120">historical innovations and discoveries</a> were credited to men either intentionally or unintentionally.</p> <p>This issue resonates with me, as I live and work an almost unheard of scenario. My husband and I not only work in the same field, we work for the same company and serve on the same board of directors. I stopped counting how often people unintentionally give Tim 50% or more credit for work I&#8217;ve contributed. My husband is a humble person and he goes out of his way to support other&#8217;s contributions repeatedly and I appreciate all he does to help me whenever he can. He was my first mentor and he&#8217;s an astounding supporter of many in the tech community.  In turn, many would recommend we <a href="https://hbr.org/2015/04/how-to-respond-when-someone-takes-credit-for-your-work">speak up</a> or assertively address when credit is incorrectly given, but we&#8217;re just as often told <a href="https://www.ellevatenetwork.com/articles/7619-how-to-stop-taking-things-personally-at-work">we&#8217;re taking it too personally</a> if we do.  Don&#8217;t ask me to provide proof that I&#8217;ve experienced it, (although, I&#8217;m still linking throughout this post) there&#8217;s signifiant examples and the outcome is either you make others look bad or someone shoots the messenger..</p> <ol start="5"> <li><strong>&#8220;Padding&#8221; The Amount of Women in High Tech with Soft Tech </strong></li> </ol> <p><em>“There’s almost 30% women in tech. That’s quite good!”</em></p> <p>This was a difficult topic to discuss, as I state elsewhere, each woman has the right and should have the respect to follow her own path.  At the same time, there&#8217;s a real issue with stats being &#8220;padded&#8221; with how many women are in tech, by supplementing high tech with soft tech.</p> <p>This often happens because even in high tech, there’s three main “factions” of women:</p> <p><strong>a.</strong>  There are the women who work in the technical industry and have been told it&#8217;s best to just avoid this debate.</p> <p><strong>b.</strong>  Second group who are inclined to make the quote above and see most discussions on the topic as negative, only allowing to focus on the positive.</p> <p><strong>c.</strong>  Third group are talking to each other and are like, “Houston, we have a problem.”</p> <p>We know the second group means well, but I&#8217;ve heard more than one WIT refer to them as the “happy/shiny people.”   I’m clearly aware of the difference in struggles between “soft tech” and “high tech.” There are some overlaps, but it’s still a very different world for those that are in recruitment and project management. Data on soft tech doesn&#8217;t show the challenges with retaining women after four years that high tech does, demonstrating that there are facets of these two areas that need to be identified.  Stating that this is proof that women aren&#8217;t interested in tech is just simplifying the situation and avoiding the data again.  Using it to dispel the focus on diversity initiatives in tech or to make it appear there are more women in high tech than there is has never sat well with me.</p> <p>Even NCWIT, (<a href="https://www.ncwit.org/">National Center of Women in Technology</a>) include Project Managers and Recruiters in with their numbers as we can see in the &#8220;Top Tech Positions&#8221; breakdown by gender:</p> <p><a href="http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/screen-shot-2017-05-01-at-1-36-07-pm/" rel="attachment wp-att-6719"><img class="wp-image-6719 aligncenter" src="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-01-at-1.36.07-PM.png?resize=285%2C179" alt="" srcset="https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-01-at-1.36.07-PM.png?resize=1024%2C643 1024w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-01-at-1.36.07-PM.png?resize=300%2C188 300w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-01-at-1.36.07-PM.png?resize=768%2C482 768w, https://i2.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-01-at-1.36.07-PM.png?w=1090 1090w" sizes="(max-width: 285px) 100vw, 285px" data-recalc-dims="1" /></a></p> <p>I think we&#8217;re all aware that if we separated high tech from soft tech, we’d see different trends and I believe it would create some interesting analysis to show how we can improve these industries for everyone involved if we did.</p> <ol start="6"> <li><strong> Demanding Women ALWAYS Agree with Other Women in Tech</strong></li> </ol> <p><em>“You’re taught </em><em>to look down on the women who have made choices that are dissimilar to yours. “</em></p> <p>When men disagree with other men in tech or business in general, it’s no big deal, but if women disagree with each other? <a href="https://www.google.com/search?q=dispering+women+in+technology+with+diversity&amp;oq=dispering+women+in+technology+with+diversity&amp;aqs=chrome..69i57.8047j0j7&amp;sourceid=chrome&amp;ie=UTF-8#q=Why+women+hate+other+women">That’s just how women</a> are according to culture. It happens in every area of business and it’s exhausting to me. Women all have their own path and this should be as acceptable as men’s. There are plenty of women I don&#8217;t agree with, but if you use bias or are unfair to any of them, I’m going to defend them as readily as anyone- <strong>plain and simple</strong>. People seem to be more than happy to try to turn women against each other-  I know I&#8217;ve been made a fool of it more than once and had to learn to not allow myself to be part of it.</p> <p>I’m proud of the women I’ve recently observed in tech and how they not only support each other, but they refuse to let other’s success detract for their own path. Another person being successful has no bearing on your own.</p> <ol start="7"> <li><strong> It’s Rough All Around</strong></li> </ol> <p><em>“It’s bad for diversity in general” or Other Ways to Dispel the Topic</em></p> <p>I rarely if ever, find this behavior between women in technology, people of color or gender diversity, but it’s commonly from someone who’s privileged in response to a conversation on women in technology. They want the originator to justify why they haven’t included other areas of diversity.</p> <p>I can’t pretend I’m a person of color or that I can represent anyone other than a white woman in technology. I will support diversity fully, but please don’t ask me to appropriate someone else’s experience. Don’t ask me to dispel my argument by not including it in my own experience. These types of comments really only serve to make the speaker and reader choose between two evils and minimize the facets of a complex issue into a single conversation. Both topics are incredibly important and deserve equal billing and not shared focus by a representative who may only fall into one category.</p> <p>Women in tech became a hot topic back in 2014- at this time, people became a bit overwhelmed by all the attention given to it. The sudden rise of women in technology often resulted in people attempting to derail it by distracting the course with claims that ignorance of diversity was reason to stop supporting the movement all together. One of my favorite organizations dropped their “Women in Tech” award for a “Talent Champion of the Year”. Women in high tech left the organization in droves.</p> <p>All the <a href="https://medium.com/projectinclude/true-diversity-is-intersectional-2282b8da8882">diversity numbers</a> just suck, so lets quit making these groups compete against each other for time.</p> <ol start="8"> <li><strong> Women Online, No Thank You</strong></li> </ol> <p><em>“I get it, you women have a hard time online…”</em></p> <p>Some days social media and online forums are a great place to be. At the same time, don’t for a minute think you understand what it’s like to have someone ask you a technical question or even 2 or 3 technical questions…to be followed by a comment about how he&#8217;d like to be with you intimately.</p> <p><a href="http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/screen-shot-2017-05-02-at-9-42-48-am/" rel="attachment wp-att-6726"><img class="alignnone wp-image-6726" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-9.42.48-AM.png?resize=422%2C182" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-9.42.48-AM.png?w=992 992w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-9.42.48-AM.png?resize=300%2C129 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-9.42.48-AM.png?resize=768%2C331 768w" sizes="(max-width: 422px) 100vw, 422px" data-recalc-dims="1" /></a></p> <p>I&#8217;m privileged- having a scenario in tech that many would appreciate.  Not only is my husband known in the industry, but he’s also been met by many folks through the years he’s spoke at conferences and taught classes. This shouldn’t matter- who I am should be enough to grant me to be treated with the same respect as my male peers, but in most cultures and as we&#8217;ve already discussed, keeping my husband’s respect is important. I can’t tell you how often the mention of my husband’s name has been necessary to remind someone that they needed to change the direction of a conversation with me.</p> <p>If you’re a single, woman in technology, you have my sincere respect. When I first entered the online tech arena, I was married, but as I started to speak and my career advanced, I divorced.  My name changed and I started to receive odd emails and experienced peers who&#8217;s interaction with me suddenly <em>changed along with my name</em>. I have to admit, I wasn’t prepared for this. I felt uncomfortable and had a difficult time understanding how their view of me could have changed with a simple change in my signature line.</p> <p>No matter what you think, <a href="http://nymag.com/scienceofus/2015/02/why-men-always-think-women-are-flirting.html">studies show that women are </a>not acting in a flirtatious manner with the men online and it&#8217;s often just a miscommunication. I think the thing we can take away from this is guys- no matter if you think there’s a chance or not, there is a bigger chance that you’re going to be that one guy to ruin the perception of men in tech for everyone else, so just don’t even think about telling a woman on Twitter, LinkedIn, tech forums, etc. what you find attractive or sexy about her, OK? We’ll all appreciate it later when we run into each other at events or she ends up being the tech lead at your next interview. <em>Not that I&#8217;ve ever had that happen first hand.</em></p> <p style="padding-left: 30px;"><strong>9.  Lean in</strong></p> <p><em>&#8220;Why aren&#8217;t there more women &lt;evangelists, politicians, CEO&#8217;s, etc.&gt;?&#8221;</em></p> <p>Its normal for me to emulate those around me.  Its what most of us do and for me, that means there&#8217;s a 95% chance I&#8217;m emulating whatever has been successful that the guys are doing.  People, there&#8217;s also a 95% chance that you will react to me doing the same assertive, ballsy, gutsy, awesome thing the guys did as aggressive, bitchy, out of line and negative.  It will often leave women confused and frustrated, trying to figure out how we&#8217;re supposed to get ahead and how to strategically maneuver in the world when what works for men doesn&#8217;t work for us.</p> <p>My male peer in the evangelism group can state his opinion about where he thinks technology is going and people applaud him for his vision, I document and link to data to show what I believe is the direction for a topic I&#8217;m considered an expert in and I&#8217;m asked to offer more proof.</p> <p>Even those that know my professional credentials still are challenged.  I complimented another speaker on their DevOps talk on social media while at a conference recently.  Someone quickly replied to me with the following tweet:</p> <p><a href="http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/screen-shot-2017-05-02-at-8-47-58-am/" rel="attachment wp-att-6724"><img class="alignnone size-full wp-image-6724" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-8.47.58-AM.png?resize=600%2C85" alt="" srcset="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-8.47.58-AM.png?w=772 772w, https://i1.wp.com/dbakevlar.com/wp-content/ploads/2017/05/Screen-Shot-2017-05-02-at-8.47.58-AM.png?resize=300%2C43 300w, https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/05/Screen-Shot-2017-05-02-at-8.47.58-AM.png?resize=768%2C109 768w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" /></a></p> <p>I had to bite my tongue to keep myself from replying, <strong>&#8220;Really??  Do, tell me more!&#8221;</strong>  The &#8220;mansplaining&#8221; wasn&#8217;t intentional, but I also hadn&#8217;t asked &#8220;Is Delphix a DevOps product?&#8221;  I had complimented ANOTHER speaker at the conference on their DevOps presentation.</p> <p>Its pretty difficult to be an evangelist when, even unintentionally, you have people repeatedly, tellingg YOU what your product does when it&#8217;s supposed to be your job to perform that task.  I&#8217;ve joked that you haven&#8217;t lived as a woman in tech until the day a guy in marketing explains technology to you. I can&#8217;t imagine how often women in politics have the bill of rights and how the branches of government function explained to them&#8230;.daily.</p> <p style="padding-left: 30px;"><strong>10.  Wasting Women&#8217;s Time</strong></p> <p><em>&#8221; Everything I asked or suggested was questioned. Clients I could do in my sleep were condescending.”</em></p> <p>While my male peers will ask a question and get an answer in return, I&#8217;ll spend more time justifying to people why I need an answer, have my questions reworded, or have more questions returned and other time wasters.  Even men who&#8217;ve experienced the challenge of being a woman in the workplace have written on these frustration, even if <a href="http://www.newsweek.com/male-and-female-coworkers-switched-email-signatures-faced-sexism-566507">only experienced in </a>an email signature.</p> <p>I have had repeated situations where a goal and/or deadline were critical, either professionally or for an organization I volunteer for and knowing that being a woman would delay or impact getting the solution in time.  I have the fortunate option to go to my husband or a male peer, sometimes be perfectly frank with them and have them take up the cause to ensure it&#8217;s done in a timely manner.  I&#8217;ve completed paperwork and written letters, but put my husband&#8217;s name on it so there wasn&#8217;t a delay with ridiculous questions or requests for proof that I knew they&#8217;d never ask from him.</p> <p>It gets down to trust.  If we question men, we&#8217;re often viewed as challenging their word and their word is their bond, truth and trust.  For some reason, we assume that women are less trustworthy and must be scrutinized at a level that a man are assumed to busy to spend the time on.</p> <p>For women, we&#8217;d better have our ducks in a row, because they&#8217;re going to be checking every feather and most likely check the next door neighbor&#8217;s pond while they&#8217;re at it.  I have made it a point-  if you waste my time, the first time, I give you a break, the second time, I will go out of my way to work with someone else who values my time and that of the company I represent more.</p> <p><strong>Rant over.</strong></p> <p>&nbsp;</p> <p>&nbsp;</p> <!-- Easy Plugin for AdSense Unfiltered [count: 3 is not less than 3] --></div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/technology/" rel="tag">Technology</a>, <a href="http://dbakevlar.com/tag/women-in-tech/" rel="tag">Women in Tech</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/2017/05/ten-things-really-hate-tech-today/&title=Ten Things I Really Hate About Tech Today"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" 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/2017/05/ten-things-really-hate-tech-today/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/05/ten-things-really-hate-tech-today/&title=Ten Things I Really Hate About Tech Today"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/05/ten-things-really-hate-tech-today/&title=Ten Things I Really Hate About Tech Today"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/05/ten-things-really-hate-tech-today/&title=Ten Things I Really Hate About Tech Today"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/05/ten-things-really-hate-tech-today/#comments">5 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=600" 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=600" 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><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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2011/01/new-environments-new-dba-crushes/" >New Environments, New DBA Crushes...</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/10/abstracts-reviews-and-conferences-oh-my/" >Abstracts, Reviews and Conferences, Oh My!</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/04/oracle-sql-server-index-comparison/" >Oracle and SQL Server Index Comparison</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/">Ten Things I Really Hate About Tech Today</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/05/ten-things-really-hate-tech-today/">Ten Things I Really Hate About Tech Today</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6718 Tue May 02 2017 12:08:18 GMT-0400 (EDT) Oracle E-Business Suite APPLSYS, APPS and APPS_NE https://www.integrigy.com/security-resources/oracle-e-business-suite-applsys-apps-and-appsne <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>The evolution of the Oracle E-Business Suite since its inception in the late 1980s has gone through many significant changes. For example, I can personally remember in the late 1990s upgrading clients to release 10.5 of the E-Business Suite with the big change being the introduction of the APPS schema.</p> <p>The introduction of the APPS schema greatly simplified the technical interdependencies of the then 40+ applications of&nbsp;Release 10.5 of the E-Business Suite. The most recent version of the Oracle E-Business Suite, Release 12.2, with 200+ modules, introduces on-line patching to reduce downtime requirements. This new technical functionality is based on Edition-based Redefinition provided by the Oracle 11gR2 database. For the E-Business Suite to make use of Editioning, Oracle has added a new schema to the ‘APPS’ family – the APPS_NE schema.</p> <p>The APPS_NE schema is the owner of those objects previously owned by APPS that cannot be Editioned or in other words; the APPS_NE&nbsp;is the APPS schema for the non-editioned APPS foundation&nbsp;database objects. &nbsp;APPS_NE has similar elevated system privileges to APPS (e.g. SELECT ANY TABLE), but is not identical. The same password must be shared among APPLSYS, APPS, and APPS_NE. The default password for APPS_NE is 'APPS.'</p> <div style="margin-left: 40px;"><code>--This&nbsp;SQL gives a high-level summary of the difference between APPS and APPS_NE</code></div> <div style="margin-left: 40px;"><code>SELECT OWNER, OBJECT_TYPE, COUNT(*)</code></div> <div style="margin-left: 40px;"><code>FROM DBA_OBJECTS</code></div> <div style="margin-left: 40px;"><code>WHERE OWNER = 'APPS_NE'</code></div> <div style="margin-left: 40px;"><code>GROUP BY OWNER, OBJECT_TYPE</code></div> <div style="margin-left: 40px;"><code>UNION</code></div> <div style="margin-left: 40px;"><code>SELECT OWNER, OBJECT_TYPE, COUNT(*)</code></div> <div style="margin-left: 40px;"><code>FROM DBA_OBJECTS</code></div> <div style="margin-left: 40px;"><code>WHERE OWNER = 'APPS'</code></div> <div style="margin-left: 40px;"><code>GROUP BY OWNER,OBJECT_TYPE</code></div> <div style="margin-left: 40px;"><code>ORDER BY 1,3 DESC;</code></div> <div>&nbsp;</div> <div>The table below is a high-level summary of the APPS schemas.</div> <div>&nbsp;</div> <div> <table border="1" cellpadding="0" cellspacing="0"> <tbody> <tr> <td colspan="2" style="width:590px;"> <p align="center"><strong>Oracle E-Business Suite ‘APPS’ Schemas</strong></p> </td> </tr> <tr> <td style="width:139px;"> <p align="center"><strong>Schema</strong></p> </td> <td style="width:451px;"> <p align="center"><strong>Description</strong></p> </td> </tr> <tr> <td style="width:139px;"> <p>APPS</p> </td> <td style="width:451px;"> <p>Introduced with 10.5 of the E-Business Suite, APPS, owns all of the applications code in the database and has access all data in the Oracle E-Business Suite. All end-user connections as well connect as APPS after being authenticated using the APPLSYSPUB schema. The APPS schema must have same password as APPLSYS and APPS_NE schemas.</p> </td> </tr> <tr> <td style="width:139px;"> <p>APPSLSYS</p> </td> <td style="width:451px;"> <p>Owns the foundation objects (AD_* and FND_* tables) of the E-Business Suite used to define users and menus etc…. The APPLSYS schema must have same password as APPS and APPS_NE.</p> </td> </tr> <tr> <td style="width:139px;"> <p>APPS_NE</p> </td> <td style="width:451px;"> <p>New with 12.2, the APPS_NE schema is the Non-Editioned runtime ‘APPS’ user for the E-Business Suite. The APPS_NE schema must have same password as APPLSYS and APPS schemas.</p> </td> </tr> <tr> <td style="width:139px;"> <p>APPS_MRC</p> </td> <td style="width:451px;"> <p>APPS_MRC was created to support functionality for multiple reporting currencies (MRC). This schema has been obsolete since 11.5.10 and is no longer used. Its default was APPS_MRC, but country code suffixes were added (e.g. APPS_UK, APPS_JP). APPS_MRC is dropped by the upgrade to 11.5.10 and should not exist in R12 instances.</p> </td> </tr> </tbody> </table> </div> <div class="grammarly-disable-indicator">&nbsp;</div> <p>If you have any questions, please contact us at&nbsp;<a data-jsb_prepared="pnwtz72316" href="mailto:info@integrigy.com" rel="noreferrer">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h3>References</h3> <ul> <li>Integrigy Webinar&nbsp;<a data-jsb_prepared="1hpvojvpnn" href="/security-resources/new-security-features-oracle-e-business-suite-122" rel="noreferrer">New Security Features in Oracle E-Business Suite 12.2</a></li> <li> <p>Steps to change the APPS, APPLSYS, and APPS_NE password using FNDCPASS or AFPASSWD for EBS 12.2 (Doc ID 1674462.1)<strong>&nbsp;</strong><a data-jsb_prepared="2328xs9mb5" href="https://support.oracle.com/rs?type=doc&amp;id=1674462.1" rel="noreferrer">https://support.oracle.com/rs?type=doc&amp;id=1674462.1</a></p> </li> <li> <p>Developing and Deploying Customizations in Oracle E-Business Suite Release 12.2 (Doc ID 1577661.1)&nbsp;<a data-jsb_prepared="87ppmftugf" href="https://support.oracle.com/rs?type=doc&amp;id=1577661.1" rel="noreferrer">https://support.oracle.com/rs?type=doc&amp;id=1577661.1</a></p> </li> <li> <p>Oracle E-Business Suite Security Guide Release 12.2 (Part Number E22952-15)&nbsp;<a data-jsb_prepared="rwqbajvi58" href="https://docs.oracle.com/cd/E26401_01/doc.122/e22952/T156458T659606.htm" rel="noreferrer">https://docs.oracle.com/cd/E26401_01/doc.122/e22952/T156458T659606.htm</a></p> </li> </ul> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/oracle-e-business-suite" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle E-Business Suite</a> mmiller 575 at https://www.integrigy.com Tue May 02 2017 07:00:00 GMT-0400 (EDT) Aliases https://jonathanlewis.wordpress.com/2017/05/02/aliases-2/ <p>Here&#8217;s a <a href="https://community.oracle.com/thread/4041448"><em><strong>performance problem that came up on OTN</strong></em></a> recently. The following query (reformatted) takes &#8220;ages&#8221; to run &#8211; how do you address the problem:</p> <pre class="brush: plain; title: ; notranslate"> SELECT COUNT(*) FROM smp_dbuser2.workflow_step_report WHERE report_ID IN ( SELECT report_id FROM smp_dbuser2.workflow_report WHERE trunc(start_time) = '28-Apr-2017' AND user_id = 'nbi_ssc' ) ; </pre> <p>Various pieces of relevant information were supplied (the <em><strong>workflow_report</strong></em> table holds 1.4M rows the <em><strong>workflow_step_report</strong></em> table holds 740M rows and some indexes were described), but most significantly we were given the execution plan:</p> <pre class="brush: plain; title: ; notranslate"> -------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | -------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6 | 10T (1)|999:59:59 | | | | 1 | SORT AGGREGATE | | 1 | 6 | | | | | |* 2 | FILTER | | | | | | | | | 3 | PARTITION HASH ALL | | 731M| 4187M| 5363K (1)| 17:52:47 | 1 | 128 | | 4 | TABLE ACCESS FULL | WORKFLOW_STEP_REPORT | 731M| 4187M| 5363K (1)| 17:52:47 | 1 | 128 | |* 5 | FILTER | | | | | | | | | 6 | PARTITION HASH ALL| | 2 | 38 | 14161 (1)| 00:02:50 | 1 | 32 | |* 7 | TABLE ACCESS FULL| WORKFLOW_REPORT | 2 | 38 | 14161 (1)| 00:02:50 | 1 | 32 | -------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter( EXISTS (SELECT 0 FROM &quot;SMP_DBUSER2&quot;.&quot;WORKFLOW_REPORT&quot; &quot;WORKFLOW_REPORT&quot; WHERE :B1=:B2 AND &quot;USER_ID&quot;='nbi_ssc' AND TRUNC(INTERNAL_FUNCTION(&quot;START_TIME&quot;))=TO_DATE(' 2017-04-28 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))) 5 - filter(:B1=:B2) 7 - filter(&quot;USER_ID&quot;='nbi_ssc' AND TRUNC(INTERNAL_FUNCTION(&quot;START_TIME&quot;))=TO_DATE(' 2017-04-28 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) </pre> <p>You&#8217;ll notice that the optimizer has transformed the IN subquery into an EXISTS subquery &#8211; operation 2 is a FILTER operation, and you can see that the filter predicate at operation 2 shows the existence subquery that would be executed.</p> <p>If you look carefully at the execution plan (<em><strong>all of it</strong></em>), what can you deduce from it ? What, then, should be your next step in dealing with this performance problem ?</p> <h3>Observations</h3> <p>I did emphasise the need to examine ALL of the execution plan &#8211; and the important feature appears not in the body of the plan but in the <a href="https://jonathanlewis.wordpress.com/2006/12/22/dbms_xplan-again/"><em><strong>predicate section</strong></em></a>.</p> <p>The body tells us that Oracle has executed the query with a FILTER subquery approach, and we can see that the IN subquery has been transformed into an EXISTS subquery. In many cases Oracle could unnest the subquery and turn it into a join (often a semi-join), but it hasn&#8217;t in this case and we might wonder why not. Look closely at the text given for the subquery in the filter predicate section:</p> <pre class="brush: plain; title: ; notranslate"> SELECT 0 FROM &quot;SMP_DBUSER2&quot;.&quot;WORKFLOW_REPORT&quot; &quot;WORKFLOW_REPORT&quot; WHERE :B1=:B2 AND &quot;USER_ID&quot;='nbi_ssc' AND TRUNC(INTERNAL_FUNCTION(&quot;START_TIME&quot;))=TO_DATE(' 2017-04-28 00:00:00','syyyy-mm-dd hh24:mi:ss') </pre> <p>When an IN subquery is transformed into an EXISTS subquery, then we usually see: <em>&#8220;outer.column in (select inner.column &#8230;)&#8221;</em> turning into a predicate in the existence subquery of the form <em>&#8220;inner.column = :B1&#8221;</em>, so why do we have <em>&#8220;:B1 = :B2&#8221;</em> when we expect to see <em>&#8220;workflow_report.report_id = :B1&#8221;</em> ?</p> <p>The (obvious, if you know your optimizer) answer is that there is no column <em><strong>report_id</strong></em> in table <em><strong>workflow_report</strong></em> but <em>&#8220;column capture&#8221;</em> means the optimizer has assumed that <em><strong>report_id</strong></em> in the subquery refers to <em><strong>workflow_step_report.report_id</strong></em> &#8211; hence <em>&#8220;:B1 = :B2&#8221;</em>. The consequence of this strange predicate is that the subquery may execute once for every row in the outer table (though <a href="https://jonathanlewis.wordpress.com/2006/11/06/filter-subqueries/"><em><strong>scalar subquery caching</strong></em></a> may reduce the number of executions) performning a tablescan as it does so.</p> <p>The correct next step is to check whether this was a simple typing error &#8211; the query as it stands is valid but not very sensible, so what was the intention. It turned out that there was a column <em><strong>workflow_report.id</strong></em>, and that was the column that should have been selected in the subquery. (The OP also changed the <em><strong>trunc(start_date)</strong></em> to use a carefully constructed range-based clause &#8211; but that wasn&#8217;t really terribly important; and several people noted that some efficiency could be gained through suitable indexes &#8211; but that was missing the important point.)</p> <p>Here&#8217;s the new query, with execution plan:</p> <pre class="brush: plain; title: ; notranslate"> SELECT COUNT(*) FROM smp_dbuser2.workflow_step_report wsr WHERE wsr.report_ID IN ( SELECT wr.id FROM smp_dbuser2.workflow_report wr WHERE wr.start_time &gt;= to_date( '28-Apr-2017','dd-mon-yyyy') and wr.start_time &lt; to_date( '28-Apr-2017','dd-mon-yyyy') + 1 AND wr.user_id = 'nbi_ssc' ) ; ---------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ---------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 31 | 22760 (1)| 00:04:34 | | | | 1 | SORT AGGREGATE | | 1 | 31 | | | | | | 2 | NESTED LOOPS | | 34458 | 1043K| 22760 (1)| 00:04:34 | | | | 3 | PARTITION HASH ALL | | 72 | 1800 | 22759 (1)| 00:04:34 | 1 | 32 | |* 4 | TABLE ACCESS FULL | WORKFLOW_REPORT | 72 | 1800 | 22759 (1)| 00:04:34 | 1 | 32 | | 5 | PARTITION HASH ITERATOR| | 477 | 2862 | 1 (0)| 00:00:01 | KEY | KEY | |* 6 | INDEX RANGE SCAN | WORKFLOW_STEP_REPORT_REPORT_ID | 477 | 2862 | 1 (0)| 00:00:01 | KEY | KEY | ---------------------------------------------------------------------------------------------------------------------------- </pre> <p>The modified query completed in 5 seconds &#8211; presumably because there were only a few relevant rows in the <em><strong>workflow_report</strong></em> table and the related <em><strong>workflow_step_report</strong></em> rows were well clustered and accessible through a suitable &#8220;foreign key&#8221; index (there&#8217;s also a hint in the plan costs that the partitioning column for <em><strong>workflow_step_report</strong></em> is the report_id)</p> <p>The final point to note about the rewritten query is the use of table aliases &#8211; both tables have a short alias (<em><strong>wsr</strong> </em>and <em><strong>wr</strong></em>), and every column is qualified by its table alias. If this approach had been taken in the original code then the attempt to run it would have resulted in an error like:</p> <pre class="brush: plain; title: ; notranslate"> ERROR at line 7: ORA-00904: &quot;WR&quot;.&quot;REPORT_ID&quot;: invalid identifier </pre> <p><a href="https://jonathanlewis.wordpress.com/2010/01/26/aliases/"><em><strong>Always give every table (or view) an alias.</strong></em></a><br /> Keep aliases short<br /> Qualify every column with its table (or view) alias</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/17114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/17114/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonathanlewis.wordpress.com&#038;blog=491988&#038;post=17114&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17114 Tue May 02 2017 04:23:19 GMT-0400 (EDT) Binding a Spring Cloud Task to a Pivotal Cloud Foundry Database Service http://feedproxy.google.com/~r/blogspot/PEqWE/~3/cOeVWgTeA1Y/binding-spring-cloud-task-to-pivotal.html I previously blogged about how to create and deploy a Spring Cloud Task to Pivotal Cloud Foundry (PCF) as shown below.<br /><br /><a href="http://theblasfrompas.blogspot.com.au/2017/03/run-spring-cloud-task-from-pivotal.html">http://theblasfrompas.blogspot.com.au/2017/03/run-spring-cloud-task-from-pivotal.html</a><br /><br />Taking that same example I have used the Spring Cloud Connectors to persist the log output to a database table to avoid looking through log files to view the output. Few things have to change to make this happen as detailed below.<br /><br />1. We need to change the <b>manifest.yml</b> to include a MySQL service instance as shown below<br /><br /><span style="color: #3d85c6;">applications:</span><br /><span style="color: #3d85c6;">- name: springcloudtask-date</span><br /><span style="color: #3d85c6;">&nbsp; memory: 750M</span><br /><span style="color: #3d85c6;">&nbsp; instances: 1</span><br /><span style="color: #3d85c6;">&nbsp; no-route: true</span><br /><span style="color: #3d85c6;">&nbsp; health-check-type: none</span><br /><span style="color: #3d85c6;">&nbsp; path: ./target/springcloudtasktodaysdate-0.0.1-SNAPSHOT.jar</span><br /><span style="color: #3d85c6;">&nbsp; services:</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; - pmysql-test</span><br /><span style="color: #3d85c6;">&nbsp; env:</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; JAVA_OPTS: -Djava.security.egd=file:///dev/urando</span><br /><br />2. Alter the project dependancies to include Spring Data JPA libraries to persist the log output to a table. Spring Cloud Connectors will automatically pick up the bound MySQL instance and connect for us when we push the application to PCF<br /><br /><a href="https://github.com/papicella/SpringCloudTaskTodaysDate">https://github.com/papicella/SpringCloudTaskTodaysDate</a><br /><pre class="brush: xml"> <br />&lt;dependencies&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;<br /> &lt;artifactId&gt;spring-cloud-starter-task&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br /> &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.hibernate&lt;/groupId&gt;<br /> &lt;artifactId&gt;hibernate-entitymanager&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;com.h2database&lt;/groupId&gt;<br /> &lt;artifactId&gt;h2&lt;/artifactId&gt;<br /> &lt;/dependency&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;mysql&lt;/groupId&gt;<br /> &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;<br /> &lt;scope&gt;runtime&lt;/scope&gt;<br /> &lt;/dependency&gt;<br /> &lt;/dependencies&gt;<br /></pre><br />3. A Entity class, Spring JPA repository interface and a JPA task Configurer has been created for persisting the log output as shown in the code below.<br /><br /><b>TaskRunOutput.java</b><br /><pre class="brush: java"> <br />package pas.au.pivotal.pa.sct.demo;<br /><br />import javax.persistence.*;<br /><br />@Entity<br />@Table (name = "TASKRUNOUTPUT")<br />public class TaskRunOutput<br />{<br /> @Id<br /> @GeneratedValue(strategy = GenerationType.AUTO)<br /> private Long id;<br /><br /> private String output;<br /><br /> public TaskRunOutput()<br /> {<br /> }<br /><br /> public TaskRunOutput(String output) {<br /> this.output = output;<br /> }<br /><br /> public Long getId() {<br /> return id;<br /> }<br /><br /> public void setId(Long id) {<br /> this.id = id;<br /> }<br /><br /> public String getOutput() {<br /> return output;<br /> }<br /><br /> public void setOutput(String output) {<br /> this.output = output;<br /> }<br /><br /> @Override<br /> public String toString() {<br /> return "TaskRunOutput{" +<br /> "id=" + id +<br /> ", output='" + output + '\'' +<br /> '}';<br /> }<br />}<br /></pre><br /><b>TaskRepository.java</b><br /><pre class="brush: java"> <br />package pas.au.pivotal.pa.sct.demo;<br /><br />import org.springframework.data.jpa.repository.JpaRepository;<br /><br />public interface TaskRepository extends JpaRepository &lt;TaskRun, Long&gt;<br />{<br />}<br /></pre><br /><b>JpaTaskConfigurer.java</b><br /><pre class="brush: java"> <br />package pas.au.pivotal.pa.sct.demo.configuration;<br /><br />import java.text.SimpleDateFormat;<br />import java.util.Date;<br /><br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import pas.au.pivotal.pa.sct.demo.TaskRunOutput;<br />import pas.au.pivotal.pa.sct.demo.TaskRunRepository;<br /><br />import org.springframework.beans.factory.annotation.Autowired;<br />import org.springframework.cloud.task.configuration.DefaultTaskConfigurer;<br />import org.springframework.cloud.task.listener.annotation.BeforeTask;<br />import org.springframework.cloud.task.repository.TaskExecution;<br />import org.springframework.orm.jpa.JpaTransactionManager;<br />import org.springframework.stereotype.Component;<br />import org.springframework.transaction.PlatformTransactionManager;<br /><br />@Component<br />public class JpaTaskConfigurer extends DefaultTaskConfigurer {<br /> private static final Log logger = LogFactory.getLog(JpaTaskConfigurer.class);<br /><br /> @Autowired<br /> private PlatformTransactionManager transactionManager;<br /><br /> @Autowired<br /> private TaskRunRepository taskRunRepository;<br /><br /> @Override<br /> public PlatformTransactionManager getTransactionManager() {<br /> if(this.transactionManager == null) {<br /> this.transactionManager = new JpaTransactionManager();<br /> }<br /><br /> return this.transactionManager;<br /> }<br /><br /> @BeforeTask<br /> public void init(TaskExecution taskExecution)<br /> {<br /> String execDate = new SimpleDateFormat().format(new Date());<br /> taskRunRepository.save(new TaskRunOutput("Executed at " + execDate));<br /> logger.info("Executed at : " + execDate);<br /> }<br />}<br /></pre><br />4. Now as per the previous blog execute the task and verify it completes without error. The screen shot below shows how the "<b>Tasks</b>" tab shows this<br /><br />Note: You would need to PUSH the application to Pivotal Cloud Foundry before you can execute it which is shown on the <a href="http://theblasfrompas.blogspot.com.au/2017/03/run-spring-cloud-task-from-pivotal.html" target="_blank">original blog entry</a><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-kk9ZIk-eG0k/WQZ7C2GhzcI/AAAAAAAAA8k/CidjxrEy-kk82S7mYZtSU8s148VqvicKgCLcB/s1600/Screen%2BShot%2B2017-05-01%2Bat%2B10.01.07%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="133" src="https://2.bp.blogspot.com/-kk9ZIk-eG0k/WQZ7C2GhzcI/AAAAAAAAA8k/CidjxrEy-kk82S7mYZtSU8s148VqvicKgCLcB/s320/Screen%2BShot%2B2017-05-01%2Bat%2B10.01.07%2BAM.png" width="320" /></a></div><br />5. Now if you follow this blog entry below you can deploy a Web Based interface for Pivotal MySQL instance to view the table and it's output<br /><br /><a href="http://theblasfrompas.blogspot.com.au/2017/04/accessing-pivotal-mysql-service.html">http://theblasfrompas.blogspot.com.au/2017/04/accessing-pivotal-mysql-service.html</a><br /><br />With Pivotal MySQL*Web installed the output can be viewed as shown below.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-z6eRmDLogWw/WQgCrTXyl6I/AAAAAAAAA80/R6WPFJm6BeQfXj-dS2UGQB9D_WO9l9W3QCLcB/s1600/Screen%2BShot%2B2017-05-02%2Bat%2B1.52.41%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="https://3.bp.blogspot.com/-z6eRmDLogWw/WQgCrTXyl6I/AAAAAAAAA80/R6WPFJm6BeQfXj-dS2UGQB9D_WO9l9W3QCLcB/s320/Screen%2BShot%2B2017-05-02%2Bat%2B1.52.41%2BPM.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-DmnN9IPdgB4/WQgCu5fp7II/AAAAAAAAA84/4GSJBKyQ490YeSRqiAq4oqIoS5aMWRcxACLcB/s1600/Screen%2BShot%2B2017-05-02%2Bat%2B1.52.09%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="https://2.bp.blogspot.com/-DmnN9IPdgB4/WQgCu5fp7II/AAAAAAAAA84/4GSJBKyQ490YeSRqiAq4oqIoS5aMWRcxACLcB/s320/Screen%2BShot%2B2017-05-02%2Bat%2B1.52.09%2BPM.png" width="320" /></a></div><br /><div class="blogger-post-footer">http://feeds.feedburner.com/TheBlasFromPas</div><img src="http://feeds.feedburner.com/~r/blogspot/PEqWE/~4/cOeVWgTeA1Y" height="1" width="1" alt=""/> Pas Apicella tag:blogger.com,1999:blog-6527688743456205256.post-7717322761442253494 Mon May 01 2017 23:54:00 GMT-0400 (EDT) Developing Oracle REST Data Services with SQL Developer 4.2 http://www.thatjeffsmith.com/archive/2017/05/developing-oracle-rest-data-services-with-sql-developer-4-2/ <p>One of the new features in version 4.2 of SQL Developer is the ability to work with your ORDS Restful Services directly in the database tree.</p> <p>Here&#8217;s a video demo&#8230;</p> <p><iframe width="853" height="480" src="https://www.youtube.com/embed/ZAUJmiW1w2Y" frameborder="0" allowfullscreen></iframe></p> <h3>Features via Screenshot</h3> <p>Some of you don&#8217;t have access to YouTube at work (or at home apparently), so here&#8217;s a quick snapshot.</p> <div id="attachment_5984" style="width: 831px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/01/mime1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/01/mime1.png" alt="oracle rest data services modules" width="821" height="559" class="size-full wp-image-5984" /></a><p class="wp-caption-text">Note the &#8216;REST Data Services&#8217; item on the tree.</p></div> <p>As you make changes here, the REST Services, assuming they&#8217;re published and ORDS is actually running, are affected immediately. </p> <div id="attachment_5079" style="width: 1010px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2015/04/ords_service1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2015/04/ords_service1.png" alt="" width="1000" height="494" class="size-full wp-image-5079" /></a><p class="wp-caption-text">I really like this part, if you know SQL or PL/SQL, you can create a RESTful Service.</p></div> <p>See my other recent ORDS posts to get an idea of what you can do in terms of defining parameters, defining POST or PUT handlers, etc. </p> <!-- Easy AdSense Unfiltered [count: 3 is not less than 3] --> thatjeffsmith http://www.thatjeffsmith.com/?p=6152 Mon May 01 2017 16:05:41 GMT-0400 (EDT) Big Data and Data Warehousing Kscope17 Track Highlights – Michael Rainey http://www.odtug.com/p/bl/et/blogaid=715&source=1 Here is an overview of Big Data and Data Warehousing sessions Track Lead Michael Rainey is most looking forward to at Kscope17 with reasons why he thinks you should attend them: ODTUG http://www.odtug.com/p/bl/et/blogaid=715&source=1 Mon May 01 2017 09:55:08 GMT-0400 (EDT) 2017 ODTUG Innovation Award http://www.odtug.com/p/bl/et/blogaid=711&source=1 ODTUG is excited to announce the 2nd annual ODTUG Innovation Award. The ODTUG Innovation Award honors excellence in creative, effective, innovative use of Oracle development tools within ODTUG's supported communities - ADF, APEX, BI, Database, EPM and Career. ODTUG http://www.odtug.com/p/bl/et/blogaid=711&source=1 Mon May 01 2017 08:32:18 GMT-0400 (EDT) RTFM https://jonathanlewis.wordpress.com/2017/05/01/rtfm-2/ <p>Imagine you&#8217;re fairly new to Oracle and don&#8217;t have a lot of background information at your fingertips; then one day someone tells you to read the manual pages for the view <a href="http://oradb-srv.wlv.ac.uk/E16655_01/server.121/e17615/refrn23076.htm"><em><strong>dba_free_space</strong></em></a>. Look carefully at this sentence:</p> <p style="padding-left:30px;"><em>Note that if a data file (or entire tablespace) is offline in a locally managed tablespace, you will not see any extent information.</em></p> <p>Can you spot the error ? Did you spot the error when you first read the sentence &#8211; or did you fill in the gap without noticing what you were doing ?</p> <p>Let&#8217;s demonstrate the accuracy of the statement (simple cut-n-paste from an SQL*Plus session on 12.1.0.2 running in archivelog mode, and with a locally managed tablespace consisting of 4 (oracle managed) files on a filesystem):</p> <pre class="brush: plain; title: ; notranslate"> SQL&gt; select * from dba_free_space where tablespace_name = 'LOB_TEST'; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO ------------------------------ ---------- ---------- ---------- ---------- ------------ LOB_TEST 4 128 51380224 6272 4 LOB_TEST 7 128 51380224 6272 7 LOB_TEST 8 640 47185920 5760 8 LOB_TEST 9 128 51380224 6272 9 4 rows selected. SQL&gt; select file#, ts#, name from v$datafile; FILE# TS# NAME ---------- ---------- ---------------------------------------------------------------------- 1 0 /u02/app/oracle/oradata/OR32/datafile/o1_mf_system_cbcysq2o_.dbf 2 9 /u02/app/oracle/oradata/OR32/datafile/o1_mf_undotbs_d84db0s2_.dbf 3 1 /u02/app/oracle/oradata/OR32/datafile/o1_mf_sysaux_cbcyrmyd_.dbf 4 15 /u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpchn57_.dbf 5 6 /u02/app/oracle/oradata/OR32/datafile/o1_mf_test_8k__cbd120yc_.dbf 6 4 /u02/app/oracle/oradata/OR32/datafile/o1_mf_users_cbcyv47y_.dbf 7 15 /u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpchnnq_.dbf 8 15 /u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpcho47_.dbf 9 15 /u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpchok1_.dbf 9 rows selected. SQL&gt; alter database datafile '/u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpchnnq_.dbf' offline; Database altered. SQL&gt; select * from dba_free_space where tablespace_name = 'LOB_TEST'; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO ------------------------------ ---------- ---------- ---------- ---------- ------------ LOB_TEST 4 128 51380224 6272 4 LOB_TEST 8 640 47185920 5760 8 LOB_TEST 9 128 51380224 6272 9 3 rows selected. SQL&gt; recover datafile '/u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpchnnq_.dbf'; Media recovery complete. SQL&gt; alter database datafile '/u02/app/oracle/oradata/OR32/datafile/o1_mf_lob_test_dhpchnnq_.dbf' online; Database altered. SQL&gt; select * from dba_free_space where tablespace_name = 'LOB_TEST'; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO ------------------------------ ---------- ---------- ---------- ---------- ------------ LOB_TEST 4 128 51380224 6272 4 LOB_TEST 7 128 51380224 6272 7 LOB_TEST 8 640 47185920 5760 8 LOB_TEST 9 128 51380224 6272 9 4 rows selected. SQL&gt; spool off </pre> <p>See the bit in the middle where I have <em>&#8220;3 rows selected&#8221;</em> for the <em><strong>lob_test</strong></em> tablespace: the manual says I <em>&#8220;will not see <strong>any</strong> extent information&#8221;</em> &#8211; but the only change in the output is the absence of information about the one data file that I&#8217;ve put offline.</p> <p>You may want to argue that &#8220;obviously&#8221; the statement was only about the data file that was offline &#8211; but is that a couple of years experience allowing you to interpret the text ? Some might assume (with a little prior experience and if they hadn&#8217;t done the experiment and given the parenthetical reference to <em>&#8220;entire tablespace&#8221;</em>) that the statement was about the effect on a single tablespace  &#8211; and maybe others would criticise them for making unwarranted assumptions.</p> <p>But maybe you&#8217;re a novice and believed what the manual actually said.</p> <p>It&#8217;s a fairly silly example, of course, but the point of this note is that when you tell someone to RTFM remember that they might actually do exactly that and not have the benefit of being able to know (unthinkingly) that the manual is <em><strong>wrong</strong></em>. If you go one step further and tell them to <em>&#8220;stop making assumptions and RTFM&#8221;</em> then just remember that you probably make a lot of assumptions without realising it when you read the manuals, and maybe it&#8217;s your assumptions that lead you to the correct interpretation of the manual.</p> <h3>Footnote:</h3> <p>If you&#8217;re feeling in the mood to split hairs, don&#8217;t forget that <em><strong>dba_free_space</strong></em> doesn&#8217;t usually give you any information about extents when it&#8217;s reporting locally managed tablespaces, it tells you about the space in which extents can be created; the one exception (that I know of) is when you have an object in the <em><strong>recyclebin</strong></em> and each extent of that object is listed as free space (see <a href="https://jonathanlewis.wordpress.com/2013/02/25/free-space-2/"><em><strong>this article</strong></em></a> and <a href="https://jonathanlewis.wordpress.com/2010/02/06/shrink-tablespace/"><em><strong>the footnote here</strong></em></a>).  It&#8217;s only for dictionary managed tablespaces that <em><strong>dba_free_space</strong></em> reports extent information &#8211; the rows stored in the <em><strong>fet$</strong></em> table.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/17106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/17106/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonathanlewis.wordpress.com&#038;blog=491988&#038;post=17106&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17106 Mon May 01 2017 07:55:18 GMT-0400 (EDT) VirtualBox 5.1.22 http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/lnmEuLkYfzw/ <p><a href="https://www.virtualbox.org"><img class="alignleft size-full wp-image-4959" src="https://oracle-base.com/blog/wp-content/uploads/2015/05/virtualbox.jpg" alt="" width="129" height="145" /></a>Hot on the heels of <a href="https://oracle-base.com/blog/2017/04/19/virtualbox-5-1-20/">VirtualBox 5.1.20</a> comes <a href="https://www.virtualbox.org">VirtualBox</a> 5.1.22. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p><a href="https://www.virtualbox.org/wiki/Downloads">Downloads</a> and <a href="https://www.virtualbox.org/wiki/Changelog#v22">changelog</a> are in the usual places.</p> <p>I noticed this when I was in the airport yesterday, but I didn&#8217;t have enough time to download it. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>It looks like it&#8217;s installed OK on my Windows 7 desktop at work and on my macOS Sierra laptop. I&#8217;ll have a go on an Oracle Linux 6 host tomorrow probably.</p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2017/04/30/virtualbox-5-1-22/">VirtualBox 5.1.22</a> was first posted on April 30, 2017 at 9:34 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/lnmEuLkYfzw" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7127 Sun Apr 30 2017 04:34:54 GMT-0400 (EDT) Oracle Code : Prague – The Journey Home http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/1inEjh8s5Yk/ <p><img class="alignleft size-full wp-image-7058" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/oracle_code.png" alt="" width="188" height="189" />I had to be at the airport for 12:15, which meant I got a lie in and I actually slept a bit, which was nice. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>When I woke up I got some breakfast, edited a couple of short <a href="https://www.youtube.com/playlist?list=PLbgSgneb0mSS8oKP_ll3RKe3eUIpLAik5">Oracle Code videos</a> and caught up with my blog posts. After that was done I went through all the work emails I&#8217;ve missed over the last week, just so I don&#8217;t have that unpleasant job to do when I get back to work on Tuesday. Once that was done a went back to bed for an hour before check-out. I know it&#8217;s sad, but I&#8217;ve had so little sleep the previous two days I felt dead.</p> <p>It was a quick taxi ride to the airport and I barely broke my stride walking through security, which meant I was two hours early for the flight. Better early than late! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Because I fluked a business class ticket on the way out I had a baggage allowance of two cases and two pieces of hand luggage, of which I used two pieces of hand luggage. The journey back was economy, so I had an allowance of one piece of hand luggage. Why do companies sell return tickets with different baggage allowances? Luckily I didn&#8217;t have much, so I could cram it into the once bag.</p> <p>As soon as they announced boarding, most people ignored the queue and barged to the front. The flight from Prague to Frankfurt took about an hour. As soon as I got off I checked the gate for the next flight and it had been moved to the other terminal, so I stomped off in a bit of a panic, but made it in plenty of time.</p> <p>As it happened, boarding was delayed for the second flight because one of the trolley dollies was late. Once again, as soon as boarding was announced a bunch of people jumped the queue. I will not tell you what I was wishing would happen to the queue jumpers&#8230; The second flight took at 75 minutes, which wasn&#8217;t so bad.</p> <p><iframe src="https://www.youtube.com/embed/L9qI74cloQc" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>After a quick taxi ride home, <a href="https://developer.oracle.com/code/prague">Oracle Code : Prague</a> was complete! I did all my thank you messages in the <a href="https://oracle-base.com/blog/2017/04/29/oracle-code-prague/">last post</a>, but once again thanks to everyone involved for making the event go so well. See you soon!</p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2017/04/30/oracle-code-prague-the-journey-home/">Oracle Code : Prague &#8211; The Journey Home</a> was first posted on April 30, 2017 at 9:20 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/1inEjh8s5Yk" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7121 Sun Apr 30 2017 04:20:54 GMT-0400 (EDT) 12cR1 RAC Posts -- 9 : Adding a Service to a PDB in RAC http://hemantoracledba.blogspot.com/2017/04/12cr1-rac-posts-9-adding-service-to-pdb.html <div dir="ltr" style="text-align: left;" trbidi="on">My 2node RAC environment has 1 PDB.&nbsp; Here I add (create)&nbsp;a new Service to the PDB.<br /><br />Oracle recommends using srvctl instead of DBMS_SERVICE to add a Service.<br /><br />Can I add a service without having the PDB OPEN ?<br /><br /><pre>[oracle@collabn1 ~]$ srvctl start database -d RAC<br />[oracle@collabn1 ~]$ srvctl add service -db RAC -service MYSVC -preferred RAC1,RAC2 \<br />&gt; -tafpolicy BASIC -clbgoal SHORT -pdb PDB<br />[oracle@collabn1 ~]$<br />[oracle@collabn1 ~]$ sqlplus '/ as sysdba'<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 29 23:16:01 2017<br /><br />Copyright (c) 1982, 2014, Oracle. All rights reserved.<br /><br /><br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,<br />Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; select con_id, name, open_mode from v$pdbs;<br /><br /> CON_ID NAME OPEN_MODE<br />---------- ------------------------------ ----------<br /> 2 PDB$SEED READ ONLY<br /> 3 PDB MOUNTED<br /><br />SQL&gt; alter pluggable database pdb open; -- command issued in both instances<br /><br />Pluggable database altered.<br /><br />SQL&gt;<br />SQL&gt; select con_id, pdb, name, creation_date, clb_goal<br /> 2 from v$services<br /> 3 where pdb='PDB'<br /> 4 /<br /><br /> CON_ID PDB<br />---------- ------------------------------<br />NAME CREATION_ CLB_G<br />---------------------------------------------------------------- --------- -----<br /> 3 PDB<br />pdb.racattack 29-DEC-16 LONG<br /><br /><br />SQL&gt;<br /></pre><br /><br />I add the Service to the TNSNAMES.ORA and try to connect to it. <br /><br /><pre>MYSVC =<br /> (DESCRIPTION =<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = collabn-cluster-scan.racattack)(PORT = 1521))<br /> (CONNECT_DATA =<br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = MYSVC.racattack)<br /> )<br /> )<br /><br />[oracle@collabn1 ~]$ tnsping MYSVC<br /><br />TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 29-APR-2017 23:22:43<br /><br />Copyright (c) 1997, 2014, Oracle. All rights reserved.<br /><br />Used parameter files:<br /><br /><br />Used TNSNAMES adapter to resolve the alias<br />Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn-cluster-scan.racattack)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MYSVC.racattack)))<br />OK (0 msec)<br />[oracle@collabn1 ~]$ sqlplus hemant/hemant@MYSVC<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 29 23:22:51 2017<br /><br />Copyright (c) 1982, 2014, Oracle. All rights reserved.<br /><br />ERROR:<br />ORA-12514: TNS:listener does not currently know of service requested in connect<br />descriptor<br /><br /><br />Enter user-name:<br /></pre><br /><br />So, apparently, the service isn't running. &nbsp; Shall I try re-adding the service ?<br /><br /><pre>[oracle@collabn1 ~]$ srvctl add service -db RAC -service MYSVC -preferred RAC1,RAC2 \<br />&gt; -tafpolicy BASIC -clbgoal SHORT -pdb PDB<br />PRKO-3117 : Service MYSVC already exists in database RAC<br ;[oracle@collabn1 ~]$ srvctl remove service -db RAC -service MYSVC -pdb PDB<br />PRKO-2002 : Invalid command line option: -pdb<br />[oracle@collabn1 ~]$ srvctl remove service -db RAC -service MYSVC<br />[oracle@collabn1 ~]$ srvctl add service -db RAC -service MYSVC -preferred RAC1,RAC2 \<br />&gt; -tafpolicy BASIC -clbgoal SHORT -pdb PDB<br />[oracle@collabn1 ~]$<br />[oracle@collabn1 ~]$ sqlplus hemant/hemant@MYSVC<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 29 23:31:15 2017<br /><br />Copyright (c) 1982, 2014, Oracle. All rights reserved.<br /><br />ERROR:<br />ORA-12514: TNS:listener does not currently know of service requested in connect<br />descriptor<br /><br /><br />Enter user-name: <br /></pre><br /><br />Yet, it doesn't work ! &nbsp; How do I add and <u>start</u>&nbsp;service to a PDB ?&nbsp; What's missing ?<br /><br /><pre>[oracle@collabn1 ~]$ srvctl remove service -db RAC -service MYSVC<br />[oracle@collabn1 ~]$ srvctl start service -db RAC -service MYSVC<br />[oracle@collabn1 ~]$<br /><br />SQL&gt; select distinct name from v$services;<br /><br />NAME<br />----------------------------------------------------------------<br />pdb.racattack<br />RAC.racattack<br />MYSVC<br />SYS$BACKGROUND<br />RAC_DGB<br />RACXDB<br />SYS$USERS<br /><br /><br />[oracle@collabn1 ~]$ sqlplus hemant/hemant@MYSVC<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 29 23:43:01 2017<br /><br />Copyright (c) 1982, 2014, Oracle. All rights reserved.<br /><br />Last Successful login time: Sun Apr 16 2017 23:30:21 +08:00<br /><br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,<br />Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; select table_name from user_tables;<br /><br />TABLE_NAME<br />--------------------------------------------------------------------------------<br />MY_DATA<br />MY_NEW_TABLE<br /><br />SQL&gt;<br /></pre><br /><br />I had forgotten to <b>*START*</b> the service ! &nbsp; Let me go back and add another service with the PDB CLOSEd.<br /><br /><pre>SQL&gt; alter pluggable database pdb close immediate; -- on both instances<br /><br />Pluggable database altered.<br /><br />SQL&gt;<br /><br />[oracle@collabn1 ~]$ srvctl add service -db RAC -pdb PDB -service NEWSVC -preferred RAC1,RAC2 \<br />&gt; -tafpolicy BASIC -clbgoal SHORT<br />[oracle@collabn1 ~]$<br /><br />SQL&gt; alter pluggable database pdb open; -- on both instances<br /><br />Pluggable database altered.<br /><br />SQL&gt;<br /><br />NEWSVC =<br /> (DESCRIPTION =<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = collabn-cluster-scan.racattack)(PORT = 1521))<br /> (CONNECT_DATA =<br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = NEWSVC.racattack)<br /> )<br /> )<br /><br />[oracle@collabn1 ~]$ srvctl start service -db RAC -service NEWSVC<br />[oracle@collabn1 ~]$ tnsping NEWSVC<br /><br />TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 29-APR-2017 23:54:38<br /><br />Copyright (c) 1997, 2014, Oracle. All rights reserved.<br /><br />Used parameter files:<br /><br /><br />Used TNSNAMES adapter to resolve the alias<br />Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn-cluster-scan.racattack)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = NEWSVC.racattack)))<br />OK (0 msec)<br /><br /><br />[oracle@collabn1 ~]$ sqlplus hemant/hemant@NEWSVC<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 29 23:55:25 2017<br /><br />Copyright (c) 1982, 2014, Oracle. All rights reserved.<br /><br />Last Successful login time: Sat Apr 29 2017 23:54:51 +08:00<br /><br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,<br />Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; select table_name from user_tables;<br /><br />TABLE_NAME<br />--------------------------------------------------------------------------------<br />MY_DATA<br />MY_NEW_TABLE<br /><br />SQL&gt;<br /></pre><br /><br />However, these entries in PDB_PLUG_IN_VIOLATIONS seem to be a bug : <br /><br /><pre>SQL&gt; alter pluggable database pdb close immediate;<br /><br />Pluggable database altered.<br /><br />SQL&gt; alter pluggable database pdb open;<br /><br />Pluggable database altered.<br /><br />SQL&gt; select * from pdb_plug_in_violations;<br /><br />TIME<br />---------------------------------------------------------------------------<br />NAME<br />------------------------------<br />CAUSE TYPE<br />---------------------------------------------------------------- ---------<br />ERROR_NUMBER LINE<br />------------ ----------<br />MESSAGE<br />--------------------------------------------------------------------------------<br />STATUS<br />---------<br />ACTION<br />--------------------------------------------------------------------------------<br />29-APR-17 11.58.32.409572 PM<br />PDB<br />Service Name Conflict WARNING<br /> 0 1<br />Service name or network name of service MYSVC in the PDB is invalid or conflicts<br /> with an existing service name or network name in the CDB.<br />PENDING<br />Drop the service and recreate it with an appropriate name.<br /><br />29-APR-17 11.58.32.412142 PM<br />PDB<br />Service Name Conflict WARNING<br /> 0 2<br />Service name or network name of service NEWSVC in the PDB is invalid or conflict<br />s with an existing service name or network name in the CDB.<br />PENDING<br />Drop the service and recreate it with an appropriate name.<br /><br /><br />SQL&gt;<br /></pre><br /><br />So, remember, it is not sufficient to ADD a Service. You must also START the Service using srvctl. <br />.<br />.<br />.<br /><br /></div> Hemant K Chitale tag:blogger.com,1999:blog-1931548025515710472.post-6442368863107240569 Sat Apr 29 2017 12:02:00 GMT-0400 (EDT) Net usable storage when using Oracle Database Appliance https://technology.amis.nl/2017/04/29/net-usable-storage-when-using-oracle-database-appliance/ <p>Since the birth of the ODA X6-2 HA, the net usable storage has become more of a challenge when advising a customer as the X5-2 HA had substantial more – but slower – storage. This very short blogpost is just a quick summary / checklist of the net usable storage, depending on the ODA and the mirroring you choose.</p> <p>By the way, for other ODA-comparisons than storage I wrote <a href="https://technology.amis.nl/2017/01/08/oracle-database-appliance-x6-2l-x6-2-ha-comparing-line/" rel="noopener noreferrer" target="_blank">another blogpost</a>.</p> <p><span id="more-44646"></span>The following pictures are extracts of Oracle PDF’s. </p> <p>Usable storage of the single node ODA’s:</p> <p><a href="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image.png?ssl=1"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image_thumb.png?resize=702%2C216&#038;ssl=1" data-recalc-dims="1"></a></p> <p>&nbsp;</p> <p>Usable storage of the two-node ODA (including the ‘old’ X5-2 HA for comparison):</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image-1.png?ssl=1"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://i2.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image_thumb-1.png?resize=702%2C315&#038;ssl=1" data-recalc-dims="1"></a></p> <p>&nbsp;</p> <p>ODA X6-2 HA Normal Redundancy – 2 x Mirroring</p> <p>&nbsp;</p> <p><a href="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image-2.png?ssl=1"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image_thumb-2.png?resize=702%2C411&#038;ssl=1" data-recalc-dims="1"></a></p> <p>&nbsp;</p> <p>ODA X6-2 HA High Redundancy – 3 x Mirroring</p> <p>&nbsp;</p> <p><a href="https://i1.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image-3.png?ssl=1"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://i0.wp.com/technology.amis.nl/wp-content/uploads/2017/04/image_thumb-3.png?resize=702%2C434&#038;ssl=1" data-recalc-dims="1"></a></p> <p>&nbsp;</p> <p>Sources:</p> <p>ODA, comparing the line: <a title="https://technology.amis.nl/2017/01/08/oracle-database-appliance-x6-2l-x6-2-ha-comparing-line/" href="https://technology.amis.nl/2017/01/08/oracle-database-appliance-x6-2l-x6-2-ha-comparing-line/">https://technology.amis.nl/2017/01/08/oracle-database-appliance-x6-2l-x6-2-ha-comparing-line/</a></p> <p>Oracle PDF’s :</p> <p>&#8211; 201701120 EN Oracle Database Appliance X6-2 Portfolio Summary.pdf</p> <p>&#8211; ODA X6-2HA Net Storage.pdf</p> <p>The post <a rel="nofollow" href="https://technology.amis.nl/2017/04/29/net-usable-storage-when-using-oracle-database-appliance/">Net usable storage when using Oracle Database Appliance</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=44646 Sat Apr 29 2017 09:19:18 GMT-0400 (EDT) Oracle Code : Prague http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/auUASRl3GAI/ <p><img class="alignleft size-full wp-image-7058" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/oracle_code.png" alt="" width="188" height="189" />I was a little late getting to the event. My hotel was only a mile away from the conference venue, but it was a mile up hill. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I missed the start of the first keynote, but I had already seen it in <a href="https://oracle-base.com/blog/2017/04/20/oracle-code-london/">London</a>, so I didn&#8217;t feel too guilty. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>When I walked into the keynote it was packed. If you followed the event on Twitter you will know the turnout was great. Well done Prague for coming out in force to support the event!</p> <p>First up was <a href="https://twitter.com/AdamBien">Adam Bien</a> with “Enterprise Java.next: A Slideless Keynote”, but as I said, I missed it this time around. You can see my description from the <a href="https://oracle-base.com/blog/2017/04/20/oracle-code-london/">London event</a>.</p> <p>The second keynote was &#8220;Building Modern Applications Using APIs, Microservices, and Chatbots&#8221; by Siddhartha Agarwal, Jakub Nesetril. This was a standing room only thing again, so I had a little wander around the venue and got back to see the chatbot demonstration, which I watched from the from the corridor. Pretty neat.</p> <p>Next I went to see Peter Nagy with &#8220;Deploying Cloud-Native Applications: VMs, Containers, or Functions&#8221;. This was a really interesting and I wrote down a lot of notes. I had a quick chat with him at the end about Docker and learned some new stuff.</p> <p>From there I went to see <a href="https://twitter.com/chrisrsaxon">Chris Saxon</a> with &#8220;SQL Magic! Tricks to Show SQL Features You&#8217;ve Probably Never Used&#8221;. He got a big crowd, which was good to see for a SQL presentation at an event like this.</p> <p>After that I went to see &#8220;Explore the Basics of Setting up Your First Secure Private Docker Registry&#8221; by Mike Raab. Being a Docker noob, some of this went over my head, but every bit of information helps ease the transition into playing with Docker. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> He mentioned using <a href="/articles/linux/letsencrypt-free-certificates-on-oracle-linux">Let&#8217;s Encrypt certificates</a>, which I saw a few people scribble a note about.</p> <p>Before the next session I live-streamed a small bit on <a href="https://www.pscp.tv/w/1MYGNAWdwDwKw">Periscope</a> for the <a href="https://www.pscp.tv/OracleDevs/1MYGNAWdwDwKw">@OracleDevs Channel</a>, which you can watch on Twitter or Periscope. If you watch it on Twitter you&#8217;ll see half of my head. If you watch it on Periscope you will see it all. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>After that it was my session called &#8220;<a href="/articles/misc/an-introduction-to-json-support-in-the-oracle-database">Make the RDBMS Relevant Again with RESTful Web Services and JSON</a>&#8220;. The crowd were very quiet during the session, so it was kind-of hard to know how well it went, but I had some people come to speak to me at the end, so hopefully it was fine. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I missed the last block of the day because I was too busy chatting to a couple of guys (<a href="https://twitter.com/ramilragimov">Ramil</a> and <a href="https://www.linkedin.com/in/artjom-superov/">Artjom</a>) and about DBA stuff. We continued chatting during the party at the end of the event, and were joined by one of their colleagues (sorry dude, I missed your name) and <a href="https://twitter.com/fnimphiu">Frank Nimphius</a>. I think we were the last to leave. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p><iframe src="https://www.youtube.com/embed/7ypCe3mmLYA" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>It was a really enjoyable day. Thanks to everyone from <a href="https://go.oracle.com/oraclecode">#OracleCode</a> for letting me come to the event. Thanks also to the Oracle ACE Program for continuing to let me fly the flag. Big thanks to all the speakers and attendees that made this such a successful event. I hope to see you all again!</p> <p>So that&#8217;s my second and last <a href="https://go.oracle.com/oraclecode">#OracleCode</a> event this year. I hope the rest of the cities go well. Remember, it&#8217;s free so turn up and support them if you want more events like this in the future!</p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2017/04/29/oracle-code-prague/">Oracle Code : Prague</a> was first posted on April 29, 2017 at 7:57 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/auUASRl3GAI" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7119 Sat Apr 29 2017 02:57:06 GMT-0400 (EDT) Delivering Migration Projects on Time http://dbakevlar.com/2017/04/delivering-migration-projects-time/ <div id="tweetbutton6472" class="tw_button" style="float:left;margin-right:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fdbakevlar.com%2F2017%2F04%2Fdelivering-migration-projects-time%2F&amp;text=RT%20%40DBAKevlar%20%40DBAKevlar%20%3A&amp;related=DBAKevlar:DBA+Kevlar&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fdbakevlar.com%2F2017%2F04%2Fdelivering-migration-projects-time%2F" class="twitter-share-button" style="width:55px;height:22px;background:transparent url('http://dbakevlar.com/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat 0 0;text-align:left;text-indent:-9999px;display:block;"></a></div><div class="pf-content"><p>I did a couple great sessions yesterday for the awesome Dallas Oracle User Group, (DOUG.)  It was the first time I did my thought leadership piece on <a href="https://www.slideshare.net/kellynpotvin/making-the-cloud-a-known-entity">Making Sense of the Cloud</a> and it was a great talk, with some incredible questions from the DOUG attendees!</p> <p><a href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/tumblr_mydw8x2fcg1sga4hho1_500/" rel="attachment wp-att-6710"><img class="alignnone wp-image-6710" src="https://i1.wp.com/dbakevlar.com/wp-content/uploads/2017/04/tumblr_mydw8x2fcg1sga4hho1_500.gif?resize=342%2C171" alt="" data-recalc-dims="1" /></a></p> <p>This points me to a <a href="http://www.mckinsey.com/business-functions/digital-mckinsey/our-insights/delivering-large-scale-it-projects-on-time-on-budget-and-on-value">great [older] post</a> on things IT can do to help guarantee tech projects are more successful. DevOps is a standard in most modern IT shops and DBAs are expected to find ways to be part of this valuable solution.  If you inspect the graph, displaying the value of different projects in ROI, vs. how often these different types of projects run over budget and time, it may be surprising.</p> <p><a href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/screen-shot-2017-04-28-at-11-12-49-am/" rel="attachment wp-att-6709"><img class="alignnone wp-image-6709" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.12.49-AM.png?resize=514%2C198" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.12.49-AM.png?resize=1024%2C395 1024w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.12.49-AM.png?resize=300%2C116 300w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.12.49-AM.png?resize=768%2C297 768w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.12.49-AM.png?w=1362 1362w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.12.49-AM.png?w=1200 1200w" sizes="(max-width: 514px) 100vw, 514px" data-recalc-dims="1" /></a></p> <p>Where non-software projects are concerned, the project rarely runs over the schedule, but in the way of benefits, often comes up short.  When we&#8217;re dealing with software, 33% of project run over time, but the ROI is excruciatingly high and worthy of the investment.  You have to wonder how much of that over-allocation in time feeds into the percentage increase in cost?  If this could be deterred, think about how more valuable these projects would become?</p> <p>The natural life of a database is growth.  Very few databases stay a consistent size, as companies prosper, critical data valuable to the company requires a secure storage location and a logical structure to report on that data is necessary for the company&#8217;s future.  This is where relational databases come in and they can become the blessing and the burden of any venture.  Database administrators are both respected and despised for their necessity to manage the database environment as the health of the database is an important part of the IT infrastructure and with the move to the cloud, a crucial part of any viable cloud migration project.</p> <p>How much of that time, money and delay shown in those projects are due to the sheer size and complexity of the database tier?  Our source data shows how often companies just aren&#8217;t able to hold it together due to lacking skills, lacking estimates in time estimates and other unknowns that come back to bit us.</p> <p><a href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/screen-shot-2017-04-28-at-11-59-38-am/" rel="attachment wp-att-6711"><img class="alignnone wp-image-6711" src="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.59.38-AM.png?resize=445%2C259" alt="" srcset="https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.59.38-AM.png?resize=1024%2C596 1024w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.59.38-AM.png?resize=300%2C175 300w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.59.38-AM.png?resize=768%2C447 768w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.59.38-AM.png?w=1346 1346w, https://i0.wp.com/dbakevlar.com/wp-content/uploads/2017/04/Screen-Shot-2017-04-28-at-11.59.38-AM.png?w=1200 1200w" sizes="(max-width: 445px) 100vw, 445px" data-recalc-dims="1" /></a></p> <p>I can&#8217;t stress enough why virtualization is key to removing a ton of the overhead, time and money that ends up going into software projects that include a database.</p> <p>Virtualizing non-production databases results in:</p> <ol> <li>Ability to deliver full copies of production for developers without extensive demands on storage.</li> <li>Ability to deliver those databases in a matter of minutes vs. days or weeks.</li> <li>Ability to refresh databases as needed for any project.</li> <li>Self-service user-interface so developers and testers can recover from a catastrophic issue in a database without having to grovel to a DBA to restore a virtual database.</li> <li>Ability to branch the VDB and do versioning, which is awesome for both developers and testers, (I know, we DBAs care very little about this feature&#8230; :))</li> <li>In migrations/cloud migrations, the ability to migrate databases in short periods of time and to limit the storage footprint to save company the money they were promised the cloud would deliver that most are finding out in the long run, is not occurring with traditional database scenarios.</li> </ol> <p>It&#8217;s definitely something to think about and if you don&#8217;t believe me, <a href="https://www.delphix.com/products/free-trial-request">test it yourself with a free trial!</a>  Not enough people are embracing virtualization and it takes so much of the headache out of RDBMS management.</p> <!-- Easy Plugin for AdSense Unfiltered [count: 3 is not less than 3] --></div><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=600" border="0" align="absmiddle" data-recalc-dims="1"> Tags:&nbsp;&nbsp;<a href="http://dbakevlar.com/tag/cloud/" rel="tag">Cloud</a>, <a href="http://dbakevlar.com/tag/cloud-migration/" rel="tag">cloud migration</a>, <a href="http://dbakevlar.com/tag/delphix/" rel="tag">Delphix</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/2017/04/delivering-migration-projects-time/&title=Delivering Migration Projects on Time"> <img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/delicious.gif?w=600" 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/2017/04/delivering-migration-projects-time/"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/facebook_icon.png?w=600" 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/2017/04/delivering-migration-projects-time/&title=Delivering Migration Projects on Time"><img src="https://i2.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/tweet.png?w=600" 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/2017/04/delivering-migration-projects-time/&title=Delivering Migration Projects on Time"><img src="https://i0.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/digg.png?w=600" 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/2017/04/delivering-migration-projects-time/&title=Delivering Migration Projects on Time"><img src="https://i1.wp.com/dbakevlar.com/wp-content/plugins/readers-from-rss-2-blog/wpsmartapps-lic/images/stumble.gif?w=600" 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/2017/04/delivering-migration-projects-time/#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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/09/em-12c-snap-clone/" >EM 12c Snap Clone</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com05/for-my-sister-kristi/" >For My Sister, Kristi</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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2017/03/clone-err-cloud-wars/" >Clone...err, Cloud Wars</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=600" 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=600" border="0" align="absmiddle" data-recalc-dims="1"> &nbsp;<a href="http://dbakevlar.com/2013/10/tuning-for-time-ctas-and-views/" >Tuning for Time- CTAS and Views</a></li></ul></div></div><hr style="color:#EBEBEB" /><small>Copyright © <a href="http://dbakevlar.com">DBA Kevlar</a> [<a href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/">Delivering Migration Projects on Time</a>], All Right Reserved. 2017.</small><br><p>The post <a rel="nofollow" href="http://dbakevlar.com/2017/04/delivering-migration-projects-time/">Delivering Migration Projects on Time</a> appeared first on <a rel="nofollow" href="http://dbakevlar.com">DBA Kevlar</a>.</p> dbakevlar http://dbakevlar.com/?p=6472 Fri Apr 28 2017 14:02:59 GMT-0400 (EDT) Oracle E-Business Suite 12.2 Mobile Application Security https://www.integrigy.com/security-resources/oracle-e-business-suite-122-mobile-application-security <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>This is the tenth posting in a blog series summarizing the new Oracle E-Business Suite 12.2 Mobile and web services functionality and recommendations for securing them.</p> <p>Oracle Corporation has been building out Mobile and Smartphone applications for the Oracle E-Business Suite for a number of releases. Before release 12.2.5, this functionality was designed only for deployment through a corporate VPN, not through an Oracle E-Business Suite external node over the Internet (e.g. a server in DMZ).</p> <p>With release, 12.2.5 external node deployment for Mobile applications is now an option. 12.2.5 bundles Oracle Mobile v4 and uses the E-Business Suite's WebLogic server.&nbsp; Specifically, 12.2.5 deploys the Oracle Mobile v4 REST services through the OAFM WebLogic application.&nbsp; In other words, with 12.2.5, Smartphone applications can now be Internet deployed without a need for a separate WebLogic Server; no need for a SOA Server or a separate WebLogic server.</p> <p style="margin-left: 40px;"><img alt="" src="/files/images/EBS12-2_Mobile.jpg" style="width: 318px; height: 175px;"></p> <p style="margin-left: 40px;">Oracle Mobile Using Native EBS REST</p> <p>To secure version 12.2.5 Oracle E-Business Suite Mobile applications, Oracle Mobile Security Services (OMSS) is used.&nbsp; Check with your Oracle sales representative if OMSS is separately licensed or not. OMSS provides critical URL shortening as well as white/blacklisting and other functionality specific to deploying Oracle Mobile applications. OMSS must be properly configured and is placed in front of OAFM.</p> <p style="margin-left: 40px;"><img alt="" src="/files/images/EBS12-2_Mobile2.jpg" style="width: 268px; height: 122px;"></p> <p style="margin-left: 40px;">OMSS in-line before&nbsp;OAFM</p> <p>If you have any questions, please contact us at <a href="mailto:info@integrigy.com">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h3>References</h3> <ul> <li><a data-jsb_prepared="ykbfl5hty6" href="/security-resources/oracle-e-business-suite-mobile-and-web-services-security-0" rel="noreferrer">Oracle E-Business Suite Mobile and Web Services Security</a>&nbsp;- Integrigy Whitepaper</li> <li><a data-jsb_prepared="q6ttrgzbhv" href="/security-resources/oracle-e-business-suite-mobile-and-web-services-security" rel="noreferrer">Oracle E-Business Suite Mobile and Web Services Security</a>&nbsp;- Integrigy Webinar</li> <li><a data-jsb_prepared="rb68nok2gd" href="https://support.oracle.com/rs?type=doc&amp;id=1375670.1" rel="noreferrer">Oracle E-Business Suite Release 12.2 Configuration in a DMZ</a>&nbsp;(Note 1375670.1)</li> </ul> <div class="grammarly-disable-indicator" style="margin-left: 40px;">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/web-services" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Web Services</a>, <a href="/tags/dmzexternal" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">DMZ/External</a>, <a href="/tags/oracle-e-business-suite" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle E-Business Suite</a> mmiller 553 at https://www.integrigy.com Fri Apr 28 2017 07:00:00 GMT-0400 (EDT) Deploy Weblogic to Oracle Container Cloud Service http://dbaontap.com/2017/04/27/deploy-weblogic-oracle-container-cloud-service/ <p>A few weeks ago, we walked through the process of creating an Oracle Container Cloud Service Instance. Since then, &#8220;Oracle announced today that it is collaborating with Docker to release  its flagship databases, middleware and developer tools into the Docker Store marketplace via the Docker Certification Program.&#8221; You can read more about that here. A quick ...</p> <p>The post <a rel="nofollow" href="http://dbaontap.com/2017/04/27/deploy-weblogic-oracle-container-cloud-service/">Deploy Weblogic to Oracle Container Cloud Service</a> appeared first on <a rel="nofollow" href="http://dbaontap.com">dbaonTap</a>.</p> DB http://dbaontap.com/?p=1272 Thu Apr 27 2017 16:20:45 GMT-0400 (EDT) How to Save a Package and Package Body to a .SQL File http://www.thatjeffsmith.com/archive/2017/04/how-to-save-a-package-and-package-body-to-a-sql-file/ <p>Got this question:</p> <blockquote class="twitter-tweet" data-lang="en"> <p lang="en" dir="ltr">Hello <a href="https://twitter.com/thatjeffsmith">@thatjeffsmith</a> ! How I save packege body and packege spec in same archive? <a href="https://twitter.com/hashtag/SqlDeveloper?src=hash">#SqlDeveloper</a></p> <p>&mdash; Felipe Pereira (@FelipeR_Pereira) <a href="https://twitter.com/FelipeR_Pereira/status/857632819677470720">April 27, 2017</a></p></blockquote> <p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p> <h3>Answer: YES.</h3> <div id="attachment_6146" style="width: 381px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg1.png" alt="" width="371" height="201" class="size-full wp-image-6146" /></a><p class="wp-caption-text">Make sure you select BOTH.</p></div> <p>Then set your file type.</p> <div id="attachment_6148" style="width: 730px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg2.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg2.png" alt="" width="720" height="580" class="size-full wp-image-6148" /></a><p class="wp-caption-text">.SQL as requested</p></div> <p>Now to confirm I&#8217;m really getting what I want.</p> <div id="attachment_6149" style="width: 730px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg3.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg3.png" alt="" width="720" height="580" class="size-full wp-image-6149" /></a><p class="wp-caption-text">Yes, that.</p></div> <p>SQL Developer will automatically open the file after it&#8217;s created.</p> <div id="attachment_6145" style="width: 628px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg4.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/pkg4.png" alt="" width="618" height="685" class="size-full wp-image-6145" /></a><p class="wp-caption-text">Voila!</p></div> <!-- Easy AdSense Unfiltered [count: 3 is not less than 3] --> thatjeffsmith http://www.thatjeffsmith.com/?p=6144 Thu Apr 27 2017 14:38:29 GMT-0400 (EDT) Quiz Night https://jonathanlewis.wordpress.com/2017/04/27/quiz-night-32/ <p>If this is the closing section of thetkprof output from the trace file of a single end-user session that has a performance problem, what&#8217;s the most obvious deduction you can make about the cause of the problem, and what sort of action would you take next ?</p> <pre class="brush: plain; title: ; notranslate"> OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 296 0.06 0.10 0 651 0 0 Execute 440 1.39 2.24 7 4664 0 146 Fetch 345 29.38 48.27 0 1709081 0 346 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 1081 30.84 50.63 7 1714396 0 492 Misses in library cache during parse: 5 Misses in library cache during execute: 7 Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------- Waited ---------- ------------ SQL*Net message to client 497 0.00 0.00 SQL*Net message from client 496 27.03 50.35 direct path read 1 0.00 0.00 OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 128199 6.94 11.46 0 2740 0 0 Execute 2274845 371.25 605.60 30 10031162 0 68200 Fetch 2225314 10.94 18.17 5 879297 0 577755 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4628358 389.14 635.23 35 10913199 0 645955 Misses in library cache during parse: 9701 Misses in library cache during execute: 134 Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------- Waited ---------- ------------ direct path read 1 0.00 0.00 latch: shared pool 3 0.00 0.00 12666 user SQL statements in session. 495 internal SQL statements in session. 13161 SQL statements in session. ******************************************************************************** Trace file: {concealed file name}.trc Trace file compatibility: 11.1.0.7 Sort options: default 1 session in tracefile. 12666 user SQL statements in trace file. 495 internal SQL statements in trace file. 13161 SQL statements in trace file. 5266 unique SQL statements in trace file. 39046623 lines in trace file. 742 elapsed seconds in trace file. </pre> <p>There&#8217;s no absoutely right answer to the last question, by the way &#8211; there are a couple of variations in approach that are likely to get to the same result in the same time, and some of those variations might have made looking at the tail end data the 2nd or 3rd step in the sequence.</p> <h3>Update</h3> <p>One of the skills of using your time effectively when trouble-shooting is the way you balance the time you spend noting the little details that might be relevant, and the time you then spend following up each detail to check for relevance and corroborating evidence. The amateurs might throw themselves into in-depth research on the first detail they notice; or if they&#8217;ve started with a short list of observations simply spend too much time on the first before moving on to the second.</p> <p>An exercise like looking at this tail-end this tkprof file and talking about what you spot and what you might do is just a little exercise in how to pace yourself as you tackle a problem. So, from my perspective, here a couple of obvious starting points:</p> <ul> <li>I said it was an end-user session complaining about performance &#8211; the last line of the file tells use that the elapsed time was 742 seconds, and the summary of recursive statement tells us there were 2.2 million executions. How can ANYTHING an end-user wants to do &#8220;quickly&#8221; require 3,000 executions per second of 12 minutes? I can ask that question because I know that &#8220;recursive&#8221; executions aren&#8217;t necessarily &#8220;sys-recursive&#8221;, SQL statements executed inside a PL/SQL block are also recursive &#8211; on top of that I can see, anyway, that there are 12,466 (probably all different) USER statements in the file &#8211; the user (or the user&#8217;s code) is doing something it almost certainly shouldn&#8217;t be doing. Those 2.2M executions are responsible for 10M buffer visits &#8211; does that suggest a lot of single row processing ?</li> <li>Associated with the 13,161 statements in the trace file there are 9,700 misses in the library cache during parse &#8211; that means &#8220;hard&#8221; parsing, probably means the user is getting through about 800 <strong>&#8220;new&#8221; </strong>statements per minute &#8211; but there are only 5,266 unique statements so part of the problem is that some recently used statements (or child cursors, at least) are being flushed from the library cache: again that suggests that they&#8217;re doing something wrong.</li> <li>As one of the commentators pointed out &#8211; a detail that I hadn&#8217;t noted initially &#8211; the number of &#8220;current&#8221; buffers is zero. This isn&#8217;t a mini-batch updating the database, it&#8217;s just a report (done badly).</li> </ul> <p>What would I do next ? If it wasn&#8217;t already immediately obvious I&#8217;d look for the statements that were responible for the very large numbers of executions; a call to <em><strong>tkprof</strong> </em>with <em><strong>sort=execnt</strong></em> as a parameter would push the high execution counts to the top of the file.  (The worst one had over 900,000 executions, the next 600,000). Then I&#8217;d do a <em><strong>grep</strong></em>, <em><strong>sed</strong></em>, <em><strong>sort</strong></em> with <em><strong>uniq -c</strong></em> to find the statement which (I&#8217;d guess &#8211; and there were 3 of them responsible for a few thousand variants each) were the generated texts using concatenation instead of bind variables. Then I&#8217;d go and find the owner of the code and sit down with them to work out how it should be re-engineered.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jonathanlewis.wordpress.com/17096/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jonathanlewis.wordpress.com/17096/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jonathanlewis.wordpress.com&#038;blog=491988&#038;post=17096&#038;subd=jonathanlewis&#038;ref=&#038;feed=1" width="1" height="1" /> Jonathan Lewis http://jonathanlewis.wordpress.com/?p=17096 Thu Apr 27 2017 12:29:26 GMT-0400 (EDT) EPM Business Content Track Kscope17 Session Highlights – Tiffany Briseno http://www.odtug.com/p/bl/et/blogaid=714&source=1 Here is an overview of a few sessions Track Lead Tiffany Briseno is most looking forward to at ODTUG Kscope17 and why she will be attending them: ODTUG http://www.odtug.com/p/bl/et/blogaid=714&source=1 Thu Apr 27 2017 08:52:01 GMT-0400 (EDT) Oracle Code : Prague – The Journey Begins http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/9L9Iu8n3vw4/ <p><img class="alignleft size-full wp-image-7058" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/oracle_code.png" alt="" width="188" height="189" />Another stupidly early start, so another night of no sleep, worrying about missing my flight. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I was up at 04:00 to get a taxi into the airport. The queues were massive, but for some reason I had a business ticket for the outward leg, so I could use the express lane and walk straight past the hordes of people and into the lounge. Happy days.</p> <p>The first flight was Birmingham to Munich, which took about 90 minutes. I had enough time between flights to head to the lounge and eat &#8220;free&#8221; peanuts. The flight from Munich to Prague was delayed, but I bumped into <a href="https://twitter.com/fnimphiu">Frank Nimphius</a>, who is in his medium-floppy hair phase at the moment, and we chatted about the previous Oracle Code events, while he casually flicked his hair. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>The flight to Prague took about 50 minutes. I had arranged a pick-up from the hotel shuttle, so there was a man with a sign waiting to pick us up, which was nice.</p> <p>After a few minutes and I was in the hotel in Prague with an afternoon to spare. I know I should go and have a look round, but sleep feels so much more important at this point!</p> <p><iframe src="https://www.youtube.com/embed/IevofHSUmM0" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>The <a href="https://developer.oracle.com/code/prague">Oracle Code : Prague</a> event is tomorrow, so I hope to see you there!</p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2017/04/27/oracle-code-prague-the-journey-begins/">Oracle Code : Prague &#8211; The Journey Begins</a> was first posted on April 27, 2017 at 1:48 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/9L9Iu8n3vw4" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7112 Thu Apr 27 2017 08:48:52 GMT-0400 (EDT) Afternoon of Talking Oracle http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/FdX8oUM6Z2w/ <p><img class="alignleft wp-image-7110" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/loud-2028623_640.png" alt="" width="150" height="178" />A couple of days ago I got an email from someone who had seen me speak at the <a href="https://oracle-base.com/blog/2017/04/20/oracle-code-london/">Oracle Code : London</a> event, asking if I would come and have a chat with them about Oracle, the Universe and everything. Since I was already booked off work, I said, &#8220;What about tomorrow?&#8221;, and it was arranged. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>So I spent yesterday afternoon speaking with three guys who were based in Birmingham, and a couple of guys based in Ireland, who were connected over Skype.</p> <p>The topics of conversation varied widely from straight tech questions to more general direction stuff. The main thing they wanted was impartial advice from someone who didn&#8217;t have an agenda. The fact I was not making any money out of this and I&#8217;ll never work for them, meant I could be an impartial Oracle fanboy. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Put me in a room and ask me Oracle questions and I&#8217;m as happy as a pig in sh*t. It was a really fun afternoon. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>I&#8217;ll be doing something similar when I&#8217;m over in Bulgaria in a few weeks, so that should be fun.</p> <p>Cheers</p> <p>Tim&#8230;</p> <hr style="border-top:black solid 1px" /><a href="https://oracle-base.com/blog/2017/04/27/afternoon-of-talking-oracle/">Afternoon of Talking Oracle</a> was first posted on April 27, 2017 at 6:31 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/FdX8oUM6Z2w" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7109 Thu Apr 27 2017 01:31:11 GMT-0400 (EDT) Accessing a Pivotal MySQL service instance within Pivotal Cloud Foundry http://feedproxy.google.com/~r/blogspot/PEqWE/~3/PaJJ4i90U-c/accessing-pivotal-mysql-service.html Recently at a hackathon we used the Pivotal MySQL service rather then a ClearDB MySQL service. As a result we could not connect to our instance from a third party tool as the service instance is locked down. There are various way to access the MySQL service to me the best two options are as follows.<br /><br /><b>1.&nbsp;Cloud Foundry CLI MySQL Plugin</b><br /><br />cf-mysql-plugin makes it easy to connect the mysql command line client to any MySQL-compatible database used by Cloud Foundry apps. Use it to<br /><br /><ul><li>inspect databases for debugging purposes</li><li>manually adjust schema or contents in development environments</li><li>dump and restore databases</li></ul><br />Install it as explained in the link below:<br /><br />&nbsp; <a href="https://github.com/andreasf/cf-mysql-plugin">https://github.com/andreasf/cf-mysql-plugin</a><br /><br /><i>** Using It **&nbsp;</i><br /><br />1. First ensure you are logged into a Pivotal Cloud Foundry instance you can determine that as follows<br /><br /><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ cf target -o ben.farrelly-org -s hackathon</span><br /><span style="color: #3d85c6;">API endpoint: &nbsp; https://api.run.pivotal.io</span><br /><span style="color: #3d85c6;">API version: &nbsp; &nbsp;2.78.0</span><br /><span style="color: #3d85c6;">User: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; papicella@pivotal.io</span><br /><span style="color: #3d85c6;">Org: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ben.farrelly-org</span><br /><span style="color: #3d85c6;">Space: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hackathon</span><br /><br />2. Verify you have a MySQL instance provisioned<br /><br /><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ cf services</span><br /><span style="color: #3d85c6;">Getting services in org ben.farrelly-org / space hackathon as papicella@pivotal.io...</span><br /><span style="color: #3d85c6;">OK</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">name &nbsp; &nbsp; &nbsp; &nbsp;service &nbsp; plan &nbsp; &nbsp;bound apps &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last operation</span><br /><span style="color: #3d85c6;">nab-mysql &nbsp; p-mysql &nbsp; 100mb &nbsp; nabhackathon-beacon, nabhackathon-merchant, pivotal-mysqlweb &nbsp; create succeeded</span><br /><br />3. Log in as shown below<br /><br /><span style="color: #3d85c6;">pasapicella@pas-macbook:~$ cf mysql nab-mysql</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">...</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">Oracle is a registered trademark of Oracle Corporation and/or its</span><br /><span style="color: #3d85c6;">affiliates. Other names may be trademarks of their respective</span><br /><span style="color: #3d85c6;">owners.</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">mysql&gt; show databases;</span><br /><span style="color: #3d85c6;">+-----------------------------------------+</span><br /><span style="color: #3d85c6;">| Database &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span><br /><span style="color: #3d85c6;">+-----------------------------------------+</span><br /><span style="color: #3d85c6;">| cf_53318c9c_caec_49be_9e33_075fade26183 |</span><br /><span style="color: #3d85c6;">| information_schema &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span><br /><span style="color: #3d85c6;">+-----------------------------------------+</span><br /><span style="color: #3d85c6;">2 rows in set (0.30 sec)</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">mysql&gt; use cf_53318c9c_caec_49be_9e33_075fade26183;</span><br /><span style="color: #3d85c6;">Database changed</span><br /><span style="color: #3d85c6;"><br /></span><span style="color: #3d85c6;">mysql&gt; tables;</span><br /><span style="color: #3d85c6;">+---------------------------------------------------+</span><br /><span style="color: #3d85c6;">| Tables_in_cf_53318c9c_caec_49be_9e33_075fade26183 |</span><br /><span style="color: #3d85c6;">+---------------------------------------------------+</span><br /><span style="color: #3d85c6;">| beacon &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span><br /><span style="color: #3d85c6;">| beacon_product &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span><br /><span style="color: #3d85c6;">| customer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span><br /><span style="color: #3d85c6;">| customer_registration &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span><br /><span style="color: #3d85c6;">| merchant &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span><br /><span style="color: #3d85c6;">| payment &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span><br /><span style="color: #3d85c6;">| payment_product &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span><br /><span style="color: #3d85c6;">| product &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span><br /><span style="color: #3d85c6;">+---------------------------------------------------+</span><br /><span style="color: #3d85c6;">8 rows in set (0.29 sec)</span><br /><div><br /></div><b>2. Pivotal MySQL*Web</b><br /><br />PivotalMySQL*Web is a browser based SQL tool rendered using Bootstrap UI for MySQL PCF service instances which allows you to run SQL commands and view schema objects from a browser based interface. Use it to<br /><br /><ul><li>Multiple Command SQL worksheet for DDL and DML</li><li>Run Explain Plan across SQL Statements</li><li>View/Run DDL command against Tables/Views/Indexes/Constraints</li><li>Command History</li><li>Auto Bind to Pivotal MySQL Services bound to the Application within Pivotal Cloud Foundry&nbsp;</li><li>Manage JDBC Connections</li><li>Load SQL File into SQL Worksheet from Local File System</li><li>SQL Worksheet with syntax highlighting support</li><li>HTTP GET request to auto login without a login form</li><li>Export SQL query results in JSON or CSV formats</li><li>Generate DDL for schema objects</li></ul><br /><br />It does this deployed within Pivotal Cloud Foundry as an application instance and auto binds to the MySQL service for you if you choose to bind it as part of the <b>"cf push"</b> and a manifest.yml which looks as follows<br /><br /><span style="color: #3d85c6;">---</span><br /><span style="color: #3d85c6;">applications:</span><br /><span style="color: #3d85c6;">- name: pivotal-mysqlweb</span><br /><span style="color: #3d85c6;">&nbsp; memory: 512M</span><br /><span style="color: #3d85c6;">&nbsp; instances: 1</span><br /><span style="color: #3d85c6;">&nbsp; host: pivotal-mysqlweb-${random-word}</span><br /><span style="color: #3d85c6;">&nbsp; path: ./target/PivotalMySQLWeb-0.0.1-SNAPSHOT.jar</span><br /><span style="color: #3d85c6;">&nbsp; services:</span><br /><span style="color: #3d85c6;">&nbsp; &nbsp; - pas-mysql</span><br /><br />Install it as explained in the link below:<br /><br />&nbsp;&nbsp;<a href="https://github.com/pivotal-cf/PivotalMySQLWeb">https://github.com/pivotal-cf/PivotalMySQLWeb</a><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-afk5qE9xxR8/WQF8a157XEI/AAAAAAAAA8U/3K19EVJKwog-okhuij4q5gPHueaA0JSFgCLcB/s1600/Screen%2BShot%2B2017-04-27%2Bat%2B3.06.24%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://1.bp.blogspot.com/-afk5qE9xxR8/WQF8a157XEI/AAAAAAAAA8U/3K19EVJKwog-okhuij4q5gPHueaA0JSFgCLcB/s320/Screen%2BShot%2B2017-04-27%2Bat%2B3.06.24%2BPM.png" width="320" /></a></div><br /><div class="blogger-post-footer">http://feeds.feedburner.com/TheBlasFromPas</div><img src="http://feeds.feedburner.com/~r/blogspot/PEqWE/~4/PaJJ4i90U-c" height="1" width="1" alt=""/> Pas Apicella tag:blogger.com,1999:blog-6527688743456205256.post-518195169317192143 Thu Apr 27 2017 01:18:00 GMT-0400 (EDT) Cross-origin resource sharing (CORS) from Spring Boot Rest Controllers http://feedproxy.google.com/~r/blogspot/PEqWE/~3/MhXBkQOwxz8/cross-origin-resource-sharing-cors-from.html Was involved in a hackathon recently and after creating a few Spring boot API's for the UI team to consume and they run into errors around (Cross-origin resource sharing ).&nbsp;For security reasons, browsers prohibit AJAX calls to resources residing outside the current origin.<br /><br />I have seen this before and Spring Boot has support to ensure you can control which resources can be accessed outside of the current origin. It's as simple as an annotation "<b>@CrossOrigin</b>", as shown below. In this example every request from this Rest Controller supports resource calls residing outside the current origin.<br /><pre class="brush: java"> <br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.springframework.beans.factory.annotation.Autowired;<br />import org.springframework.http.HttpStatus;<br />import org.springframework.http.MediaType;<br />import org.springframework.web.bind.annotation.*;<br /><br />import java.util.List;<br /><br />@CrossOrigin<br />@RestController<br />@RequestMapping(value = "/beacon")<br />public class BeaconRest<br />{<br /> private static Log logger = LogFactory.getLog(BeaconRest.class);<br /><br /> @Autowired<br /> private BeaconRepository beaconRepository;<br /><br /> @RequestMapping(value = "/all",<br /> method = RequestMethod.GET,<br /> produces = MediaType.APPLICATION_JSON_VALUE)<br /> public List&lt;Beacon&gt; allBeacons()<br /> {<br /> logger.info("Invoking /beacon/all RESTful method");<br /> return beaconRepository.findAll();<br /> }<br /></pre><br />Of course it's much more flexible then that adding the ability to add options, and you can read more about it here.<br /><br /><a href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/cors.html">https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/cors.html</a><div class="blogger-post-footer">http://feeds.feedburner.com/TheBlasFromPas</div><img src="http://feeds.feedburner.com/~r/blogspot/PEqWE/~4/MhXBkQOwxz8" height="1" width="1" alt=""/> Pas Apicella tag:blogger.com,1999:blog-6527688743456205256.post-2774863765018186356 Tue Apr 25 2017 19:45:00 GMT-0400 (EDT) Searching Source Code & Your Views in SQL Developer http://www.thatjeffsmith.com/archive/2017/04/searching-source-code-your-views-in-sql-developer/ <p>Code searching isn&#8217;t new for version 4.2. It&#8217;s not even new for version 4.1, or v4.0&#8230;but what IS new, is that some folks consider the SQL behind their VIEW objects to be &#8216;code.&#8217;</p> <p>So, for version 4.2, you can say, search my PL/SQL source AND search the SQL behind my views.</p> <div id="attachment_6140" style="width: 495px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/view-source1.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/view-source1.png" alt="" width="485" height="571" class="size-full wp-image-6140" /></a><p class="wp-caption-text">Just check the &#8216;All Views&#8217; toggle.</p></div> <p>You&#8217;ll notice there&#8217;s an option to add wildcards around your search term for the &#8216;Code&#8217; category &#8211; that&#8217;s useful when searching object names in your data dictionary and also for references to that object in your source code.</p> <p>Hit &#8216;Go&#8217;, and voila.</p> <div id="attachment_6141" style="width: 1034px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/view-source2.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/view-source2.png" alt="" width="1024" height="348" class="size-full wp-image-6141" /></a><p class="wp-caption-text">Clicking on the search result will open the object.</p></div> <p>It&#8217;s not exactly easy to search on views, the code behind a view is stored in a LONG column. But, it&#8217;s not impossible.</p> <p>You can see how we do it by using the Statements panel.</p> <div id="attachment_6142" style="width: 1034px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/view-source3.png"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2017/04/view-source3.png" alt="" width="1024" height="566" class="size-full wp-image-6142" /></a><p class="wp-caption-text">Ah, so that&#8217;s how they do it&#8230;</p></div> <h3>Don&#8217;t forget the &#8216;Trick!&#8217;</h3> <p>My favorite way to access the search.</p> <div id="attachment_4161" style="width: 1034px" class="wp-caption aligncenter"><a href="http://www.thatjeffsmith.com/wp-content/uploads/2013/12/search.gif"><img src="http://www.thatjeffsmith.com/wp-content/uploads/2013/12/search.gif" alt="" width="1024" height="576" class="size-full wp-image-4161" /></a><p class="wp-caption-text">Select, alt+g, and &#8216;Go&#8217; <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p></div> thatjeffsmith http://www.thatjeffsmith.com/?p=6139 Tue Apr 25 2017 09:38:56 GMT-0400 (EDT) Oracle Unified Auditing Performance Issues and 12.2 Improvements https://www.integrigy.com/security-resources/oracle-unified-auditing-performance-issues-and-122-improvements <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even" property="content:encoded"> <p>For those of you using and/or considering Unified Auditing, in case you might have missed, Oracle has made significant changes to Unified Auditing in 12.2. Unified Auditing, new in Oracle 12c, represents a complete rewrite of how native database auditing works - see the links below for Integrigy research on Unified Auditing.</p> <p>With Oracle 12.1, when using Unified Auditing, reads of the UNIFIED_AUDIT_TRAIL view were not performant. With Oracle 12.2, a new relational partitioned table (AUDSYS.AUD$UNIFIED) is created to solve the performance issue, and a patch (22782757) has been issued to backport the fix to 12.1.</p> <p>For 12.1 clients using Unified Auditing, the patch and/or the workaround should be a high priority consideration.</p> <p>Thank you to&nbsp;Mark Dietrich for pointing out the 12.1 patch.</p> <p>If you have any questions, please contact us at&nbsp;<a data-jsb_prepared="x98iw8szym" href="mailto:info@integrigy.com" rel="noreferrer">info@integrigy.com</a></p> <p>-Michael Miller, CISSP-ISSMP, CCSP, CCSK</p> <h3 class="grammarly-disable-indicator">References</h3> <ul> <li>Oracle Support Note 2063340.1 (Performance Issues While Monitoring the Unified Audit Trail)&nbsp;<a data-jsb_prepared="utk4q80m30" href="https://support.oracle.com/rs?type=doc&amp;id=2063340.1" rel="noreferrer">https://support.oracle.com/rs?type=doc&amp;id=2063340.1</a></li> <li>Integrigy Whitepaper:&nbsp;<a data-jsb_prepared="8h5b69075s" href="/security-resources/oracle-12c-unified-auditing" rel="noreferrer">Oracle 12c Unified Auditing</a></li> <li>Integrigy Webinar &amp; Presebntation:&nbsp;<a data-jsb_prepared="5btis3ssku" href="/security-resources/oracle-12c-unified-auditing-webinar" rel="noreferrer">Oracle 12c Unified Auditing Webinar</a></li> <li>Integrigy Audit Framework Whitepaper:&nbsp;<a data-jsb_prepared="978rjrxpev" href="/security-resources/integrigy-guide-database-auditing-and-logging" rel="noreferrer">Integrigy Guide to Database Auditing and Logging</a></li> <li>Mark Dietrich's Blog:&nbsp;<a data-jsb_prepared="ircihnacxq" href="https://mikedietrichde.com/2017/04/19/unified-auditing-performance-improvements-in-oracle-12-1-0-2/" rel="noreferrer">https://mikedietrichde.com/2017/04/19/unified-auditing-performance-improvements-in-oracle-12-1-0-2/</a></li> </ul> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> <div class="grammarly-disable-indicator">&nbsp;</div> </div></div></div><a href="/tags/auditing" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Auditing</a>, <a href="/tags/oracle-database" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Oracle Database</a> mmiller 574 at https://www.integrigy.com Tue Apr 25 2017 07:00:00 GMT-0400 (EDT) Certification : OCP 12c and OCP 12cR2 Updates http://feedproxy.google.com/~r/TheOracleBaseBlog/~3/1Yb5AgW9OcQ/ <p><img class="alignleft wp-image-7105" src="https://oracle-base.com/blog/wp-content/uploads/2017/04/graduate-150374_640.png" alt="" width="150" height="157" />Just a couple of certification related updates.</p> <p><strong>Upgrade to oracle Database 12c (1Z0-060)</strong></p> <p>About a week ago I finally got round to doing the 12c certification. As followers of the blog/website know I&#8217;ve been writing articles about Oracle Database 12c since it was released nearly 4 years ago and for pretty much all of that time I&#8217;ve been trying to convince myself to sit the 12c OCP DBA upgrade exam. It&#8217;s not that I care about the piece of paper itself (<a href="/articles/misc/oracle-certification-frequently-asked-questions">see my certification FAQ</a>), but I&#8217;ve had so many people write and thank me for <a href="/articles/12c/articles-12c#ocp">my 12c revision notes</a>, that it felt a little bit odd I hadn&#8217;t actually sat the exam myself.</p> <p>The biggest factor in delaying taking this exam was it was not a conventional 12cR1 new features exam. Instead it was an upgrade from OCP 9i, 10g, 11g to 12cR1. That meant it potentially covered anything introduced from 9iR2 onward.  That means in addition to learning the new features well enough to pass the exam, you also have to cover the old ground, which is quite a burden. Oracle used to provide catch-up exams like this as well as a straight new features exam and I think that was a better option.</p> <p>Now I&#8217;m sure some of you will think, &#8220;But you should know that stuff anyway!&#8221;, and you are right, but knowing enough to do the job and knowing the type of things you are tested on in an exam are not the same thing. The thought of revising everything from 9iR2 onward was quite daunting and it put me off doing this exam. This seemed to be a common reaction amongst many people I spoke to.</p> <p>I realise maintaining a catch-up exam and a regular new features exam is extra work for the certification folks, but if you want to keep people on the OCP treadmill, I think you&#8217;ve got to do this. I came very close to ditching the whole OCP thing as a result of this 12c upgrade exam, and I&#8217;m sure I&#8217;m not the only one.</p> <p><strong>Upgrade Oracle DBA 11g/12c to 12cR2 (1Z1-074)</strong></p> <p>I mentioned in a <a href="/blog/2017/04/20/is-oracle-database-12-2-really-oracle-database-13-1/">recent post</a> there is an exam called “Upgrade Oracle DBA 11g/12c to 12cR2 (1Z1-074)” in beta at the moment. I&#8217;ve been writing about Oracle Database 12cR2 since its release on the Oracle Public Cloud, so there are quite a few articles on my website already.</p> <p>Normally the release 2 articles get lumped together, since they don&#8217;t form part of an exam syllabus, but now they do, so I&#8217;ve split them up into two sections.</p> <ul> <li><a href="/articles/12c/articles-12c#ocp-122">Upgrade Oracle DBA 11g/12c to 12cR2 (1Z1-074) : OCP DBA Upgrade Exam</a></li> <li><a href="/articles/12c/articles-12c#database-12cr2">Oracle Database 12c Release 2 : Miscellaneous Articles</a></li> </ul> <p>I&#8217;ll continue to add new articles to both sections, and at some point I will have a complete set of revision notes for the new exam. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Once again the new exam is a catch-up exam, but at least it only covers 12cR1 and 12cR2 this time. As before, I think this is a mistake, but that&#8217;s just my opinion. <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Part of me wants to cram for this new exam and get it done on the cheap while it is in beta. Part of me thinks I may never take this new exam. Time will tell I guess. You&#8217;ll probably see an update post in 4 years when I&#8217;ve finally got round to it. <img src="https://s.w.org/images/core/emoji/2.2.1/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/2017/04/25/certification-ocp-12c-and-ocp-12cr2-updates/">Certification : OCP 12c and OCP 12cR2 Updates</a> was first posted on April 25, 2017 at 11:32 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/1Yb5AgW9OcQ" height="1" width="1" alt=""/> Tim... https://oracle-base.com/blog/?p=7104 Tue Apr 25 2017 06:32:08 GMT-0400 (EDT) </