日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件

發布時間:2025/4/16 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 遠程操作 Oracle 進行數據庫備份還原

  • 第一章:效果演示
  • ① 數據庫恢復演示
  • ② 請求模擬
  • 第二章:功能實現
  • ① 創建啟動服務
  • ② 處理解析請求
  • ③ 處理命令
  • ④ 服務端數據庫操作
  • ⑤ 響應構造

第一章:效果演示

① 數據庫恢復演示

首先看下效果圖,工具是在服務端進行啟用的,本地給服務端發送了命令,服務端就開始進行數據庫導入操作了。

工具我進行了打包,打包教程可以看:
Python 技術篇-將 python 項目打包成 exe 獨立運行程序,pyinstaller 庫打包 python 代碼實例演示

② 請求模擬

請求演示代碼如下,body 部分按照服務端的要求定義了關鍵數據:

# coding:utf-8 import socket import jsonrequest_ip = "10.10.18.70" request_port = 5003s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.connect((request_ip, request_port))# 構造請求數據 # 頭部內參數以\r\n分隔 # 第一行構成為【請求方式、協議】 request_header = "GET / HTTP/1.1\r\n" \"Host:" + request_ip# 字符串跨行用\連接,注意\后面不要有空格 request_body = '{' \'"do":"imp",' \'"file_path":"F:/oracle/auto_2105_oracle_yz_0524.dmp",' \'"schema_name1":"auto_2105_oracle_yz",' \'"schema_name2":"auto_2105_oracle_test",' \'"password":"1",' \'"odbc":"orcl"' \'}'# 頭部和身體通過\r\n\r\n分隔 request = request_header + "\r\n\r\n" + request_bodys.send(bytes(request, "utf-8")) data = s.recv(1024) data = str(data, encoding='utf-8') header, body = data.split('\r\n\r\n', 1) print("服務器返回消息頭部:\n" + header) print("\n服務器返回消息內容:\n" + body) s.close()

運行效果圖:

第二章:功能實現

清單如下,用到了下面的 4 個包。

# coding:utf-8 import socket import json import subprocess import time

① 創建啟動服務

這里起了個 5003 端口的服務,然后就等待接收客戶端請求了。

def start_server(server_port):'''作用:根據傳入的端口啟用一個服務參數1:啟用服務的端口號返回:socket實例····創建:小藍棗更改:2021-06-10'''# 創建一個socket對象s_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定端口s_socket.bind(("", server_port))# 設置最大等待連接數s_socket.listen(10)return s_socket# s為服務端server的標識 s_socket = start_server(5003)while True:# c為客戶端client的標識,接收消息前accept處于阻塞狀態。c_socket, c_address = s_socket.accept()# 讀取客戶端ipc_ip = c_address[0];# 讀取客戶端idc_id = c_address[1];handle_request(c_socket)

② 處理解析請求

當客戶發來請求后,進行請求解析。

def analysis_request(data):'''作用:解析用戶請求參數1:請求的完整數據返回:請求的body部分····創建:小藍棗更改:2021-06-10'''# print("請求的數據:", data)data = str(data, encoding='utf-8')header, body = data.split('\r\n\r\n', 1)return bodydef handle_request(c_socket):'''作用:處理用戶的一次請求參數1:客戶的請求數據····創建:小藍棗更改:2021-06-10'''# 獲取客戶端請求數據data = c_socket.recv(1024)# 解析請求的數據body = analysis_request(data)# 返回響應send_response(c_socket, "收到命令,開始進行數據庫備份工作!")# 關閉客戶端連接c_socket.close()# 處理命令handle_command(body)

③ 處理命令

主要是提取請求的 body 部分,這里包含了恢復數據庫的一些必要信息,比如恢復那個數據庫,dmp 文件的位置。

def handle_command(body):'''作用:處理命令參數1:接收到的命令····創建:小藍棗更改:2021-06-10'''# 字符串轉化為json,路徑里不能包含\,所以后面要做個轉化s_json = json.loads(body)d = {}# 遍歷并存儲jsonfor key, value in s_json.items():d[key] = value# 如果接收到轉庫命令if(d["do"] == "imp"):# 路徑轉化d["file_path"] = d["file_path"].replace('/', '\\')db_recovery(d["file_path"], d["schema_name1"], d["schema_name2"], d["password"], d["odbc"])

④ 服務端數據庫操作

這里就是直接將必要的信息,拼成數據庫實際要執行的命令并開始執行。

