The Oracle Public Cloud Experience Technology Hand-on-lab Workshop is sponsored by the Cloud Computing SIG of IOUG. Here’s what the high level agenda will look like for the Dallas Cloud Experience Technology Day Workshop being held on December 9th, 2016 at the Oracle Las Colinas office:

09:30 – 10:00 – Check-in
10:00 – 10:30 – Registration and cloud account setup for each student
10:30 – 11:00 – Introduction to Oracle Cloud and SSH Security
11:00 – 11:30 – Hands on Lab Workshop

11:30 – 12:00 – Oracle Storage Cloud and Database Backup Cloud Lecture
12:00 – 12:30 – Hands on Workshop
12:30 – 13:30 – Provided lunch and work through lunch as needed

13:30 – 14:00 – Oracle Cloud Customer Case Study
14:00 – 14:30 – Database Cloud Lecture
14:30 – 15:30 – Hands on Lab Workshop
15:30 – 16:00 – Oracle Storage Cloud Storage Appliance Lecture and Demo
16:00 – 16:15 – Final Questions and Answers

The outline for the Cloud Experience Technology Workshop will include the following content:
Introduction to Oracle Cloud
Review Oracle Cloud Fundamentals
– Logging into the OPC (for the first time)
– Discuss how to sign up for a free trial account

Storage Cloud
Oracle Storage Cloud Service Fundamentals
Object Storage
Archive Storage
What is a Container
Defining the Replication Policy
Setting the Replication Policy

Demonstrate Cloud SIG’s curl API in action
What is curl
Obtaining the Authorization token
Creating a Container with curl
Creating an Archive Container with Curl
Uploading a file with curl
Listing the Contents of a Container
Deleting a File in a Container
How much space have I consumed so far?
Upload CLI Jar
Uploading a File Using the uploadcli.jar File

Oracle Database Cloud
Provisioning a Database
* Generating SSH Keys
SSH’ing to the Database Server as oracle
SSH’ing to the Database Server as ops and root
Opening/enabling Port 1521
Creating a Database Link Between Private Database and Public Database Cloud
Creating a Secure Tunnel with ssh
Adding Database Storage to DBaaS

Oracle Database Backup Cloud
Show students how and where to download the Database Cloud Backup Module
Installing the Database Cloud Backup Module
Configuring RMAN for Backups
Backing up the Database to OPC
Discuss how and what is needed to perform backups for Oracle Standard Edition databases
Best Practices for Backing Up to OPC
Demonstrate how to restore and recover a database from the RMAN Database Cloud Backup

Review of Oracle Storage Cloud Software Appliance
Logging into the OSCSA
Best Practices with OSCSA
Where to find additional documentation
Quick Demo of Oracle Storage Cloud Software Appliance

Installing Docker for Mac is super easy. It is a simple as downloading and copying the program to the application folder.

To download Docker for Mac visit the docker site:

Please download the stable release.

Simply Drag and Drop the Docker icon to the Application folder. It is that easy to install Docker on the Mac.

Launch Docker from the applications folder. Since this is the first time you are invoking Docker, you will get the standard message about Docker being an “… application downloaded from the Internet. Are you sure that you want to open it?” Click on the Open button.


At the Welcome screen, click on the Next button

Click on the OK button to allow for privileged access.

You will be asked to provide your password. Enter your password to finish the installation process. Now, you will see docker on your task bar on top of the screen.


Optionally un-select the Send diagnostics & usage data check box; click on “Got it” button to complete the installation.

Now from any terminal, type the following commands:

Dobbys-MacBook-Pro:~ Dobby$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Dobbys-MacBook-Pro:~ Dobby$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.3
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
 Volume: local
 Network: null host bridge overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.27-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.951 GiB
Name: moby
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 15
 Goroutines: 27
 System Time: 2016-11-19T15:45:11.894167372Z
 EventsListeners: 1
No Proxy: *.local, 169.254/16
WARNING: No kernel memory limit support
Insecure Registries:

Next, click on the Docker logo on the top status bar and select Preferences. Move the memory indicator to 4GB or more and click the restart button at the button of the screen.

