找回密码
 立即注册
首页 业界区 安全 信创-ORACLE迁移到KingbaseV9

信创-ORACLE迁移到KingbaseV9

跑两獗 4 天前
信创-ORACLE迁移到KingbaseV9

1. 实列初始化

下载 KingBaseV9 V009R002C010 oralce兼容版本,完成安装.
http插件不支持在Windows平台使用,若需要,不要安装到windows平台
2. 服务注册

安装完成后,通过预置的脚本注册服务
  1. # 公众号:小满小慢 小游戏: 地心侠士
  2. /kingbase/install/script/root.sh #注册服务
  3. /kingbase/install/script/rootuninstall.sh #删除服务
  4. /kingbase/Server/bin/sys_ctl -w start -D /kingbase/data -l /kingbase/data/sys_log/startup.log #启动服务
  5. /kingbase/Server/bin/sys_ctl sys_ctl stop -m fast -w -D /kingbase/data #关闭服务
  6. /kingbase/iso/setup.sh -i console #安装数据库
  7. /kingbase/Uninstall/Uninstaller -i console #卸载数据库
复制代码
3. 必要兼容配置

设置全局兼容参数
  1. # 修改kingbase/Server/conf/kingbase.conf 文件
  2. shared_preload_libraries = 'kdb_schedule,kdb_xmltype,dbms_lob' #在原有配置追加配置
  3. # 公众号:小满小慢 小游戏: 地心侠士
  4. job_queue_processes=10  # 添加任务队列进程数>1才能使用任务
复制代码
修改完成重启数据库
  1. /kingbase/Server/bin/sys_ctl -w restart -D /kingbase/data -l /kingbase/data/sys_log/startup.log
复制代码
重启完成后,设置其他兼容参数
  1. -- 公众号:小满小慢 小游戏: 地心侠士
  2. alter system set default_with_rowid = 'on';
  3. alter system set enable_upper_colname ='on';
  4. alter system set ora_statement_level_rollback = 'on';
  5. alter system set ora_numop_style = 'on';
  6. alter system set plpgsql.variable_conflict = 'use_variable';
  7. alter system set ora_forbid_func_polymorphism = 'off';
  8. alter system set sys_job.poll_time = 10 ;-- 设置job轮询时间 默认10秒
  9. alter system set ignore_zero_number = 'on'; --小数不显示多余的零
复制代码
安装扩展包
  1. create extension kdb_raw;
  2. create extension dbms_obfuscation_toolkit;
  3. create extension utl_file;
  4. create extension kdb_schedule;
  5. create extension dbms_lob;       
  6. create extension dbms_random;
  7. create extension http;
  8. create extension kdb_xmltype;       
  9. create extension dbms_xmlgen;
  10. -- 公众号:小满小慢 小游戏: 地心侠士
复制代码
建立适配类型

建立适配同义词
  1. --公众号:小满小慢 小游戏: 地心侠士
  2. create or replace public synonym cols for user_tab_cols;
  3. create or replace public synonym "fun_strcat" for "sys"."wm_concat";
  4. create or replace public synonym "raw" for "sys"."bytea";
复制代码
建立适配函数

建立适配视图
  1. CREATE OR REPLACE VIEW user_procedures AS
  2. -- 公众号:小满小慢 小游戏: 地心侠士
  3. SELECT
  4. ora_upper((p.pkgname)::text) AS procedure_name,
  5. ora_upper((f.proname)::text) AS object_name
  6. FROM (
  7. (_pkg p LEFT JOIN _nsp n ON ((p.pkgnamespace = n.oid)))
  8. JOIN LATERAL sys_get_package_function_detail(n.nspname, p.pkgname) f(pkgoid, oid, proname, prokind, proretset, pronargs, proargnames, proargmodes, proargtypes, prorettype, prosrc) ON ((f.pkgoid = p.oid)))
  9. WHERE ((f.pronargs >= 0) AND (p.pkgowner = uid()))
  10. ORDER BY n.nspname;
复制代码
关键字冲突处理
  1. DEC OUT OFFSET INTERVAL  ERROR
复制代码
4. 迁移必须步骤

为了保障数据库迁移的准确度,总结为以下4步骤

  • 迁移表结构
  • 迁移表数据
  • 迁移触发器外的所有脚本
  • 迁移触发器
  • 迁移完成后,确保启用所有触发器
