关键词搜索

源码搜索 ×
×

统信下人大金仓创建表空间及导入oracle数据

发布2022-11-10浏览4611次

详情内容

因为国产化,数据库采用国产的人大金仓,原先存放于oracle 12c的数据也要迁移过来。

人大金仓,改自开源的数据库项目pg(postgreSql),这点人大金仓自己也承认。因此目前查人大金仓,如果资料匮乏,直接查pg也是可以的,高度相似。不过这也可以理解,先解决有无的问题,用一个开源的框架进行修改,等完全吃透了,人才也储备了,就可以推陈出新,青出于蓝。操作系统、数据库、中间件、基础应用软件(如matlab这类),都掌握在自己人手里。

数据由oracle迁移到人大金仓KingBase8,步骤是什么呢?

一、人大金仓里创建数据库、表空间和模式

1、表空间(TableSpace)和模式(Schema)的基本概念

oracle有表空间和schema,人大金仓也有。表空间是一个物理存储的概念,存储数据文件、索引文件之类。而schema是一个逻辑概念,对应数据库的关系模式,如表结构,字段类型,视图定义等等。

在oracle里,好像没有什么地方去创建、修改这个schema,有的只有创建表空间,然后似乎schema名称跟表空间名称天然保持一致,往往让人将二者等同起来。而在人大金仓里面,可以独立操作这个schema(模式),一个数据库可以对应多个表空间,而表空间也可以被多个数据库所用。在oracle中,表空间更像是一个命名空间,逻辑概念;而人大金仓里面,表空间本质是一个文件夹。

人大金仓的表空间(TableSpace)和模式(Schema)
在这里插入图片描述
在这里插入图片描述
2、操作命令
人大金仓提供了图形化的数据库对象管理工具,可以用于创建数据库、表空间,模式,查询数据,等等。不过最方便的,还是用它的命令行。

1)登录数据库
操作系统终端里,输入:

ksql -h 127.0.0.1 -U 账号 -d 数据库名称
  • 1

这样输入密码后,就进入到kingbase的命令行或者说,进入了kingbase的终端。

2)退出人大金仓终端,回到操作系统终端

\q
  • 1

一个斜杠加一个q。kingbase的命令,以一个斜杠开头。sql的话就直接写。

3)切换账号或数据库
登录的时候是指定账号和数据库的。进去以后,如果想切换账号或数据库,不必退出再进这么麻烦。可以

\c 数据库名 账号名
  • 1

这样就以新的账号进入了新的数据库
在这里插入图片描述
4)创建及删除表空间

GZFBC=# create tablespace gzfbc location '/home/chenqu/data/gzfbc';    
CREATE TABLESPACE

GZFBC=# drop tablespace GZFBC;
DROP TABLESPACE
  • 1
  • 2
  • 3
  • 4
  • 5

删除表空间,需要表空间是空的,并没有被使用。

4-1)修改数据库默认表空间

GZFBC=# alter database GZFBC set tablespace HYDG;
错误:  无法改变当前已打开数据库的表空间
  • 1
  • 2

注意当前数据库是不能修改自己的。因此应该切换到别的数据库,再操作。

5)查看当前实例下的所有表空间

GZFBC=# \db
 GZFBC       | SYSTEM | /home/chenqu/data/gzfbc
 SYS_DEFAULT | SYSTEM | 
 SYS_GLOBAL  | SYSTEM | 
  • 1
  • 2
  • 3
  • 4

6)查看当前数据库下的所有模式

GZFBC=# \dn
       List of schemas
        Name        | Owner  
--------------------+--------
 GZFBC_HYDG         | WORK
 HYDG               | SYSTEM
 INFORMATION_SCHEMA | SYSTEM
 PUBLIC             | SYSTEM
 SYSAUDIT           | SYSTEM
 SYSLOGICAL         | SYSTEM
 XLOG_RECORD_READ   | SYSTEM
(7 rows)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

7)查看当前模式下的表

GZFBC=# \dt
                List of relations
 Schema |         Name          | Type  | Owner  
--------+-----------------------+-------+--------
 PUBLIC | PATHMAN_CONFIG        | table | SYSTEM
 PUBLIC | PATHMAN_CONFIG_PARAMS | table | SYSTEM
(2 rows)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

8)查看表结构

GZFBC=# \d catchresult
 CATCHRESULTID | NUMERIC(18,0)               | not null
 WEBSITEID     | NUMERIC(18,0)               | not null
 CATEGORYID    | NUMERIC(18,0)               | not null
 WEBPAGEID     | NUMERIC(18,0)               | not null
 TITLE         | CHARACTER VARYING(300 byte) | not null
 URL           | CHARACTER VARYING(300 byte) | not null
 CREATEDATE    | TIMESTAMP WITHOUT TIME ZONE | not null
 CONTENT       | CLOB                        | 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

9)管理员和普通账户
留意到如果是管理员,其命令后接“#”号,普通账户,后接“>”号
在这里插入图片描述

二、数据迁移

数据库迁移使用人大金仓提供的迁移工具。名字就叫“数据迁移工具”。

1、首先建立好源数据库和目标数据库2个连接。
在这里插入图片描述
在这里插入图片描述
2、数据迁移
创建一个数据迁移任务,选好源、目标数据库,一步一步走就好了。还行。

3、表空间及模式
迁移到kingbase的时候,系统默认是oracle的schema跟kingbase的一样,如果kingbase上还没有相应的schema,系统会自动创建一个。当然迁移前可以设置。如果导入之后才发现,还可以调整:

1)schema改名

GZFBC=# ALTER SCHEMA HYDG rename to GZFBC_HYDG;
ALTER SCHEMA
  • 1
  • 2

设置用户work的默认schema。注意schema改名字以后,原先的默认设置会失效,需要重新指定一遍。

GZFBC=# ALTER USER "work" set search_path to GZFBC_HYDG;
  • 1

2)赋权限
人大金仓的权限分为三级:数据库级,模式级,以及模式下面的对象。将某模式的owner设为某账户,那么正常情况下,模式下面的表、视图等,该账户都可以顺理成章地拥有全部权限。但这只限于正常情况下。如果是数据迁移进来到某模式的,好像就没有这个继承关系。但我不确定是不是这样,因为我操作了许多,又是改名又是换owner。

假如账号没有拥有模式下辖的对象的权限,怎么办呢?只能手动赋权:

grant all on all sequences  in schema GZFBC_HYDG to "work";
grant all on all tables in schema GZFBC_HYDG to "work";
  • 1
  • 2

3)查看数据库对应的表空间

select d.datname,p.spcname from sys_database d, sys_tablespace p where d.datname='数据库名称' and p.oid = d.dattablespace;
  • 1

三、小结

目前的人大金仓,基本上跟pg非常相像,感觉只是简单地将系统表的前缀从pg_改成了sys_。查阅到的pg资料,好像都能用上。

有一个比较奇怪的地方,就是数据库名,用户名,系统会自动变成大写,就算我们写的时候,刻意用小写来进行书写。kingbase是区分大小写的,像账号这些。但SQL例外。因此如果真的要用小写,应该用双引号将名字包起来。为什么会有这种规定,感觉设计者的脑袋被驴子踢过。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载