Here’s a simple script that anyone can use to check for lags in Data Guard. Basically, there’s two kind of lags in Data Guard that we want to monitor. The first is the apply_lag which is the amount of time the standby database is lagging behind relative to the primary database due to application of redo data. The second is the transport_lag which provides information about how much redo data is behind (in terms of time) because it is not available or applicable on the standby database. The transport lag can be used to determine bandwidth issues between the primary and stanby database sites.

You can specify the MIN_THRESHOLD parameter which will be the 2nd parameter that is passed into the dg_check_lag.ksh script (below). For lot of our customers who are on Active Data Guard, we change this script to determine seconds that the transport and apply lag is behind by. It is common for us to send alerts when the transport or apply lag is greater than 30 seconds for Active Data Guard customers.

Stay tuned as I will reveal scripts to monitor gaps in archive log sequences. I use the term gap loosely here as it is not determining the gap from v$archive_gap but looking at the number of applied archive logs on the standby database and comparing the applied archive logs to the maximum sequence number based on the thread number.

Come visit Viscosity North America for latest updates to local events, white papers and case studies.

In the first part of this series, we went through installing Oracle Linux 7 Update 2. In this part of the series, we will configure the Oracle Linux UEK OS, configure the docker image, and configure OSCSA (Oracle Storage Cloud Software Appliance).

First add the UEKR4 channel to the /etc/yum.repos.d/ repository:

name=Latest Unbreakable Enterprise Kernel Release 4 for Oracle Linux $releasever ($basearch)

We need to boot the Linux Host Using the UEK4 Kernel. The UEK version that ships from Oracle Linux 7 update 2 is UEK 3 Release 8.

We need to remove the UEK 3.8 first. You will encounter errors about the packages that the 3.8 kernel is dependent on. If you see such errors similar to what you see below, you can ignore them.

[root@oscsa yum.repos.d]# rpm -qa |grep -i kernel
[root@oscsa yum.repos.d]# rpm -e kernel-uek
warning: file /lib/modules/3.8.13-98.7.1.el7uek.x86_64/modules.symbols.bin: remove failed: No such file or directory
warning: file /lib/modules/3.8.13-98.7.1.el7uek.x86_64/modules.softdep: remove failed: No such file or directory
warning: file /lib/modules/3.8.13-98.7.1.el7uek.x86_64/modules.devname: remove failed: No such file or directory
warning: file /lib/modules/3.8.13-98.7.1.el7uek.x86_64/modules.dep.bin: remove failed: No such file or directory
warning: file /lib/modules/3.8.13-98.7.1.el7uek.x86_64/modules.builtin.bin: remove failed: No such file or directory
warning: file /lib/modules/3.8.13-98.7.1.el7uek.x86_64/modules.alias.bin: remove failed: No such file or directory
[root@oscsa yum.repos.d]# rpm -qa |grep -i kernel

[root@oscsa yum.repos.d]# rpm -e kernel-uek-firmware-3.8.13-98.7.1.el7uek.noarch

Now we can install UEK 4:

[root@oscsa yum.repos.d]# yum install kernel-uek
Loaded plugins: langpacks, ulninfo
ol7_UEKR3                                                                                                                         | 1.2 kB  00:00:00     
ol7_UEKR4                                                                                                                         | 1.2 kB  00:00:00     
ol7_latest                                                                                                                        | 1.4 kB  00:00:00     
(1/2): ol7_UEKR4/x86_64/updateinfo                                                                                                |  32 kB  00:00:00     
(2/2): ol7_UEKR4/x86_64/primary                                                                                                   | 8.9 MB  00:00:03     
ol7_UEKR4                                                                                                                                        208/208
Resolving Dependencies
--> Running transaction check
---> Package kernel-uek.x86_64 0:4.1.12-61.1.16.el7uek will be installed
--> Processing Dependency: kernel-firmware = 4.1.12-61.1.16.el7uek for package: kernel-uek-4.1.12-61.1.16.el7uek.x86_64
--> Processing Dependency: dracut-kernel >= 033-360.0.3 for package: kernel-uek-4.1.12-61.1.16.el7uek.x86_64
--> Processing Dependency: linux-firmware >= 20160604-44.git57b649d9.0.2 for package: kernel-uek-4.1.12-61.1.16.el7uek.x86_64
--> Running transaction check
---> Package dracut.x86_64 0:033-359.0.1.el7 will be updated
--> Processing Dependency: dracut = 033-359.0.1.el7 for package: dracut-network-033-359.0.1.el7.x86_64
--> Processing Dependency: dracut = 033-359.0.1.el7 for package: dracut-config-rescue-033-359.0.1.el7.x86_64
---> Package dracut.x86_64 0:033-360.0.3.el7_2.1 will be an update
---> Package kernel-uek-firmware.noarch 0:4.1.12-61.1.16.el7uek will be installed
---> Package linux-firmware.noarch 0:20150904-43.git6ebf5d5.0.1.el7 will be updated
---> Package linux-firmware.noarch 0:20160604-44.git57b649d9.0.2.el7 will be an update
--> Running transaction check
---> Package dracut-config-rescue.x86_64 0:033-359.0.1.el7 will be updated
---> Package dracut-config-rescue.x86_64 0:033-360.0.3.el7_2.1 will be an update
---> Package dracut-network.x86_64 0:033-359.0.1.el7 will be updated
---> Package dracut-network.x86_64 0:033-360.0.3.el7_2.1 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

 Package                                Arch                     Version                                              Repository                    Size
 kernel-uek                             x86_64                   4.1.12-61.1.16.el7uek                                ol7_UEKR4                     42 M
