1. 导出:##

方法一:通过sysmodel界面工具导出

  1. 确认SMARTSYS_HOME/conf目录下的配置文件db_mainten_mng.ini中,db_type=kingbase。
  2. 打开sysmodel工具,选择数据库维护功能。
  3. 在数据库导入导出(database dump/restore)标签页下,输入数据库IP地址,点击连接数据库按钮。会看到弹出数据库连接成功的提示。
    【数据库】Kingbase金仓数据库工程维护简明手册-编程之家
  4. 选择文件名,文件名需包含几个部分:数据库类型(例如:kdb表示金仓)、数据库备注(例如:test)、导出日期(例如:20170503),以dmp结尾。
  5. 如果导出全库,则仅保持“导出整库/dump full”前的复选框选中,直接点击导出按钮(dump)即可;如果导出不含历史数据的库,则还需要勾选“不导出指定表”选项,并在下方的列表中选中scada_event表。如图中蓝色圈所示。
    【数据库】Kingbase金仓数据库工程维护简明手册-编程之家
  6. 等待导出结束后,右侧命令显示窗口会显示导出命令行,以及操作执行提示。
    【数据库】Kingbase金仓数据库工程维护简明手册-编程之家

方法二:通过命令行导出
导出全库:

sys_dump  --host=localhost --port=54321 -U smartsys -W****** --encoding=UNICODE --schema=smartsys --format=c --file=D:/tmp/kdb_test_20170503.dmp

导出全库(排除历史表):

sys_dump  --host=localhost --port=54321 -U smartsys -W****** --encoding=UNICODE --schema=smartsys --format=c -T scada_event --file=D:/tmp/kdb_test_20170503.dmp

2. 导入:##

方法一:通过sysmodel界面工具导入

  1. 确认SMARTSYS_HOME/conf目录下的配置文件db_mainten_mng.ini中,db_type=kingbase。
  2. 打开sysmodel工具,选择数据库维护功能。
    【数据库】Kingbase金仓数据库工程维护简明手册-编程之家
  3. 填好IP地址,连接数据库。
  4. 选择数据转储文件。
  5. 如果库中原先有数据,务必先点击“清除数据”按钮。
  6. 点击导入按钮。
  7. 【重要】导入结束后需确认导入过程中没有出现警告。

方法二:通过命令行导入
导入全库:

sys_restore --host=localhost --port=54321 -USMARTSYS -W****** --schema=SMARTSYS -c -x --no-tablespace-definition -dSMARTSYS D:/tmp/kdb_test_20170503.dmp

【注意】上述命令行导入过程会自动清除原先的数据库。


3. 执行升级脚本:##

现场数据库需要升级时,执行升级脚本是一个常见的办法。脚本通常是一个后缀名为sql的文件(例如upgrade.sql)。有两种方式可以执行。

方法一:使用数据库自带图形界面工具执行。

  1. 打开金仓数据库“查询分析器”,连接数据库。
  2. 打开一个编辑窗口,选择“SMARTSYS”数据库。
  3. 将upgrade.sql文件中的内容复制粘贴到编辑窗口中,按“一个小人跑步”按钮执行。
  4. 执行完成后要注意检查下面的窗口中是否有显示“0条语句执行失败”。
    【数据库】Kingbase金仓数据库工程维护简明手册-编程之家

方法二:使用isql命令行执行。

isql -Usmartsys -W****** -h127.0.0.1 -p54321  -dsmartsys -fupgrade.sql

【注意】
一般的数据库管理语句(DML语句,包含select,insert,update,delete等)都可以在一行内结束并以分号结尾。但是部分数据库描述语句(DDL语句,包含create,alter,drop等)或由begin-end包住的匿名块,往往无法在一行内结束。以下面的函数创建脚本为例:

create or replace function test_f1()
returns void asa_var int;
beginselect 1 into a_var;
end;

如果在查询分析器中,可以直接执行,但是在isql中直接执行会报错,必须在其开头和结尾处增加“块标签”。如下:

\set SQLTERM /
create or replace function test_f1()
returns void asa_var int;
beginselect 1 into a_var;
end;
/
\set SQLTERM ;

其中:
“\set SQLTERM /”是块起始标签;
“/”是块执行标签;
“\set SQLTERM ;”是块结束标签(分号前必须要有一个空格)。

【问题是】:带“块标签”的脚本不能在查询分析器中执行,不带“块标签”的脚本不能在isql中执行。
所以所有发往现场的升级脚本统一不带“块标签”,如果现场希望在isql中执行升级脚本,请在***每一个***块或匿名块的前面***自行***添加“起始标签”,并且在***每一个***块或匿名块的后面***自行***添加“执行标签”和“结束标签”。或者指明请研发人员代为添加。