Hallo. Ich heiße hrkii123.
Dieser Eintrag ist der Artikel zum 18. Tag des JPOUG-Adventskalenders 2019.
Qiitas erster Beitrag ist JPOUG Adventskalender 2019.
JPOUG Adventskalender 2019 https://adventar.org/calendars/4154
Dieses Mal bin ich süchtig nach dem Dienstprogramm expdp von datapump.
Eines Tages. Wir haben die Datenbank mit der Anforderung entworfen, dass Betriebssystembenutzer, DB-Benutzer, Betriebssystemverzeichnisse usw. für jedes Entwicklungsteam getrennt werden müssen, damit Daten nicht voneinander referenziert werden können. Unter anderem wurde der Auftrag erteilt, ein Betriebssystemverzeichnis vorzubereiten, das von datapump für jedes Team exportiert werden soll, damit sie nicht auf die Dump-Dateien des jeweils anderen verweisen können.
Ich dachte, es wäre einfach, mit den Berechtigungen eines solchen Betriebssystemverzeichnisses zu steuern. (Es war nicht so einfach.)
Also habe ich die Überprüfungsinhalte zusammengefasst, die ich auf verschiedene Weise ausprobiert habe.
Exportieren Sie das user_A-Schema mit datapump nach / var / work / Adir. Nach dem Export können nur Aadmin-Benutzer unter / var / work / Adir auf die Dump-Dateien zugreifen, und Badmin-Benutzer können nicht darauf zugreifen. Der Zugriff ist durch Festlegen der Berechtigungen des Betriebssystemverzeichnisses möglich. Obwohl in der Abbildung nicht dargestellt, verwendete die Datenbank die 12.1-RAC-Umgebung. (Weil ich zufällig eine virtuelle Maschine hatte ..)
Erstellen Sie einen DB-Benutzer "user_A" und ein Verzeichnisobjekt "dirA" zur Überprüfung. Gewähren Sie dem DB-Benutzer "user_A" die erforderlichen Berechtigungen.
create user user_A identified by welcome1;
CREATE DIRECTORY dirA AS '/var/work/Adir';
grant create session,resource,unlimited tablespace to user_A;
grant read, write on directory dirA to user_A;
Kann expdp nun in diesem Zustand ausgeführt werden?
/u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp user_A/welcome1@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A
Ein Fehler ist aufgetreten, wie in der folgenden Ausgabe gezeigt.
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
Der obige Fehler wird ausgegeben, wenn die Betriebssystemverzeichnisberechtigungen nicht geeignet sind.
Das im Verzeichnisobjekt angegebene Betriebssystemverzeichnis ist der Eigentümer Aadmin und die eigene Gruppe Aadmin. Die von den Datenpumpenspezifikationen exportierten Speicherauszugsdateien gehören Oracle und asmadmin. Mit anderen Worten, um eine Datenpumpe auszuführen, muss der Oracle-Benutzer und die asmadmin-Gruppe den Zugriff zulassen. Wenn die Berechtigung für das Betriebssystemverzeichnis 777 lautet, müssen Sie sich um nichts kümmern. In diesem Fall gehört der Oracle-Benutzer jedoch nicht zur Aadmin-Gruppe, sodass Sie nicht auf das Betriebssystemverzeichnis zugreifen können.
Um dieses Problem zu umgehen, werden wir diesmal Aadmin zu den sekundären Gruppen von Oracle- und Grid-Benutzern hinzufügen.
id oracle
uid=54321(oracle) gid=54321(oinstall)groups=54321(oinstall),54322(dba),1101(oper),1102(backupdba),1103(dgdba),1104(kmdba),1201(asmdba),54323(Aadmin)
id grid
uid=1100(grid) gid=54321(oinstall)groups=54321(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper),54323(Aadmin)
Wird es diesmal gelingen?
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
Es kam wieder heraus. Dieser Fehler! !! Ich sollte in der Lage sein, auf das Betriebssystemverzeichnis zuzugreifen.
Wenn Sie die Berechtigung des Betriebssystemverzeichnisses in 777 ändern, funktioniert dies übrigens normal.
$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp user_A/welcome1@testdb directory=dirA
dumpfile=expdp_A.log schemas=user_A
Export: Release 12.1.0.2.0 - Production on Sun Dec 15 03:53:01 2019
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
Starting "USER_A"."SYS_EXPORT_SCHEMA_01": user_A/********@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Master table "USER_A"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for USER_A.SYS_EXPORT_SCHEMA_01 is:
/var/work/Adir/expdp_A.log
Job "USER_A"."SYS_EXPORT_SCHEMA_01" successfully completed at Sun Dec 15 03:53:42 2019 elapsed 0 00:00:38
[oracle@node1 ~]$
Wenn Sie eine sekundäre Gruppe von Oracle-Grid-Benutzern in einer RAC-Umgebung hinzufügen, müssen Sie die Clusterware darauf aufmerksam machen! Dies wird durch einen Neustart der Clusterware nach dem Hinzufügen der Gruppe erkannt. Sie können überprüfen, ob der Clusterware bekannt ist, dass eine Gruppe von Benutzern hinzugefügt wurde, indem Sie den pmon-Prozess überprüfen.
ps -ef | grep pmon
grid 14417 1 0 05:37 ? 00:00:00 asm_pmon_+ASM1
oracle 15136 1 0 05:37 ? 00:00:00 ora_pmon_ctestdb1
grid 15143 1 0 05:37 ? 00:00:00 mdb_pmon_-MGMTDB
oracle 30528 27106 0 06:06 pts/1 00:00:00 grep pmon
cat /proc/14417/status |grep Groups
Gruppen: 1200 1201 1202 54321 54323 ★ 54323 (Aadmin) wird erkannt
cat /proc/15136/status |grep Groups
Gruppen: 1101 1102 1103 1104 1201 54321 54322 54323 ★ 54323 (Aadmin) wird erkannt
Jetzt ist expdp endlich möglich.
$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp user_A/welcome1@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A
Export: Release 12.1.0.2.0 - Production on Sun Dec 15 05:58:12 2019
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
Starting "USER_A"."SYS_EXPORT_SCHEMA_01": user_A/********@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Master table "USER_A"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for USER_A.SYS_EXPORT_SCHEMA_01 is:
/var/work/Adir/expdp_A.log
Job "USER_A"."SYS_EXPORT_SCHEMA_01" successfully completed at Sun Dec 15 05:58:36 2019 elapsed 0 00:00:23
Wir haben auch eine Zugangskontrolle, die wir erreichen wollten.
$ id
uid=54323(Badmin) gid=54324(Badmin) groups=54324(Badmin)
$ cd /var/work/Adir/
-bash: cd: /var/work/Adir/: Permission denied
$ ls -l /var/work/Adir/
ls: cannot open directory /var/work/Adir/: Permission denied
Das ist es.
Seien Sie gespannt auf den Artikel am 19. Tag des JPOUG-Adventskalenders 2019 ~
Recommended Posts