5. 特殊语法处理


  • 不支持chr(0)
  1. ---oracle--- 公众号:小满小慢 小游戏: 地心侠士
  2. select 'abc'||chr(0) from dual;
  3. ---kingbase---
  4. --报 null character not permitted 错误
  5. --Oracle rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0))
  6. --修改成
  7. --rpad( p_text, (trunc(length(p_text)/8)+1)*8, ' ');
复制代码

  • 查询语句中表不能直接使用括号
  1. ---oracle--- 公众号:小满小慢 小游戏: 地心侠士
  2. select * from (USER_TAB_COLS); --可以查询到结果
  3. ---kingbase---
  4. select * from (USER_TAB_COLS); --ERROR: syntax error at or near ")"
复制代码

  • 不支持游标FOR后边使用表达式
  1. ---oracle---可以正常输出内容
  2. DECLARE
  3. c SYS_REFCURSOR;
  4. d NUMBER;
  5. tsql VARCHAR2(100);
  6. BEGIN
  7. OPEN c FOR NVL(tsql,'SELECT 1 a FROM dual');
  8. LOOP
  9.    FETCH c INTO d;
  10.    EXIT WHEN c%NOTFOUND;
  11.   DBMS_OUTPUT.PUT_LINE(d);
  12. END LOOP;
  13. CLOSE c;
  14. END;
  15. -- 公众号:小满小慢 小游戏: 地心侠士
  16. ---kingbase---语法错误 ERROR: syntax error at or near "OPEN "
  17. DECLARE
  18. c SYS_REFCURSOR;
  19. d NUMBER;
  20. tsql VARCHAR2(100);
  21. BEGIN
  22.   OPEN c FOR NVL(tsql,'SELECT 1 a FROM dual');
  23.   LOOP
  24.     FETCH c INTO d;
  25.     EXIT WHEN c%NOTFOUND;
  26.     RAISE NOTICE '%',d;
  27.   END LOOP;
  28.   CLOSE c;
  29. END;
复制代码

  • 扩展包UTL_HTTP删除异常变量UTL_HTTP.end_of_body 在处理请求异常需要注释这部分内容.并且UTL_HTTP中的删除Write相关方法,目前使用UTL_HTTP.write_text发送POST请求,在Kingbase中需要使用http函数代替,并且不需要再建立ACL
  1. ---Oracle---
  2. DECLARE
  3. l_http_request  UTL_HTTP.req;
  4. l_http_response UTL_HTTP.resp;
  5. l_response_text CLOB;
  6. l_url           VARCHAR2(100) := 'http://httpbin.org/post';
  7. l_json_payload  VARCHAR2(100) := '{"a":2}';
  8. BEGIN
  9.   -- 公众号:小满小慢 小游戏: 地心侠士--
  10.   l_http_request := UTL_HTTP.begin_request(url => l_url, method => 'POST', http_version => 'HTTP/1.1');
  11.   UTL_HTTP.set_header(l_http_request, 'Content-Type', 'application/json');
  12.   UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTH(l_json_payload));
  13.   UTL_HTTP.write_text(l_http_request, l_json_payload);
  14.   l_http_response := UTL_HTTP.get_response(l_http_request);
  15.   BEGIN
  16.     LOOP
  17.       UTL_HTTP.read_text(l_http_response, l_response_text, 32767);
  18.       DBMS_OUTPUT.PUT_LINE(l_response_text);
  19.     END LOOP;
  20.   EXCEPTION
  21.     WHEN UTL_HTTP.end_of_body THEN
  22.       UTL_HTTP.end_response(l_http_response);
  23.     WHEN OTHERS THEN
  24.       UTL_HTTP.end_response(l_http_response);
  25.       DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
  26.   END;
  27. END;
  28. ---Kingbase---
  29. DECLARE
  30. resp http_response; --这里Oracle对应是 UTL_HTTP.resp
  31. l_url           VARCHAR2(50) := 'http://httpbin.org/post';
  32. l_json_payload  VARCHAR2(100) := '{"a":2}';
  33. BEGIN
  34.   resp := http_post(l_url, l_json_payload, 'application/json; charset=utf-8');
  35.   RAISE NOTICE '%',resp.status;
  36.   RAISE NOTICE '%', resp.content;
  37. EXCEPTION
  38.   --WHEN UTL_HTTP.end_of_body THEN -- 需要注释掉
  39.   --UTL_HTTP.end_response(resp);
  40.   --公众号:小满小慢 小游戏: 地心侠士
  41.   WHEN OTHERS THEN
  42.     UTL_HTTP.end_response(resp);
  43.     RAISE NOTICE '错误: %', SQLERRM;
  44. END
