达梦数据库安装和概况
1.数据库安装
没什么好说的,windows版本的话,官网下载镜像,一键到位。
2.创建数据库
通过数据库配置工具,基本都是一路「下一步」就完成了。这里记录一下某些参数。
数据库目录:D:\dmdbms\data
数据库名:test_database
实例名:test
端口号:5236
另外建立了一张空表用作测试
CREATE TABLE "SYSDBA"."USER_BALANCE"
(
"USER_ID" INT NOT NULL,
"USER_NAME" VARCHAR(8188),
"BALANCE" TEXT,
NOT CLUSTER PRIMARY KEY("USER_ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
3.一些可能会有用的概念
表空间
在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑
上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN
表空间、TEMP 表空间和 HMAIN 表空间。
- SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创
建表和索引。 - ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运
行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致
性视图。 - MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件
MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表
空间为用户默认的表空间。 - TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完成
某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中
完成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP
表空间。 - HMAIN 表空间属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。当用
户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。
模式
用户的模式(SCHEMA)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、
视图、索引和权限定义的对象。在 DM 中,一个用户可以创建多个模式,一个模式中的对象
(表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的
数据库中有权限访问的任意模式中的对象。
系统为每一个用户自动建立了一个与用户名同名的模式作为其默认模式,用户还可以用
模式定义语句建立其它模式。
4.用户相关,很有可能用上
系统同义词
可以代替做表名?大概是这样。
其中有个DBA_USERS的大概是所有用户的表。
后续应该是传给web端获取密钥。
考虑了一下,如果策略在云端,应该只需要获取当前用户。
理论上用「SELECT USER」就可以了。
5.使用外部函数的步骤
生成jar包
需要严格按照Java语言格式书写代码。
使用的函数均为静态。
配置dmagent参数
dmdbms\tool\dmagent
使用前需要配置agent.ini
对于外部函数功能,需要将ap_enable设为true,ap_port的值需要与dm.ini文件中的参数EXTERNAL_JFUN_PORT的值保持一致。
启动dmagent服务
powershell执行
start.bat D:\dmdbms\tool\dmagent\agent.ini #agent.ini的路径
创建外部函数
sql语句格式如下
CREATE OR REPLACE FUNCTION [<模式名>.]<函数名>[(<参数列表>)]
RETURN <返回值类型>
EXTERNAL <jar 包路径> [<引用的函数名>] USING JAVA;
参数格式为 参数名 参数类型
类型包括 Int、字符串(char、varchar、varchar2)、bigint、double
参数类型和个数要与jar包内一致,参数名似乎没有要求
jar包路径需要绝对路径
引用的函数名是指jar包中对应函数的函数名,包和类要用「.」分隔
使用外部函数
通过创建时的函数名直接使用即可。
6.问题
逻辑写在哪?
如果仅仅是sql语句中的一个函数。
在哪判断用户权限?
考虑了一下,对于一个函数来说,就是参数和返回值的问题。
那么,参数应当是用户名和原文,然后返回值是密文。
那函数中应当根据用户名获取密钥。如果失败就返回一段特殊的文本?
dmagent执行启动命令后一直停在starting
没事了这就是启动了orz
数据库管理员没有创建函数的权限?!