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文件相关推荐

  1. U大师一键备份还原系统操作步骤,教你电脑一键备份还原怎么用

    针对于系统重装费时问题,系统的备份还原软件越来越受广大电脑用户的亲睐,U大师推出一款"电脑版备份还原系统"软件,本教程介绍使用该软件对已经安装的操作系统(也就是系统所在的C盘)进行 ...

  2. 电脑一键还原,U大师电脑版一键备份还原系统V1.0.0 - 一键还原,一键ghost系统

    系统备份与还原有两种,一是手动,二是使用软件,对于前者,它需要操作者具备一定的基础知识,且操作既繁琐又缺乏安全,这促使了使用软件成为当下流行的方式,所以U大师一键备份还原系统应运而生,U大师一键备份还 ...

  3. win10备份为wim_泰哥一键备份还原下载-泰哥ghostv1.0.1.14 官方版

    泰哥一键备份还原是一款人性化专业操作方便好用的系统备份和还原的软件,在 Win32(64).WinPE.DOS 下对任意分区进行一键备份.恢复的绿色无程序,支持ISO文件.光盘.U盘里的GHO.WIM ...

  4. win7备份工具_Win7/10系统如何一键还原系统?一键备份还原系统方法图文教程

    Windows是全球目前使用最广泛的操作系统之一,大家在使用Windows系统的过程中,难免会出现各种系统故障或者中病毒的情况,甚至系统奔溃导致无法开机进入桌面的情况,遇到这些问题,我们只有重新安装系 ...

  5. win7系统备份还原软件_泰哥一键备份还原下载_泰哥一键备份还原官方版下载[系统备份]...

          泰哥一键备份还原官方版是一款优秀的系统备份还原工具,泰哥一键备份还原官方版可以帮助用户在 Win32(64).WinPE.DOS 下对任意分区进行一键备份.恢复,泰哥一键备份还原官方版支持 ...

  6. win10怎样更改系统字体_Win10系统怎样一键备份还原系统?

    [系统突然奔溃了,要重装起来很麻烦啊,有没有简单点的方法呢?有的,往下看就知道了] 电脑日常使用的过程中,很难免会遇上各种各样的系统问题,比如新安装的某个软件出现问题导致系统异常.系统更新失败导致无法 ...

  7. win7系统备份还原软件_泰哥一键备份还原下载-系统备份还原工具 v1.0.1.14 官方版...

    泰哥一键备份还原是一款非常简单且实用的系统备份还原工具,可帮助用户快速将系统数据进行备份或者还原,支持多种不同的系统,包括Win32(64).WinPE.DOS等,可对任意分区进行备份还原操作,具备简 ...

  8. U大师电脑版一键备份还原系统V1.0.0

    U大师电脑版一键备份还原系统主要功能包含了一键备份系统.一键还原系统与一键智能装机.三种功能既可独立使用,又能相互配合,在保证系统安全的前提下,帮您快速备份当前系统,让系统焕然一新! 系统备份与还原有 ...

  9. python 远程操作Sqlite3

    转自:http://hi.baidu.com/jxhtest/item/a4eff7206daa09122a0f1cca 2011-11-09 18:00 python 远程操作Sqlite3 貌似S ...

最新文章

  1. max_connect_error的说明
  2. php json_decode \ 反斜杠 转义 问题
  3. HDFS的exists函数解析
  4. 单目视觉机器人的循迹_机器人视觉系统传感器的关键技术盘点
  5. Canal Mysql binlog 同步至 ElasticSearch 详细介绍
  6. 玩转Linux文件描述符和重定向
  7. .[转] 读十年书,不如读懂这百句话
  8. 面试必选要掌握的知识(持续更新)
  9. 唧唧Down(B站视频下载) 彻底解决你的B站视频下载问题
  10. 信号与系统——抽样信号的傅里叶变换
  11. pygame飞扬小鸟_飞翔小鸟游戏_李兴球版
  12. 1013. Battle Over Cities (25)
  13. 《Java程序员,上班那点事儿》前言
  14. 软件安全实验——lab7(缓冲区溢出3:返回导向编程技术ROP)
  15. 单点登录常见解决方式和阿里云短信服务
  16. 容齐的身世_白发王妃漫夭和容齐是什么关系 女主容乐跟谁睡过遭扒可怜容齐...
  17. 要做单片机课课设的快看过来1:KEIL安装以及C51环境搭建和Protues安装保姆教程
  18. fiilt1左耳无法同步_FIIL T1 X真无线运动耳机体验:闪连快充秒同步 媲美AirPods
  19. 【Jenkins】Jenkins在CentOS和k8s(minikube)上的部署记录
  20. win7右键菜单管理_win7系统控制面板打印机图标消失如何解决【解决方法】

热门文章

  1. 百练-16年9月推免-B题-字符串判等
  2. JSONP跨域的原理解析
  3. 内置对象—request
  4. Android笔记之FragmentTabHost实现选项卡
  5. 如何检查对象的类型[iOS/Android/Windows Phone]
  6. 【转】 ASP.NET 3.5中使用新的ListView控件
  7. android lk DEFINES定义的环境变量的值
  8. centos 7 php7.4_索尼小音箱特价!【Aldi】7月7日起 特卖品 及本期特价食品
  9. matlab-高数 polar 极坐标系 绘制阿基米德线,心形线
  10. struct 类型指针技巧