复制代码

  • 不能通过sys.ODCIVARCHAR2LIST实现内存表查询,需要转换kdb写法
  1. ---oracel---
  2. SELECT * FROM TABLE(SYS.ODCIVARCHAR2LIST(1,2,3,4,5))
  3. ---kingbase---公众号:小满小慢 小游戏: 地心侠士
  4. SELECT unnest(ARRAY[1,2,3]) AS column_name FROM dual;
  5. --文本拆分可以使用 string_to_array(str, ',');
  6. SELECT unnest(string_to_array('1,2,3,4,*,6', ','));
复制代码

  • XmlElement不能直接使用元素名称,需要添加 name 关键字
  1. --kingbase--- oracle支持此语法
  2. with t as (select 1 F_A, 2 F_B from dual)
  3. SELECT xmlelement(name "a",F_A) AS ABC FROM t;
复制代码

  • XmlForest元素名没有大写,需要使用AS指定为大写的元素名
  1. --kingbase--- 公众号:小满小慢 小游戏: 地心侠士
  2. --orace生成的<F_A></F_A>是大写kingbase生成的<f_a></f_a>是小写
  3. with t as (select 1 F_A, 2 F_B from dual)
  4. SELECT XMLELEMENT(name "ROW", xmlforest(F_A, F_B)) AS ABC FROM t;
  5. ---kingbase---修改方案
  6. with t as (select 'a' F_A, 'b' F_B from dual)
  7. SELECT XMLELEMENT(name "ROW",xmlforest(f_a AS "F_A", f_b AS "F_B")) AS ABC FROM t;
复制代码

  • XMLTALBE 解析XML不支持默认列列类型
  1. ----Oracle---
  2. select x.*
  3. from xmltable('/rows/row' passing
  4.                 xmltype('<rows><row><name>test</name></row></rows>')
  5.                 columns xml_NAME path 'name') x
  6. --kingbase---
  7. select x.*
  8. from xmltable('/rows/row' passing
  9.                 xmltype('<rows><row><name>test</name></row></rows>')
  10.                 columns xml_NAME varchar2(100) path 'name') x
复制代码

  • 未提供 xmltype.getClobVal 静态方法
  1.   ----Oracle---公众号:小满小慢 小游戏: 地心侠士
  2. with t as (select 1 F_A, 2 F_B from dual)
  3. SELECT Xmltype.getClobVal(xmlelement("A", F_A)) AS ABC FROM t;
  4. ----kingbase---Oracle也支持此语法
  5. with t as (select 1 F_A, 2 F_B from dual)
  6. SELECT xmlelement(name "a",F_A).getClobVal() AS ABC FROM t;
复制代码

  • NEXT_DAY函数不支持number类型需要转换成int,使用CAST或者直接定义成int
  1. ---Oracle---公众号:小满小慢 小游戏: 地心侠士
  2. DECLARE
  3. d date;
  4. m number;
  5. BEGIN
  6. m := 1;
  7. select NEXT_DAY(SYSDATE, m) into d from dual;
  8. dbms_output.put_line(to_char(d, 'yyyy-mm-dd'));
  9. END;
  10. ---KingBase---
  11. DECLARE
  12. d date;
  13. m number ;
  14. BEGIN
  15. m := 1;
  16. select NEXT_DAY(SYSDATE, CAST(m AS integer)) into d from dual;
  17. RAISE NOTICE '%',to_char(d, 'yyyy-mm-dd');
  18. END;
