Informations de dictionnaire d'Oracle Database, Utilisation de la bibliothèque python (cx_Oracle) Il s'agit d'un script d'acquisition de données à usage général.
Je pense qu'il est courant de l'obtenir avec la bobine de sqlplus. Après tout, il est tard, n'est-ce pas? N'est-il pas gênant d'écrire un script en fonction des données acquises à chaque fois? C'est bien de l'obtenir, mais le format est cliquetis et vous le récupérez souvent, non?
staticinfo.py
#!/usr/bin/python
import cx_Oracle
import os
import sys
import csv
USER='******' #Veuillez changer en fonction de l'environnement(system)
PASS='********' #Veuillez changer en fonction de l'environnement(manager)
HOST='***.***.***.***' #Veuillez changer en fonction de l'environnement(192.168.0.1)
PORT='****' #Veuillez changer en fonction de l'environnement(1521)
SERVICE_NAME='****' #Veuillez changer en fonction de l'environnement(ORCL)
FETCH_ROWS=100 #Veuillez changer en fonction de l'environnement
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":
#Obtenir une instruction SQL
f = open(p1)
sql = f.read()
f.close()
out_file_name = name + '.csv'
else:
#Création d'une instruction SQL
sql = 'select * from %s' % p1
out_file_name = p1.replace('$','_') + '.csv'
with cx_Oracle.connect(USER,PASS,HOST+':'+PORT+'/'+SERVICE_NAME) as conn:
#Exécution de l'instruction SQL
cur_detail = conn.cursor()
cur_detail.execute(sql)
#Obtenir le nom de la colonne
csv_header = [str[0] for str in cur_detail.description]
#Obtenez la partie données
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
-Il est nécessaire de spécifier des variables d'environnement (ORACLE_HOME / LD_LIBRARY_PATH), etc. -Le fichier cible (dba_users.csv) est créé dans le répertoire courant. -Si vous préparez un script à l'avance, il est possible de convertir le résultat du script en csv.
Créez un shell comme celui ci-dessous et affichez-le tout à la fois.
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
Je voulais le rendre générique, donc je voulais particulièrement exécuter le fichier SQL et obtenir automatiquement les noms de colonnes. Bien entendu, il est également possible d'acquérir des données utilisateur. En fonction de la personnalisation, je pense que c'est devenu un script avec du potentiel.
Recommended Posts