postgresql|数据库迁移|ora2pg工具的web界面介绍

前言:

ora2pg是一个比较强大的数据库迁移工具,那根据名字来说,也可以看出来,这个工具主要是用来配置去O化,将在运行的oracle数据库迁移到postgresql数据库内的

当然了,我们使用此工具主要还是用命令行,但在某些情况下,可能还是需要可视化,毕竟该工具的使用需要配置一个配置文件,而配置文件内的选项参数是非常多的哦,而有了web界面,精确的,完整的迁移对于非DBA来说也会是一个轻松+愉快啦。

OK,下面开始介绍ora2pg的web界面

一,

说明:目前来说,ora2pg的外部界面应该是使用docker直接跑镜像最为简单,因为,web界面是node项目封装,如果二进制安装,可能会比较麻烦

docker安装ora2pg

安装非常简单,一个命令就搞定,前提是docker环境,多说一句,ora2pg安装在哪都可以,因此,docker环境也没有太多要求

mkdir -p /data/ora2pg-projects
docker run -d -p 3000:3000 -v /data/ora2pg-projects:/project visulate/visulate-ora2pg:latest

###注:该镜像比较大,因此最好配置好国内加速,大概是1个G大小

二,

ora2pg的web界面的解析说明

docker代理了该web服务,上面的持久化目录/data/ora2pg-projects 里面都有些什么呢?

[root@node1 ~]# netstat -antup |grep 3000
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      56466/docker-proxy  
tcp6       0      0 :::3000                 :::*                    LISTEN      56474/docker-proxy  

可以看到其实该目录下没有什么东西:

[root@node1 ~]# ls -al /data/ora2pg-projects/
total 0
drwxr-xr-x 4 root root 33 Oct 19 22:35 .
drwxr-xr-x 3 root root 29 Oct 19 22:33 ..
drwxr-xr-x 3 root root 20 Oct 19 22:35 default
drwxr-xr-x 3 root root 20 Oct 19 22:35 test

进入容器后,可以看到很多隐藏的细节了:

[root@node1 ~]# docker ps 
CONTAINER ID   IMAGE                             COMMAND                  CREATED      STATUS      PORTS                                       NAMES
f1b5e7b89aad   visulate/visulate-ora2pg:latest   "entrypoint.sh /bin/…"   4 days ago   Up 4 days   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   thirsty_herscheldocker exec -it f1b5e /bin/bash
root@f1b5e7b89aad:/express# ls -alh
total 144K
drwxr-xr-x  1 root root   51 Jun  7 18:53 .
drwxr-xr-x  1 root root   18 Oct 19 14:33 ..
-rw-r--r--  1 root root  676 Jun 13  2022 Dockerfile
drwxr-xr-x  2 root root   84 Jun  7 18:51 api
-rw-r--r--  1 root root 1.9K Aug  1  2022 app.js
drwxr-xr-x  2 root root   17 Jun  7 18:51 bin
-rw-r--r--  1 root root  209 Aug  1  2022 db_connection_check.pl
drwxr-xr-x 64 root root 4.0K Jun  7 18:53 node_modules
-rw-r--r--  1 root root 124K Jun  7 18:53 package-lock.json
-rw-r--r--  1 root root  425 Aug  1  2022 package.json
drwxr-xr-x  2 root root   82 Jun  7 18:51 resources
drwxr-xr-x  2 root root   54 Jun  7 18:51 test
drwxr-xr-x  1 root root   18 Jun  7 18:53 ui

查看node的版本:

root@f1b5e7b89aad:/express# node -v
v18.16.0

查看项目的js文件:

OK,可以看到该项目分离出来时比较困难的

