Une base dans Oracle Cloud Service

Pour la première fois sur proracle.fr dans la rubrique About testbed, ce n’est pas une installation locale qui est décrite, mais une installation dans le Cloud Oracle, et comment s’y connecter une fois celle-ci créée. Cependant, il faut savoir qu’il y a à ma connaissance au moins 3 types de Cloud chez Oracle pouvant servir à créer une base de données Oracle: Cloud Service, OCI (Oracle Cloud Infrastructure) Compute Classic et OCI Ravello; ici l’article décrit la création d’une instance Oracle dans le Cloud Service. L’interface et le process de création est différents sur les 3 Cloud. Pour la petite histoire, Ravello provient du rachat par Oracle d’une start-up du même nom  en 2016, Compute Classic et Ravello sont donc un peu deux infrastructures qui se font concurrence.

Pour commencer, bonne nouvelle, il n’y a aucun prérequis hardware sur le PC à avoir, et il n’y a pas besoin d’avoir un compte Oracle de type edelivery et/ou sur le support Oracle. Il faut juste avoir accès à internet et… mauvaise nouvelle avoir une carte bleue.

Pour créer un compte sur le Cloud Oracle, rendez vous sur l’url https://cloud.oracle.com/en_US/tryit. Vous aurez alors un compte crédité de 300$ (250€ en fait pour un Européen) utilisable pendant 30 jours. Ceci est vrai à l’heure où j’écris ces lignes mais cela peut changer à tout moment. Attention pour créer un compte, tout comme sur AWS d’Amazon, il faut fournir une carte bleue, mais le compte ne sera pas débité tant que vous n’upgradez pas votre compte, et il arrivera alors à expiration dès les 250€ dépensé ou les 30 jours atteints.

