root 使用者通過 sqlplus 連線資料庫
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
from subprocess import Popen, PIPE
def query(sql, pdb_name=None, oracle_sid=None, hostname=None, sqlplus='sysdba', ora_user='oracle'):
shell_cmd = 'su - {0} <<EOF'.format(ora_user)+os.linesep
if oracle_sid:
shell_cmd += 'export ORACLE_SID={0}'.format(oracle_sid)+os.linesep
shell_cmd += 'sqlplus -S / as {0}'.format(sqlplus)+os.linesep
shell_cmd += 'SET FEEDBACK OFF'+os.linesep
shell_cmd += 'SET HEADING OFF'+os.linesep
shell_cmd += 'SET LINE 10000'+os.linesep
shell_cmd += 'SET PAGESIZE 10000'+os.linesep
if pdb_name and pdb_name.strip() != '':
shell_cmd += 'ALTER SESSION SET CONTAINER={0};'.format(pdb_name.strip())+os.linesep
shell_cmd += sql+os.linesep
shell_cmd += 'quit;'+os.linesep
shell_cmd += 'EOF'+os.linesep
if hostname:
p = Popen('/usr/bin/ssh -Tq '+hostname, shell=True, stdout=PIPE, stdin=PIPE)
p.stdin.write(str.encode(shell_cmd))
p.stdin.flush()
else:
p = Popen(shell_cmd, shell=True, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
try:
if stdout and stdout.strip() != '':
stdout = stdout.decode()
if 'Last login:' in stdout:
lines = stdout.split(os.linesep)
for i in range(0, len(lines)):
if 'Last login:' in lines[i]:
del lines[i] # delete only once
break
stdout = os.linesep.join(lines)
else:
stdout = None
except Exception as e:
stdout = None
return stdout
#####
sql = "select * from v\$tablespace;"
# run remote sql
res = query(sql, hostname='pgylinux03', oracle_sid='ora11gbk')
print(res)
# run local sql
res = query(sql, oracle_sid='cattydb', pdb_name='CATTY_PDB01')
print(res)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31560527/viewspace-2727457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過sqlplus連線資料庫伺服器很慢的問題SQL資料庫伺服器
- 1.3.3. 通過SQL*Plus 連線資料庫SQL資料庫
- 通過cmd命令列連線mysql資料庫命令列MySql資料庫
- Qt中通過ODBC連線MSSQL資料庫QTSQL資料庫
- root使用者無法通過ssh連線Linux系統Linux
- 通過Java程式測試資料庫連線資訊Java資料庫
- 通過連線檢視資料庫相關資訊資料庫
- Java的JDBC通過SSH Tunnel連線MySQL資料庫JavaJDBCMySql資料庫
- 通過觸發器記錄資料庫連線資訊觸發器資料庫
- mysql--通過cmd連線mysql,並建立資料庫MySql資料庫
- sqlplus連線資料庫的幾種方法SQL資料庫
- sqlplus 連線遠端資料庫系統SQL資料庫
- oracle資料庫透過sqlplus連線的幾種方式介紹Oracle資料庫SQL
- 透過sqlplus連線資料庫伺服器很慢的問題SQL資料庫伺服器
- 資料庫的連線過程資料庫
- 通過命令列連線oracle資料庫/進入sql plus命令列Oracle資料庫SQL
- 資料庫本地,sqlplus和資料庫工具連線資料庫正常,但是JDBC連線資料庫出現了一直提示使用者名稱/密碼錯誤資料庫SQLJDBC密碼
- java通過jdbc連結資料庫JavaJDBC資料庫
- Oracle 11g RAC通過SCAN IP連線資料庫 - JDBC連線串問題Oracle資料庫JDBC
- 1.6.5.2. 通過密碼檔案驗證連線資料庫密碼資料庫
- kettle通過命令列引數傳遞資料庫連線資訊命令列資料庫
- [轉] 通過ADO連線各種資料庫的字串翠集資料庫字串
- 如何穿過防火牆連線資料庫防火牆資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 連線資料庫資料庫
- 資料庫連線資料庫
- 使用perl通過thrift連線hbase讀取資料
- 通過本地直接連線linux伺服器的mysql資料庫Linux伺服器MySql資料庫
- 通過讀取properties檔案動態生成對資料庫的連線資料庫
- 【YashanDB資料庫】PHP無法透過ODBC連線到資料庫資料庫PHP
- 刪除當前資料庫連線使用者資料庫
- C#連線Oracle資料庫,通過EF自動生成與資料庫表相關的實體類C#Oracle資料庫
- JDBC連線資料庫JDBC資料庫
- java連線資料庫Java資料庫
- Mybatis連線資料庫MyBatis資料庫
- Mongodb資料庫連線MongoDB資料庫
- mysqli連線資料庫MySql資料庫
- 資料庫的連線資料庫