[LINUX] [Umgebungskonstruktion] Oracle DB x Pro * C [Jetzt]

Einführung

Dieser Artikel enthält eine Zusammenfassung des Verfahrens zum Einführen einer Oracle-Umgebung als persönliche Entwicklungsumgebung (Studienumgebung). Der Grund, warum ich mich entschied, einen Artikel zu schreiben, war, dass ich den neuesten Artikel nirgendwo finden konnte und große Probleme hatte. Ich weiß nicht, ob Nachfrage besteht, aber für meine Kollegen in einer ähnlichen Situation und für mich in der Zukunft. Ich denke, es gibt viele Leute, die sagen: "Ich möchte es in der Cloud tun!" Und "Ich möchte es als Webdesigner tun!". Aber es kann Szenen geben, die für das Geschäft notwendig sind (wie ich). Die Struktur des Artikels ist wie folgt. Wenn Sie nicht an 1 interessiert sind, überspringen Sie es bitte.

  1. Aktuelles Oracle

Der Grund für Linux ist, dass wir dieses Mal die Datenbank aus der C-Sprache mit Pro * C verwenden werden. Ich habe mich diesmal für Oracle Linux entschieden, weil es (persönlich) einfacher ist, Linux zu erstellen, als eine C-Sprachkompilierungsumgebung unter Windows zu installieren. Im Folgenden erfahren Sie, warum wir uns für Oracle Linux entschieden haben.

In Bezug auf diesen Artikel werden wir auch die guten Artikel unserer Vorgänger verwenden, um eine Umgebung zu erstellen. Bitte haben Sie Verständnis dafür, dass ~~ Grundlagen übersprungen werden ~~ es gibt viele Links. Die im Link nicht genannten Teile werden in diesem Artikel hinzugefügt.

Die endgültige Zielumgebung ist wie folgt.

Windows OS (Jede einzelne Version)
 ┗ VirtualBox (6.0.6)
  ┗ Oracle Linux (7.5.0.0.0)
┗ C-Sprachausführungsumgebung(gcc Kompilierungsumgebung)
   ┗ Oracle Database (12c Release 2)

1. Aktuelles Oracle

In diesen Tagen wurde viel über Oracle gesprochen, einschließlich Oracle Java, aber es ist immer noch kostenlos für den persönlichen Gebrauch von Oracle DB verfügbar. Ich bin mit der Geschichte nicht sehr vertraut, daher gebe ich Ihnen einige Referenzen.

In dem obigen Artikel wird Oracle DB nicht erwähnt, aber es scheint, als würde es auch für den persönlichen Gebrauch eine Abonnementgebühr geben, z. B. für den Verkauf von vor Ort verpackten Produkten und die Konzentration auf die Cloud.

2. Erstellen einer Oracle Linux-Umgebung

Bauverfahren

Erstellen Sie im Wesentlichen unter "Referenz: Installieren von Oracle Linux 7.5 mit VirtualBox (nur Memo)".

PUNKTTIPPS, die verstopft zu sein scheinen

3. Installation von Oracle DB

Bauverfahren

Erstellen Sie von hier aus die in 2 integrierte Oracle Linux-Umgebung. Erstellen Sie im Wesentlichen unter "Referenz: Installieren von Oracle 12c R2 unter Oracle Linux 7.5".

drwxrwxrwx.5 Wurzel Wurzel 89 24. April 18:21 oraInventory
drwxrwxrwx.10 root root 4096 24. April 18:29 oracle

-Access Oracle

PUNKTTIPPS, die verstopft zu sein scheinen

4. Erstellen einer Datenbank

Bauverfahren

Erstellen Sie von hier aus eine Datenbank unter Oracle 12c R2, die in 3 installiert ist. Erstellen Sie es im Wesentlichen unter Bezugnahme auf die Datenbankerstellung und höher von "Referenz: Installieren von Oracle 12c R2 unter Oracle Linux 7.5".

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

5. Oracle DB-Setup

--Starten Sie sqlplus und starten Sie die Datenbank

Führen Sie im Folgenden alle Schritte aus, während Sie mit SYS bei sqlplus angemeldet sind

-Erstellen Sie den Benutzer
SQL> create user username identified by password;

・ Erstellen eines Tabellenbereichs
SQL> create tablespace TEST_TBS 
     datafile '/u01/app/oracle/oradata/testdb/test01.dbf' 
     size 2G 
     autoextend off;

-Erstellen eines temporären Bereichstabellenbereichs
SQL> create temporary tablespace TEST_TMP 
     tempfile '/u01/app/oracle/oradata/testdb/testtmp01.dbf' 
     size 2G 
     autoextend off;

