Wörterbuchinformationen der Oracle-Datenbank, Verwenden der Python-Bibliothek (cx_Oracle) Dies ist ein universelles Datenerfassungsskript.
Ich denke, es ist üblich, es mit der Spule von sqlplus zu bekommen. Es ist doch spät, oder? Ist es nicht mühsam, jedes Mal ein Skript gemäß den erfassten Daten zu schreiben? Es ist gut, es zu bekommen, aber das Format klappert und man bekommt es oft wieder, oder?
staticinfo.py
#!/usr/bin/python
import cx_Oracle
import os
import sys
import csv
USER='******' #Bitte ändern Sie je nach Umgebung(system)
PASS='********' #Bitte ändern Sie je nach Umgebung(manager)
HOST='***.***.***.***' #Bitte ändern Sie je nach Umgebung(192.168.0.1)
PORT='****' #Bitte ändern Sie je nach Umgebung(1521)
SERVICE_NAME='****' #Bitte ändern Sie je nach Umgebung(ORCL)
FETCH_ROWS=100 #Bitte ändern Sie je nach Umgebung
argv = sys.argv
argc = len(argv)
if argc != 2:
print('Usage: %s filename or tablename' % argv[0])
quit()
print("execution..." + argv[1])
p1 = argv[1]
name, ext = os.path.splitext(p1)
if ext == ".sql":
#SQL-Anweisungserfassung
f = open(p1)
sql = f.read()
f.close()
out_file_name = name + '.csv'
else:
#Erstellung von SQL-Anweisungen
sql = 'select * from %s' % p1
out_file_name = p1.replace('$','_') + '.csv'
with cx_Oracle.connect(USER,PASS,HOST+':'+PORT+'/'+SERVICE_NAME) as conn:
#Ausführung von SQL-Anweisungen
cur_detail = conn.cursor()
cur_detail.execute(sql)
#Spaltennamen abrufen
csv_header = [str[0] for str in cur_detail.description]
#Holen Sie sich den Datenteil
f = open(out_file_name, 'w')
writer = csv.writer(f, lineterminator='\n', quoting=csv.QUOTE_ALL)
writer.writerow(csv_header)
while 1:
csv_detail = cur_detail.fetchmany(FETCH_ROWS)
if len(csv_detail) == 0:
break
writer.writerows(csv_detail)
cur_detail.close()
$ python staticinfo.py dba_users
-Es ist erforderlich, Umgebungsvariablen (ORACLE_HOME / LD_LIBRARY_PATH) usw. anzugeben. -Die Zieldatei (dba_users.csv) wird im aktuellen Verzeichnis erstellt. -Wenn Sie ein Skript im Voraus vorbereiten, können Sie das Ergebnis des Skripts in CSV konvertieren.
Erstellen Sie eine Shell wie die folgende und geben Sie alles auf einmal aus.
staticinfo.sh
#!/bin/sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0.2/client_1
export LANG=ja_JP.UTF-8
export NLS_LANG=Japanese_Japan.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
python staticinfo.py dba_users
python staticinfo.py dba_profiles
python staticinfo.py dba_data_files
python staticinfo.py dba_temp_files
python staticinfo.py dba_tablespaces
python staticinfo.py dba_segments
python staticinfo.py dba_roles
python staticinfo.py dba_role_privs
python staticinfo.py dba_sys_privs
python staticinfo.py dba_tab_privs
python staticinfo.py gv\$database
python staticinfo.py gv\$instance
python staticinfo.py gv\$log
python staticinfo.py gv\$logfile
python staticinfo.py gv\$controlfile
python staticinfo.py gv\$parameter2
python staticinfo.py 01_tablespace_capacity.sql
python staticinfo.py 02_datafile_capacity.sql
python staticinfo.py 03_tempfile_capacity.sql
Ich wollte es generisch machen, daher waren die Punkte, die mir besonders wichtig waren, die Ausführung der SQL-Datei und die automatische Erfassung von Spaltennamen. Natürlich ist es auch möglich, Benutzerdaten zu erfassen. Abhängig von der Anpassung denke ich, dass es ein Skript mit Potenzial geworden ist.
Recommended Posts