【MogDB】MogDB5.2.0重磅发布第四篇-支持windows版gsql,兼容sqlplus/sqlldr语法

news2024/11/30 14:40:09

一、背景

目前仍然很多客户的运维机使用windows操作系统,开发人员也是在windows环境上进行编码测试,甚至还有一些客户管理比较严格,禁止开发人员登录服务器进行操作。在MogDB 5.2.0版本之前,没有提供windows平台的gsql,因此在windows上执行一些批处理SQL脚本会很不方便;并且由于原本客户基于oracle的sqlplus/sqlldr开发了大量的批处理脚本,如果要改成gsql支持的语法,又存在比较大的工作量。
为了让之前客户的windows批处理脚本能无缝对接到MogDB,所以MogDB做了对sqlplus/sqlldr的语法兼容处理(注:MogDB 5.2.0版本对sqlplus的支持仅限windows版本)

二、兼容sqlplus语法

1.连接

  • 支持连接串为 username/password@host:port:sid的形式
  • 支持 as sysdba(实际是忽略)
  • 支持 nolog方式启动客户端
  • 支持在客户端中输入 conn+连接串的方式连接到指定数据库
  • 支持 quit断开连接(带不带 ;均可)

示例:

C:\>gsql system/oracle@192.168.163.134:26200/testdb
Warning: The client and server have different version numbers.
gsql (5.0.0.3)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

testdb=> quit

C:\>
C:\>gsql sys/oracle@192.168.163.134:26200/testdb as sysdba
gsql: warning: extra command-line argument "as" ignored
gsql: warning: extra command-line argument "sysdba" ignored
Warning: The client and server have different version numbers.
gsql (5.0.0.3)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

testdb=> quit;

C:\>
C:\>gsql /nolog
Type "help" for help.

!> conn system/oracle@192.168.163.134:26200/testdb
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "testdb" as user "system" on host "192.168.163.134" at port "26200".
testdb=> select version();
                                                                       version                                  
------------------------------------------------------------------------------------------------------------------------------------------------------
 (MogDB 5.2.0 build e0c9adc2) compiled at 2024-09-28 02:48:39 commit 0 last mr 1804  on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)


testdb=>

