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


    前言:

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

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

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

    一,

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

    docker安装ora2pg

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

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

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

    二,

    ora2pg的web界面的解析说明

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

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

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

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

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

    1. [root@node1 ~]# docker ps
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 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_herschel
    4. docker exec -it f1b5e /bin/bash
    5. root@f1b5e7b89aad:/express# ls -alh
    6. total 144K
    7. drwxr-xr-x 1 root root 51 Jun 7 18:53 .
    8. drwxr-xr-x 1 root root 18 Oct 19 14:33 ..
    9. -rw-r--r-- 1 root root 676 Jun 13 2022 Dockerfile
    10. drwxr-xr-x 2 root root 84 Jun 7 18:51 api
    11. -rw-r--r-- 1 root root 1.9K Aug 1 2022 app.js
    12. drwxr-xr-x 2 root root 17 Jun 7 18:51 bin
    13. -rw-r--r-- 1 root root 209 Aug 1 2022 db_connection_check.pl
    14. drwxr-xr-x 64 root root 4.0K Jun 7 18:53 node_modules
    15. -rw-r--r-- 1 root root 124K Jun 7 18:53 package-lock.json
    16. -rw-r--r-- 1 root root 425 Aug 1 2022 package.json
    17. drwxr-xr-x 2 root root 82 Jun 7 18:51 resources
    18. drwxr-xr-x 2 root root 54 Jun 7 18:51 test
    19. drwxr-xr-x 1 root root 18 Jun 7 18:53 ui

    查看node的版本:

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

    查看项目的js文件:

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

    1. root@f1b5e7b89aad:/express# cat app.js
    2. const express = require('express');
    3. const path = require('path');
    4. const ora2pgRouter = require('./api/ora2pg');
    5. const cors = require('cors');
    6. const httpServerConfig = require('./resources/http-config');
    7. const app = express();
    8. // Add support for cross origin requests
    9. // if CORS_ORIGIN_WHITELIST environment variable is set
    10. let corsOptions;
    11. const whitelist = httpServerConfig.corsOriginWhitelist.replace(/\s/g, '').split(",");
    12. if (whitelist.length === 1 && whitelist[0] === '*') {
    13. console.log(`Setting Access-Control-Allow-Origin to *`);
    14. corsOptions = { origin: '*' };
    15. } else if (whitelist.length > 0 && whitelist[0] !== '') {
    16. console.log(`Setting Access-Control-Allow-Origin to ${whitelist}`);
    17. corsOptions = {
    18. origin: function (origin, callback) {
    19. // allow whitelisted cross origin requests + REST tools and server to server
    20. if (whitelist.indexOf(origin) !== -1 || !origin) {
    21. callback(null, true)
    22. } else {
    23. callback(new Error(`CORS error: origin server is not in ${whitelist}`))
    24. }
    25. }
    26. };
    27. } else {
    28. console.log(`Setting Access-Control-Allow-Origin to FALSE`);
    29. corsOptions = { origin: false };
    30. }
    31. app.use(cors(corsOptions));
    32. // Setup routes
    33. app.use(express.json());
    34. app.use(express.urlencoded({ extended: false }));
    35. app.use(express.static(path.join(__dirname, 'ui')));
    36. app.use('/ora2pg', ora2pgRouter);
    37. app.use('/vue', express.static(path.join(__dirname, 'node_modules/vue/dist')));
    38. app.use('/', express.static(path.join(__dirname, 'ui/dist')));
    39. app.use('/projects/*', express.static(path.join(__dirname, 'ui/dist')));
    40. // error handler
    41. app.use(function(err, req, res, next) {
    42. // set locals, only providing error in development
    43. res.locals.message = err.message;
    44. res.locals.error = req.app.get('env') === 'development' ? err : {};
    45. // render the error page
    46. res.status(err.status || 500);
    47. res.render('error');
    48. });
    49. module.exports = app;

    三,

    web界面的介绍

    输入服务器IP地址+3000

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

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

    高级选项的界面:

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

    未完待续!!!!

  • 相关阅读:
    微信小程序进阶——Flex弹性布局&轮播图&会议OA项目(首页)
    webpack
    [网鼎杯 2020 白虎组]PicDown
    python-xpath语法-爬取彼岸图4k高清动漫壁纸
    [FineReport]安装与使用(连接Hive3.1.2)
    JAVA微信小程序图书馆座位预约小程序系统毕业设计 开题报告
    2022强网杯web(部分)
    部署主从数据库
    Jenkins学习笔记
    Rebalance&多线程实例消费(十二)
  • 原文地址:https://blog.csdn.net/alwaysbefine/article/details/134000999