DM数据库基本操作
-
创建表空间
-
使用 SYSDBA 用户登录 DM 管理工具。右键表空间模块,点击【新建表空间】
-
定义表空间名
-
创建表空间名为TEST,指定数据文件为TEST.DBF,默认
- 数据文件就安装在
data\DAMENG
目录下
注:这里是表示表空间存放的地方,不是在这里面找空间(我最开始就是理解错了)
- 点击【添加】,然后在文件路径输入对应的数据文件即可
注意:
添加的数据文件大小最小为 4096 * 页大小,如页大小为 8K,则可添加的文件最小值为 4096*8k=32M。上图中文件最小为 128 MB,对应页大小为 32 KB。
-
这里就体现出了初始化时页大小选取的关键了,不仅影响表空间数据文件大小,还会对表中每个字段及每条记录产生限制。
数据库页大小 每个字符类型字段实际最大长度(字节) 每行记录最大字段外其他字段总长度(字节) 表空间单个数据文件最小 (MB)/最大 (MB) 4 KB 1938 2047 16/8388608 8 KB 3878 4095 32/16777216 16 KB 8000 8195 64/33554432 32 KB 8188 16176 128/67108864
- 数据文件就安装在
-
-
使用命令行创建表空间TEST
-
指定文件为
/data/dmdata/DAMENG/TEST.DBF
,初始大小为128MB,其他默认。create tablespace "TEST" datafile '/data/dmdata/DAMENG/TEST.DBF' size 128 ;
-
-
修改表空间参数
-
根据项目具体情况修改表空间文件、路径、大小、是否自动扩充、扩充上限等信息
-
命令行修改表空间信息,打开自动扩展,每次扩展100M,扩展上限为120240M
alter tablespace "TEST" datafile '/data/dmdata/DAMENG/TEST.DBF' autoextend on next 100 maxsize 10240;
-
-
设置加密算法、密码
-
根据项目需求设置加密算法、加密密码等信息。也可以设置为空
- 设置完了点击【确定】就可以了
-
完整的命令行形式:
-
指定数据库文件为
/data/dmdata/DAMENG/TEST.DBF
,初始大小为 128M,打开自动扩展,每次自动扩展 100M ,扩展上限 10240M,使用 RC4 加密算法create tablespace "TEST" datafile '/data/dmdata/DAMENG/TEST.DBF' size 128 autoextend on next 100 maxsize 10240 CACHE = NORMAL encrypt with RC4;
-
-
-
-
创建用户
登录DM管理工具
-
新建用户
-
展开用户模块,右键管理用户,点击【新建用户】
-
-
用户名、密码
-
设置用户名、密码(常规操作)
- 这里举例:用户名为TEST,密码为123456789
注意:密码默认长度不少于9位
-
-
定义表空间、索引表空间
-
就是指定表空间和索引表空间是哪一个
-
-
使用命令行:
-
创建用户TEST,密码“Dameng@123”,使用散列算法SHA512,使用存储加密密钥“123456”,指定表空间为 TEST,索引表空间 TEST,授予 “PUBLIC” 和 “SOI” 权限
create user "TEST" identified by "Dameng@123" hash with SHA512 salt encrypt by "123456" default tablespace "TEST" default index tablespace "TEST"; grant "PUBLIC","SOI" to "TEST";
-
-
-
授权
-
授予用户DBA权限(用户建立后右键点击【修改用户】)
-
命令行:
grant "DBA" to "TEST";
-
-
授予用户RESOURCE权限(反正就是按需给权限,这里只是演示,就只搞这一个权限)
-
命令行:
grant "RESOURCE" to "TEST";
-
-
-
用户与模式的关系
每个用户有一个默认的同名的模式,访问自己模式下的表、视图等,不需要加模式名,访问其他模式下的对象需要拥有访问权限,访问时还需加上模式名。
-
查询当前用户模式下的表,无需加对象名
-
以TEST用户为例,查询自己下面的表,不用加对象名(新建连接,注意修改用户名为TEST,输入密码就行)
select * from test
-
这个是需要自己先创建表才能查(不可能啥都没有你还想查出来吧)
creat table test(c1 int,c2 int);
-
-
-
查询其他用户模式下的表,需要加对象名
-
以 TEST 用户为例,查询 DBTEST 用户模式下的表 TABLE_TEST,如不加对象名,则查询会报错“无效的表名或者视图名[TABLE_TEST]”
-
如果没有授权相关权限,则会报错“没有对象[DBTEST.TABLE_TEST]的查询权限”
-
这个时候就需要授予TEST用户权限
--使用 root 用户授予 TEST 用户查询表 TABLE_TEST 的权限 grant SELECT on "DBTEST"."TABLE_TEST" to "TEST"; --使用 TEST 用户登录数据库查询表 TABLE_TEST select * from DBTEST.TABLE_TEST;
-
-
-
创建数据库对象(终于开始搞数据库了)
-
创建表
-
创建表CITY(其实DM8就已经把这个示例创建好了,所以可以直接跳过这些步骤,看看怎么操作就好)
CREATE TABLE dmhr.city ( city_id CHAR(3) NOT NULL, city_name VARCHAR(40) NULL, region_id INT NULL );
- 数据库操作啥的感觉都差不多
-
-
插入数据
-
在 CITY 表中插入 11 条数据
INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('BJ','北京',1); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('SJZ','石家庄',1); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('SH','上海',2); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('NJ','南京',2); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('GZ','广州',3); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('HK','海口',3); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('WH','武汉',4); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('CS','长沙',4); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('SY','沈阳',5); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('XA','西安',6); INSERT INTO dmhr.city(city_id,city_name,region_id) VALUES('CD','成都',7);
-
-
查询数据
-
语句如下:
SELECT * FROM dmhr.city;
-
-
创建视图
-
创建一个视图,命名为
V_CITY
,保存 region_id 小于 4 的数据,列名有:city_id,city_name,region_idCREATE VIEW dmhr.v_city AS SELECT city_id , city_name , region_id FROM dmhr.city WHERE region_id < 4;
-
查询视图结果
SELECT * FROM dmhr.v_city;
-
-
创建存储过程
-
创建一个名为
PROC_1
的存储过程,入参数据类型为 INT,变量 B 赋予初始值 10,输出变量 A 的值为输入的变量 A 值与变量 B 值之和。CREATE PROCEDURE dmhr.proc_1 (a IN OUT INT) AS b INT:=10; BEGIN a:=a+b; PRINT 'DMHR.PROC_1调用结果:'||a; END;
-
调用存储过程,输入变量值 3,得到结果值 13
CALL dmhr.proc_1(3);
-
-
创建函数
-
创建一个名为
FUN_1
的存储函数,返回类型为 INT 类型。两个参数 A、B 的和赋给了变量 S,RETURN 语句将 S 的值作为函数返回。CREATE FUNCTION dmhr.fun_1 (a INT, b INT) RETURN INT AS s INT; BEGIN s:=a+b; RETURN s; END;
-
来个例子,给变量A,B赋值为4和5,得出结果
SELECT dmhr.fun_1(4,5);
-
-
创建序列
-
创建序列
SEQ_QUANTITY
,起始值为 5,增量值为 2,最大值为 200。CREATE SEQUENCE dmhr.seq_quantity START WITH 5 INCREMENT BY 2 MAXVALUE 200;
-
查询序列下一值
SELECT dmhr.seq_quantity.nextval FROM dual;
-
-
创建触发器(如果觉得看不太懂,建议去学习一下数据库基础,跟MySQL差别不大)
-
创建一个触发器 TRG_UPD,当对表 CITY 进行更新行为之后,定义的触发器 TRG_UPD 将被激发
CREATE TRIGGER dmhr.trg_upd AFTER UPDATE ON dmhr.city FOR EACH ROW BEGIN PRINT 'UPDATE OPERATION ON CITY !!'; END;
-
示例示例!对CITY表进行更新操作,测试触发器
UPDATE dmhr.city SET city.region_id=8 WHERE city.city_id='XA';
-
-
创建定时任务(这个有点儿复杂)
-
创建代理环境
-
右键代理,点击创建代理环境
-
-
创建作业
-
在创建代理环境成功后,下方就会出现三个文件夹,右键作业,点击新建作业
-
作业设置
-
常规—配置作业名,作业描述(作业名为TEST)
-
-
配置“作业步骤”(点击作业步骤,不是直接点击确认啊)
-
填写步骤名称:定时执行查询语句;步骤类型:SQL脚本
-
填写执行的脚本语句
select * from V$instance;
-
点击确认
-
-
作业调度
-
新建作业调度,设置时间,执行周期(这里我示例设置为周天,每隔一小时执行一次)
-
点击确认设置成功
-
-
确认后就可以看到作业设置成功
-
-
-
参考
- https://eco.dameng.com/document/dm/zh-cn/start/