复制代码

  • Group by rollup 数据没有按照明细小计汇总的方式排序,需要显示指定排序,可以直接使用 rollup(a,b) order by grouping(a),a,b 排序
  1. ---oracle--- 默认按照明细 小计 合计顺序排序
  2. with t as
  3. (select 1 as F_A, 'a' as F_C, 'L1' F_D
  4.     from dual
  5.   union all
  6.   select 1 as F_A, 'a' as F_C, 'L2' F_D
  7.     from dual
  8.   union all
  9.   select 1 as F_A, 'b' as F_C, 'L1' F_D
  10.     from dual
  11.   union all
  12.   select 1 as F_A, 'b' as F_C, 'L2' F_D
  13.     from dual)
  14. select decode(grouping(F_C), 1, '合计', F_C),
  15.        decode(grouping(F_D) + grouping(F_C), 1, '小计', F_D), sum(F_A),
  16.        grouping(F_C), grouping(F_D), GROUP_ID()
  17.   from t
  18. group by rollup(F_C, F_D)
  19. ---kingbase--- 默认按照合计,明细,小计顺序排序
  20. -- 公众号:小满小慢 小游戏: 地心侠士
  21.   with t as
  22. (select 1 as F_A, 'a' as F_C, 'L1' F_D
  23.     from dual
  24.   union all
  25.   select 1 as F_A, 'a' as F_C, 'L2' F_D
  26.     from dual
  27.   union all
  28.   select 1 as F_A, 'b' as F_C, 'L1' F_D
  29.     from dual
  30.   union all
  31.   select 1 as F_A, 'b' as F_C, 'L2' F_D
  32.     from dual)
  33. select decode(grouping(F_C), 1, '合计', F_C),
  34.        decode(grouping(F_D) + grouping(F_C), 1, '小计', F_D), sum(F_A),
  35.        grouping(F_C), grouping(F_D)
  36.   from t
  37. group by rollup(F_C, F_D) order by grouping(F_C),F_C, F_D --需要指定排序
复制代码

  • 金仓不支持 group_id 函数
  • 通过代码提交JOB语法差异,必须要初始连接信息
  1. ---建立测试表,测试函数---
  2. create table a_proc_schedule_test(tid varchar2(64), insdate date);
  3. create or replace procedure a_schedule_test as
  4. begin
  5.   insert into a_schedule_test values(to_char(sysdate, 'yyyymmddhh24miss'), sysdate);
  6.   commit;
  7. end;
  8. ---oracle---公众号:小满小慢 小游戏: 地心侠士
  9. DECLARE
  10. jobno NUMBER;
  11. BEGIN
  12.   jobno:=1;
  13.   DBMS_JOB.ISubmit(jobno,'begin a_proc_schedule_test; end;',
  14.     next_date =>sysdate+(1/24/60/60*1), --1秒后运行
  15.     interval => '' --值为空表示只运行一次
  16.   );
  17.   COMMIT;
  18.   --查询job信息
  19.   for cur in( select * from user_jobs j where j."JOB"=1) loop
  20.     dbms_output.put_line(cur."WHAT");
  21.   end loop;
  22. END;
  23. ---kingbase---公众号:小满小慢 小游戏: 地心侠士
  24. DECLARE
  25.   v_jobid NUMBER;
  26. BEGIN
  27.   v_jobid :=1;
  28.   -- 如果提交任务不能运行,带上模式名 test.a_proc_schedule_test
  29.   dbms_job.submit(v_jobid, 'begin a_proc_schedule_test; end;', now(), 'Freq=YEARLY;Interval=10'); --提交job每10年运行一次,足够长满足一次调用'
  30.   COMMIT;
  31. END;
  32. call dbms_job.instance(1, 'user=system dbname=test port=54321 password=test'); --初始实列信息
  33. CALL dbms_job.RUN(1); --运行job
  34. CALL dbms_job.remove(1); --删除job