Une fois donc, le compte créé, rendez-vous sur votre dashboard (https://myservices-XXXXXX.console.oraclecloud.com/mycloud/cloudportal/dashboard avec XXXXX le nom de votre cloud que vous venez de créer lors de votre inscription) et cliquez sur "créer une instance":

 

Puis cliquez sur "Create" dans la tuile "Database":

 

Cliquez sur le bouton "Custom":

 

Choisissez le nom de la base, sa version (11.2 à 18), son Edition (Standard à Extreme Performance), le type d’installation (RAC, Dataguard…). Si vous avez une licence Oracle Database disponible pour le type de base que vous êtes en train de créer vous pouvez cocher sur « Bring Your Own License », les crédits seront moins vite consommés:

 

Une paire de clef privée/publique est automatiquement généré. La clef publique sera mise dans l’installation de l’OS Linux pour permettre la première connexion. Téléchargez et enregistrez cette paire de clef, puis cliquez sur "create":

 

Ensuite… il faut un peu de patience, un Oracle Linux avec une base de données s’instancie. Cela prend environ 30 minutes:

Une fois instancié, cliquez sur le service pour avoir plus de détail.

Et voilà, c’est fini. Un serveur Oracle Linux avec une base de données Oracle vient d’être installé et il tourne sans prendre la moindre ressource sur votre PC.

Cependant sur un testbed local, ne se pose pas le problème de l’accès, ici c’est un peu différent, comment faire pour se connecter sur le serveur Linux, ouvrir une session shell ou bien se connecter avec un client sur la base de données ?

Pour se connecter il faut utiliser un client ssh (putty, kitty, mobaxterm…). La procédure de connexion décrite ci-dessous est réalisée avec putty (https://www.putty.org/).  Pour initialiser la connexion il faut utiliser la clef privée précédemment téléchargée, mais comme elle n’est pas compatible directement avec putty, il faut la convertir avec le générateur de clef RSA/DSA puttygen. Si jamais vous avez perdu la paire de clef ou bien vous voulez utiliser votre propre clef, vous rajouter une clef publique sur le serveur en passant par l’interface d’administration :

 

Lancez puttygen et chargez la clef privée précédemment téléchargée, ce qui a pour effet de convertir la clef :

 

Ensuite il faut l’enregistrer pour conserver la conversion compatible avec putty:

 

Maintenant on peut configurer putty pour se connecter en ssh sur le serveur grâce à la clef convertie au bon format, mais aussi le configurer pour avoir un tunnel ssh pour faire passer le protocole du port d’écoute de notre base de données à travers celui du ssh. En effet pas défaut le port d’écoute de la base de données est bloqué, il est possible de le débloquer en cliquant sur Règles d’accès :

 

 

Et dans Acces Rules (tient on vient de passer du Français à l’Anglais), on pourrait ouvrir le port 1521 qui est bloqué:

Pour des questions de sécurité il est préférable de laisser le port bloqué. Et de plus, même si ce n’est qu’un banc de test, il serait dommage que quelques personnes mal attentionnées arrivent à se connecter plus facilement sur la base grâce à ce port et utilise le CPU et les IO du serveur… ce sont des ressources payantes dans le Cloud et celui qui paie c’est celui qui a donné sa carte bleue.

 

Récupérez donc l’adresse IP publique du serveur Linux :

Ouvrez putty et mettez l’adresse IP publique du serveur puis donner un nom qui servira plus tard à sauver la configuration :

 

Allez sur "Data" dans "Connection", mettez oracle dans l’auto-login et bien choisir Prompt :

 

Puis allez dans "Auth", cochez tout comme dans la capture d’écran ci-dessous et avec le bouton "Browse" allez chercher la clef privée précédemment convertie avec puttygen:

 

Allez ensuite dans "Tunnels" et remplissez "Source port" avec un port libre sur votre PC (ici 15210) et dans "Destination" adresse_ip_public:1521 et cliquez sur add (ne pas oublier de cliquer !):

 

Revenez dans Session et cliquez sur "Save":

 

Cliquez sur "Open" et la session ssh s’ouvre automatiquement sans demander de mot de passe :

 

Le tunnel ssh est ouvert, pour joindre la base avec un client Oracle, le chemin réseau est alors //localhost :15210/nom_du_service.

Pour trouver le nom de service dans la session bash précédente faire :

[oracle@WinrocDB20180307 ~]$ lsnrctl services

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 10-MAR-2018 20:46:40
Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WinrocDB20180307.compute-594193049.oraclecloud.internal)(PORT=1521)))
Services Summary...
Service "66d89c8d683c277ee05392891c0ac782.594193049.oraclecloud.internal" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:4 refused:0 state:ready
         LOCAL SERVER
Service "ORCL.594193049.oraclecloud.internal" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:4 refused:0 state:ready
         LOCAL SERVER
Service "ORCL.594193049.oraclecloud.internalXDB" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
    Handler(s):
      "D000" established:0 refused:0 current:0 max:1022 state:ready
         DISPATCHER <machine: WinrocDB20180307, pid: 3410>
         (ADDRESS=(PROTOCOL=tcp)(HOST=WinrocDB20180307.compute-594193049.oraclecloud.internal)(PORT=47712))
Service "pdb1.594193049.oraclecloud.internal" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:4 refused:0 state:ready
         LOCAL SERVER
The command completed successfully

Dans cette exemple, la chaine de connexion est donc //localhost:15210/66d89c8d683c277ee05392891c0ac782.594193049.oraclecloud.internal

Créez un user temporaire pour valider le connectivité:

[oracle@WinrocDB20180307 ~]$ export ORACLE_SID=ORCL
[oracle@WinrocDB20180307 ~]$ sqlplus / as sysdba
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PDB1                           READ WRITE NO
SQL> alter session set container=PDB1 ;

SQL> create user toto identified by toto;
User created.

SQL> grant connect to toto;
Grant succeeded.

 

Il ne reste plus qu’à tester la connexion avec un client Oracle à partir de votre PC. Ici avec un sqlplus :

 

Remarque : Dès que l’on ferme la session ssh putty, le tunnel entre le PC et la base de données se clos et les connexions //localhost:15210/service échoueront.