def db_recovery(file_path, schema_name1, schema_name2, password, odbc):'''作用:windows服務端數據庫恢復imp參數1:文件位置參數2:原庫schema參數3:新庫schema參數4:新庫密碼參數5:odbc····創建:小藍棗更改:2021-06-10'''cmd_order = 'imp %s/%s@%s file=%s fromuser=%s touser=%s\n' % (schema_name2, password, odbc, file_path, schema_name1, schema_name2)print("導入庫完整命令如下:\n" + cmd_order)cmd_p = subprocess.Popen(cmd_order, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)# 時時獲取輸出for i in iter(cmd_p.stdout.readline, 'b'):i = i.decode("gbk")if(i == ""):break;print(i)

⑤ 響應構造

下面就是返回給客戶端的信息,告訴客戶端服務端收到命令了,已經開始處理數據了。

def send_response(c_socket, response_message):'''作用:向客戶端發送回應參數1:要回應的數據····創建:小藍棗更改:2021-06-10'''# 構造響應數據# 頭部內參數以\r\n分隔# 第一行構成為【協議、狀態】response_header = "HTTP/1.1 200 OK\r\n" \"Server:DB server"response_body = response_message# 頭部和身體通過\r\n\r\n分隔response = response_header + "\r\n\r\n" + response_body# print("response data:", bytes(response, "utf-8"))# 向客戶端返回響應數據c_socket.send(bytes(response, "utf-8"))

五個部分合起來就是服務端完整代碼了。
喜歡的點個贊?吧!

總結

以上是生活随笔為你收集整理的Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美人性生活视频 | 日韩欧美综合一区 | 免费国产| 久久久久99精品成人片我成大片 | 亚洲专区欧美专区 | 黄色短视频在线播放 | 日韩视频第一页 | 操极品美女 | 天天激情站 | 亚洲偷| 欧美色影院 | 成人在线免费 | 欧美性一区 | 秋霞成人午夜伦在线观看 | av免费高清 | 久久久精品一区二区涩爱 | 成人高潮片免费网站 | 在线草| aaaaa级片 | 天天操天天透 | 一区二区三区韩国 | 成人自拍在线 | 在线看黄免费 | 一区二区三区国产av | 在线免费看mv的网站入口 | 国产精品99久久久久久久久久久久 | www.日韩欧美 | 波岛野结衣| 精品国产视频在线 | 日韩伦理大全 | 国精产品一二三区精华液 | 91免费观看视频 | 中文字幕四区 | av观看一区 | 欧美天堂一区 | 在线观看一区二区三区四区 | 一个人看的www片免费高清中文 | 严厉高冷老师动漫播放 | 成人手机在线免费视频 | 黄色男女网站 | 精品三区 | 精品免费囯产一区二区三区 | 国产一级一片免费播放 | 色婷婷欧美 | 亚洲高清视频在线播放 | 久久tv| 国产成人精品777777 | 黄色在线观看免费视频 | 久久亚洲AV成人无码国产野外 | 国产欧美日韩精品区一区二污污污 | 午夜亚洲成人 | 6080毛片| 亚洲女同在线 | 操操久久 | 日本少妇一区二区三区 | h片在线观看免费 | 欧美日韩精品中文字幕 | 三级亚洲欧美 | 国产高清视频免费观看 | 性一交一乱一色一免费无遮挡 | 91香蕉视频官网 | 欧美日韩在线播放视频 | 久草手机在线视频 | 污污的视频在线免费观看 | 黄色av网站在线播放 | 国产一区二区三区麻豆 | 97在线播放免费观看 | 亚洲成人av免费在线观看 | 自拍偷拍色综合 | 色哟哟免费在线观看 | 成人69视频 | 一区二区三区视频网站 | 国产黄色在线播放 | 调教亲女小嫩苞h文小说 | 国产一区二区黑人欧美xxxx | 96国产精品 | 伊人久艹 | 制服丝袜一区二区三区 | av小说免费在线观看 | 视色网| 九九免费在线视频 | xxx日本黄色 | 福利片在线播放 | 国产在线美女 | 在线观看不卡一区 | 国产一区视频免费观看 | 善良的女邻居在线观看 | 小宝贝真紧h军人h | 拔插拔插海外华人永久免费 | 欧美少妇一级片 | 久久久久97国产 | 97超碰人人干 | 亚洲国产精品尤物yw在线观看 | 国产一区二区三区电影在线观看 | 亚洲av成人精品一区二区三区在线播放 | 免费的黄网站 | 贵族女沦为官妓h呻吟 | 成人h动漫在线 | 日韩二区在线 |