Feed aggregator

Controlling Your Cloud - Uploading Large Files To Oracle Object Storage

OTN TechBlog - Wed, 2019-01-02 16:42

In my last post, we took an introductory look at working with the Oracle Cloud Infrastructure (OCI) API with the OCI Java SDK.  I mentioned that my initial motivation for digging into the SDK was to handle large file uploads to OCI Object Storage, and in this post, we'll do just that.  

As I mentioned, HTTP wasn't originally meant to handle large file transfers (Hypertext Transfer Protocol).  Rather, file transfers were typically (and often, still) handled via FTP (File Transfer Protocol).  But web developers deal with globally distributed clients and FTP requires server setup, custom desktop clients, different firewall rules and authentication which ultimately means large files end up getting transferred over HTTP/S.  Bit Torrent can be a better solution if the circumstances allow, but distributed files aren't often the case that web developers are dealing with.  Thankfully, many advances in HTTP over the past several years have made large file transfer much easier to deal with, the main advance being chunked transfer encoding (known as "chunked" or "multipart" file upload).  You can read more about Oracle's support for multipart uploading, but to explain it in the simplest possible way a file is broken up into several pieces ("chunks"), uploaded (at the same time, if necessary), and reassembled into the original file once all of the pieces have been uploaded.

The process to utilize the Java SDK for multipart uploading involves, at a minimum, three steps.  Here's the JavaDocs for the SDK in case you're playing along at home and want more info.

  1. Initiate the multipart upload
  2. Upload the individual file parts
  3. Commit the upload

The SDK provides methods for all of the steps above, as well as a few additional steps for listing existing multipart uploads, etc.  Individual parts can be up to 50 GiB.  The SDK process using the ObjectClient (see the previous post) necessary to complete the three steps above are explained as such:

1.  Call ObjectClient.createMultipartUpload, passing an instance of a CreateMultipartUploadRequest (which contains an instance of CreateMultipartUploadRequestDetails)

To break down step 1, you're just telling the API "Hey, I want to upload a file.  The object name is "foo.jpg" and it's content type is "image/jpeg".  Can you give me an identifier so I can associate different pieces of that file later on?"  And the API will return that to you in the form of a CreateMultipartUploadResponse.  Here's the code:

So to create the upload, I make a call to /oci/upload-create and pass the objectName and contentType param.  I'm invoking it via Postman, but this could just as easily be a fetch() call in the browser:

So now we've got an upload identifier for further work (see "uploadId", #2 in the image above).  On to step 2 of the process:

2.  Call ObjectClient.uploadPart(), passing an instance of UploadPartRequest (including the uploadId, the objectName, a sequential part number, and the file chunk), which receives an UploadPartResponse.  The response will contain an "ETag" which we'll need to save, along with the part number, to complete the upload later on.

Here's what the code looks like for step 2:

And here's an invocation of step 2 in Postman, which was completed once for each part of the file that I chose to upload.  I'll save the ETag values along with each part number for use in the completion step.

Finally, step 3 is to complete the upload.

3.  Call ObjectClient.commitMultipartUpload(), passing an instance of CommitMultipartUploadRequest (which contains the object name, uploadId and an instance of CommitMultipartUploadDetails - which itself contains an array of CommitMultipartUploadPartDetails).

Sounds a bit complicated, but it's really not.  The code tells the story here:

When invoked, we get a simple result confirming the completion of the multipart upload commit!  If we head over to our bucket in Object Storage, we can see the file details for the uploaded and reassembled file:

And if we visit the URL via a presigned URL (or directly, if the bucket is public), we can see the image.  In this case, a picture of my dog Moses:

As I've hopefully illustrated, the Oracle SDK for multipart upload is pretty straightforward to use once it's broken down into the steps required.  There are a number of frontend libraries to assist you with multipart upload once you have the proper backend service in place (in my case, the file was simply broken up using the "split" command on my MacBook).  

Elasticsearch 6.1.2 Will Soon Be Available

PeopleSoft Technology Blog - Wed, 2019-01-02 16:18

Elasticsearch 6.1.2 is the minimum version planned for PeopleTools with release 8.57 (more information on that coming soon).  In addition, 6.1.2 is also planned for availability on PeopleTools 8.55 and 8.56.  Upgrade to Elasticsearch 6.1.2 will require full indexing of all search definitions.  Customers will be able to use the Live Cutover feature in the PeopleSoft Search Framework to migrate to Elasticsearch 6.1.2 with no downtime.

If you are using Elasticsearch 2.3.2, and want to continue on it, that version will be supported for one year following our support of version 6.1.2.  At that point, Oracle will only support version 6.1.2. Note that support for PeopleTools 8.55 ends before October 2019, so Elasticsearch 2.3.2 and 6.1.2 support for 8.55 ends with the last CPU for 8.55.  At that point no fixes to the PeopleSoft Search Framework or Elasticsearch will be available for 8.55.

Look for more announcements on this important transition including new features for Search that will be available with PeopleTools 8.57.  These will be posted on the Search concepts page on peoplesoftinfo.com.

Installing Oracle Instant Client 18c RPM on Red Hat Linux 7.6 from Oracle public yum repository

Pierre Forstmann Oracle Database blog - Mon, 2018-12-31 11:15