复制代码

  • Oracle终止任务可以通过语句结束session,kingbase没有
  1. ---Oracle---
  2. SELECT MAX(SID) FROM sys.dba_jobs_running WHERE JOB=JOBID
  3. SELECT MAX(SERIAL#) FROM  v$session WHERE SID=上边查询的SID
  4. --结束session
  5. ALTER SYSTEM KILL SESSIOON 'SID,SERIAL#';
  6. DBMS_JOB.broken(JOBID,TRUE); --中断任务
  7. DBMS_JOB.remove(JOBID); --删除任务
  8. commit; --提交数据
  9. ---kingbase---
  10. -- 公众号:小满小慢 小游戏: 地心侠士
  11. -- 结束进程 ,没有SERIAL#信息
  12. -- sys_terminate_backend(pid) 结束进程
  13. -- sys_cancel_backend(pid) 取消执行sql
  14. DBMS_JOB.broken(JOBID,TRUE); --中断任务
  15. DBMS_JOB.remove(JOBID); --删除任务
  16. commit; --提交数据
复制代码

  • 唯一索引存在可空列,判断和预期不符和,oracle不能插入多个null数据,kingbase可以
  1. ---oracle---
  2. DROP TABLE a_test_unique;
  3. SELECT * FROM  a_test_unique;
  4. CREATE TABLE a_test_unique (
  5.    username VARCHAR(50) ,
  6.    email VARCHAR(100),
  7.   CONSTRAINT unique_username_email UNIQUE (username, email)
  8. );
  9. INSERT  INTO a_test_unique(username)values('a');
  10. INSERT  INTO a_test_unique(username)values('a'); --ORA-00001: 违反唯一约束条件 (HXXT.UNIQUE_USERNAME_EMAIL)
  11. ---kingbase---
  12. -- 可以插入两条[a,null]的数据,所以再kingbase中需要做多列的唯一判断需要避免可空列
  13. INSERT  INTO a_test_unique(username,email)values('a','n');
  14. INSERT  INTO a_test_unique(username,email)values('a','n');
  15. -- 这种情况才报错
  16. --SQL 错误 [23505]: ERROR: duplicate key value violates unique constraint  "unique_username_email" Detail: Key (username, email)=(a, n) already exists
  17. --改成唯一索引也不能实现oracle类似效果
  18. CREATE UNIQUE INDEX idx_unique_username_email ON a_test_unique (username, email);
复制代码

  • 最小日期聚合函数问题,kingbase返回不正确,使用pg_catalog.min()函数代替
  1. ---oracle---
  2. WITH t AS
  3. (SELECT to_date('2025-04-01 12:01:32', 'yyyy-mm-dd hh24:mi:ss') AS d
  4.     FROM dual
  5.   UNION
  6.   SELECT to_date('2025-04-02 14:01:50', 'yyyy-mm-dd hh24:mi:ss') AS d
  7.     FROM dual)
  8. SELECT min(d), max(d) FROM t;
  9. -- min 2025/4/1 12:01:32 max 2025/4/2 14:01:50
  10. ----kingbase--- 再sys和pg_catalog模式下都有 min  max函数,pg_catalog 返回是正确的
  11. WITH t AS
  12.    (SELECT to_date('2025-04-01 12:01:32', 'yyyy-mm-dd hh24:mi:ss') AS d
  13.       FROM dual
  14.     UNION
  15.     SELECT to_date('2025-04-02 14:01:50', 'yyyy-mm-dd hh24:mi:ss') AS d
  16.       FROM dual)
  17.   SELECT sys.min(d) sysmin, sys.max(d) sysmax ,pg_catalog.min(d) pgmin,pg_catalog.max(d) pgmax FROM t;
  18.   --sysmin 2000-01-01 00:00:00 sysmax 2025-04-02 14:01:50
  19.   --pgmin  2025-04-01 12:01:32 pgmax  2025-04-02 14:01:50
复制代码

  • Oracle再PL/SQL中支持中文逗号,中文括号,经过测试kingbase也支持,遇到了最好还是调整下代码
  1. ---静态测试sql---公众号:小满小慢 小游戏: 地心侠士
  2. with t as (select 1 F_A,'a' F_B from dual)
  3. select * from t where t.F_B in ('a');
  4. ---动态测试sql ORacle---
  5. DECLARE
  6.   sqltxt VARCHAR2(200);
  7.   cur    SYS_REFCURSOR;
  8.   a      number;
  9.   b      VARCHAR2(100);
  10. BEGIN
  11.   sqltxt := 'with t as (select 1 F_A,''a'' F_B from dual)
  12. select * from t where t.F_B in (''a'')';
  13.   OPEN cur FOR sqltxt;
  14.   LOOP
  15.     FETCH cur
  16.       INTO a, b;
  17.     EXIT WHEN cur%NOTFOUND;
  18.     DBMS_OUTPUT.PUT_LINE('F_A: ' || a || ', F_B: ' || b);
  19.   END LOOP;
  20.   CLOSE cur;
  21. END;
  22. ---动态测试sql kingbase---
  23. DECLARE
  24.   sqltxt VARCHAR2(200);
  25.   cur    SYS_REFCURSOR;
  26.   a      number;
  27.   b      VARCHAR2(100);
  28. BEGIN
  29.   sqltxt := 'with t as (select 1 F_A,''a'' F_B from dual)
  30. select * from t where t.F_B in (''a'')';
  31.   OPEN cur FOR sqltxt;
  32.   LOOP
  33.     FETCH cur
  34.       INTO a, b;
  35.     EXIT WHEN cur%NOTFOUND;
  36.    RAISE  NOTICE '%',('F_A: ' || a || ', F_B: ' || b);
  37.   END LOOP;
  38.   CLOSE cur;
  39. END;
复制代码

  • 数据库表多了tableoid,ctid,xmin,xmax,cmin,cmax 伪列信息,如果迁移的业务表存在这些字段,需要调整
  • 多行注释必须成对出现(有开始必须有结束),否则会报错
  1. --oracle--
  2. /* 测试注释 /*test*/select 1 from dual;  --能查询内容
  3. --kingbase--
  4. /* 测试注释 /*test*/select 1 from dual; --sql处于注释状态
复制代码

  • 小数出现很多0
  1. ---kingbase-- 公众号:小满小慢 小游戏: 地心侠士
  2. SELECT 3.0/100 FROM dual;
  3. -- 0.0300000000000000000000000000000000000000
  4. -- 去掉多余的0
  5. SET ignore_zero_number = 'on'
  6. -- 重新查询 0.03
复制代码

  • ABS 函数单独查询完整字符串可以,拼接串不行,oralce都可以
  1. SELECT ABS('-3.0') FROM dual; --oralce能查询 kingbase能查询
  2. SELECT ABS('-'||'3.0') FROM dual; --oracle能查询 kingbase报错
  3. SELECT ABS(CAST('-'||'3.0' AS number)) FROM dual; --oracele能查询 kingbase能查询
复制代码

  • 触发器指定列列时,不用使用REFERENCING 同时使用,底层触发过度表机制.可根据有业务移除或使用触发器函数改写
  1. --oracle-- 语法支持
  2. CREATE OR REPLACE TRIGGER TEST_TABLE_UPDATE
  3.   AFTER UPDATE OF F_A, F_B
  4.   ON TEST_TABLE
  5.   REFERENCING OLD AS OLD NEW AS NEW
  6.   FOR EACH ROW
  7.   DECLARE
  8.   BEGIN
  9.   -- 触发器内容
  10. END;
  11. --kingbase-- 语法错误
  12. -- transition tables cannot be specified for triggers with column lists
  13. CREATE OR REPLACE TRIGGER TEST_TABLE_UPDATE
  14.   AFTER UPDATE OF F_A, F_B
  15.   ON TEST_TABLE
  16.   REFERENCING OLD AS OLD NEW AS NEW
  17.   FOR EACH ROW
  18.   DECLARE
  19.   BEGIN
  20.   -- 触发器内容
  21. END;
  22. --修改方法 3 个
  23. -- 1. 注释 OF F_A,F_B
  24. -- 2. 或注释 REFERENCING OLD AS OLD NEW AS NEW
  25. ---3. 使用函数触发器(测试未通过,依然报错)
  26. CREATE TABLE  A_TEST_TRIGGER(F_A VARCHAR2(100),F_B VARCHAR2(100));
  27. CREATE OR REPLACE FUNCTION A_TEST_TRGGGER_FUN() RETURNS TRIGGER AS
  28. DECLARE
  29. BEGIN
  30.         RAISE NOTICE '%',TG_OP;
  31. END
  32. CREATE OR REPLACE TRIGGER A_TEST_TRIGGER_UPDATE
  33.   AFTER UPDATE OF F_A, F_B ON A_TEST_TRIGGER
  34.   REFERENCING OLD AS OLD NEW AS NEW
  35. FOR EACH ROW EXECUTE FUNCTION A_TEST_TRGGGER_FUN();
复制代码
6. 实用查询语句
  1. SELECT version(); --查看数据库版本
  2. SELECT GET_LICENSE_VALIDDAYS();--查看数据库是否过期
  3. SELECT * FROM V$SESSION;--查看当前数据库的会话信息
  4. SELECT * FROM pg_stat_activity;--查看当前数据库的进程信息
  5. SELECT * FROM sys_config ;--获取已安装的KingbaseES的系统信息
  6. -- 公众号:小满小慢 小游戏: 地心侠士
  7. SELECT * FROM pg_settings;--查询服务器运行参数
  8. SHOW exclude_reserved_words; --查看单个参数
  9. call sys_terminate_backend(pid); --终止指定进程
  10. call sys_cancel_backend(pid);--取消指定进程的查询动作
  11. call sys_reload_conf(); --重新加载配置文件
  12. alter table test_table set with rowid; --給表添加ROWID
  13. dbms_sql.return_result("cur"); -- 打印游标
  14. RAISE  NOTICE '%',value; --打印日志
  15. --编译函数,过程,触发器,类型,包
  16. ALTER FUNCTION [schema_name.]func_name COMPILE;
  17. ALTER PROCEDURE [schema_name.]proc_name COMPILE;
  18. ALTER TRIGGER [schema_name.]trig_name COMPILE;
  19. ALTER PACKAGE [schema_name.]pkg_name COMPILE [ PACKAGE | SPECIFICATION | BODY ];
  20. ALTER TYPE [schema_name.]typ_name COMPILE [ SPECIFICATION | BODY ];
  21. --查询,安装,删除扩展
  22. SELECT * FROM sys_available_extension_versions ;--查询所有扩展版本
  23. SELECT * FROM sys_available_extensions;-- 查询所有扩展
  24. CREATE EXTENSION http; --安装扩展
  25. drop EXTENSION http;--删除扩展
  26. ALTER EXTENSION http UPDATE TO '1.5'; --更新扩展
  27. --查询所有表信息
  28. select * from user_tables;
  29. select OWNER,TABLE_NAME,TABLESPACE_NAME,TEMPORARY,STATUS,PARTITIONED,DROPPED from all_tables;
  30. --查询所有列信息
  31. SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,NULLABLE FROM ALL_TAB_COLUMNS
  32. --查询所有函数,存储过程,程序包
  33. SELECT  * FROM  SYS_PROC;
  34. --查询具体某个pkg定义信息
  35. SELECT  * FROM  sys_get_package_function_detail('test','test_package')
  36. -- 公众号:小满小慢 小游戏: 地心侠士
  37. --所有pkg定义信息
  38. SELECT nspname,pkgname,proname,prokind FROM
  39. ((_pkg p LEFT JOIN _nsp n ON ((p.pkgnamespace = n.oid)))
  40. JOIN LATERAL sys_get_package_function_detail(n.nspname, p.pkgname) f ON ((f.pkgoid = p.oid)))
  41.   WHERE (f.pronargs >= 0) AND (p.pkgowner = uid()) ORDER BY nspname;
  42. -- 根据方法名查询过程信息
  43. SELECT proc.proname,proc.pronamespace,ns.nspname,proc."prorettype" ,ty.typname ,proc.* FROM pg_proc proc,pg_type ty,sys_namespace ns WHERE proc."prorettype" =ty."oid"  AND proc."pronamespace" = ns.oid and proname='min'
  44. --查询所有参数信息
  45. select OWNER,OBJECT_NAME,PACKAGE_NAME,ARGUMENT_NAME,POSITION,DATA_TYPE,DEFAULTED,DEFAULT_VALUE,IN_OUT,DATA_LENGTH from ALL_ARGUMENTS
  46. --查询所有对象
  47. select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from ALL_OBJECTS
  48. --查询函数,存储过程,类型,触发器代码
  49. select * from ALL_SOURCE
  50. --查询所有视图代码
  51. select OWNER,VIEW_NAME,TEXT from ALL_VIEWS
  52. --公众号:小满小慢 小游戏: 地心侠士
  53. SELECT * FROM kdb_job;
  54. SELECT * FROM "kdb_schedule"."kdb_jobsteplog";
复制代码
7. JDBC数据连接配置

JDBC连接需要指定当前Schema,必要时指定Seachema
  1. URL: jdbc:kingbase8://172.1.1.153:54321/testdb?currentSchema=test
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册