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.
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)
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.
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.
--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) "
http: // proxy.co.jp
"dans l'hôte Socks.
―― Les numéros de port varient d'une entreprise à l'autre, mais 80, 8080, 1080, 3128, etc. sont souvent utilisés.À 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
$ unzip linuxx64_12201_database.zip
sous le dossier de téléchargement$. / RunInstaller
sous le dossier de base de données (la même méthode d'exécution que l'exécution d'un fichier exe normal)--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
$ dd if=/dev/zero of=/var/swpfile bs=1M count=2048
$ mkswap /var/swpfile
$ swapon /var/swpfile
$ free -m
$ su -
-- $ cd / tmp / CVU_XXXXXXXX
← Décrit dans le message d'avertissement$ ./runfixup.sh
À 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
$ source .bash_profile
-- $ sudo reboot
Redémarrez juste au cas où--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"
--Démarrez sqlplus et démarrez la base de données
--Exécuter en tant qu'utilisateur système avec $ sqlplus / as sysdba
SQL> show user
doit être SYS
--La base de données commence par SQL> startup
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)
)
)
Listener.ora est un fichier de configuration réseau placé côté serveur (terminal sur lequel Oracle DB est installé). Définir la base de données pour envoyer la communication reçue par le serveur
Transnames.ora est un fichier de configuration réseau placé du côté client. Définir quel port de quel serveur se connecter avec quel protocole
Référence: Oracle une petite référence
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.
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;
}
$ proc iname=test_p oname=test_p.c sqlcheck=full
--En s'exécutant, test_p.c
est généré$ gcc -c test_p.c -I $ORACLE_HOME/precomp/public
--En s'exécutant, test_p.o
est généré$ gcc -o test_p test_p.o -L$ORACLE_HOME/lib -lclntsh
test_p
est généré$. / Test_p
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é
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
.
$ find / -name pcscfg.cfg
/u01/app/oracle/product/12.2.0/dbhome_1/precomp/admin/pcscfg.cfg
--Ajoutez le chemin où le fichier d'en-tête existe réellement à sys_include (/ usr / lib / gcc / x86_64-redhat-linux / 4.8.2 / include / stddef.h
dans mon cas)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