Installing for dependencies:
 kernel-uek-firmware                    noarch                   4.1.12-61.1.16.el7uek                                ol7_UEKR4                    2.0 M
Updating for dependencies:
 dracut                                 x86_64                   033-360.0.3.el7_2.1                                  ol7_latest                   311 k
 dracut-config-rescue                   x86_64                   033-360.0.3.el7_2.1                                  ol7_latest                    49 k
 dracut-network                         x86_64                   033-360.0.3.el7_2.1                                  ol7_latest                    90 k
 linux-firmware                         noarch                   20160604-44.git57b649d9.0.2.el7                      ol7_latest                    31 M

Transaction Summary
Install  1 Package  (+1 Dependent package)
Upgrade             ( 4 Dependent packages)

Total download size: 75 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
warning: /var/cache/yum/x86_64/7Server/ol7_latest/packages/dracut-033-360.0.3.el7_2.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY 
Public key for dracut-033-360.0.3.el7_2.1.x86_64.rpm is not installed
(1/6): dracut-033-360.0.3.el7_2.1.x86_64.rpm                                                                                      | 311 kB  00:00:00     
(2/6): dracut-config-rescue-033-360.0.3.el7_2.1.x86_64.rpm                                                                        |  49 kB  00:00:00     
(3/6): dracut-network-033-360.0.3.el7_2.1.x86_64.rpm                                                                              |  90 kB  00:00:00     
Public key for kernel-uek-firmware-4.1.12-61.1.16.el7uek.noarch.rpm is not installed                                   ] 1.8 MB/s | 8.7 MB  00:00:37 ETA 
(4/6): kernel-uek-firmware-4.1.12-61.1.16.el7uek.noarch.rpm                                                                       | 2.0 MB  00:00:03     
(5/6): kernel-uek-4.1.12-61.1.16.el7uek.x86_64.rpm                                                                                |  42 MB  00:00:24     
(6/6): linux-firmware-20160604-44.git57b649d9.0.2.el7.noarch.rpm                                                                  |  31 MB  00:00:26     
Total                                                                                                                    2.8 MB/s |  75 MB  00:00:27     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
Importing GPG key 0xEC551F03:
 Userid     : "Oracle OSS group (Open Source Software group) <>"
 Fingerprint: 4214 4123 fecf c55b 9086 313d 72f9 7b74 ec55 1f03
 Package    : 7:oraclelinux-release-7.2-1.0.5.el7.x86_64 (@anaconda/7.2)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Updating   : dracut-033-360.0.3.el7_2.1.x86_64                                                                                                    1/10 
  Updating   : linux-firmware-20160604-44.git57b649d9.0.2.el7.noarch                                                                                2/10 
  Installing : kernel-uek-firmware-4.1.12-61.1.16.el7uek.noarch                                                                                     3/10 
  Installing : kernel-uek-4.1.12-61.1.16.el7uek.x86_64                                                                                              4/10 
  Updating   : dracut-network-033-360.0.3.el7_2.1.x86_64                                                                                            5/10 
  Updating   : dracut-config-rescue-033-360.0.3.el7_2.1.x86_64                                                                                      6/10 
  Cleanup    : dracut-config-rescue-033-359.0.1.el7.x86_64                                                                                          7/10 
  Cleanup    : dracut-network-033-359.0.1.el7.x86_64                                                                                                8/10 
  Cleanup    : linux-firmware-20150904-43.git6ebf5d5.0.1.el7.noarch                                                                                 9/10 
  Cleanup    : dracut-033-359.0.1.el7.x86_64                                                                                                       10/10 
  Verifying  : dracut-033-360.0.3.el7_2.1.x86_64                                                                                                    1/10 
  Verifying  : dracut-network-033-360.0.3.el7_2.1.x86_64                                                                                            2/10 
  Verifying  : kernel-uek-firmware-4.1.12-61.1.16.el7uek.noarch                                                                                     3/10 
  Verifying  : kernel-uek-4.1.12-61.1.16.el7uek.x86_64                                                                                              4/10 
  Verifying  : dracut-config-rescue-033-360.0.3.el7_2.1.x86_64                                                                                      5/10 
  Verifying  : linux-firmware-20160604-44.git57b649d9.0.2.el7.noarch                                                                                6/10 
  Verifying  : dracut-config-rescue-033-359.0.1.el7.x86_64                                                                                          7/10 
  Verifying  : dracut-033-359.0.1.el7.x86_64                                                                                                        8/10 
  Verifying  : linux-firmware-20150904-43.git6ebf5d5.0.1.el7.noarch                                                                                 9/10 
  Verifying  : dracut-network-033-359.0.1.el7.x86_64                                                                                               10/10 

  kernel-uek.x86_64 0:4.1.12-61.1.16.el7uek                                                                                                              