- Benutzerrechte festlegen (dem erstellten Tabellenbereich Benutzerrechte zuweisen)
SQL> alter user username
     default tablespace TEST_TBS
     temporary tablespace TEST_TMP;

-Einstellen von Benutzerberechtigungen (Hinzufügen von Verbindungsberechtigungen und CRUD-Berechtigungen)
SQL> grant connect, resource to username

· Unbegrenzte Zuweisung von Tabellenbereich
SQL> alter user username quota unlimited on TEST_TBS ;

-Überprüfen Sie, ob der erstellte Benutzer darauf zugreifen kann
OK, wenn das folgende SQL ausgeführt werden kann
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

Starten Sie einen Listener $ lsnrctl start


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)
    )
  )

Referenz: Oracle eine kleine Referenz

6. Funktionsprüfung

Beispieldaten

Ich habe den Quellcode unter Bezugnahme auf "Referenz: Ich habe ein wenig Angst, weil er über den Boden hinausgeht" erstellt.

Melden Sie sich zunächst bei sqlplus als Benutzer an, der in 5 erstellt wurde.

$ sqlplus / as sysdba

SQL> connect username/password

SQL> show user
     USERNAME

Erstellen Sie eine Tabelle, während Sie bei sqlplus angemeldet sind.

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;

Fügen Sie Beispieldaten ein, während Sie bei sqlplus angemeldet sind.

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;

Melden Sie sich von sqlplus ab.

Erstellung des Quellcodes

Der folgende Quellcode wird beschrieben.

test_p.pc


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

/*SQL-Zugriffskonstante (zum Testen fest codiert)*/
#define ORAUSER    "username"
#define ORAPASSWD  "password"
#define ORASYSID_T "testdb"

/*Makrodefinition für maximale Anzahl beim Abrufen*/
#define MAX 100

/*Deklarationsteil der SQL-Zugriffsvariablen (sogenannte Hostvariable)*/
/* "h_"Die Startvariable wird zur Auswahl verwendet*/
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;

/*Deklaration der Header-Datei für den ProC-Precompiler*/
EXEC SQL INCLUDE sqlca.h;

/******************************/
/*Hauptfunktion von hier*/
/*Fluss in der Hauptfunktion*/
/* 1.Variablendefinition (globale Definition für Hostvariablen)*/
/* 2.Wertinitialisierung*/
/* 3.DB Connect*/
/* 4.Ausgabe der select-Anweisung*/
/* 5.Cursor geöffnet*/
/* 6.Ausführung abrufen*/
/* 7.Cursor schließen*/
/* 8.DB-Trennung (Festschreiben)*/
/******************************/
int main(int argc, char *argv[])
{
    /*Variable für die Cursorschleife zum Zeitpunkt des Abrufs*/
    int i;

    /*Initialisierung der Hostvariablen*/
    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));

    /*Verbindung zu Oracle (Konstanten in SQL-Zugriffsvariablen festlegen)*/
    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);

    /*Ausnahmeerklärung → Springe zu errorpt*/
    EXEC SQL WHENEVER SQLERROR GOTO errorpt;


    printf("user: %s, password: %s Verbindung starten\n",
    username.arr,password.arr);

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

    printf("%s Die Verbindung war erfolgreich\n",systemid.arr);

    printf("system: %s Suche starten\n", systemid.arr);

    /*Cursor-Deklaration (SQL-Ausgabe bei Auswahl ist hier)*/
    EXEC SQL AT :systemid DECLARE cursor CURSOR FOR
      SELECT CODE, NAME
        FROM MEMBER
        WHERE UPDATE_YMD > 20190101;

    printf("Suche abgeschlossen\n");

    printf("Öffnen Sie den Cursor\n");

    /*Cursor geöffnet*/
    EXEC SQL OPEN cursor;

    printf("Der Cursor hat sich geöffnet\n\n");

    /*Datenabruf (sogenannter Abruf)*/
    EXEC SQL FETCH cursor INTO
    :h_code,:h_name;

    /*Wenn es keinen Wert gibt, beenden Sie*/
    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("Abruf abgeschlossen\n");

    /*Cursor schließen*/
    EXEC SQL CLOSE cursor;

    printf("Der Cursor ist geschlossen\n");

    /*Obwohl Commit angezeigt wird, wird auch die Verbindung getrennt*/
    /*Wenn es nicht ausgewählt ist, wird es zurückgesetzt, wenn Sie dies nicht schreiben*/
    /*Nicht erforderlich, da Auswahl trennt, wenn der Cursor geschlossen wird*/
    /* EXEC SQL COMMIT WORK RELEASE; */

    return 0;

    /*Verarbeitung zum Zeitpunkt des Fehlers*/