root@f1b5e7b89aad:/express# cat app.js 
const express = require('express');
const path = require('path');
const ora2pgRouter = require('./api/ora2pg');
const cors = require('cors');
const httpServerConfig = require('./resources/http-config');const app = express();// Add support for cross origin requests
// if CORS_ORIGIN_WHITELIST environment variable is set
let corsOptions;
const whitelist = httpServerConfig.corsOriginWhitelist.replace(/\s/g, '').split(",");if (whitelist.length === 1 && whitelist[0] === '*') {console.log(`Setting Access-Control-Allow-Origin to *`);corsOptions = { origin: '*' };
} else if  (whitelist.length > 0 && whitelist[0] !== '') {console.log(`Setting Access-Control-Allow-Origin to ${whitelist}`);corsOptions = {origin: function (origin, callback) {// allow whitelisted cross origin requests + REST tools and server to serverif (whitelist.indexOf(origin) !== -1 || !origin) {callback(null, true)} else {callback(new Error(`CORS error: origin server is not in ${whitelist}`))}}};
} else {console.log(`Setting Access-Control-Allow-Origin to FALSE`);corsOptions = { origin: false };
}
app.use(cors(corsOptions));// Setup routes
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'ui')));app.use('/ora2pg', ora2pgRouter);
app.use('/vue', express.static(path.join(__dirname, 'node_modules/vue/dist')));
app.use('/', express.static(path.join(__dirname, 'ui/dist')));
app.use('/projects/*', express.static(path.join(__dirname, 'ui/dist')));// error handler
app.use(function(err, req, res, next) {// set locals, only providing error in developmentres.locals.message = err.message;res.locals.error = req.app.get('env') === 'development' ? err : {};// render the error pageres.status(err.status || 500);res.render('error');
});module.exports = app;

三,

web界面的介绍

输入服务器IP地址+3000

ora2pg是项目隔离,这里我们看default项目就可以了:

 如果不使用高级选项的话,那么配置会比较简单,粗糙,这些英文就不解释了,如果配置完成后,点击save 后,点击run即可开始迁移工作,迁移出来的文件在此界面就可以点击下载了

高级选项的界面:

ora2pg的所有功能都会在此页面列出来,按需选择功能并填入参数值, 每个小问号都有参数解释,如果按需填写完毕后,可以点击export导出配置好的配置文件

未完待续!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下 MySql 5.7授权远程登陆

1.用管理员身份打开mysql Client 2.输入密码登录 3.使用mysql数据库,输入“use mysql” 4.查看当前服务中使用的用户 select host,user form user; 5.授权 grant all privileges on *.* to 用户名% identified by 密码 with grant option; 6.成功后,刷…

Docker部署SpringBoot +Vue项目流程详解(含域名 + HTTPS)

文章目录 前言1、选购服务器2、部署 Docker3、前端、后端项目打包4、配置 Dockerfile5、配置 Nginx6、配置 DockerCompose6、启动 DockerCompose 完成部署7、【可选】域名 SSL证书 前言 本次整体部署操作使用阿里云服务器,这里我选择的是香港地区的2核2G ECS&…

Delete `␍`eslintprettier/prettier

将CRLF改为LF 然后就消失了 除此之外,也可以修改git全局配置 git config --global core.autocrlf false

JavaScript基础知识15——专业术语:语句和表达式

哈喽,大家好,我是雷工。 今天看到了JavaScript中的专业术语:语句和表达式,以下为学习笔记。 1、表达式概念: 表达式是可以被求值的代码,JavaScript引擎会将其计算出一个具体的结果。 示例: a…

Babylonjs学习笔记(二)——创建基本材质

