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資料庫
- oracle資料庫透過sqlplus連線的幾種方式介紹Oracle資料庫SQL
- root使用者無法通過ssh連線Linux系統Linux
- 1.3.3. 通過SQL*Plus 連線資料庫SQL資料庫
- 資料庫本地,sqlplus和資料庫工具連線資料庫正常,但是JDBC連線資料庫出現了一直提示使用者名稱/密碼錯誤資料庫SQLJDBC密碼
- 通過觸發器記錄資料庫連線資訊觸發器資料庫
- Java的JDBC通過SSH Tunnel連線MySQL資料庫JavaJDBCMySql資料庫
- 資料庫的連線過程資料庫
- kettle通過命令列引數傳遞資料庫連線資訊命令列資料庫
- 1.6.5.2. 通過密碼檔案驗證連線資料庫密碼資料庫
- 通過本地直接連線linux伺服器的mysql資料庫Linux伺服器MySql資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 連線資料庫資料庫
- 【YashanDB資料庫】PHP無法透過ODBC連線到資料庫資料庫PHP
- 刪除當前資料庫連線使用者資料庫
- C#連線Oracle資料庫,通過EF自動生成與資料庫表相關的實體類C#Oracle資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- GBase 資料庫使用者的最大連線數限制資料庫
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- Android 連線資料庫Android資料庫
- java連線資料庫Java資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- JSP連線資料庫JS資料庫
- JDBC連線資料庫JDBC資料庫
- Flask連線資料庫Flask資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- python 連線 mongo 資料庫連線超時PythonGo資料庫
- APEX 通過資料庫中使用者資訊驗證登陸資料庫
- 資料庫的連線數資料庫
- Python連線SQLite資料庫PythonSQLite資料庫
- C#連線資料庫C#資料庫
- 如何連線MySQL資料庫MySql資料庫
- 使用Sequelize連線資料庫資料庫
- 資料庫連線池原理資料庫
- 使用JPA連線資料庫資料庫