Dependency Installed:
  kernel-uek-firmware.noarch 0:4.1.12-61.1.16.el7uek                                                                                                     

Dependency Updated:
  dracut.x86_64 0:033-360.0.3.el7_2.1                     dracut-config-rescue.x86_64 0:033-360.0.3.el7_2.1 dracut-network.x86_64 0:033-360.0.3.el7_2.1
  linux-firmware.noarch 0:20160604-44.git57b649d9.0.2.el7


Generate a new grub.cfg file:

[root@oscsa ~]# grub2-mkconfig > grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.1.12-61.1.16.el7uek.x86_64
Found initrd image: /boot/initramfs-4.1.12-61.1.16.el7uek.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-09ec9b0ef1b542bcbde9147e2e5d21e8
Found initrd image: /boot/initramfs-0-rescue-09ec9b0ef1b542bcbde9147e2e5d21e8.img

Move the updated grub.cfg file to the grub2 directory:

[root@oscsa ~]# mv grub.cfg /boot/grub2
mv: overwrite ‘/boot/grub2/grub.cfg’? y

We need to disable SELinux in the Host. SELinux is currently not supported and should be disabled.

[root@oscsa grub2]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.

Then we need to reboot the server
[root@oscsa grub2]# reboot

After the reboot, let’s make sure that SELinux is disabled:

[root@oscsa ~]# sestatus
SELinux status:                 disabled

Let’s also make sure that we are booting off the new UEK 4 kernel release:

[root@oscsa ~]# uname -a
Linux 4.1.12-61.1.16.el7uek.x86_64 #2 SMP Fri Oct 21 14:23:20 PDT 2016 x86_64 x86_64 x86_64 GNU/Linux

We need to edit the /etc/yum.repos.d/public-yum-ol7.repo file on the host and enable the channels for adding and optional_latest:
• Change the value of enable to 1 in addons.
• Change the value of enable to 1 in optional_latest.

Here’s what these sections should look like:

name=Oracle Linux $releasever Optional Latest ($basearch)

name=Oracle Linux $releasever Add ons ($basearch)

What is the Oracle Storage Cloud Software Appliance?
In a nutshell, the Oracle Storage Cloud Software Appliance serves as a cloud storage gateway to easily connect on-premise applications/data shares/workflows to Oracle Storage Cloud Service.

What is the Hardware Requirements
• 2 Cores
• 4GB of memory

What is the Software Requirements
• Oracle Linux 7 with UEK Release 4 or later
• Docker 1.8.3 or later. For information on Docker, please visit
• At least on NFS version 4.0

