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

Posted 左直拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统信下人大金仓创建表空间及导入oracle数据相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

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

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

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

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

\\q

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

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

\\c 数据库名 账号名

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

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

GZFBC=# drop tablespace GZFBC;
DROP TABLESPACE

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

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

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

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

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

GZFBC=# \\db
 GZFBC       | SYSTEM | /home/chenqu/data/gzfbc
 SYS_DEFAULT | SYSTEM | 
 SYS_GLOBAL  | SYSTEM | 

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)

7)查看当前模式下的表

GZFBC=# \\dt
                List of relations
 Schema |         Name          | Type  | Owner  
--------+-----------------------+-------+--------
 PUBLIC | PATHMAN_CONFIG        | table | SYSTEM
 PUBLIC | PATHMAN_CONFIG_PARAMS | table | SYSTEM
(2 rows)

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                        | 

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

二、数据迁移

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

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

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

1)schema改名

GZFBC=# ALTER SCHEMA HYDG rename to GZFBC_HYDG;
ALTER SCHEMA

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

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

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";

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

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

三、小结

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

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

以上是关于统信下人大金仓创建表空间及导入oracle数据的主要内容,如果未能解决你的问题,请参考以下文章

oracle创建数据库表空间 用户 授权 导入 导出数据库

oracle创建表空间 导入数据库

Oracle数据库添加用户

oracle中怎样把表、表空间导入或导出?

Oracle修改表Table所属表空间及ClobBlob字段的处理

Oracle 创建数据库表用户及权限设置代码