[Construction de l'environnement] Oracle DB x Pro * C [maintenant]

introduction

Cet article est un résumé de la procédure d'introduction d'un environnement Oracle en tant qu'environnement de développement personnel (étude). La raison pour laquelle j'ai décidé d'écrire un article était que je ne pouvais trouver le dernier article nulle part et que j'avais de gros problèmes. Je ne sais pas s'il y a une demande, mais pour mes collègues dans une situation similaire et pour moi à l'avenir. Je pense qu'il y a beaucoup de gens qui disent "je veux faire du cloud!" Et "je veux faire du concepteur web!" La structure de l'article est la suivante. Si vous n'êtes pas intéressé par 1, veuillez l'ignorer.

  1. Oracle récent --Construction d'un environnement Oracle Linux --Introduction d'Oracle DB --Créer une base de données

La raison pour Linux est que cette fois, nous utiliserons la base de données du langage C en utilisant Pro * C. J'ai choisi Oracle Linux cette fois car il est (personnellement) plus facile de construire Linux que d'installer un environnement de compilation en langage C sous Windows. Découvrez ci-dessous pourquoi nous avons choisi Oracle Linux.

De plus, concernant cet article, nous utiliserons les bons articles de nos prédécesseurs pour construire l'environnement, alors veuillez comprendre que ~~ les bases seront ignorées ~~ il y a de nombreux liens. Les pièces non mentionnées dans le lien sont ajoutées dans cet article.

L'environnement cible final est le suivant.

Windows OS (Chaque version individuelle)
 ┗ VirtualBox (6.0.6)
  ┗ Oracle Linux (7.5.0.0.0)
┗ Environnement d'exécution du langage C(environnement de compilation gcc)
   ┗ Oracle Database (12c Release 2)

1. Oracle récent

On a beaucoup parlé d'Oracle ces jours-ci, y compris Oracle Java, mais il est toujours disponible gratuitement pour une utilisation personnelle d'Oracle DB. Je ne connais pas très bien l'histoire à ce sujet, alors je vais vous donner quelques références.

L'article ci-dessus ne mentionne pas Oracle DB, mais il semble qu'il s'agira de frais d'abonnement même pour un usage personnel, comme la vente de produits packagés sur site et la concentration sur le cloud.

2. Créez un environnement Oracle Linux

Procédure de construction

Fondamentalement, construisez en vous référant à "Référence: Installer Oracle Linux 7.5 avec VirtualBox (uniquement mémo)".

--Accès Oracle --Créez un utilisateur Oracle. Saisissez l'adresse et l'adresse e-mail, mais peu importe que vous soyez un particulier ou une entreprise. --Lorsque vous vous connectez avec l'ID utilisateur créé, il y a une boîte de recherche, alors entrez "Oracle Linux 7.5.0.0.0" et appuyez sur le bouton "Rechercher". --Si vous appuyez sur "DLP: Oracle Linux 7.5.0.0.0 (Oracle Linux)", il sera ajouté au panier.

CONSEILS DE POINT qui semble bouché

--Si vous ne pouvez pas bien saisir le japonais, reportez-vous à l'article suivant "Référence: Comment saisir le japonais sur le bureau d'Oracle Linux 7.4 .html) "

3. Installation d'Oracle DB

Procédure de construction

À partir de là, créez l'environnement sur Oracle Linux intégré 2. En gros, construisez en vous référant à "Référence: Installer Oracle 12c R2 sur Oracle Linux 7.5".

--Exécuter Oracle Preinstall RPM --Oracle Preinstall RPM est un logiciel qui facilite l'installation d'Oracle DB (Référence: Que fait Oracle Preinstall RPM?) - $ yum install -y oracle-rdbms-server-12cR1-preinstall - $ export LANG=C - $ oracle-rdbms-server-12cR1-preinstall-verify --Créer un répertoire pour l'installation d'Oracle DB (soi-disant répertoire de base Oracle) - $ mkdir -p /u01/app/oraInventory - $ mkdir -p /u01/app/oracle - $ mkdir /home/oracle/tmp --Définissez le propriétaire et les droits d'accès au répertoire avec $ chmod ou $ chown selon les besoins. Cette fois, tout sera fait avec les droits d'accès root et complet, donc les paramètres suivants - $ chown -R root:root /u01/app/oracle - $ chown -R root:root /u01/app/oraInventory - $ chmod -R 775 /u01/app/oracle - $ chmod -R 775 /u01/app/oraInventory --Exécutez $ ls -l / u01 / app / pour vérifier chaque permission