书接上回,这里讨论给网格添加材质!!! 准备好材质 1、创建材质球 /*** 创建网格材质* param scene 场景对象* returns 材质对象*/ const createGroundMaterial(scene:Scene):StandardMaterial>{const texArray:Texture[] []// …

JavaScript-1-菜鸟教程

将内容写到 HTML 文档中 - - - document.write() <script>// 括号里的内容要有引号document.write("<h1>这是一个标题</h1>");document.write(<div class"box">hello world</div>);</script><style>.box{width…

字符串的创建(直接赋值与new的区别)- 字符串常量池

文章目录 1.字符串 "hello" 与 new String("hello")的区别2.intern()的使用&#xff1b; 总结 本文开始 1.字符串 “hello” 与 new String(“hello”)的区别 字符串常量池&#xff1a;存储着创建的引用地址的引用 String s1 "hello"; String…

【数据中台建设系列之二】数据中台-数据采集

​ 【数据中台建设系列之二】数据中台-数据采集 上篇文章介绍了数据中台的元数据管理&#xff0c;相信大家对元数据模块的设计和开发有了一定的了解&#xff0c;本编文章将介绍数据中台另一个重要的模块—数据采集。 一、什么是数据采集 数据采集简单来说就是从各种数据源中抓…

2021年06月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 下列程序运行的结果是&#xff1f; s hello print(sworld)A: sworld B: helloworld C: hello D: world 答案&#xff1a…

Java练习题-输出斐波那契(Fibonacci)数列

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

被邀请为期刊审稿时,如何做一个合格的审稿人?官方版本教程来喽

审稿是学术研究中非常重要的环节&#xff0c;它可以确保研究的科学性和严谨性。审稿人的任务是检查文章是否符合学术规范&#xff0c;是否具有创新性&#xff0c;是否具有科学价值&#xff0c;以及是否符合期刊的定位和风格。因此&#xff0c;审稿人需要具有扎实的学术背景和丰…

ThingsBoard的版本控制整合gitee

1、注册gitee账号,创建自己的空间,并且创建一个用于存储ThingsBoard相关的仓库 2、进入ThingsBoard的租户层,然后找到版本控制,进行配置 输入gitee的仓库地址 仓库URL:指定你的gitee的参考地址 仓库分支:master 身份验证:密码、访问令牌 用户名:登录账号 密码/访问令…

深入探究Selenium定位技巧及最佳实践

在使用Selenium进行Web自动化测试时&#xff0c;准确地定位元素是非常重要的一步。Selenium提供了多种元素定位方法&#xff0c;本文将深入探究这八大元素定位方法&#xff0c;帮助读者更好地理解和应用Selenium的定位技巧。 1. ID定位 ID是元素在HTML中的唯一标识符&#xff…

造车先做三蹦子220101--机器学习字符(字母、和数字识别)的“小白鼠”与“果蝇”

“0”数字字符零 的图片(16*16点阵)&#xff1a; #Letter23Digital23R231006d.pyimport torch import torch.nn as nn import torch.optim as optim #optimizer optim.SGD(model.parameters(), lr0.01) from PIL import Image from PIL import ImageDraw from PIL import Im…

asp.net企业招聘管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 企业招聘管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net企业招聘管理系统 二、功…

rabbitmq-3.8.15集群、集群镜像模式安装部署

目录 一、环境 1、映射、域名、三墙 2、Erlang和socat安装&#xff08;三台服务器都实行&#xff09; 二、部署三台rabbitmq-3.8.15实例 1、rabbitmq官网下载地址 &#xff1a; 2、解压rabbitmq 3、添加系统变量 4、启动web插件、启动rabbitmq 5、在rabbitmq1上添加用…

在keil中debug分析单片机数据和函数调用过程(c51为例),使用寄存器组导致错误原因分析

寄存器参考 参考2 [寄存器组使用using参考]&#xff08;https://blog.csdn.net/weixin_46720928/article/details/110221835&#xff09; keil中的using关键字参考 官方文档里关于using的说明可参阅2个地方&#xff0c;&#xff08;1&#xff09;keil软件菜单栏->Help->…

2023年中国汽车覆盖件模具竞争格局、市场规模及行业需求前景[图]

汽车覆盖件模具是汽车车身生产的重要工艺装备&#xff0c;其设计和制造时间约占汽车开发周期的 2/3&#xff0c;是汽车换型的重要制约因素之一。汽车覆盖件模具具有尺寸大、工作型面复杂、技术标准高等特点&#xff0c;属于技术密集型产品。汽车覆盖件模具按以其冲压的汽车覆盖…

【tg】6: MediaManager的主要功能

【tg】2:视频采集的输入和输出 的管理者是 media manager‘ media 需要 network的支持:NetworkInterface friend class MediaManager::NetworkInterfaceImpl;NetworkInterfaceImpl 直接持有 MediaManager 的指针即可:发送rtp包、rtcp包、设置socket选项?

NodeMCU ESP8266 读取按键外部输入信号详解(图文并茂)

NodeMCU ESP8266 读取按键外部输入信号教程&#xff08;图文并茂&#xff09; 文章目录 NodeMCU ESP8266 读取按键外部输入信号教程&#xff08;图文并茂&#xff09;前言按键输入常用接口pinModedigitalRead 示例代码结论 前言 ESP8266如何检测外部信号的输入&#xff0c;通常…