您的位置:首页 > 健康 > 养生 > 站内营销推广方式_网络空间安全_手机版百度一下_百度新闻app

站内营销推广方式_网络空间安全_手机版百度一下_百度新闻app

2024/12/23 9:27:48 来源:https://blog.csdn.net/wwwwwwgame/article/details/143064662  浏览:    关键词:站内营销推广方式_网络空间安全_手机版百度一下_百度新闻app
站内营销推广方式_网络空间安全_手机版百度一下_百度新闻app

一、背景

目前仍然很多客户的运维机使用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=> quitC:\>
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 TYPEtest_pro1
-----------(1 row)Target width is 600.
total time: 84  msC:\test>type test_spool.sql
start test_procedureset 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.txtJerry
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.1478 Rows successfully loaded.log file is:Country.logC:\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.1Control File: Country.ctlThere are no data files from args.Table t_enummetadata478 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:12Elapsed time was:     0 sC:\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 许可协议。转载请注明出处

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com