drwxrwxrwx.5 racine racine 89 24 avril 18:21 oraInventory
drwxrwxrwx.10 racine racine 4096 24 avril 18:29 oracle

-Accès Oracle

CONSEILS DE POINT qui semble bouché

--Ajoutez proxy = http: //proxy.xxx.xxx: pp au bas du fichier /etc/yum.conf pour la percée du proxy de yum. --Si un avertissement est émis avec la taille de swap, exécutez la commande suivante

4. Création d'une base de données

Procédure de construction

À partir de là, créez une base de données sur Oracle 12c R2 installé dans 3. En gros, construisez-le en vous référant à la création de la base de données et plus tard à "Référence: Installer Oracle 12c R2 sur Oracle Linux 7.5".

--Ajoutez ce qui suit à .bash_profile pour modifier les variables d'environnement (existe généralement directement sous le dossier de l'utilisateur de connexion)

export TMPDIR=$HOME/tmp
export TEMP=$HOME/tmp
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}:PATH=$ORACLE_HOME/sqldeveloper/sqldeveloper/bin:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=JAPANESE_JAPAN.UTF8
export LANG=ja_JP.UTF-8

export ORACLE_SID=testdb

--Réflexion du paramétrage des variables d'environnement

--Exécutez $ dbca pour démarrer l'écran de création de la base de données avec l'interface graphique --Créez une base de données selon "Créer une base de données" dans "Référence: Installer Oracle 12c R2 sur Oracle Linux 7.5"

5. Configuration d'Oracle DB

--Démarrez sqlplus et démarrez la base de données --Exécuter en tant qu'utilisateur système avec $ sqlplus / as sysdba

De ce qui suit, faites tout en étant connecté à sqlplus avec SYS

-Créer un utilisateur
SQL> create user username identified by password;

・ Création d'un espace table
SQL> create tablespace TEST_TBS 
     datafile '/u01/app/oracle/oradata/testdb/test01.dbf' 
     size 2G 
     autoextend off;

-Création d'un espace table temporaire
SQL> create temporary tablespace TEST_TMP 
     tempfile '/u01/app/oracle/oradata/testdb/testtmp01.dbf' 
     size 2G 
     autoextend off;

-Définir les privilèges utilisateur (attribuer des privilèges utilisateur à l'espace table créé)
SQL> alter user username
     default tablespace TEST_TBS
     temporary tablespace TEST_TMP;

-Réglage des privilèges utilisateur (ajout des privilèges de connexion et des privilèges CRUD)
SQL> grant connect, resource to username

· Allocation illimitée d'espace table
SQL> alter user username quota unlimited on TEST_TBS ;

-Vérifier s'il est accessible par l'utilisateur créé
OK si le SQL suivant peut être exécuté
SQL> connect username/password
SQL> show user
     USERNAME
$ cat /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora

/u01/app/oracle/product/12.2.0/dbhome_1/network/admin
listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1)
      (SID_NAME = testdb)
      (SERVICE_NAME = testdb)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521))
  )

ADR_BASE_LISTENER = /u01/app/oracle

Lancer un auditeur $ lsnrctl start

--Cette fois, l'accès depuis le client est également effectué à partir du même système d'exploitation, donc transnames.ora est également réécrit comme suit (le nom de l'hôte est omis ci-dessous)


LISTENER_TESTDB =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521))


TESTDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = testdb)
    )
  )

Référence: Oracle une petite référence

6. Contrôle de fonctionnement

Exemple de données

J'ai créé le code source en me référant à "Référence: j'ai un peu peur car c'est passé le bas".

Tout d'abord, connectez-vous à sqlplus en tant qu'utilisateur créé dans 5.

$ sqlplus / as sysdba

SQL> connect username/password

SQL> show user
     USERNAME

Créez une table lorsque vous êtes connecté à sqlplus.

SQL> CREATE TABLE username.MEMBER 
     (CODE varchar2 (10) NOT NULL, 
     NAME varchar2 (10) NOT NULL, 
     UPDATE_YMD varchar2 (8) NULL)