errorpt:
    printf("\n\n%-79s \n",sqlca.sqlerrm.sqlerrmc);
    EXEC SQL WHENEVER SQLERROR CONTINUE;
}

kompilieren

Lauf

Ausführungsergebnis

$ ./test_p
user: username, password:Passwort Verbindung starten
testdb Verbindung war erfolgreich
system:Starten Sie die Testdb-Suche
Suche abgeschlossen
Öffnen Sie den Cursor
Der Cursor hat sich geöffnet

0000000000,aaaaaaaaaa
1111111111,bbbbbbbbbb

Abruf abgeschlossen
Der Cursor ist geschlossen

PUNKTTIPPS, die verstopft zu sein scheinen

Zum Zeitpunkt des Kompilierens des PCs tritt der folgende Fehler auf, dass nicht mehrere Bibliotheken aufgerufen werden können

In Zeile 0 und Spalte 0 ist ein Fehler aufgetreten. Dateitest_p.pc
PCC-F-02102,Beim Ausführen der C-Präprozessorverarbeitung ist ein schwerwiegender Fehler aufgetreten.
In Zeile 33 und Spalte 11 ist ein Fehler aufgetreten. Datei/usr/include/stdio.h
    33  # include <stddef.h>
    33  ..........1
    33  PCC-S-02015,Einfügedatei kann nicht geöffnet werden.
In Zeile 15 und Spalte 10 ist ein Fehler aufgetreten. Datei/usr/include/_G_config.h
    15  #include <stddef.h>
    15  .........1
    15  PCC-S-02015,Einfügedatei kann nicht geöffnet werden.
In Zeile 51 und Spalte 11 ist ein Fehler aufgetreten. Datei/usr/include/wchar.h
    51  # include <stddef.h>
    51  ..........1
    51  PCC-S-02015,Einfügedatei kann nicht geöffnet werden.
In Zeile 50 und Spalte 10 ist ein Fehler aufgetreten. Datei/usr/include/libio.h
    50  #include <stdarg.h>
    50  .........1
    50  PCC-S-02015,Einfügedatei kann nicht geöffnet werden.
In Zeile 307, Spalte 3 ist ein Fehler aufgetreten. Datei/usr/include/libio.h
   307    size_t __pad5;
   307  ..1
   307  PCC-S-02201,Symbol"size_t"Ich fand. Wenn einer der folgenden Punkte eintritt:

Abhängig von der Umgebung befindet sich der Speicherort jeder Header-Datei möglicherweise nicht unter "/ usr / include /" gemäß der Fehlermeldung. Daher muss ein Link zur Konfigurationsdatei "pcscfg.cfg" hinzugefügt werden.

--Suchen Sie die Konfigurationsdatei $ find / -name pcscfg.cfg - /u01/app/oracle/product/12.2.0/dbhome_1/precomp/admin/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/)
...

Referenz: Fehler, dass stddef.h in der Pro * C-Vorkompilierung nicht gefunden werden kann

Recommended Posts

[Umgebungskonstruktion] Oracle DB x Pro * C [Jetzt]
Aufbau einer PyTorch C ++ (LibTorch) -Umgebung
Mac OS X Mavericks 10.9.5 Aufbau einer Entwicklungsumgebung
GeoDjango + SQLite-Umgebungskonstruktion unter OS X.
Mac OS X Yosemite 10.10 Aufbau einer Entwicklungsumgebung
Konstruktionsnotiz für die Mac OS X-Entwicklungsumgebung
Einfache Erstellung einer Python-Datenanalyseumgebung mit Windows 10 Pro x VS Code x Docker
EV3 x Pyrhon Maschinelles Lernen Teil 1 Umgebungskonstruktion
Erstellen Sie Oracle Database 19c unter Oracle Linux 8.3 (zweiter Teil der DB-Konstruktion)
Python 3.x-Umgebungskonstruktion von Pyenv (CentOS, Ubuntu)
DeepIE3D-Umgebungskonstruktion
Emacs-basierte Umgebungskonstruktion
Aufbau einer Linux-Umgebung
Umgebungskonstruktion (Python)
Django Umweltbau
CodeIgniter-Umgebungskonstruktion
Python-Umgebungskonstruktion
Python - Umgebungskonstruktion
Aufbau einer Python-Umgebung
Golang Umweltbau
Umgebungskonstruktion von word2vec