In October 2018 Oracle Corp. has made available RPM to install Oracle Instant Client 18c on Linux: actually it has already been possible to install Oracle Instant CLient RPM that you could download from OTN (for example Oracle Instant Client 12.2.0.1 RPM for Linux). But you had to:

  • connect to OTN with your Oracle account
  • accept OTN License Agreement.
  • What is new with Oracle Instant Client 18c is that now you can install this RPM directly from Oracle public yum repositories without connecting to OTN with your Oracle account and without accepting the OTN License Agreement as detailed in Sergio Leunissen blog post.

    In this blog post I will document the steps I have run on Red Hat Linux 7.6 to install these RPMs.

    As usual I have run my tests on a minimal Red Hat Linux 7.6 virtual machine that has 4 GB of RAM (and 4GB of swap), one 40 GB disk and internet connection. This machine is registered in Red Hat Developer network:

    # subscription-manager list
    +-------------------------------------------+
        Installed Product Status
    +-------------------------------------------+
    Product Name:   Red Hat Enterprise Linux Server
    Product ID:     69
    Version:        7.6
    Arch:           x86_64
    Status:         Subscribed
    Status Details: 
    Starts:         08/14/2018
    Ends:           08/15/2019
    
    # yum repolist
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    repo id                                                                        repo name                                                                              status
    rhel-7-server-rpms/7Server/x86_64                                              Red Hat Enterprise Linux 7 Server (RPMs)                                               23 346
    repolist: 23 346
    

    I have first installed wget:

    # yum -y install wget
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    Resolving Dependencies
    --> Running transaction check
    ---> Package wget.x86_64 0:1.14-18.el7 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    =====================================================================================================================================================
     Package                      Arch                           Version                                Repository                                  Size
    =====================================================================================================================================================
    Installing:
     wget                         x86_64                         1.14-18.el7                            rhel-7-server-rpms                         547 k
    
    Transaction Summary
    =====================================================================================================================================================
    Install  1 Package
    
    Total download size: 547 k
    Installed size: 2.0 M
    Downloading packages:
    wget-1.14-18.el7.x86_64.rpm                                                                                                   | 547 kB  00:00:01     
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : wget-1.14-18.el7.x86_64                                                                                                           1/1 
      Verifying  : wget-1.14-18.el7.x86_64                                                                                                           1/1 
    
    Installed:
      wget.x86_64 0:1.14-18.el7                                                                                                                          
    
    Complete!
    

    I have installed yum-utils:

    # yum install -y yum-utils
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    Resolving Dependencies
    --> Running transaction check
    ---> Package yum-utils.noarch 0:1.1.31-50.el7 will be installed
    --> Processing Dependency: python-kitchen for package: yum-utils-1.1.31-50.el7.noarch
    --> Running transaction check
    ---> Package python-kitchen.noarch 0:1.1.1-5.el7 will be installed
    --> Processing Dependency: python-chardet for package: python-kitchen-1.1.1-5.el7.noarch
    --> Running transaction check
    ---> Package python-chardet.noarch 0:2.2.1-1.el7_1 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    =====================================================================================================================================================
     Package                             Arch                        Version                               Repository                               Size
    =====================================================================================================================================================
    Installing:
     yum-utils                           noarch                      1.1.31-50.el7                         rhel-7-server-rpms                      121 k
    Installing for dependencies:
     python-chardet                      noarch                      2.2.1-1.el7_1                         rhel-7-server-rpms                      227 k
     python-kitchen                      noarch                      1.1.1-5.el7                           rhel-7-server-rpms                      266 k
    
    Transaction Summary
    =====================================================================================================================================================
    Install  1 Package (+2 Dependent packages)
    
    Total download size: 614 k
    Installed size: 2.8 M
    Downloading packages:
    (1/3): python-kitchen-1.1.1-5.el7.noarch.rpm                                                                                  | 266 kB  00:00:00     
    (2/3): python-chardet-2.2.1-1.el7_1.noarch.rpm                                                                                | 227 kB  00:00:01     
    (3/3): yum-utils-1.1.31-50.el7.noarch.rpm                                                                                     | 121 kB  00:00:00     
    -----------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                388 kB/s | 614 kB  00:00:01     
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : python-chardet-2.2.1-1.el7_1.noarch                                                                                               1/3 
      Installing : python-kitchen-1.1.1-5.el7.noarch                                                                                                 2/3 
      Installing : yum-utils-1.1.31-50.el7.noarch                                                                                                    3/3 
      Verifying  : python-chardet-2.2.1-1.el7_1.noarch                                                                                               1/3 
      Verifying  : python-kitchen-1.1.1-5.el7.noarch                                                                                                 2/3 
      Verifying  : yum-utils-1.1.31-50.el7.noarch                                                                                                    3/3 
    
    Installed:
      yum-utils.noarch 0:1.1.31-50.el7                                                                                                                   
    
    Dependency Installed:
      python-chardet.noarch 0:2.2.1-1.el7_1                                      python-kitchen.noarch 0:1.1.1-5.el7                                     
    
    Complete!
    

    I have downloaded Oracle Linux public yum repo file:

    # cd /etc/yum.repos.d/
    # wget http://yum.oracle.com/public-yum-ol7.repo
    --2018-12-24 17:08:21--  http://yum.oracle.com/public-yum-ol7.repo
    Resolving yum.oracle.com (yum.oracle.com)... 23.205.82.159
    Connecting to yum.oracle.com (yum.oracle.com)|23.205.82.159|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 15423 (15K) [text/plain]
    Saving to: ‘public-yum-ol7.repo’
    
    100%[===========================================================================================================>] 15,423      --.-K/s   in 0.01s   
    
    2018-12-24 17:08:22 (1.17 MB/s) - ‘public-yum-ol7.repo’ saved [15423/15423]
    

    I have enabled the Oracle Instant Client yum repository:

    # yum-config-manager --enable ol7_oracle_instantclient
    Loaded plugins: product-id, subscription-manager
    ========================================================== repo: ol7_oracle_instantclient ===========================================================
    [ol7_oracle_instantclient]
    async = True
    bandwidth = 0
    base_persistdir = /var/lib/yum/repos/x86_64/7Server
    baseurl = https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/
    cache = 0
    cachedir = /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient
    check_config_file_age = True
    compare_providers_priority = 80
    cost = 1000
    deltarpm_metadata_percentage = 100
    deltarpm_percentage = 
    enabled = 1
    enablegroups = True
    exclude = 
    failovermethod = priority
    ftp_disable_epsv = False
    gpgcadir = /var/lib/yum/repos/x86_64/7Server/ol7_oracle_instantclient/gpgcadir
    gpgcakey = 
    gpgcheck = True
    gpgdir = /var/lib/yum/repos/x86_64/7Server/ol7_oracle_instantclient/gpgdir
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    hdrdir = /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient/headers
    http_caching = all
    includepkgs = 
    ip_resolve = 
    keepalive = True
    keepcache = False
    mddownloadpolicy = sqlite
    mdpolicy = group:small
    mediaid = 
    metadata_expire = 21600
    metadata_expire_filter = read-only:present
    metalink = 
    minrate = 0
    mirrorlist = 
    mirrorlist_expire = 86400
    name = Oracle Instant Client for Oracle Linux 7Server (x86_64)
    old_base_cache_dir = 
    password = 
    persistdir = /var/lib/yum/repos/x86_64/7Server/ol7_oracle_instantclient
    pkgdir = /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient/packages
    proxy = False
    proxy_dict = 
    proxy_password = 
    proxy_username = 
    repo_gpgcheck = False
    retries = 10
    skip_if_unavailable = False
    ssl_check_cert_permissions = True
    sslcacert = 
    sslclientcert = 
    sslclientkey = 
    sslverify = True
    throttle = 0
    timeout = 30.0
    ui_id = ol7_oracle_instantclient/x86_64
    ui_repoid_vars = releasever,
       basearch
    username = 
    
    

    I have downloaded the required PGP key from Oracle yum repositories to avoid: GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle" :

    # wget http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    --2018-12-24 17:14:00--  http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7
    Resolving public-yum.oracle.com (public-yum.oracle.com)... 23.201.154.122
    Connecting to public-yum.oracle.com (public-yum.oracle.com)|23.201.154.122|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1011 [text/plain]
    Saving to: ‘/etc/pki/rpm-gpg/RPM-GPG-KEY-oracle’
    
    100%[===========================================================================================================>] 1,011       --.-K/s   in 0s      
    
    2018-12-24 17:14:02 (80.2 MB/s) - ‘/etc/pki/rpm-gpg/RPM-GPG-KEY-oracle’ saved [1011/1011]
    

    I have installed 3 Oracle Instant Client RPM in order to be able to use SQL*Plus and SQL*Loader:

    # yum -y install oracle-instantclient18.3-basic.x86_64 oracle-instantclient18.3-sqlplus.x86_64 oracle-instantclient18.3-tools.x86_64
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    Resolving Dependencies
    --> Running transaction check
    ---> Package oracle-instantclient18.3-basic.x86_64 0:18.3.0.0.0-2 will be installed
    ---> Package oracle-instantclient18.3-sqlplus.x86_64 0:18.3.0.0.0-2 will be installed
    ---> Package oracle-instantclient18.3-tools.x86_64 0:18.3.0.0.0-2 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    =====================================================================================================================================================
     Package                                          Arch                   Version                      Repository                                Size
    =====================================================================================================================================================
    Installing:
     oracle-instantclient18.3-basic                   x86_64                 18.3.0.0.0-2                 ol7_oracle_instantclient                  52 M
     oracle-instantclient18.3-sqlplus                 x86_64                 18.3.0.0.0-2                 ol7_oracle_instantclient                 703 k
     oracle-instantclient18.3-tools                   x86_64                 18.3.0.0.0-2                 ol7_oracle_instantclient                 936 k
    
    Transaction Summary
    =====================================================================================================================================================
    Install  3 Packages
    
    Total size: 54 M
    Installed size: 228 M
    Downloading packages:
    warning: /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient/packages/oracle-instantclient18.3-sqlplus-18.3.0.0.0-2.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
    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
     From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : oracle-instantclient18.3-basic-18.3.0.0.0-2.x86_64                                                                                1/3 
      Installing : oracle-instantclient18.3-sqlplus-18.3.0.0.0-2.x86_64                                                                              2/3 
      Installing : oracle-instantclient18.3-tools-18.3.0.0.0-2.x86_64                                                                                3/3 
      Verifying  : oracle-instantclient18.3-sqlplus-18.3.0.0.0-2.x86_64                                                                              1/3 
      Verifying  : oracle-instantclient18.3-basic-18.3.0.0.0-2.x86_64                                                                                2/3 
      Verifying  : oracle-instantclient18.3-tools-18.3.0.0.0-2.x86_64                                                                                3/3 
    
    Installed:
      oracle-instantclient18.3-basic.x86_64 0:18.3.0.0.0-2                     oracle-instantclient18.3-sqlplus.x86_64 0:18.3.0.0.0-2                    
      oracle-instantclient18.3-tools.x86_64 0:18.3.0.0.0-2                    
    
    Complete!
    

    I have checked Oracle Client target directories:

    # ls -al /usr/lib/oracle/18.3/client64/lib
    total 228772
    drwxr-xr-x. 3 root root      4096 Dec 31 17:10 .
    drwxr-xr-x. 4 root root        28 Dec 31 17:10 ..
    -rwxr-xr-x. 1 root root       342 Oct 20 02:39 glogin.sql
    -rwxr-xr-x. 1 root root   8348633 Oct 20 02:39 libclntshcore.so.18.1
    -rwxr-xr-x. 1 root root  77879027 Oct 20 02:39 libclntsh.so.18.1
    -rwxr-xr-x. 1 root root   3537979 Oct 20 02:39 libipc1.so
    -rwxr-xr-x. 1 root root    467468 Oct 20 02:39 libmql1.so
    -rwxr-xr-x. 1 root root     77405 Oct 20 02:39 libnfsodm18.so
    -rwxr-xr-x. 1 root root   6636088 Oct 20 02:39 libnnz18.so
    -rwxr-xr-x. 1 root root   2229347 Oct 20 02:39 libocci.so.18.1
    -rwxr-xr-x. 1 root root 126949719 Oct 20 02:39 libociei.so
    -rwxr-xr-x. 1 root root    160875 Oct 20 02:39 libocijdbc18.so
    -rwxr-xr-x. 1 root root    394835 Oct 20 02:39 libons.so
    -rwxr-xr-x. 1 root root    118171 Oct 20 02:39 liboramysql18.so
    -rwxr-xr-x. 1 root root   1655813 Oct 20 02:39 libsqlplusic.so
    -rwxr-xr-x. 1 root root   1616347 Oct 20 02:39 libsqlplus.so
    drwxr-xr-x. 3 root root        19 Dec 31 17:10 network
    -rw-r--r--. 1 root root   4109057 Oct 20 02:41 ojdbc8.jar
    -rw-r--r--. 1 root root     37519 Oct 20 02:41 xstreams.jar
    # ls -rtl /usr/lib/oracle/18.3/client64/bin
    # ls -al /usr/lib/oracle/18.3/client64/bin
    total 4548
    drwxr-xr-x. 2 root root     121 Dec 31 17:10 .
    drwxr-xr-x. 4 root root      28 Dec 31 17:10 ..
    -rwxr-xr-x. 1 root root   40227 Oct 20 02:40 adrci
    -rwxr-xr-x. 1 root root 1062611 Oct 20 02:43 exp
    -rwxr-xr-x. 1 root root  228252 Oct 20 02:43 expdp
    -rwxr-xr-x. 1 root root   57268 Oct 20 02:40 genezi
    -rwxr-xr-x. 1 root root  530557 Oct 20 02:43 imp
    -rwxr-xr-x. 1 root root  240274 Oct 20 02:43 impdp
    -rwxr-xr-x. 1 root root 1679005 Oct 20 02:43 sqlldr
    -rwxr-xr-x. 1 root root   22569 Oct 20 02:43 sqlplus
    -rwxr-xr-x. 1 root root  786154 Oct 20 02:43 wrc
    

    I have created a specific Linux account:

    # groupadd apps
    # useradd -g apps app
    

    I have added following remote host name in /etc/hosts:

    192.168.56.26	ol7defs1 ol7defs1.localdomain
    

    On ol7defs1, I have stopped firewall service:

    # systemctl stop firewalld
    

    On local host I have switched to “app” account to test SQL*Plus on a remote database instance:

    # su - app
    Last login: Mon Dec 24 17:04:45 CET 2018 on pts/0
    $ PATH=/usr/lib/oracle/18.3/client64/bin/:$PATH
    $ export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
    $ sqlplus -v
    
    SQL*Plus: Release 18.0.0.0.0 - Production
    Version 18.3.0.0.0
    
    $ sqlplus system/oracle@ol7defs1:1521/cdb
    
    SQL*Plus: Release 18.0.0.0.0 - Production on Mon Dec 24 17:09:08 2018
    Version 18.3.0.0.0
    
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    
    Last Successful login time: Mon Dec 24 2018 16:08:26 +01:00
    
    Connected to:
    Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
    Version 18.3.0.0.0
    
    SQL> column name format a10
    SQL> select name, con_id from v$containers;
    
    NAME	       CON_ID
    ---------- ----------
    CDB$ROOT	    1
    PDB$SEED	    2
    PDB		    3
    
    SQL> Disconnected from Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
    Version 18.3.0.0.0
    $ 
    

    It is also possible to use tnsnames.ora aliases in connect strings with TNS_ADMIN environment variable.

    I have also disabled Oracle Linux 7 repositories in order to keep only the Red Hat one to avoid mixing Oracle Linux and Red Hat Linux packages:

    # yum repolist
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    repo id                                                    repo name                                                                                                  status
    ol7_UEKR5/x86_64                                           Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux 7Server (x86_64)                              134
    ol7_latest/x86_64                                          Oracle Linux 7Server Latest (x86_64)                                                                       11 718
    ol7_oracle_instantclient/x86_64                            Oracle Instant Client for Oracle Linux 7Server (x86_64)                                                         7
    rhel-7-server-rpms/7Server/x86_64                          Red Hat Enterprise Linux 7 Server (RPMs)                                                                   23 346
    repolist: 35 205
    # yum-config-manager --disable ol7_oracle_instantclient
    Loaded plugins: product-id, subscription-manager
    ====================================================================== repo: ol7_oracle_instantclient ======================================================================
    [ol7_oracle_instantclient]
    async = True
    bandwidth = 0
    base_persistdir = /var/lib/yum/repos/x86_64/7Server
    baseurl = https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/
    cache = 0
    cachedir = /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient
    check_config_file_age = True
    compare_providers_priority = 80
    cost = 1000
    deltarpm_metadata_percentage = 100
    deltarpm_percentage = 
    enabled = 0
    enablegroups = True
    exclude = 
    failovermethod = priority
    ftp_disable_epsv = False
    gpgcadir = /var/lib/yum/repos/x86_64/7Server/ol7_oracle_instantclient/gpgcadir
    gpgcakey = 
    gpgcheck = True
    gpgdir = /var/lib/yum/repos/x86_64/7Server/ol7_oracle_instantclient/gpgdir
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    hdrdir = /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient/headers
    http_caching = all
    includepkgs = 
    ip_resolve = 
    keepalive = True
    keepcache = False
    mddownloadpolicy = sqlite
    mdpolicy = group:small
    mediaid = 
    metadata_expire = 21600
    metadata_expire_filter = read-only:present
    metalink = 
    minrate = 0
    mirrorlist = 
    mirrorlist_expire = 86400
    name = Oracle Instant Client for Oracle Linux 7Server (x86_64)
    old_base_cache_dir = 
    password = 
    persistdir = /var/lib/yum/repos/x86_64/7Server/ol7_oracle_instantclient
    pkgdir = /var/cache/yum/x86_64/7Server/ol7_oracle_instantclient/packages
    proxy = False
    proxy_dict = 
    proxy_password = 
    proxy_username = 
    repo_gpgcheck = False
    retries = 10
    skip_if_unavailable = False
    ssl_check_cert_permissions = True
    sslcacert = 
    sslclientcert = 
    sslclientkey = 
    sslverify = True
    throttle = 0
    timeout = 30.0
    ui_id = ol7_oracle_instantclient/x86_64
    ui_repoid_vars = releasever,
       basearch
    username = 
    # yum-config-manager --disable ol7_latest       
    Loaded plugins: product-id, subscription-manager
    ============================================================================= repo: ol7_latest =============================================================================
    [ol7_latest]
    async = True
    bandwidth = 0
    base_persistdir = /var/lib/yum/repos/x86_64/7Server
    baseurl = https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/
    cache = 0
    cachedir = /var/cache/yum/x86_64/7Server/ol7_latest
    check_config_file_age = True
    compare_providers_priority = 80
    cost = 1000
    deltarpm_metadata_percentage = 100
    deltarpm_percentage = 
    enabled = 0
    enablegroups = True
    exclude = 
    failovermethod = priority
    ftp_disable_epsv = False
    gpgcadir = /var/lib/yum/repos/x86_64/7Server/ol7_latest/gpgcadir
    gpgcakey = 
    gpgcheck = True
    gpgdir = /var/lib/yum/repos/x86_64/7Server/ol7_latest/gpgdir
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    hdrdir = /var/cache/yum/x86_64/7Server/ol7_latest/headers
    http_caching = all
    includepkgs = 
    ip_resolve = 
    keepalive = True
    keepcache = False
    mddownloadpolicy = sqlite
    mdpolicy = group:small
    mediaid = 
    metadata_expire = 21600
    metadata_expire_filter = read-only:present
    metalink = 
    minrate = 0
    mirrorlist = 
    mirrorlist_expire = 86400
    name = Oracle Linux 7Server Latest (x86_64)
    old_base_cache_dir = 
    password = 
    persistdir = /var/lib/yum/repos/x86_64/7Server/ol7_latest
    pkgdir = /var/cache/yum/x86_64/7Server/ol7_latest/packages
    proxy = False
    proxy_dict = 
    proxy_password = 
    proxy_username = 
    repo_gpgcheck = False
    retries = 10
    skip_if_unavailable = False
    ssl_check_cert_permissions = True
    sslcacert = 
    sslclientcert = 
    sslclientkey = 
    sslverify = True
    throttle = 0
    timeout = 30.0
    ui_id = ol7_latest/x86_64
    ui_repoid_vars = releasever,
       basearch
    username = 
    
    # yum-config-manager --disable ol7_UEKR5       
    Loaded plugins: product-id, subscription-manager
    ============================================================================= repo: ol7_UEKR5 ==============================================================================
    [ol7_UEKR5]
    async = True
    bandwidth = 0
    base_persistdir = /var/lib/yum/repos/x86_64/7Server
    baseurl = https://yum.oracle.com/repo/OracleLinux/OL7/UEKR5/x86_64/
    cache = 0
    cachedir = /var/cache/yum/x86_64/7Server/ol7_UEKR5
    check_config_file_age = True
    compare_providers_priority = 80
    cost = 1000
    deltarpm_metadata_percentage = 100
    deltarpm_percentage = 
    enabled = 0
    enablegroups = True
    exclude = 
    failovermethod = priority
    ftp_disable_epsv = False
    gpgcadir = /var/lib/yum/repos/x86_64/7Server/ol7_UEKR5/gpgcadir
    gpgcakey = 
    gpgcheck = True
    gpgdir = /var/lib/yum/repos/x86_64/7Server/ol7_UEKR5/gpgdir
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    hdrdir = /var/cache/yum/x86_64/7Server/ol7_UEKR5/headers
    http_caching = all
    includepkgs = 
    ip_resolve = 
    keepalive = True
    keepcache = False
    mddownloadpolicy = sqlite
    mdpolicy = group:small
    mediaid = 
    metadata_expire = 21600
    metadata_expire_filter = read-only:present
    metalink = 
    minrate = 0
    mirrorlist = 
    mirrorlist_expire = 86400
    name = Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux 7Server (x86_64)
    old_base_cache_dir = 
    password = 
    persistdir = /var/lib/yum/repos/x86_64/7Server/ol7_UEKR5
    pkgdir = /var/cache/yum/x86_64/7Server/ol7_UEKR5/packages
    proxy = False
    proxy_dict = 
    proxy_password = 
    proxy_username = 
    repo_gpgcheck = False
    retries = 10
    skip_if_unavailable = False
    ssl_check_cert_permissions = True
    sslcacert = 
    sslclientcert = 
    sslclientkey = 
    sslverify = True
    throttle = 0
    timeout = 30.0
    ui_id = ol7_UEKR5/x86_64
    ui_repoid_vars = releasever,
       basearch
    username = 
    
    # yum repolist
    Loaded plugins: product-id, search-disabled-repos, subscription-manager
    repo id                                                                        repo name                                                                              status
    rhel-7-server-rpms/7Server/x86_64                                              Red Hat Enterprise Linux 7 Server (RPMs)                                               23 346
    repolist: 23 346
    
    Categories: DBA Blogs

    [Blog] Steps to Deploy Process in Dell Boomi Platform

    Online Apps DBA - Mon, 2018-12-31 02:24

    Want to Deploy your Dell Boomi Process but finding an Issue… Worry not!!! We are Here Visit: https://k21academy.com/dellboomi15 and Watch our New Omniscient Blog Covering: ✔ Prerequisite about Dell Boomi ✔ Steps one Need to Follow to Deploy Dell Boomi Process Want to Deploy your Dell Boomi Process but finding an Issue… Worry not!!! We […]

    The post [Blog] Steps to Deploy Process in Dell Boomi Platform appeared first on Oracle Trainings for Apps & Fusion DBA.

    Categories: APPS Blogs

    How to manage DB and Cell servers remotely on Exadata with ExaCLI utility - (Part 1)

    Syed Jaffar - Sun, 2018-12-30 05:26
    Whoever is working with Exadata or knew how to administrate Exadata major components like DB and Cell nodes, will certainly knows the use of CellCLI, dcli and DBMCLI utilities. This blog post is focused about managing database and cell servers remotely using the ExCLI and ExadCLI utilities.

    Simply put, ExaCLI is a command line tool which comes by default on database & cell nodes that provides the capabilities of remote management for database and cell servers on the Exadata. Unlike CellCLI only runs on cell servers and DBMCLI runs on only DB nodes, the ExaCLI can manage database or cell servers remotely.

    There are two key advantages of using the ExaCLI: 1) Its useful when you can't get SSH connectivity and root user credentials to connect DB or Cell nodes. 2) With Exadata at customer or cloud, customers won't get SSH and root user access for CellCLI and DBMCLI. So, the ExaCLI could be handy to access the servers.

    ExaCLI works with the non-system (default) users on the DB or cell serers. Therefore, you must create a role based user in order use the utility to connect to a DB or cell server. The utility is found under /user/local/sbin directory.



    Creating users for ExaCLI




    Note : not all CellCLI commands are compatible on ExaCLI. Below sections givens an overview about the limitations:


    Below are some of the examples demonstrate how to establish remote connectivity with DB or cell servers using ExaCLI:




    In the next blog post, you will learn how to use the Exadcli utility execute the commands on a set of DB or cell nodes at once.


    References:

    https://docs.oracle.com/en/engineered-systems/exadata-database-machine/dbmmn/exadcli.html#GUID-1C738F05-2A69-4B75-BB1E-B578C9081487

    https://docs.oracle.com/en/engineered-systems/exadata-database-machine/dbmmn/exacli.html#GUID-3D57CDC3-561C-48CE-AB1E-0279E6D24DAE

    [Blog] Build your first Dell Boomi Process in 5 min

    Online Apps DBA - Sat, 2018-12-29 03:08

    Finding an Issue in Creating a Process in Dell Boomi Platform Don’t Worry we are Here to Help you…. Visit: https://k21academy.com/dellboomi14 and find Our Amazing New Blog Covering: ✔ Prerequisite about Dell Boomi Process ✔ Steps For Building a Process in Dell Boomi Platform Finding an Issue in Creating a Process in Dell Boomi Platform […]

    The post [Blog] Build your first Dell Boomi Process in 5 min appeared first on Oracle Trainings for Apps & Fusion DBA.

    Categories: APPS Blogs

    Azure SQL Managed instances, Business Critical Tier and high availability

    Yann Neuhaus - Fri, 2018-12-28 12:08

    Last blog of this year 2018 with SQL databases and Cloud Azure and this is not trivial choice. <Speculation mode> I would say year 2019 could be important for all stakeholders. Cloud transformation has begun in many forms at customer shops and we heard about some big actors who are coming in Switzerland including Azure or Google. Data Platforms services will not be an exception in some degree of magnitude … <end of speculation mode>. I briefly introduced SQL Managed instances on a previous write-up and this service will likely not be available immediately when Azure datacenters will start next year in Switzerland. But I keep an eye on it because I believe it may address a lot of customer requests. So, I remembered to attend a session about SQL Server Managed Instances (SQL MI) a couple of months ago at SQL Saturday Madrid (October 2018) and a question raised about high-availability capabilities in such infrastructure especially if a SQL MI could be part of SQL Server availability groups. At this moment the answer was it is not supported because there is no need to use Always-On to achieve HA within the Azure region. Every instance is inherently highly available as that is one of the core PaaS capabilities in SQL Database including redundancy with Azure storage accounts as well as active and passive compute nodes. I admit I partially agreed because it means we restrict HA scenarios on fully PaaS architectures and I had in mind hybrid scenarios where we might include a SQL MI in AG as standby server for DR for instance. But anyway, at the moment of the session, 2 MI options were available including General Purpose and Business Critical in Preview only and on December 4th 2018 the latter was finally available in GA.

    150 - 0 - banner

    Let’s say Business Critical tier differs from General Purpose tiers in terms of HA because it provides built-in availability groups behind the scene and auto-failover groups for disaster recovery on a remote Azure region as well.

    The interesting point is Business Critical tier enables offloading reporting queries on a hidden RO replica by default. Bear in mind replication is asynchronous between replicas meaning data loss and delay are possible on RO replicas.

    As normal AG scenarios, if we specify application intent to read only in connection string transparent redirection takes place. I did a try on my SQL MI after upgrading on Business Critical Tier as shown below:

    $ (az sql mi show -g sql-mi-rg -n sql-mi-dbi2 | ConvertFrom-Json).Sku.Tier
    BusinessCritical

     

    From SSMS, I just switched my connection from READ WRITE to READ ONLY intent and I was redirected transparently to the corresponding replica as follows:

    150 - 1 - RO connection

    Note that the AG configuration is hidden to users and sysadmins and there is no way to get information from usual system views as follows:

    150 - 2 - AG config

    However, we may get information of different states of underlying AG replication including 4 replicas as described in the Microsoft documentation.

    SELECT 
    	d.name as [db_name],
    	drs.replica_id,
    	drs.group_database_id,
    	drs.is_local,
    	drs.is_primary_replica,
    	drs.synchronization_state_desc AS syncro_state,
    	drs.synchronization_health_desc AS synchro_health,
    	drs.database_state_desc AS db_state,
    	drs.log_send_queue_size,
    	drs.redo_queue_size
    FROM sys.dm_hadr_database_replica_states AS drs
    join sys.databases AS d ON d.database_id = drs.database_id

     

    150 - 3 - AG state

     

    Auto failover groups is a complementary solution to address DR scenarios and to protect from a failure to of Azure region. Its implementation requires more work and more Azure resources … a challenge for next year!

    Season’s greetings!!

     

     

    Cet article Azure SQL Managed instances, Business Critical Tier and high availability est apparu en premier sur Blog dbi services.

    [Blog] Four Key Points About Dell Boomi AtomSphere Platform

    Online Apps DBA - Fri, 2018-12-28 02:52

    Up for Learning more About DellBoomi, Its Atmosphere and Some Key Points Visit: https://k21academy.com/dellboomi13 and Watch our new Blog on Four Key Points About Dell Boomi AtomSphere Platform Covering: ✔ What is Dell Boomi Atmosphere ✔ Four Key Points One Must Know About Dell Boomi AtomSphere Platform Up for Learning more About DellBoomi, Its Atmosphere […]

    The post [Blog] Four Key Points About Dell Boomi AtomSphere Platform appeared first on Oracle Trainings for Apps & Fusion DBA.

    Categories: APPS Blogs

    Lightning Web Components - Conditional formatting and iterators

    Robert Baillie - Thu, 2018-12-27 07:11
    One of the really elegant parts of Lightning Components was the ability to conditionally apply classes based on data. This is something that is no longer available to us, as the expressions we are allowed to put into templates are now limited to either: A property of the Javascript class (or a sub-property that can be referenced through a top level property). A getter, that accepts no parameters. I’ve already mentioned a change in this area in this blog post about building re-usable components, but I felt it was time to drill into this just a little further... The scenario Let’s say we want to render a list of objects. There’s a flag 'isSelected' on each of the records, and if that flag is set we want to change the rendering for that particular record. JSON data: [ { "id" : 1 , "name" : "Anne" , "isSelected" : false }, { "id" : 2 , "name" : "Bob" , "isSelected" : true }, { "id" : 3 , "name" : "Carla" , "isSelected" : true } ] Required Output: <ul> <li...

    Lightning Web Components - Conditional formatting and iterators

    Rob Baillie - Thu, 2018-12-27 07:11

    One of the really elegant parts of Lightning Components was the ability to conditionally apply classes based on data.

    This is something that is no longer available to us, as the expressions we are allowed to put into templates are now limited to either:

    • A property of the Javascript class (or a sub-property that can be referenced through a top level property).
    • A getter, that accepts no parameters.

    I’ve already mentioned a change in this area in this blog post about building re-usable components, but I felt it was time to drill into this just a little further...

    The scenario

    Let’s say we want to render a list of objects. There’s a flag 'isSelected' on each of the records, and if that flag is set we want to change the rendering for that particular record.

    JSON data:


    [ { "id" : 1
    , "name" : "Anne"
    , "isSelected" : false },
    { "id" : 2
    , "name" : "Bob"
    , "isSelected" : true },
    { "id" : 3
    , "name" : "Carla"
    , "isSelected" : true }
    ]
    Required Output:

    <ul>
    <li class="record">Anne</li>
    <li class="selected record">Bob</li>
    <li class="selected record">Carla</li>
    </ul>
    Lightning Component

    In a Lightning Component, this would be near trivial, as we could use a ternary operator in the template to render the inclusion of the 'selected' class conditionally.


    <ul>
    <aura:iteration items="{!v.records}" var="thisRecord">
    <li class="{!(thisRecord.isSelected?'selected':'' ) + ' record' }">{!thisRecord.name}
    </aura>
    </ul>

    The reason this is so simple, is that we could put proper expressions into our replacements in Lightning Components, giving us fantastic flexibility in the output for each individual attribute.

    Unfortunately (for this case), this isn't possible in Lightning Web Components...

    Lightning Web Component

    First up, let's just clarify what we mean when we say we can no longer do the string concatenation, or the ternary operator in an attribute expression, as I detailed in my earlier post.

    What we mean is, we can’t do the following:


    <ul>
    <template for:each={records} for:item="thisRecord">
    <li class="{thisRecord.isSelected?'selected':'' + ' record' }">{thisRecord.name}</li>
    </template>
    </ul>

    All we can do is reference a single value from our data held against our Javascript object, or call a getter against it. E.g. (not that this template is of much use to us right now)


    <ul>
    <template for:each={records} for:item="thisRecord">
    <li class={thisRecord.isSelected}>{thisRecord.name}</li>
    </template>
    </ul>

    OK - so what other options do we have?

    Option 1 - Build your class lists in your data:

    So, we could build up the list of classes that we want to render against each record in our data - once the data is populated from where-ever, we can loop over the records and update the data so we end up with something like:

    JSON data:

    [ { "id" : 1
    , "name" : "Anne"
    , "isSelected" : false
    , "classes" : "record" },
    { "id" : 2
    , "name" : "Bob"
    , "isSelected" : true
    , "classes" : "selected record" },
    { "id" : 3
    , "name" : "Carla"
    , "isSelected" : true
    , "classes" : "selected record" }
    ]

    We can then render the required output like this:


    <ul>
    <template for:each={records} for:item="thisRecord">
    <li key={thisRecord.id} class={thisRecord.classes}>{thisRecord.name}</li>
    </template>
    </ul>
    Pros:
    • The template is simple.
    • Since we're processing in Javascript, we can draw on any information and make whatever complex rules we want.
    Cons:
    • We need to process the data after we’ve built it. If this data comes from a @wire’d property or function, then we’re in trouble. We’d need to jump through some hoops to get the classes specified. We'll likely find using @wire is no longer an option because of that processing and we need to retrieve with an imperative call instead.
    • Data retrieved from Apex is immutable, so if this is the only thing we need to add to the data, then may find that we need to copy data into new objects, or add a new data structure in order to get the classes property added.
    • The logic for the classes that each record should have assigned is held in Javascript (or even worse, Apex).
    Option 2 - Use a template 'if' and repeat the li tag.

    If we want to avoid doing anything complex in our Javascript, we can add template 'if's into the markup, and conditionally render the <li> tag in its two different forms.

    For example, we could do the following:


    <ul>
    <template for:each={records} for:item="thisRecord">
    <template if:true={thisRecord.isSelected}>
    <li key={thisRecord.id} class="selected record">{thisRecord.name}</li>
    </template>
    <template if:false={thisRecord.isSelected}>
    <li key={thisRecord.id} class="record">{thisRecord.name}</li>
    </template>
    </template>
    </ul>
    Pros:
    • The Javascript doesn't contain any of the logic for the conditional rendering.
    Cons:
    • We're breaking the "Don't repeat yourself" (DRY) principle, and repeating the structure of the <li> tag in each side of the IF condition. In this simple case this may not seem like a big deal, but still - any change to that rendering now needs to be made in 2 places, instead of 1. And let's be honest, how often is the case this simple? We'll probably find that we have to copy a LOT of the template to work like this.
    Option 3 - Use a template 'if', and change our CSS.

    Another alternative is to use the template if, but to isolate the part that changes from the part that doesn't. That is, we introduce HTML inside our 'if:true' that only exists in order to apply the formatting that should be assigned to the 'isSelected' records.

    That is, we do the following in our template, to introduce a new, standalone, div that has the 'selected' class applied, and then wrap the content of the <li> in another div.


    <ul>
    <template for:each={records} for:item="thisRecord">
    <li key={thisRecord.id} class="record">
    <template if:true={thisRecord.isSelected}>
    <div class="selected"></div>
    </template>
    <div>{thisRecord.name}</div>
    </li>
    </ul>

    Having done this, we can use more advanced CSS selectors to apply our 'selected' style to the div that follows the div with 'selected' as its class.

    For example, let's say our 'selected' records should have a green border:


    .selected+div {
    border: 1px solid green;
    }

    The selector '.selected+div' means 'The div that follows the tag with the class 'selected'.

    You can read about CSS Selectors here.

    Pros:
    • We conditionally render only the addition of the class in the template - nothing is repeated.
    • The Javascript doesn't contain any of the logic for the conditional rendering.
    Cons:
    • We need to introduce additional structure into the HTML that exists purely to apply classes to other elements. This isn't ideal and can change the behaviour of other classes further down the structure (e.g. we have introduced a span here - what impact does that have?)
    Option 4 - Introduce a sub component.

    It would be good if we could call a getter function at run time in order to get the list of classes, along the lines of the component described in the earlier post.

    The problem is that we can't call a function and pass it the context of the individual record that we are rendering.

    So does that mean we can't call a function?

    No, it just means that we need to narrow the context of the component down into each record before we call the function - and we can do that with a sub-component that just renders the <li>.

    We can call our sub-component (recordRenderer) with something like this:


    <ul>
    <template for:each={records} for:item="thisRecord">
    <c-record-renderer key={thisRecord.id} record={thisRecord}></c-record-renderer>
    <template>
    </ul>

    Our sub-component template can be:


    <li class={classes}>{record.name}</li>

    And our sub-component javascript can be:


    import { LightningElement, api } from 'lwc';

    export default class RecordRenderer extends LightningElement {

    @api record;

    get classes() {
    if ( this.record.isSelected ) {
    return 'selected record';
    }
    return 'record'
    }
    }
    Pros:
    • Both the template for the parent and sub component are very simple and focused on small aspects of the rendering - no IFs in the templates is a good thing.
    • It's very possible that there will be more complex behaviour required in the future, and having the context set to be the individual record could make that behaviour much simpler to implement in the future. For example, passing data into events due to a 'click' event could be well served if we have that distinction between the parent and child components and context.
    Cons:
    • OK, we have the classes logic inside the Javascript, much like in Option 1, but we don't have to process the data - the getter is called at render time. And, presumably the code in the renderer is near trivial, so maybe that's not such a big problem.
    Conclusions

    The limitations of the expressions allowed in templates makes for a less elegant solution to this kind of problem

    I would find it hard to argue that either Option 1 or 2 or worth the pain - neither fiddling with the data model or repeating large chunks of the template feel like good practice to me.

    Options 3 and 4 both have their merits - Option 3 has very few drawbacks other than the introduction of the almost redundant HTML elements - but if you can fulfil your needs in this way, well the CSS selectors are there for a reason, so why not?

    Personally though, I'd almost always favour Option 4 - decomposing into smaller components.

    Honestly, I think that pushing us down this route is a good thing - smaller components are simpler to understand just as smaller classes and methods are, and with the standardised event model that Lightning Web Components use, this approach can make for very simple, small, and potentially re-usable components that makes each individual component present themselves in much simpler ways.

    It may require us to think about our components in a different way to how we approached Lightning Components, but I firmly believe that we will end up with cleaner, and more easily understandable and maintainable building blocks.

    [Blog] Terminologies Every Dell Boomi Developer Must Know

    Online Apps DBA - Thu, 2018-12-27 03:12

    Dell Boomi is a Multi-tenant cloud based integration platform that facilitates data and application integration. if You are Interested to Know More…. Visit: https://k21academy.com/dellboomi11 and Consider Our New Amazing Blog on Dellboomi Covering: ✔ Different Terminologies every Dell Boomi Developer Should Know ✔ Components Used in Dell Boomi Dell Boomi is a Multi-tenant cloud based […]

    The post [Blog] Terminologies Every Dell Boomi Developer Must Know appeared first on Oracle Trainings for Apps & Fusion DBA.

    Categories: APPS Blogs

    Knockout.js - Updating Single Array Element (Oracle JET)

    Andrejus Baranovski - Thu, 2018-12-27 02:40
    If you implement tables and using Knockout.js to push data updates from JS to HTML - probably you experience a situation when it doesn't work to push an update for one of the columns. I mean you could replace the whole observable array element - this would cause full row refresh. But visually this doesn't look nice and why to refresh the whole row, if only one (or few) element (-s) from the row must be refreshed.

    If you need to refresh a specific array element (or row column in other words) - you must define the value of that column to be observable.

    Refresh will be happening much more smooth, instead of refreshing whole row. See how fast Risk column value is changed after clicking on Process button:


    Table is implemented with Oracle JET table component. JET table allows to define template slots, this helps to create a better structure for table columns implementation:


    Risk column - the one which is being refreshed is defined as an observable variable in the array:


    A new value for Risk column is set directly - by iterating array elements. Refresh on UI happens automatically, through Knockout observable:


    Sample application source code is available on my GitHub repo.

    Select for update in SQL Package with PRAGMA AUTONOMOUS_TRANSACTION

    Tom Kyte - Thu, 2018-12-27 01:46
    Hello, I have a package with some functions used to synchronize the operation performed by a number of servers. When a server select an ID and perform operations on it the other servers can not select the same ID. To achiev this i use a SYNC fla...
    Categories: DBA Blogs

    dbca doesn’t list diskgroups

    Amardeep Sidhu - Wed, 2018-12-26 09:31

    This is an Exadata machine running GI version 18.3.0.0.180717 and DB version 12.1.0.2.180717. On one of the DB nodes while running dbca, it doesn’t list the diskgroups. it works fine on the other node.

    I cheked the dbca trace and found that the kfod command was failing. I tried to run it manually and got the same error:

    [oracle@exadb01 ~]$ /u01/app/18.0.0.0/grid/bin/kfod op=groups verbose=true
    KFOD-00300: OCI error [-1] [OCI error] [Could not fetch details] [-105777048]
    
    KFOD-00105: Could not open pfile 'init@.ora'
    [oracle@exadb01 ~]$

    I ran it with strace then:

    [oracle@exadb01 ~]$ strace /u01/app/18.0.0.0/grid/bin/kfod op=groups verbose=true
    execve("/u01/app/18.0.0.0/grid/bin/kfod", ["/u01/app/18.0.0.0/grid/bin/kfod", "op=groups", "verbose=true"], [/* 18 vars */]) = 0
    brk(0) = 0x2641000
    .
    .
    .
    .
    .
    open("/u01/app/18.0.0.0/grid/dbs/ab_+ASM1.dat", O_RDONLY) = -1 EACCES (Permission denied)
    geteuid() = 1003
    open("/u01/app/18.0.0.0/grid/rdbms/mesg/kfodus.msb", O_RDONLY) = 13
    fcntl(13, F_SETFD, FD_CLOEXEC) = 0
    lseek(13, 0, SEEK_SET) = 0
    read(13, "\25\23\"\1\23\3\t\t\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"…, 280) = 280
    lseek(13, 512, SEEK_SET) = 512
    read(13, "\352\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"…, 512) = 512
    lseek(13, 1024, SEEK_SET) = 1024
    read(13, ".\1=\1E\1M\1X\1\352\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"…, 512) = 512
    lseek(13, 1536, SEEK_SET) = 1536
    read(13, "\n\0d\0\0\0D\0e\0\1\0e\0f\0\1\0\230\0g\0\1\0\306\0h\0\2\0\325\0"…, 512) = 512
    fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 3), …}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f43f85f2000
    write(1, "KFOD-00300: OCI error [-1] [OCI "…, 78KFOD-00300: OCI error [-1] [OCI error] [Could not fetch details] [-132605848]
    ) = 78

    The text in bold just before the kfod error caught my attention. When I checked actually oracle user wasn’t able to read the file. The permissions looked like this:

    [root@exadb01 dbs]# ls -ltr
    total 20
    -rw-r--r-- 1 oragrid oinstall 3079 May 14 2015 init.ora
    -rw-r--r-- 1 oragrid oinstall 587 Dec 12 15:33 initbackuppfile.ora
    -rw-rw---- 1 oragrid asmadmin 1656 Dec 20 14:26 ab_+ASM1.dat
    -rw-rw---- 1 oragrid oinstall 1544 Dec 20 14:26 hc_+APX1.dat
    -rw-rw---- 1 oragrid oinstall 1544 Dec 21 16:57 hc_+ASM1.dat
    [root@exadb01 dbs]#

    Whereas on node2 they were like:

    [oracle@exadb02 dbs]$ ls -ltr 
    total 16
    -rwxrwxrwx 1 oragrid oinstall 3079 Dec 12 14:52 init.ora
    -rwxrwxrwx 1 oragrid oinstall 1544 Dec 21 16:57 hc_+ASM2.dat
    -rw-rw---- 1 oragrid oinstall 1720 Dec 21 16:57 ab_+ASM2.dat
    -rwxrwxrwx 1 oragrid oinstall 1544 Dec 21 16:57 hc_+APX2.dat
    [oracle@exadb02 dbs]$

    Since oracle user isn’t member of asmadmin group, it is not able to read the meniotned file. Changing the owner to oracle:oinstall fixed the issue.

    Categories: BI & Warehousing

    Oracle OpenWorld goes Global in 2019

    Starting in January 2019, Oracle OpenWorld goes global. Two-day showcases in London, Dubai and Singapore will offer the best of the OpenWorld experience–insight, expertise and...

    We share our skills to maximize your revenue!
    Categories: DBA Blogs

    [Blog] Steps for Local Atom Installation of Dell Boomi Platform

    Online Apps DBA - Tue, 2018-12-25 06:15

    Atom is the lowest level of boomi’s Architecture and is a Lightweight Dynamic runtime engine Created with Patent-Pending Technology…. Excited for Knowing more… If yes then, Visit: https://k21academy.com/dellboomi12 and Consider our New Blog about Dellboomi Covering: ✔ What is an Atom ✔ What is Atom Setup ✔ Steps for Local Atom Installation Atom is the […]

    The post [Blog] Steps for Local Atom Installation of Dell Boomi Platform appeared first on Oracle Trainings for Apps & Fusion DBA.

    Categories: APPS Blogs

    Oracle database 18c installation with RPM on Oracle Linux

    Pierre Forstmann Oracle Database blog - Mon, 2018-12-24 07:30

    In October 2018 Oracle Corp. has released a RPM to install Oracle Database on Linux.

    In this article I am going to detail how I have installed this RPM and checked this RPM-based installation.

    As usual I have used a minimal Oracle Linux 7.6 virtual machine that has 4 GB of RAM (and 4 GB of swap space) with one single 40 GB disk.
    This machine is connected to internet to be able to access Oracle Linux public yum repository configured in /etc/yum.repos.d/public-yum-ol7.repo where only the 2 following repositories have flag enabled set to 1:

    [ol7_latest]
    name=Oracle Linux $releasever Latest ($basearch)
    baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/latest/$basearch/
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    gpgcheck=1
    enabled=1
    
    [ol7_UEKR5]
    name=Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux $releasever ($basearch)
    baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/UEKR5/$basearch/
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    gpgcheck=1
    enabled=1
    

    The detailed Oracle Linux is the following:

    $ cat /etc/os-release
    NAME="Oracle Linux Server"
    VERSION="7.6"
    ID="ol"
    VARIANT="Server"
    VARIANT_ID="server"
    VERSION_ID="7.6"
    PRETTY_NAME="Oracle Linux Server 7.6"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:oracle:linux:7:6:server"
    HOME_URL="https://linux.oracle.com/"
    BUG_REPORT_URL="https://bugzilla.oracle.com/"
    
    ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
    ORACLE_BUGZILLA_PRODUCT_VERSION=7.6
    ORACLE_SUPPORT_PRODUCT="Oracle Linux"
    ORACLE_SUPPORT_PRODUCT_VERSION=7.6
    

    Neither Oracle Database nor MySQL is installed:

    # id oracle
    id: oracle: no such user
    # id mysql
    id: mysql: no such user
    # 
    

    I have used Database Installation Guide for Linux for this blog post. I have downloaded RPM from OTN. Note that you cannot download this RPM from the Oracle public yum repositories unless you have a Unbreakable Linux Network (ULN) contract.

    RPM installation

    To install this RPM I have just run as root:

    # yum -y localinstall oracle-database-ee-18c-1.0-1.x86_64.rpm
    

    The generated output is here.

    Note that the preinstall RPM has been installed automatically thanks to following RPM dependency and default YUM configuration using Oracle public yum repositories:

    Processing Dependency: oracle-database-preinstall-18c for package: oracle-database-ee-18c-1.0-1.x86_64
    

    I have checked this Oracle database software installation with:

    # cat /etc/oraInst.loc 
    inventory_loc=/opt/oracle/oraInventory
    inst_group=oinstall
    # su - oracle
    Last login: mer. déc. 12 20:38:33 CET 2018
    su: warning: cannot change directory to /home/oracle: No such file or directory
    $ grep "HOME NAME" /opt/oracle/oraInventory/ContentsXML/inventory.xml 
    &ltHOME NAME="OraHome1" LOC="/opt/oracle/product/18c/dbhome_1" TYPE="O" IDX="1"/&gt
    $ export ORACLE_HOME=/opt/oracle/product/18c/dbhome_1
    $ $ORACLE_HOME/OPatch/opatch lsinv    
    Oracle Interim Patch Installer version 12.2.0.1.14
    Copyright (c) 2018, Oracle Corporation.  All rights reserved.
    
    
    Oracle Home       : /opt/oracle/product/18c/dbhome_1
    Central Inventory : /opt/oracle/oraInventory
       from           : /opt/oracle/product/18c/dbhome_1/oraInst.loc
    OPatch version    : 12.2.0.1.14
    OUI version       : 12.2.0.4.0
    Log file location : /opt/oracle/product/18c/dbhome_1/cfgtoollogs/opatch/opatch2018-12-12_20-45-51PM_1.log
    
    Lsinventory Output file location : /opt/oracle/product/18c/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2018-12-12_20-45-51PM.txt
    
    --------------------------------------------------------------------------------
    Local Machine Information::
    Hostname: localhost
    ARU platform id: 226
    ARU platform description:: Linux x86-64
    
    Installed Top-level Products (1): 
    
    Oracle Database 18c                                                  18.0.0.0.0
    There are 1 products installed in this Oracle Home.
    
    
    Interim patches (4) :
    
    Patch  27908644     : applied on Mon Oct 08 01:21:47 CEST 2018
    Unique Patch ID:  22153180
    Patch description:  "UPDATE 18.3 DATABASE CLIENT JDK IN ORACLE HOME TO JDK8U171"
       Created on 4 May 2018, 01:21:02 hrs PST8PDT
       Bugs fixed:
         27908644
    
    Patch  27923415     : applied on Mon Oct 08 01:19:18 CEST 2018
    Unique Patch ID:  22239273
    Patch description:  "OJVM RELEASE UPDATE: 18.3.0.0.180717 (27923415)"
       Created on 15 Jul 2018, 10:33:22 hrs PST8PDT
       Bugs fixed:
         27304131, 27539876, 27952586, 27642235, 27636900, 27461740
    
    Patch  28090553     : applied on Mon Oct 08 01:17:51 CEST 2018
    Unique Patch ID:  22256940
    Patch description:  "OCW RELEASE UPDATE 18.3.0.0.0 (28090553)"
       Created on 12 Aug 2018, 23:01:26 hrs PST8PDT
       Bugs fixed:
         12816839, 18701017, 22734786, 23698980, 23840305, 25709124, 25724089
         26299684, 26313403, 26433972, 26527054, 26586174, 26587652, 26647619
         26827699, 26860285, 26882126, 26882316, 26943660, 26996813, 27012915
         27018734, 27032726, 27034318, 27040560, 27080748, 27086406, 27092991
         27098733, 27106915, 27114112, 27121566, 27133637, 27144533, 27153755
         27166715, 27174938, 27174948, 27177551, 27177852, 27182006, 27182064
         27184253, 27204476, 27212837, 27213140, 27220610, 27222423, 27222938
         27238077, 27238258, 27249544, 27252023, 27257509, 27263677, 27265816
         27267992, 27271876, 27274143, 27285557, 27299455, 27300007, 27302415
         27309182, 27314512, 27315159, 27320985, 27334353, 27338838, 27346984
         27358232, 27362190, 27370933, 27377219, 27378959, 27379846, 27379956
         27393421, 27398223, 27399499, 27399762, 27399985, 27401618, 27403244
         27404599, 27426277, 27428790, 27430219, 27430254, 27433163, 27452897
         27458829, 27465480, 27475272, 27481406, 27481765, 27492916, 27496806
         27503318, 27503413, 27508936, 27508984, 27513114, 27519708, 27526362
         27528204, 27532009, 27534289, 27560562, 27560735, 27573154, 27573408
         27574335, 27577122, 27579969, 27581484, 27593587, 27595801, 27600706
         27609819, 27625010, 27625050, 27627992, 27654039, 27657467, 27657920
         27668379, 27682288, 27691717, 27702244, 27703242, 27708711, 27714373
         27725967, 27731346, 27734470, 27735534, 27739957, 27740854, 27747407
         27748321, 27757979, 27766679, 27768034, 27778433, 27782464, 27783059
         27786669, 27786699, 27801774, 27811439, 27839732, 27850736, 27862636
         27864737, 27865439, 27889841, 27896388, 27897639, 27906509, 27931506
         27935826, 27941514, 27957892, 27978668, 27984314, 27993298, 28023410
         28025398, 28032758, 28039471, 28039953, 28045209, 28099592, 28109698
         28174926, 28182503, 28204423, 28240153
    
    Patch  28090523     : applied on Mon Oct 08 01:17:15 CEST 2018
    Unique Patch ID:  22329768
    Patch description:  "Database Release Update : 18.3.0.0.180717 (28090523)"
       Created on 14 Jul 2018, 00:03:50 hrs PST8PDT
       Bugs fixed:
         9062315, 13554903, 21547051, 21766220, 21806121, 23003564, 23310101
         24489904, 24689376, 24737581, 24925863, 25035594, 25035599, 25287072
         25348956, 25634405, 25726981, 25743479, 25824236, 25943740, 26226953
         26336101, 26423085, 26427905, 26450454, 26476244, 26598422, 26615291
         26646549, 26654411, 26731697, 26785169, 26792891, 26818960, 26822620
         26843558, 26843664, 26846077, 26894737, 26898279, 26928317, 26933599
         26956033, 26961415, 26966120, 26986173, 26992964, 27005278, 27026401
         27028251, 27030974, 27036408, 27038986, 27041253, 27044575, 27047831
         27053044, 27058530, 27060167, 27060859, 27061736, 27066451, 27066519
         27073066, 27086821, 27090765, 27101527, 27101652, 27110878, 27112686
         27119621, 27126666, 27128580, 27135647, 27143756, 27143882, 27147979
         27153641, 27155549, 27156355, 27163928, 27169796, 27181521, 27181537
         27189611, 27190851, 27193810, 27199245, 27208953, 27210038, 27210872
         27214085, 27215007, 27216224, 27221900, 27222121, 27222626, 27224987
         27226913, 27232983, 27233563, 27236052, 27236110, 27240246, 27240570
         27241221, 27241247, 27244337, 27244785, 27249215, 27250547, 27254851
         27258578, 27259386, 27259983, 27262650, 27262945, 27263276, 27263996
         27270197, 27274456, 27274536, 27275136, 27275776, 27282707, 27283029
         27283960, 27284499, 27285244, 27288230, 27292213, 27294480, 27301308
         27301568, 27302594, 27302681, 27302695, 27302711, 27302730, 27302777
         27302800, 27302960, 27304410, 27304936, 27305318, 27307868, 27310092
         27313687, 27314206, 27314390, 27318869, 27321179, 27321834, 27326204
         27329812, 27330158, 27330161, 27333658, 27333664, 27333693, 27334316
         27334648, 27335682, 27338912, 27338946, 27339115, 27339396, 27339483
         27339495, 27341036, 27345190, 27345231, 27345450, 27345498, 27346329
         27346644, 27346709, 27346949, 27347126, 27348081, 27348707, 27349393
         27352600, 27354783, 27356373, 27357773, 27358241, 27359178, 27359368
         27360126, 27364891, 27364916, 27364947, 27365139, 27365702, 27365993
         27367194, 27368850, 27372756, 27375260, 27375542, 27376871, 27378103
         27379233, 27381383, 27381656, 27384222, 27389352, 27392187, 27395404
         27395416, 27395794, 27396357, 27396365, 27396377, 27396624, 27396666
         27396672, 27396813, 27398080, 27398660, 27401637, 27405242, 27405696
         27410300, 27410595, 27412805, 27417186, 27420715, 27421101, 27422874
         27423251, 27425507, 27425622, 27426363, 27427805, 27430802, 27432338
         27432355, 27433870, 27434050, 27434193, 27434486, 27434974, 27435537
         27439835, 27441326, 27442041, 27444727, 27445330, 27445462, 27447452
         27447687, 27448162, 27450355, 27450400, 27450783, 27451049, 27451182
         27451187, 27451531, 27452760, 27453225, 27457666, 27457891, 27458164
         27459909, 27460675, 27467543, 27469329, 27471876, 27472969, 27473800
         27479358, 27483974, 27484556, 27486253, 27487795, 27489719, 27496224
         27496308, 27497950, 27498477, 27501327, 27501413, 27501465, 27502420
         27504190, 27505603, 27506774, 27508985, 27511196, 27512439, 27517818
         27518227, 27518310, 27520070, 27520900, 27522245, 27523368, 27523800
         27525909, 27532375, 27533819, 27534509, 27537472, 27544030, 27545630
         27547732, 27550341, 27551855, 27558557, 27558559, 27558861, 27560702
         27563629, 27563767, 27570318, 27577758, 27579353, 27580996, 27585755
         27585800, 27586810, 27586895, 27587672, 27591842, 27592466, 27593389
         27595973, 27599689, 27602091, 27602488, 27603841, 27604293, 27607805
         27608669, 27610269, 27613080, 27613247, 27615608, 27616657, 27617522
         27625274, 27625620, 27631506, 27634676, 27635508, 27644757, 27649707
         27652302, 27663370, 27664702, 27679488, 27679664, 27679806, 27679961
         27680162, 27680509, 27682151, 27688099, 27688692, 27690578, 27691809
         27692215, 27693713, 27697092, 27701795, 27705761, 27707544, 27709046
         27718914, 27719187, 27723002, 27726269, 27726780, 27732323, 27739006
         27740844, 27744211, 27745220, 27747869, 27748954, 27751006, 27753336
         27757567, 27772815, 27773602, 27774320, 27774539, 27779886, 27780562
         27782339, 27783289, 27786772, 27791223, 27797290, 27803665, 27807441
         27812560, 27812593, 27813267, 27815347, 27818871, 27832643, 27833369
         27834984, 27840386, 27847259, 27851757, 27861909, 27869339, 27873643
         27882176, 27892488, 27924147, 27926113, 27930478, 27934468, 27941896
         27945870, 27950708, 27952762, 27961746, 27964051, 27970265, 27971575
         27984028, 27989849, 27993289, 27994333, 27997875, 27999597, 28021205
         28022847, 28033429, 28057267, 28059199, 28072130, 28098865, 28106402
         28132287, 28169711, 28174827, 28184554, 28188330, 25929650, 28264172
    
    
    
    --------------------------------------------------------------------------------
    
    OPatch succeeded.
    $ $ORACLE_HOME/OPatch/opatch lspatches 
    27908644;UPDATE 18.3 DATABASE CLIENT JDK IN ORACLE HOME TO JDK8U171
    27923415;OJVM RELEASE UPDATE: 18.3.0.0.180717 (27923415)
    28090553;OCW RELEASE UPDATE 18.3.0.0.0 (28090553)
    28090523;Database Release Update : 18.3.0.0.180717 (28090523)
    
    OPatch succeeded.
    
    Database creation

    I have also checked that I can create a database in silent mode with DBCA.

    I have created database directories for DB_CREATE_FILE_DEST and DB_RECOVERY_FILE_DEST initialization parameters with root account:

    # mkdir -p /u01/oradata
    # chown oracle:dba /u01/oradata
    # mkdir /u01/fra
    # chown oracle:dba /u01/fra    
    

    I have added host name in /etc/hosts:

    # tail -n 1 /etc/hosts
    192.168.56.26 ol7defs1 ol7defs1.localdomain
    

    I have also created missing home directory for Linux oracle user account:

    # mkdir /home/oracle
    # chown oracle:dba /home/oracle
    

    I have switched to oracle account to create a container database with following script:

    $ export ORACLE_HOME=/opt/oracle/product/18c/dbhome_1
    $ PATH=$ORACLE_HOME/bin:$PATH
    $ cat crdb.sh
    dbca -silent \
    -createDatabase \
    -templateName General_Purpose.dbc \
    -gdbName CDB \
    -sid CDB \
    -createAsContainerDatabase true \
    -numberOfPdbs 1 \
    -pdbName pdb \
    -pdbadminUsername pdba \
    -pdbadminPassword oracle \
    -SysPassword oracle \
    -SystemPassword oracle \
    -emConfiguration NONE \
    -storageType FS \
    -datafileDestination /u01/oradata \
    -recoveryAreaDestination /u01/fra \
    -recoveryAreaSize 3200  \
    -characterSet AL32UTF8 \
    -memoryPercentage 40 \
    -enableArchive true \
    -redoLogFileSize 100
    

    Running this script has generated following output:

    [WARNING] [DBT-06801] Specified Fast Recovery Area size (3,200 MB) is less than the recommended value.
       CAUSE: Fast Recovery Area size should at least be three times the database size (2,446 MB).
       ACTION: Specify Fast Recovery Area Size to be at least three times the database size.
    [WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
       CAUSE: 
    a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
    b.The password entered is a keyword that Oracle does not recommend to be used as password
       ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
    [WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
       CAUSE: 
    a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
    b.The password entered is a keyword that Oracle does not recommend to be used as password
       ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
    [WARNING] [DBT-06208] The 'PDBADMIN' password entered does not conform to the Oracle recommended standards.
       CAUSE: 
    a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
    b.The password entered is a keyword that Oracle does not recommend to be used as password
       ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
    [WARNING] [DBT-06801] Specified Fast Recovery Area size (3,200 MB) is less than the recommended value.
       CAUSE: Fast Recovery Area size should at least be three times the database size (3,309 MB).
       ACTION: Specify Fast Recovery Area Size to be at least three times the database size.
    Prepare for db operation
    8% complete
    Copying database files
    31% complete
    Creating and starting Oracle instance
    32% complete
    36% complete
    40% complete
    43% complete
    46% complete
    Completing Database Creation
    51% complete
    53% complete
    54% complete
    Creating Pluggable Databases
    58% complete
    77% complete
    Executing Post Configuration Actions
    100% complete
    Database creation complete. For details check the logfiles at:
     /opt/oracle/cfgtoollogs/dbca/CDB.
    Database Information:
    Global Database Name:CDB
    System Identifier(SID):CDB
    Look at the log file "/opt/oracle/cfgtoollogs/dbca/CDB/CDB.log" for further details.
    

    The detailed DBCA log file does not contain any error:

    [ 2018-12-12 20:57:39.703 CET ] [WARNING] [DBT-06801] Specified Fast Recovery Area size (3,200 MB) is less than the recommended value.
    [ 2018-12-12 20:57:43.184 CET ] [WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
    [ 2018-12-12 20:57:43.184 CET ] [WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
    [ 2018-12-12 20:57:43.185 CET ] [WARNING] [DBT-06208] The 'PDBADMIN' password entered does not conform to the Oracle recommended standards.
    [ 2018-12-12 20:57:43.390 CET ] [WARNING] [DBT-06801] Specified Fast Recovery Area size (3,200 MB) is less than the recommended value.
    [ 2018-12-12 20:57:43.987 CET ] Prepare for db operation
    DBCA_PROGRESS : 8%
    [ 2018-12-12 20:57:44.437 CET ] Copying database files
    DBCA_PROGRESS : 31%
    [ 2018-12-12 20:59:24.288 CET ] Creating and starting Oracle instance
    DBCA_PROGRESS : 32%
    DBCA_PROGRESS : 36%
    DBCA_PROGRESS : 40%
    DBCA_PROGRESS : 43%
    DBCA_PROGRESS : 46%
    [ 2018-12-12 21:08:31.968 CET ] Completing Database Creation
    DBCA_PROGRESS : 51%
    DBCA_PROGRESS : 53%
    DBCA_PROGRESS : 54%
    [ 2018-12-12 21:15:15.224 CET ] Creating Pluggable Databases
    DBCA_PROGRESS : 58%
    DBCA_PROGRESS : 77%
    [ 2018-12-12 21:16:04.273 CET ] Executing Post Configuration Actions
    DBCA_PROGRESS : 100%
    [ 2018-12-12 21:16:04.289 CET ] Database creation complete. For details check the logfiles at:
     /opt/oracle/cfgtoollogs/dbca/CDB.
    Database Information:
    Global Database Name:CDB
    System Identifier(SID):CDB
    
    Database and Oracle Net checks

    I have checked created database with:

    $ . oraenv
    ORACLE_SID = [oracle] ? CDB
    The Oracle base has been set to /opt/oracle
    $ sqlplus / as sysdba @chk.sql
    
    SQL*Plus: Release 18.0.0.0.0 - Production on Wed Dec 12 21:21:43 2018
    Version 18.3.0.0.0
    
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
    Version 18.3.0.0.0
    
    SQL> set linesize 140
    SQL> column status format a20
    SQL> column description format a60
    SQL> column action_time format a30
    SQL> select * from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    BANNER_FULL
    --------------------------------------------------------------------------------------------------------------------------------------------
    BANNER_LEGACY									     CON_ID
    -------------------------------------------------------------------------------- ----------
    Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
    Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
    Version 18.3.0.0.0
    Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production			  0
    
    
    SQL> select patch_id, status, description, action_time from dba_registry_sqlpatch;
    
      PATCH_ID STATUS		DESCRIPTION						     ACTION_TIME
    ---------- -------------------- ------------------------------------------------------------ ------------------------------
      28090523 SUCCESS		Database Release Update : 18.3.0.0.180717 (28090523)	     12-DEC-18 09.03.45.593024 PM
      27923415 SUCCESS		OJVM RELEASE UPDATE: 18.3.0.0.180717 (27923415) 	     12-DEC-18 09.03.45.629667 PM
    
    SQL> select name, cdb, log_mode from v$database;
    
    NAME	  CDB LOG_MODE
    --------- --- ------------
    CDB	  YES ARCHIVELOG
    
    SQL> show pdbs
    
        CON_ID CON_NAME			  OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
    	 2 PDB$SEED			  READ ONLY  NO
    	 3 PDB				  READ WRITE NO
    SQL> 
    

    I have started Oracle Net listener with:

    $ lsnrctl start
    
    LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 12-DEC-2018 21:49:43
    
    Copyright (c) 1991, 2018, Oracle.  All rights reserved.
    
    Starting /opt/oracle/product/18c/dbhome_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 18.0.0.0.0 - Production
    Log messages written to /opt/oracle/diag/tnslsnr/ol7defs1/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol7defs1)(PORT=1521)))
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 18.0.0.0.0 - Production
    Start Date                12-DEC-2018 21:49:44
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Log File         /opt/oracle/diag/tnslsnr/ol7defs1/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol7defs1)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    

    I have waited about 1 minute for automatic services registration and checked:

    $ lsnrctl status
    
    LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 12-DEC-2018 21:50:22
    
    Copyright (c) 1991, 2018, Oracle.  All rights reserved.
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 18.0.0.0.0 - Production
    Start Date                12-DEC-2018 21:49:44
    Uptime                    0 days 0 hr. 0 min. 38 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Log File         /opt/oracle/diag/tnslsnr/ol7defs1/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol7defs1)(PORT=1521)))
    Services Summary...
    Service "7cd9db2df86753a7e0531a38a8c0afb6" has 1 instance(s).
      Instance "CDB", status READY, has 1 handler(s) for this service...
    Service "CDB" has 1 instance(s).
      Instance "CDB", status READY, has 1 handler(s) for this service...
    Service "CDBXDB" has 1 instance(s).
      Instance "CDB", status READY, has 1 handler(s) for this service...
    Service "pdb" has 1 instance(s).
      Instance "CDB", status READY, has 1 handler(s) for this service...
    The command completed successfully
    

    I have checked Oracle Net connection with:

    $ sqlplus system/oracle@ol7defs1:1521/pdb
    
    SQL*Plus: Release 18.0.0.0.0 - Production on Wed Dec 12 21:55:08 2018
    Version 18.3.0.0.0
    
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    
    Last Successful login time: Wed Dec 12 2018 21:52:30 +01:00
    
    Connected to:
    Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
    Version 18.3.0.0.0
    
    SQL> SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;
    
    SYS_CONTEXT('USERENV','CON_NAME')
    --------------------------------------------------------------------------------
    PDB
    
    SQL> 
    
    Summary

    According to Oracle documentation this is what the RPM-based installation performs:

  • preinstallation checks
  • database software extraction
  • ownership reassignement of the extracted software to the preconfigured user and groups
  • Oracle inventory maintenance
  • execution of all root operations required to configure the Oracle Database software for a single-instance Oracle Database creation and configuration.
  • Oracle documentation also states current limitations:

  • Patching Oracle Database software using RPMs is not supported. Please use the OPatch utility and follow the regular patching process to apply Oracle Database patches
  • An RPM-based Oracle Database installation is not available for Standard Edition 2. Standard Edition 2 support is planned for 19c
  • RPM-based database upgrades using rpm -Uvh is not supported. For Oracle Database upgrades, follow the regular upgrade process.
  • Categories: DBA Blogs

    EDB Failover Manager 3.3 With Virtual Ip Address

    Yann Neuhaus - Mon, 2018-12-24 04:47

    In a previous blog , I talked about installing and configuring Edb Failover Manager with PostgreSQL. The configuration of a Virtual Ip Address was not discussed in this previous article.In this blog I am going to show how we can implement a virtual IP with EFM.
    We suppose that
    -The standby is already built
    -EFM is configured and running (see here for the configuration)
    Below our configuration ( Iam using PostgreSQL 11.1 with Centos 7)

    [root@dbi-pg-tools efm-3.3]# /usr/edb/efm-3.3/bin/efm cluster-status efm
    Cluster Status: efm
    
            Agent Type  Address              Agent  DB       VIP
            -----------------------------------------------------------------------
            Witness     192.168.22.100       UP     N/A
            Master      192.168.22.101       UP     UP
            Standby     192.168.22.102       UP     UP
    
    Allowed node host list:
            192.168.22.101 192.168.22.102 192.168.22.100
    
    Membership coordinator: 192.168.22.101
    
    Standby priority host list:
            192.168.22.102
    
    Promote Status:
    
            DB Type     Address              XLog Loc         Info
            --------------------------------------------------------------
            Master      192.168.22.101       0/301BE38
            Standby     192.168.22.102       0/301BE38
    
            Standby database(s) in sync with master. It is safe to promote.
    [root@dbi-pg-tools efm-3.3]#
    

    To resume we have three servers
    -dbi-pg-tools : the witness with IP 192.168.22.100
    -dbi-pg-essentials : the master with IP 192.168.22.101
    -dbi-pg-essentials_2 : the standby with IP 192.168.22.102
    Let’s say that we want to configure a virtual IP 192.168.22.105.
    The first step is to update the efm.properties on both nodes with following lines

    virtualIp=192.168.22.105
    virtualIp.interface=enp0s9   -- name of my interface
    virtualIp.prefix=24
    virtualIp.single=true
    

    Then restart efm on both nodes.

    [root@dbi-pg-essentials network-scripts]#  service efm-3.3 start
    

    Running again the status command should show the VIP address. Restarting efm should be enough but if ever the virtual IP is not shown we can use following command to add the virtual IP.

    [root@dbi-pg-essentials network-scripts]# /usr/edb/efm-3.3/bin/efm_address add4 enp0s9 192.168.22.105/24
    

    Then the status should be

    [root@dbi-pg-tools ~]# /usr/edb/efm-3.3/bin/efm cluster-status efm
    Cluster Status: efm
    
            Agent Type  Address              Agent  DB       VIP
            -----------------------------------------------------------------------
            Witness     192.168.22.100       UP     N/A      192.168.22.105
            Master      192.168.22.101       UP     UP       192.168.22.105*
            Standby     192.168.22.102       UP     UP       192.168.22.105
    
    Allowed node host list:
            192.168.22.101 192.168.22.102 192.168.22.100
    
    Membership coordinator: 192.168.22.101
    
    Standby priority host list:
            192.168.22.102
    
    Promote Status:
    
            DB Type     Address              XLog Loc         Info
            --------------------------------------------------------------
            Master      192.168.22.101       0/301BEE0
            Standby     192.168.22.102       0/301BEE0
    
            Standby database(s) in sync with master. It is safe to promote.
    [root@dbi-pg-tools ~]#
    

    We can manually ping the virtual IP from both servers. There should not exist any loss packets

    [root@dbi-pg-tools ~]# ping -q -c3 -w5 192.168.22.105
    PING 192.168.22.105 (192.168.22.105) 56(84) bytes of data.
    
    --- 192.168.22.105 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    rtt min/avg/max/mdev = 0.278/0.366/0.528/0.116 ms
    [root@dbi-pg-tools ~]#
    

    And from the master we can see that the VIP address is assigned to enp0s9

    [root@dbi-pg-essentials network-scripts]# ifconfig enp0s9                       
    enp0s9: flags=4163  mtu 1500
            inet 192.168.22.105  netmask 255.255.255.0  broadcast 0.0.0.0
            ether 08:00:27:53:1c:ed  txqueuelen 1000  (Ethernet)
            RX packets 3394  bytes 397433 (388.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 3096  bytes 571448 (558.0 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@dbi-pg-essentials network-scripts]#
    

    So we can use the virtual address to connect to the primary database

    [postgres@dbi-pg-tools ~]$ psql -h 192.168.22.105
    Password for user postgres:
    psql (11.1)
    Type "help" for help.
    
    postgres=# \c sample
    You are now connected to database "sample" as user "postgres".
    sample=# insert into mytab values(1);
    INSERT 0 1
    sample=#
    

    And now let’s do a switchover

    [root@dbi-pg-tools ~]# /usr/edb/efm-3.3/bin/efm promote efm -switchover
    Promote/switchover command accepted by local agent. Proceeding with promotion and will reconfigure original master. Run the 'cluster-status' command for information about the new cluster state.
    [root@dbi-pg-tools ~]#
    

    A few moment after the switchover, we can see that the vip is now assigned to the new master

    [root@dbi-pg-essentials_2 efm-3.3]# ifconfig enp0s9
    enp0s9: flags=4163  mtu 1500
            inet 192.168.22.105  netmask 255.255.255.0  broadcast 0.0.0.0
            ether 08:00:27:4d:4d:4d  txqueuelen 1000  (Ethernet)
            RX packets 1235  bytes 149947 (146.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 837  bytes 525953 (513.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    That we can verify by running the status command

    [root@dbi-pg-tools ~]# /usr/edb/efm-3.3/bin/efm cluster-status efm
    Cluster Status: efm
    
            Agent Type  Address              Agent  DB       VIP
            -----------------------------------------------------------------------
            Witness     192.168.22.100       UP     N/A      192.168.22.105
            Standby     192.168.22.101       UP     UP       192.168.22.105
            Master      192.168.22.102       UP     UP       192.168.22.105*
    
    Allowed node host list:
            192.168.22.101 192.168.22.102 192.168.22.100
    
    Membership coordinator: 192.168.22.102
    
    Standby priority host list:
            192.168.22.101
    
    Promote Status:
    
            DB Type     Address              XLog Loc         Info
            --------------------------------------------------------------
            Master      192.168.22.102       0/301E260
            Standby     192.168.22.101       0/301E260
    
            Standby database(s) in sync with master. It is safe to promote.
    [root@dbi-pg-tools ~]#
    
    Conclusion :

    In this blog we have seen how we can configure a virtual IP with EFM. Hope that will help

    Cet article EDB Failover Manager 3.3 With Virtual Ip Address est apparu en premier sur Blog dbi services.

    Tweet Escalation to Your Support Team — Sentiment Analysis with Machine Learning

    Andrejus Baranovski - Mon, 2018-12-24 03:06
    I have published an article on Towards Data Science. I explain end-to-end technical solution which would help to streamline your company support process. With the focus on airline support requests received from Twitter. It could save a lot of time and money for the support department if they would know in advance which request is more critical and must be handled with higher priority.

    Read the full article here - Solution to automate tweet sentiment processing for airline support request escalation.


    performance stats for all entries in query log records (audit trail)

    Tom Kyte - Mon, 2018-12-24 00:26
    I need to find these stats : cpu time execution time io count app id proc id of procedure used in query for all queries which are being logged dba audit trail (XML) I have looked into V$SQL and dba_hist_sql stat but these contain only sn...
    Categories: DBA Blogs

    Pages

    Subscribe to Oracle FAQ aggregator