SQL> ALTER TABLE username.MEMBER ADD PRIMARY KEY 
     (CODE,
      NAME);

SQL> commit;

Insérez des exemples de données lorsque vous êtes connecté à sqlplus.

insert into username.MEMBER(
  CODE,
  NAME,
  UPDATE_YMD 
)
values
(
  '0000000000',
  'aaaaaaaaaa',
  '20190101'
);

insert into username.MEMBER(
  CODE,
  NAME,
  UPDATE_YMD 
)
values
(
  '1111111111',
  'bbbbbbbbbb',
  '20190101'
);

commit;

Déconnectez-vous de sqlplus.

Création de code source

Le code source suivant est décrit.

test_p.pc


#include "stdio.h"
#include "stdlib.h"
#include "string.h"

/*Constante d'accès SQL (codée en dur pour les tests)*/
#define ORAUSER    "username"
#define ORAPASSWD  "password"
#define ORASYSID_T "testdb"

/*Définition de la macro de nombre maximal lors de la récupération*/
#define MAX 100

/*Partie de déclaration de la variable d'accès SQL (dite variable hôte)*/
/* "h_"La variable de départ est utilisée pour sélectionner*/
EXEC SQL BEGIN DECLARE SECTION;
    varchar username[20];
    varchar password[20];
    varchar systemid[20];
    char    h_code[MAX][10];
    char    h_name[MAX][10];
EXEC SQL END DECLARE SECTION;

/*Déclaration du fichier d'en-tête pour le précompilateur ProC*/
EXEC SQL INCLUDE sqlca.h;

/******************************/
/*Fonction principale d'ici*/
/*Flux dans la fonction principale*/
/* 1.Définition de variable (définition globale pour les variables hôtes)*/
/* 2.Initialisation de la valeur*/
/* 3.DB Connect*/
/* 4.Émission d'une déclaration sélective*/
/* 5.Curseur ouvert*/
/* 6.Récupérer l'exécution*/
/* 7.Curseur fermé*/
/* 8.Déconnexion de la base de données (validation)*/
/******************************/
int main(int argc, char *argv[])
{
    /*Variable pour la boucle du curseur au moment de la récupération*/
    int i;

    /*Initialisation de la variable hôte*/
    memset(&username, 0x00, sizeof(username));
    memset(&password, 0x00, sizeof(password));
    memset(&systemid, 0x00, sizeof(systemid));
    memset(&h_code, 0x00, sizeof(h_code));
    memset(&h_name, 0x00, sizeof(h_name));

    /*Connexion à oracle (définir la constante dans la variable d'accès SQL)*/
    strcpy(username.arr, ORAUSER);
    username.len = strlen(username.arr);
    strcpy(password.arr, ORAPASSWD);
    password.len = strlen(password.arr);
    strcpy(systemid.arr, ORASYSID_T);
    systemid.len = strlen(systemid.arr);

    /*Déclaration d'exception → passer à errorpt*/
    EXEC SQL WHENEVER SQLERROR GOTO errorpt;


    printf("user: %s, password: %s Démarrer la connexion\n",
    username.arr,password.arr);

    /*Lien*/
    EXEC SQL CONNECT :username
      IDENTIFIED BY :password
      AT :systemid;

    printf("%s La connexion a réussi\n",systemid.arr);

    printf("system: %s Lancer la recherche\n", systemid.arr);

    /*Déclaration du curseur (l'émission de SQL en cas de sélection est ici)*/
    EXEC SQL AT :systemid DECLARE cursor CURSOR FOR
      SELECT CODE, NAME
        FROM MEMBER
        WHERE UPDATE_YMD > 20190101;

    printf("Recherche terminée\n");

    printf("Ouvrez le curseur\n");

    /*Curseur ouvert*/
    EXEC SQL OPEN cursor;

    printf("Le curseur s'est ouvert\n\n");

    /*Récupération de données (soi-disant fetch)*/
    EXEC SQL FETCH cursor INTO
    :h_code,:h_name;

    /*S'il n'y a pas de valeur, quittez*/
    for(i=0;i<MAX;i++){
      if(0 == strlen(h_code[i])){
        printf("\n");
        break;
      }else{
        printf("%s,%s\n",
        h_code[i],h_name[i]);
      }
    }

    printf("Récupération terminée\n");

    /*Curseur fermé*/
    EXEC SQL CLOSE cursor;

    printf("Le curseur est fermé\n");

    /*Bien qu'il dise commettre, il déconnecte également*/
    /*S'il n'est pas sélectionné, il sera annulé si vous ne l'écrivez pas*/
    /*Non requis car select se déconnecte lorsque le curseur est fermé*/
    /* EXEC SQL COMMIT WORK RELEASE; */

    return 0;

    /*Traitement au moment de l'erreur*/
errorpt:
    printf("\n\n%-79s \n",sqlca.sqlerrm.sqlerrmc);
    EXEC SQL WHENEVER SQLERROR CONTINUE;
}