Installing Oracle Linux 7.2
We will start with installing Oracle Linux 7.2 and then in the next article, I will provide the step-by-step instructions to setup and configure the Oracle Storage Cloud Software Appliance.

Choose to option to Install Oracle Linux 7.2 and hit the enter/return button

Accept the default to install the English language and Click on Continue


Select on the Date & Time area to modify the default timezone for the VM.
We are changing our timezone from New York to Chicago
You can choose to enable NTP at this time
Click on the Done button when you are complete to take you back to the previous screen.

If you scroll down, you will see the Network & Host Name in the SYSTEM section. Click on the Network & Host Name part of the screen.

Change the Host name
Click on the Off switch on the far right corner to enable the Ethernet network
Click on the Done button when you are complete to take you back to the previous screen.

We will choose to keep the Minimal Install option.

For this particular installation, we will keep the “Automatic partitioning selected” option but it is required for you to navigate to the Installation Destination screen to validate that is what you choose:
By default, in the Partitioning section, the Automatically configure partitioning option is chosen. You can configure /root, /, /tmp/, swap and other file systems but for this configuration, we will choose the Automatically configure partitioning option and click on the Done button.

Now the Begin Installation button will be enabled. You are ready to start the installation.

While the installation is in progress, we will want to set the root password. NewImage

In the Root Password screen, we created the root password:
Because our password is weak, we will be asked to click on the Done button twice.

When you are routed back to the previous screen, you can optionally create additional users.


When the installation is complete, you will be asked to Reboot the VM. You will be asked to accept the license agreement.

This year will be my 10th consecutive year as a speaker at Oracle OpenWorld. I will focus on Oracle Cloud, Oracle Cloud and More Oracle Cloud. I will also be speaking at the 1/2 day Cloud Experience Technical Workshop (formerly known as Cloud Attack at the IOUG – Independent Oracle Users Group conference) with several other ACEs and ACEDs from The Oracle ACE Program on behalf of the Cloud SIG. We have a lot of preparation to do for updating our content for the Cloud Experience Technical Workshop.

OOW Speaker Header

For the Backup to the Cloud and Beyond session, we are thinking outside the box and delivering a solution that will handle both Oracle related files and non-Oracle files. Here’s the abstract to the session:

Let us challenge your thoughts about backing up files to Oracle Cloud. Every customer should be considering RMAN backups of their databases to Oracle Cloud (if not already). Backing up the Oracle database to the cloud is just the tip of the iceberg. You have to think outside the box and consider the entire solution and include the non-database files such as middleware backups, documents, reports, logs, etc.

In this session, we will reveal how Viscosity provides end-to-end backup solutions to Oracle Cloud. We will present a deep-dive content of backing up the database to the Oracle Cloud. We will go into extensive details on backing up non-oracle files to Oracle Cloud. We will demonstrate various methods to uploading and downloading various types files (including RMAN) to the Cloud and how to drive performance.

Stay tuned for additional details to my deep-dive session on Back Up to the Cloud and Beyond and for the Cloud Experience Technical Workshop.

Remember the number 33. I always seem to forget the $33 per TB per month number as I talk with potential customers. For a mere $33.00 / TB / Month, you can backup your Oracle Databases to the Oracle Public Cloud. For this low amount you get:

  • Unlimited Oracle Database backups
  • Automatic three-way data mirroring
  • Regional data isolation
  • Transparent access via Oracle Database Cloud Backup Module and Recovery Manager (RMAN)
  • RMAN encryption and compression

Performing backups to the cloud is a no brainer. Everyone should be considering backing up their database to the cloud.

Posted on July 27, 2016

Here’s an example to create a user account for Charles:

/usr/sbin/groupadd -K GID_MIN=500 -K GID_MAX=10000 ckim
/usr/sbin/useradd -g ckim -K UID_MIN=500 -K UID_MAX=10000 -c "Charles Kim" -d /home/ckim -m -s /bin/bash ckim

Then here is another example of creating a user for David:

# set -o vi
# for i in dknight; do groupadd -K GID_MIN=500 -K GID_MAX=10000 $i; /usr/sbin/useradd -g $i -K UID_MIN=500 -K UID_MAX=10000 -d /home/$i -m -s /bin/bash $i ; chage -d0 $i;echo "newpassword" | passwd --stdin $i;done
Changing password for user dknight