2.执行脚本

  • 支持在连接串后面 @sql文件的语法,
  • 支持将命令中的参数传入到sql中 (需配置环境变量 PGGLOBALVARREP=true
  • 支持在sql文件里通过start命令方式调用另一个sql文件的语法,可以带文件名后缀也可以不带
  • 支持将标准错误也定向到标准输出(需配置环境变量 PGERRTOOUTPUT=true
  • 支持通过 execute命令来执行procedure
  • 兼容ORACLE注释风格(需配置环境变量 PGCOMMENT=oracle,并且配合MogDB 5.2版本GUC参数 enable_oracle_comment)
  • 单独输入 /不返回报错(sqlplus中一般单独输入 /是重复执行上一条命令,但 create type xx is table of yy语法也是以斜杠结束,而MogDB是 ;结束,再加 /会报错,考虑到两者的兼容性,MogDB改成了单独输入 /时,忽略这个字符)
  • 支持spool语法
    • set trimspool on
    • set line 600
    • set echo off;
    • set heading off;
    • set feedback off;
    • spool sqltext.sql
    • select xxx from xxx;
    • spool off

示例:

C:\test>gsql system/oracle@192.168.163.134:26200/testdb @test_spool.sql 2
Warning: The client and server have different version numbers.
ANONYMOUS BLOCK EXECUTE
CREATE TABLE
CREATE PROCEDURE
CREATE TYPE
 test_pro1
-----------

(1 row)


Target width is 600.
total time: 84  ms

C:\test>type test_spool.sql
start test_procedure

set trimspool on
set line 600
set heading off
set feedback off
set echo off
spool out1.txt
select name from test_t10 where id=&1;
spool off
quit
C:\test>type test_procedure.sql
declare
/*2024-10-18
/*comment*/
l_cnt number;
begin
select count(1) into l_cnt from user_tables where table_name=upper('test_t10');
if l_cnt>0 then
  /*if exist , drop*/
   execute immediate 'drop table test_t10';
end if;
end;
/
create table test_t10 (id number,name varchar2(20));

create or replace procedure test_pro1 is
begin
insert into test_t10 values (1,'Tom');
insert into test_t10 values (2,'Jerry');
end;
/

create or replace type tyt_varchar2 is table of varchar2(4000);
/

execute test_pro1;
C:\test>type out1.txt
 Jerry
C:\test>

三、兼容sqlldr语法

  • 支持命令行参数 useridcontrolrowsskip
  • 支持控制文件参数
    • LOAD DATA
    • INFILE
    • APPEND
    • TRUNCATE
    • INTO TABLE
    • FIELDS TERMINATED BY
    • OPTIONALLY ENCLOSED BY
    • TRAILING NULLCOLS
    • BEGINDATA
  • 支持生成日志文件(*.log
  • 支持生成错误数据文件(*.bad
  • 支持数据本身在控制文件中 (BEGINDATA)
  • 支持设置多字符分隔符
  • 支持指定导入字段
  • 支持设置字符串包裹符

示例:

C:\test>gs_loader userid=system/oracle@192.168.163.134:26200/postgres control=Country.ctl rows=1000 skip=1
gs_loader: version 0.1

 478 Rows successfully loaded.

log file is:
  Country.log

C:\test>type Country.ctl
LOAD DATA
INFILE 'Country.csv'
APPEND
INTO TABLE t_data
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(col1,col2,col3,col4)

C:\test>type Country.log
gs_loader: version 0.1

Control File: Country.ctl

There are no data files from args.

Table t_enummetadata
 478 Rows successfully loaded.
 0 Rows not loaded due to data errors.
 0 Rows not loaded because all WHEN clauses were failed.
 0 Rows not loaded because all fields were null.
 Total logical records skipped:    1
Run began on 2024/10/18 14:59:12
Run ended on 2024/10/18 14:59:12

Elapsed time was:     0 s

C:\test>

四、和ORACLE执行的效果对比

image-plgs.png

image-sozv.png

image-drtq.png

五、总结

本文所列出的功能,在windows上的sqlplus和gsql、sqlldr和gs_loader的最终执行效果几乎完全一致。甚至如果本地没有sqlplus/sqlldr,把gsql.exe/gs_loader.exe改成sqlplus.exe/sqlldr.exe,批处理的脚本几乎不用改,可以把MogDB当成ORACLE去执行这些脚本。

当然,其实也可以看到,有一些运维常用命令在这个版本中的gsql并没有支持,比如 exit退出客户端,conn的完整指令 connect,execute的缩写 exec。实现这些并不麻烦,只要选择了使用MogDB,后续都可能实现。

MogDB通过"像素级模仿",兼容了sqlplus/sqlldr的这部分典型用法,对于部分依赖于sqlplus/sqlldr的客户实现了windows端运维的无损切换。

无论是底层原理,还是这种周边工具的使用细节,MogDB致力打造一个让原有ORACLE用户能真正意义上无缝切换的国产数据库。

  • 本文作者: DarkAthena
  • 本文链接: https://www.darkathena.top/archives/mogdb-5.2.0-support-sqlplus-sqlldr-usage
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处

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

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

相关文章

在龙芯笔记本电脑上安装loongnix20

在龙芯笔记本电脑上安装loongnix20。该笔记本电脑原来安装了统信操作系统20。使用时发现屏幕调到最暗还是偏亮。使用起来不方便。于是安装另外一款操作系统loongnix20。 于是下载loongnix20。下载速度很快。下载以后安装也比较顺利。装好试了一下,屏幕亮度可以调到…

二叉树中的最长交错路径

题目链接 二叉树中的最长交错路径 题目描述 注意点 每棵树最多有 50000 个节点每个节点的值在 [1, 100] 之间起点无需是根节点 解答思路 要找到最长交错路径,首先想到的是深度优先遍历因为起点无需是根节点,所以对于任意一个节点,其可以…

分类任务中评估模型性能的核心指标

在机器学习尤其是分类任务中,Accuracy(准确率)、Precision(精确率)、Recall(召回率)和F1 Score(F1分数)是评估模型性能的四个核心指标。每个指标都有其独特的含义和用途&…

JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?

大厂面试真题:GC 算法有多少种?各自优缺点是什么?年轻代和年老代选择哪种算法最优? 首先回顾一个图,也就是.class文件的类加载过程,以及线程执行、java内存模型图。看过系列1、2、3三篇文章的同学,大脑先回…

[产品管理-46]:产品组合管理中的项目平衡与管道平衡的区别

目录 一、项目平衡 1.1 概述 1.2 项目的类型 1、根据创新程度和开发方式分类 2、根据产品开发和市场周期分类 3、根据风险程度分类 4、根据市场特征分类 5、根据产品生命周期分类 1.3 产品类型的其他分类 1、按物理形态分类 2、按功能或用途分类 3、按技术或创新程…

大数据研究实训室建设方案

一、概述 本方案旨在提出一套全面的大数据研究实训室建设策略,旨在为学生打造一个集理论学习与实践操作于一体的高端教育环境。实训室将专注于培养学生在大数据处理、分析及应用领域的专业技能,通过先进的设施配置、科学的课程体系和实用的实训模式&…

C++之list(2)

list(2) list的迭代器 const迭代器 根据我们之前学过的知识: const int*p1;//修饰的是指向的内容 int *const p2;//修饰的是迭代器本身我们写const迭代器,期望的是指向的内容不能修改。 所以更期望写上面p1的形式 const迭代器与普通迭代器的不同点在于…

03 设计模式-创造型模式-单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建…

C语言复习第4章 数组

目录 一、一维数组的创建和初始化1.1数组的创建1.2 变长数组1.3 数组的初始化1.4 全局数组默认初始化为01.5 区分两种字符数组1.6 用sizeof计算数组元素个数1.7 如何访问数组元素1.8 一维数组在内存中的存储(连续存储)1.9 访问数组元素的另一种方式:指针变量1.10 数组越界是运行…

【AI绘画】Midjourney进阶:引导线构图详解

博客主页: [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯什么是构图为什么Midjourney要使用构图 💯引导线构图特点使用场景提示词书写技巧测试 💯小结 💯前言 【AI绘画】Midjourney进阶&a…

AnaTraf | TCP重传的工作原理与优化方法

目录 什么是TCP重传? TCP重传的常见触发原因 TCP重传对网络性能的影响 1. 高延迟与重传 2. 吞吐量的下降 如何优化和减少TCP重传 1. 优化网络设备配置 2. 优化网络链路 3. 网络带宽的合理规划 4. 部署CDN和缓存策略 结语 AnaTraf 网络性能监控系统NPM | …

网络最快的速度光速,因此‘‘光网络‘‘由此产生

世界上有一种最快的速度又是光,以前传统以太网络规划满足不了现在的需求。 一 有线网规划 二 无线网规划

如何用pyhton修改1000+图片的名字?

import os oldpath input("请输入文件路径(在windows中复制那个图片文件夹的路径就可以):") #注意window系统中的路径用这个‘\分割,但是编程语言中一般都是正斜杠也就是’/‘ #这里写一个代码,将 \ > / path "" fo…

嵌入式职业规划

嵌入式职业规划 在嵌入式的软件开发中,可以分为: 嵌入式MCU软件开发工程师; 嵌入式Linux底层(BSP)软件开发工程师; 嵌入式Linux应用开发工程师; 嵌入式FPGA算法开发工程师 对于前两个阶段 …

H.266与H.265、AV1、H.264对比

好多开发者希望搞清楚H.266(Versatile Video Coding,VVC)、H.265(High Efficiency Video Coding,HEVC)、AV1、H.264(Advanced Video Coding)四者区别,本文从压缩效率、画…

代码随想录算法训练营第三十八天 | 62. 不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树(343、96以后学)

1. 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路…

提高EDM广告发送率和到达率_实用技巧揭秘

EDM广告提高发送率和到达率策略包括优化邮件服务器设置、制定邮件内容及设计策略、持续监测与测试。ZohoCampaigns通过可靠ESP、SPF和DKIM验证、维护IP声誉确保高发送率和到达率。 一、了解EDM的发送率和到达率概念 在深入研究提升策略之前,首先我们需要明确两个专…

2-126基于matlab希尔伯特黄变换(HHT)的图像三维重建

基于matlab希尔伯特黄变换(HHT)的图像三维重建,利用希尔伯特黄变换(HHT)的条纹图相位信息提取算法,对输入图片的变形条纹图相位信息进行提取,实现三维重建。程序已调通,可直接运行。…

Axure重要元件三——中继器时间排序

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 本节课:中继器数据时间排序 课程内容:数据的升序、降序、重置排序 应用场景:表单数据的排序 案例展示: 步骤一&#xff…

【数据分享】1901-2023年我国省市县三级逐月最低气温(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据(可查看之前的文章获悉详情),该数据来源于国家青藏高原科学数据中心,很多小伙伴拿到数据后反馈栅格数据不太方便使用,问我们能不能把数据处理为更方便使用的Sh…