compiler

Courir

Résultat d'exécution

$ ./test_p
user: username, password:mot de passe Démarrer la connexion
La connexion testdb a réussi
system:lancer la recherche testdb
Recherche terminée
Ouvrez le curseur
Le curseur s'est ouvert

0000000000,aaaaaaaaaa
1111111111,bbbbbbbbbb

Récupération terminée
Le curseur est fermé

CONSEILS DE POINT qui semble bouché

Au moment de la compilation du PC, l'erreur suivante se produit: plusieurs bibliothèques ne peuvent pas être appelées

Une erreur s'est produite à la ligne 0 et à la colonne 0. Test de fichier_p.pc
PCC-F-02102,Une erreur fatale s'est produite lors de l'exécution du traitement du préprocesseur C.
Une erreur s'est produite à la ligne 33 et à la colonne 11. Fichier/usr/include/stdio.h
    33  # include <stddef.h>
    33  ..........1
    33  PCC-S-02015,Impossible d'ouvrir le fichier d'insertion.
Une erreur s'est produite à la ligne 15 et à la colonne 10. Fichier/usr/include/_G_config.h
    15  #include <stddef.h>
    15  .........1
    15  PCC-S-02015,Impossible d'ouvrir le fichier d'insertion.
Une erreur s'est produite à la ligne 51 et à la colonne 11. Fichier/usr/include/wchar.h
    51  # include <stddef.h>
    51  ..........1
    51  PCC-S-02015,Impossible d'ouvrir le fichier d'insertion.
Une erreur s'est produite à la ligne 50 et à la colonne 10. Fichier/usr/include/libio.h
    50  #include <stdarg.h>
    50  .........1
    50  PCC-S-02015,Impossible d'ouvrir le fichier d'insertion.
Une erreur s'est produite à la ligne 307, colonne 3. Fichier/usr/include/libio.h
   307    size_t __pad5;
   307  ..1
   307  PCC-S-02201,symbole"size_t"J'ai trouvé. Lorsqu'un des éléments suivants entre:

Selon l'environnement, l'emplacement de chaque fichier d'en-tête peut ne pas être sous / usr / include / selon le message d'erreur. Par conséquent, il est nécessaire d'ajouter un lien vers le fichier de configuration pcscfg.cfg.

pcscfg.cfg


...
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include,/usr/lib64/gcc/x86_64-suse-linux/4.8/include,/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/)
...

Référence: Erreur indiquant que stddef.h est introuvable dans la précompilation Pro * C

Recommended Posts

[Construction de l'environnement] Oracle DB x Pro * C [maintenant]
Construction de l'environnement PyTorch C ++ (LibTorch)
Construction de l'environnement de développement Mac OS X Mavericks 10.9.5
Construction de l'environnement GeoDjango + SQLite sur OS X
Construction de l'environnement de développement Mac OS X Yosemite 10.10
Mémo de construction de l'environnement de développement Mac OS X
Construction d'un environnement d'analyse de données Python facile avec Windows10 Pro x VS Code x Docker
EV3 x Pyrhon Machine Learning Partie 1 Construction de l'environnement
Construire la base de données Oracle 19c sur Oracle Linux 8.3 (deuxième partie de la construction de la base de données)
Construction de l'environnement Python 3.x par Pyenv (CentOS, Ubuntu)
Construction de l'environnement DeepIE3D
Construction d'environnement basée sur Emacs
Construction de l'environnement Linux
Construction d'environnement (python)
construction d'environnement django
Construction de l'environnement CodeIgniter
construction d'environnement python
Python - Construction de l'environnement
Construction de l'environnement Python
Construction de l'environnement Golang
Construction de l'environnement de word2vec