软件包:
NeoKylin Linux A 6.0 x86_64bit(中标麒麟)
dm7_setup_rh6_64_ent_7.6.0.197_20190917
unixODBC-2.3.0.tar.gz
1.1.安装环境检查
[root@localhost ~]# lsb_release -a //查看操作系统
[root@localhost ~]# rpm -aq|grep glibc //查看包
[root@localhost ~]# cat /proc/cpuinfo //查看cpu
[root@localhost ~]# fdisk -l //查看磁盘信息
[root@localhost ~]# df -h //查看空间大小
1.2.创建用户和安装目录
[root@localhost ~]# mkdir /dm7 //创建安装目录
[root@localhost ~]# id dmdba //规划用户dmdba,不建议使用root
id: dmdba:无此用户
[root@localhost ~]# groupadd dinstall
[root@localhost ~]# useradd -g dinstall dmdba
[root@localhost ~]# id dmdba
uid=500(dmdba) gid=503(dinstall) 组=503(dinstall)
[root@localhost ~]# passwd dmdba
更改用户 dmdba 的密码。
Enter new password:
Re-type new password:
passwd: 所有的身份验证令牌已经成功更新。
[root@localhost ~]# chown -R dmdba:dinstall /dm7
1.3.环境变量配置
[dmdba@localhost ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
[dmdba@localhost ~]$ source .bash_profile
1.4.设置文件最大打开数目
[root@localhost ~]# ulimit -n 65536
[root@localhost ~]# vi /etc/security/limits.conf
dmdba soft nofile 4096
dmdba hard nofile 65536
[root@localhost /]# su dmdba
[dmdba@localhost /]$ ulimit -a
1.5.安装数据库软件
[root@localhost /]# ls -l /dev|grep cdrom //光盘驱动器
lrwxrwxrwx 1 root root 3 4月 16 15:21 cdrom -> sr
crw-irw---- 1 root cdrom 21, 1 4月 16 15:15 sg1
brw-rw----+ 1 root cdrom 11, 0 4月 16 15:21 sr0
[root@localhost /]# mount -o loop /dev/cdrom /mnt/ //挂载安装盘
[root@localhost /]# cd mnt/
[root@localhost mnt]# ll
总用量 575058
-r-xr-xr-x 1 root root 584382798 9月 16 2019 DMInstall.bin
-r-xr-xr-x 1 root root 2266249 9月 12 2019 DM_Install_en.pdf
-r-xr-xr-x 1 root root 2207674 9月 12 2019 DM_Install_zh.pdf
-r-xr-xr-x 1 root root 868 9月 12 2019 release_en.txt
-r-xr-xr-x 1 root root 973 9月 12 2019 release_zh.txt
[dmdba@localhost root]$ cd /mnt
[dmdba@localhost mnt]$ export DISPLAY=192.168.116.1:0.0 //配置远程图形化显示
[dmdba@localhost mnt]$ xhost +
access control disabled, clients can connect from any host
xhost: must be on local machine to enable or disable access control.
[dmdba@localhost mnt]$ ./DMInstall.bin
1.6.卸载软件
已经存数据库,停止数据库,执行uninstall.sh
只安装了软件,可以直接执行uninstall.sh
脚本uninstall.sh在安装目录下
1.7.初始化数据库
[dmdba@localhost bin]$ ./dminit path=/dm7/data DB_NAME=DM02 instance_name=DM02 PORT_NUM=5239
[root@localhost /]# cd /dm7/script/root/
[root@localhost root]# ./dm_service_installer.sh -t dmserver -i /dm7/data/DM02/dm.ini -p DM02
移动服务脚本文件(/dm7/bin/DmServiceDM02 到 /etc/rc.d/init.d/DmServiceDM02)
创建服务(DmServiceDM02)完成
[root@localhost root]# service DmServiceDM02 start
1.8.图形界面工具介绍
[root@localhost tool]# ./console //DM控制台工具
[root@localhost tool]# ./dbca.sh //数据库配置助手
[root@localhost tool]# ./dmservice.sh //服务查看器
[root@localhost tool]# ./dts //DM数据迁移工具
[root@localhost tool]# ./manager //DM管理工具
[root@localhost tool]# ./monitor //DM性能监视工具
2.1.数据库实例登录
[dmdba@localhost ~]$ source .bash_profile //环境变量生效
[dmdba@localhost ~]$ disql sysdba/dameng123@localhost:5236 //目录在/dm7/bin/disql
服务器[localhost:5236]:处于普通打开状态
登录使用时间: 17.723(毫秒)
disql V7.6.0.197-Build(2019.09.12-112648)ENT
SQL>
2.2.数据库实例状态切换
SQL> select status$ from v$instance;
行号 STATUS$
---------- -------
1 OPEN
已用时间: 11.844(毫秒). 执行号:3.
SQL> alter database mount;
操作已执行
已用时间: 00:00:01.859. 执行号:0.
SQL> select status$ from v$instance;
行号 STATUS$
---------- -------
1 MOUNT
已用时间: 0.526(毫秒). 执行号:4.
2.3.启动数据库实例
[dmdba@localhost bin]$ ./dminit path=/dm7/data DB_NAME=DM03 instance_name=DM03 PORT_NUM=5237
[root@localhost /]# cd /dm7/script/root/
[root@localhost root]# ./dm_service_installer.sh -t dmserver -i /dm7/data/DM03/dm.ini -p DM03
移动服务脚本文件(/dm7/bin/DmServiceDM03 到 /etc/rc.d/init.d/DmServiceDM03)
创建服务(DmServiceDM03)完成
[root@localhost root]#
[root@localhost root]# service DmServiceDM03 start
Starting DmServiceDM03: [ OK ]
[root@localhost root]#
[root@localhost root]# netstat -ntl|grep 523* //判断数据库是否启动
tcp 0 0 :::5236 :::* LISTEN
tcp 0 0 :::5237 :::* LISTEN
tcp 0 0 :::5239 :::* LISTEN
tcp 0 0 :::5240 :::* LISTEN
[root@localhost root]# ps -ef|grep dmserver //判断数据库是否启动
dmdba 2176 1 0 21:40 ? 00:00:02 /dm7/bin/dmserver /dm7/data/DM02/dm.ini -noconsole
dmdba 2294 1 0 21:40 ? 00:00:02 /dm7/bin/dmserver /dm7/data/DAMENG/dm.ini -noconsole
dmdba 12042 1 1 22:25 pts/2 00:00:05 /dm7/bin/dmserver /dm7/data/DM04/dm.ini -noconsole
dmdba 13140 1 2 22:29 pts/0 00:00:03 /dm7/bin/dmserver /dm7/data/DM03/dm.ini -noconsole
root 13720 4293 0 22:32 pts/0 00:00:00 grep dmserver
2.4.重做日志文件
SQL> select path from v$rlogfile;
行号 PATH
---------- -----------------------------
1 /dm7/data/DAMENG/DAMENG01.log
2 /dm7/data/DAMENG/DAMENG02.log
已用时间: 11.391(毫秒). 执行号:365.
SQL> alter database add logfile '/dm7/data/DAMENG/DAMENG04.log' size 128;
操作已执行
已用时间: 569.746(毫秒). 执行号:367.
SQL> select path,rlog_size/1024/1024 from v$rlogfile;
行号 PATH RLOG_SIZE/1024/1024
---------- ----------------------------- --------------------
1 /dm7/data/DAMENG/DAMENG01.log 256
2 /dm7/data/DAMENG/DAMENG02.log 256
3 /dm7/data/DAMENG/DAMENG04.log 128
已用时间: 0.360(毫秒). 执行号:368.
SQL>
SQL> alter database resize logfile '/dm7/data/DAMENG/DAMENG04.log' to 256;
操作已执行
已用时间: 640.713(毫秒). 执行号:369.
SQL> select path,rlog_size/1024/1024 from v$rlogfile;
行号 PATH RLOG_SIZE/1024/1024
---------- ----------------------------- --------------------
1 /dm7/data/DAMENG/DAMENG01.log 256
2 /dm7/data/DAMENG/DAMENG02.log 256
3 /dm7/data/DAMENG/DAMENG04.log 256
已用时间: 0.369(毫秒). 执行号:370.
SQL>
注意:重做日志不能删除,所有日志文件大小要求一致。
3.1.DM逻辑存储结构
3.2.DM物理存储结构
[dmdba@localhost ~]$ cd /dm7/data/DAMENG/
[dmdba@localhost DAMENG]$ ll *.ini //配置文件,以ini结尾
-rw-r--r-- 1 dmdba dinstall 907 4月 16 15:52 dmarch_example.ini
-rw-r--r-- 1 dmdba dinstall 2147 4月 16 15:52 dmdcr_cfg_example.ini
-rw-r--r-- 1 dmdba dinstall 631 4月 16 15:52 dmdcr_example.ini
-rw-r--r-- 1 dmdba dinstall 45283 4月 16 15:52 dm.ini
-rw-r--r-- 1 dmdba dinstall 1537 4月 16 15:52 dminit_example.ini
-rw-r--r-- 1 dmdba dinstall 2070 4月 16 15:52 dmmal_example.ini
-rw-r--r-- 1 dmdba dinstall 1277 4月 16 15:52 dmmonitor_example.ini
-rw-r--r-- 1 dmdba dinstall 288 4月 16 15:52 dmmpp_example.ini
-rw-r--r-- 1 dmdba dinstall 1679 4月 16 15:52 dmtimer_example.ini
-rw-r--r-- 1 dmdba dinstall 2146 4月 16 15:52 dmwatcher_example.ini
-rw-r--r-- 1 dmdba dinstall 635 4月 16 15:52 sqllog_example.ini
-rw-r--r-- 1 dmdba dinstall 479 4月 16 15:52 sqllog.ini
[dmdba@localhost DAMENG]$ ll *.ctl //控制文件是一个二进制文件,以ctl结尾
-rw-r--r-- 1 dmdba dinstall 9728 4月 20 21:44 dm.ctl
查看控制文件内容:
[dmdba@dca01 DAMENG]$ dmctlcvt help
[dmdba@dca01 DAMENG]$ dmctlcvt type=1
src=/dm7/data/DAMENG/dm.ctl dest=/tmp/dmctl.txt
[dmdba@dca01 tmp]$ cat dmctl.txt
--------------------------------------------------------------------------
[dmdba@localhost DAMENG]$ ll *.DBF
//数据文件,数据文件的大小范围:4096*页大小------2147483647*页大小
表空间中数据文件的总数不超过256个
-rw-r--r-- 1 dmdba dinstall 134217728 4月 16 19:30 DMHR.DBF
-rw-r--r-- 1 dmdba dinstall 134217728 4月 20 11:41 MAIN.DBF
-rw-r--r-- 1 dmdba dinstall 134217728 4月 20 21:49 ROLL.DBF
-rw-r--r-- 1 dmdba dinstall 22020096 4月 20 22:14 SYSTEM.DBF
-rw-r--r-- 1 dmdba dinstall 10485760 4月 20 21:44 TEMP.DBF
[dmdba@localhost DAMENG]$ ll DAMENG*.log //重做日志文件,以实例名*.log结尾的文件
-rw-r--r-- 1 dmdba dinstall 268435456 4月 20 22:10 DAMENG01.log
-rw-r--r-- 1 dmdba dinstall 268435456 4月 20 21:44 DAMENG02.log
-rw-r--r-- 1 dmdba dinstall 268435456 4月 20 21:44 DAMENG03.log
表空间是由一个或多个数据文件构成的,表空间是数据库的一个容器,存放数据库中的数据对象(表,索引等)
达梦数据库默认的表空间
[dmdba@localhost ~]$ disql SYSDBA/dameng123@localhost:5236
服务器[localhost:5236]:处于普通打开状态
登录使用时间: 4.439(毫秒)
disql V7.6.0.197-Build(2019.09.12-112648)ENT
SQL> select tablespace_name,status from dba_tablespaces;
行号 TABLESPACE_NAME STATUS
---------- --------------- -----------
1 SYSTEM 0
2 ROLL 0
3 TEMP 0
4 MAIN 0
5 DMHR 0
6 HMAIN NULL
6 rows got
已用时间: 10.549(毫秒). 执行号:1833.
SQL>
SYSTEM:数据字典和全局的系统数据。
ROLL:存放了数据库运行过程中产生的回滚记录
Temp:临时表空间
Main:数据库默认表空间,创建数据对象的时候,如果不指定存放的位置,默认存放在该表空间。
HMAIN:HUGE表空间
相关参数:
UNDO_RETENTION 单位:秒
SQL> select para_name,para_value from v$dm_ini where para_name='UNDO_RETENTION';
行号 PARA_NAME PARA_VALUE
---------- -------------- ----------
1 UNDO_RETENTION 90.000000
已用时间: 17.995(毫秒). 执行号:1834.
SQL>
4.1.查询表空间
相关的视图:
v$tablespace, dba_tablespaces ,v$huge_tablespace, dba_data_files;
SQL> select name from v$huge_tablespace union select name from v$tablespace;
行号 NAME
---------- ------
1 HMAIN
2 SYSTEM
3 ROLL
4 TEMP
5 MAIN
6 DMHR
6 rows got
已用时间: 0.659(毫秒). 执行号:1835.
SQL>
4.2.规划表空间
案例1:
SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1_01.dbf' size 31;
create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1_01.dbf' size 31;
第1 行附近出现错误[-2410]:数据文件[/dm7/data/DAMENG/tbs1_01.dbf]大小无效.
已用时间: 0.311(毫秒). 执行号:0.
SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1_01.dbf' size 32;
操作已执行
已用时间: 29.885(毫秒). 执行号:1836.
初始文件大小是页的4096倍, 4096*8K=32M
案例2:
创建一个表空间,初始大小50M,最大100M
SQL> create tablespace tbs2 datafile '/dm7/data/DAMENG/tbs2_01.dbf' size 50 autoextend on maxsize 100;
操作已执行
已用时间: 22.760(毫秒). 执行号:1837.
案例3:
创建一个表空间,初始大小50M,表空间由2个数据文件组成,分别存储在不同的磁盘上,每次扩展1m,每个数据文件最大100M
SQL> create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3_01.dbf' size 50 autoextend on next 1 maxsize 100,'/dm7/data/tbs3_02.dbf' size 50 autoextend on next 1 maxsize 100;
操作已执行
已用时间: 30.510(毫秒). 执行号:1838.
SQL> select file_name,status,tablespace_name from dba_data_files;
行号 FILE_NAME STATUS TABLESPACE_NAME
---------- ---------------------------- --------- ---------------
1 /dm7/data/DAMENG/SYSTEM.DBF AVAILABLE SYSTEM
2 /dm7/data/tbs3_02.dbf AVAILABLE TBS3
3 /dm7/data/DAMENG/tbs3_01.dbf AVAILABLE TBS3
4 /dm7/data/DAMENG/tbs2_01.dbf AVAILABLE TBS2
5 /dm7/data/DAMENG/tbs1_01.dbf AVAILABLE TBS1
6 /dm7/data/DAMENG/DMHR.DBF AVAILABLE DMHR
7 /dm7/data/DAMENG/MAIN.DBF AVAILABLE MAIN
8 /dm7/data/DAMENG/TEMP.DBF AVAILABLE TEMP
9 /dm7/data/DAMENG/ROLL.DBF AVAILABLE ROLL
9 rows got
已用时间: 7.240(毫秒). 执行号:1839.
4.3.维护表空间
表空间不足,如何去扩展表空间:
1、创建大表空间,数据导出,导入。
2、Resize数据文件大小。
3、增加数据文件。
SQL> alter tablespace tbs1 add datafile '/dm7/data/DAMENG/tbs1_02.dbf' size 32;
操作已执行
已用时间: 13.008(毫秒). 执行号:1840.
4.4.更换存储位置
达梦表空间的状态
0:----online
1:------offline
注意:system,roll,temp不能offline
案例4:更换tbs3数据文件的存储位置。
SQL> select file_name,status,tablespace_name from dba_data_files;
行号 FILE_NAME STATUS TABLESPACE_NAME
---------- ---------------------------- --------- ---------------
1 /dm7/data/DAMENG/SYSTEM.DBF AVAILABLE SYSTEM
2 /dm7/data/tbs3_02.dbf AVAILABLE TBS3
3 /dm7/data/DAMENG/tbs3_01.dbf AVAILABLE TBS3
4 /dm7/data/DAMENG/tbs2_01.dbf AVAILABLE TBS2
5 /dm7/data/DAMENG/tbs1_02.dbf AVAILABLE TBS1
6 /dm7/data/DAMENG/tbs1_01.dbf AVAILABLE TBS1
7 /dm7/data/DAMENG/DMHR.DBF AVAILABLE DMHR
8 /dm7/data/DAMENG/MAIN.DBF AVAILABLE MAIN
9 /dm7/data/DAMENG/TEMP.DBF AVAILABLE TEMP
10 /dm7/data/DAMENG/ROLL.DBF AVAILABLE ROLL
10 rows got
已用时间: 1.034(毫秒). 执行号:1841.
SQL> alter tablespace tbs3 offline;
操作已执行
已用时间: 90.477(毫秒). 执行号:1842.
SQL> select tablespace_name,status from dba_tablespaces;
行号 TABLESPACE_NAME STATUS
---------- --------------- -----------
1 SYSTEM 0
2 ROLL 0
3 TEMP 0
4 MAIN 0
5 DMHR 0
6 TBS1 0
7 TBS2 0
8 TBS3 1
9 HMAIN NULL
9 rows got
已用时间: 0.666(毫秒). 执行号:1843.
SQL> alter tablespace tbs3 rename datafile '/dm7/data/tbs3_02.dbf' to '/dm7/data/DAMENG/tbs3_02.dbf';
操作已执行
已用时间: 96.313(毫秒). 执行号:1844.
SQL> alter tablespace tbs3 online;
操作已执行
已用时间: 13.137(毫秒). 执行号:1845.
SQL> select file_name,status,tablespace_name from dba_data_files;
行号 FILE_NAME STATUS TABLESPACE_NAME
---------- ---------------------------- --------- ---------------
1 /dm7/data/DAMENG/SYSTEM.DBF AVAILABLE SYSTEM
2 /dm7/data/DAMENG/tbs3_02.dbf AVAILABLE TBS3
3 /dm7/data/DAMENG/tbs3_01.dbf AVAILABLE TBS3
4 /dm7/data/DAMENG/tbs2_01.dbf AVAILABLE TBS2
5 /dm7/data/DAMENG/tbs1_02.dbf AVAILABLE TBS1
6 /dm7/data/DAMENG/tbs1_01.dbf AVAILABLE TBS1
7 /dm7/data/DAMENG/DMHR.DBF AVAILABLE DMHR
8 /dm7/data/DAMENG/MAIN.DBF AVAILABLE MAIN
9 /dm7/data/DAMENG/TEMP.DBF AVAILABLE TEMP
10 /dm7/data/DAMENG/ROLL.DBF AVAILABLE ROLL
10 rows got
已用时间: 1.000(毫秒). 执行号:1846.
4.5.删除表空间
SQL> drop tablespace tbs1;
4.6.临时表空间
4.7.roll表空间
保留时间:Undo_retention
Roll表空间不足:
Alter tablespace roll resize datafile ‘/dm7/data/DAMENG/ROLL.DBF’ TO …
5.1.相关概念
在dm数据库中用户管理主要涉及到三块:用户,权限,角色
权限:执行特定类型sql或是访问其他模式对象的权利。
系统权限:数据库对象的创建,删除,修改等等
对象权限:对数据库对象的数据的操作权限。
角色:是将具有相同权限的用户组织在一起,这一组具有相同权限的用户称为角色。角色是一组权限的集合,一个权限可以赋给不同的角色。
数据库预定义角色有三个,DBA,PUBLIC,RESOURCE
三权分立和四权分立
三权分立:
数据库管理员(sysdba)
数据库安全员(syssso)
数据库审计员(sysauditor)
四权分立:
数据库管理员(sysdba)
数据库安全员(syssso)
数据库审计员(sysauditor)
数据库对象操作员(sysdbo)
所有账号的默认口令都与用户名大写一致。
SQL> select username from dba_users;
行号 USERNAME
---------- ----------
1 SYSSSO
2 DMHR
3 SYSDBA
4 SYS
5 SYSAUDITOR
已用时间: 5.648(毫秒). 执行号:1847.
Syssso:安全员
Sysdba:数据库管理员
Sys:数据库内置管理账号(不能登录数据库)
Sysauditor:审计员
5.2.如何规划用户
名字:字母开头,a-z,0-9,$#_
位置:对应的表空间
密码:口令策略
0:无策略
1:禁止与用户名相同
2:口令长度不小于9
4:至少包含一个大写字母
8:至少包含一个数字
16:至少包含一个标点符号(英文的状态下输入 除空格和“”)
口令可以单独使用,也可以组合使用。比如说:要求口令策略禁止用户名相同,并且口令长度不小于9
则设置口令策略为3:
创建用户语句password policy 子句来指定口令策略,用户密码最长为48个字节。
Faild_login_attemps:密码尝试登录次数
Password_lock_time:密码失败后锁定时间
Password_life_time:密码过期时间
案例1:建立用户test,用户可以创建自己的表,有属于自己的表空间,用户密码要求每60天变更一次。
SQL> create tablespace test datafile '/dm7/data/DAMENG/test_01.dbf' size 32;
操作已执行
已用时间: 33.113(毫秒). 执行号:1848.
SQL> create user test identified by dameng123 limit password_life_time 60 default tablespace test;
操作已执行
已用时间: 3.231(毫秒). 执行号:1849.
SQL> select * from all_users;
行号 USERNAME USER_ID CREATED
---------- ---------- ----------- ---------------------------
1 SYSDBA 50331649 2020-04-21 10:30:05.734007
2 SYS 50331648 2020-04-21 10:30:05.734007
3 SYSAUDITOR 50331650 2020-04-21 10:30:05.734007
4 SYSSSO 50331651 2020-04-21 10:30:05.734007
5 DMHR 50331748 2020-04-21 10:30:19.774883
6 TEST 50331749 2020-04-21 11:04:00.246989
6 rows got
已用时间: 1.541(毫秒). 执行号:1850.
SQL> conn test/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 4.120(毫秒)
SQL> conn sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 4.238(毫秒)
SQL> select grantee,granted_role from dba_role_privs where grantee='TEST';
行号 GRANTEE GRANTED_ROLE
---------- ------- ------------
1 TEST PUBLIC
已用时间: 3.003(毫秒). 执行号:1851.
SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';
行号 GRANTEE PRIVILEGE
---------- ------- ----------------
1 PUBLIC INSERT TABLE
2 PUBLIC UPDATE TABLE
3 PUBLIC DELETE TABLE
4 PUBLIC SELECT TABLE
5 PUBLIC REFERENCES TABLE
6 PUBLIC GRANT TABLE
7 PUBLIC INSERT VIEW
8 PUBLIC UPDATE VIEW
9 PUBLIC DELETE VIEW
10 PUBLIC SELECT VIEW
11 PUBLIC GRANT VIEW
行号 GRANTEE PRIVILEGE
---------- ------- ------------------------
12 PUBLIC EXECUTE PROCEDURE
13 PUBLIC GRANT PROCEDURE
14 PUBLIC SELECT SEQUENCE
15 PUBLIC GRANT SEQUENCE
16 PUBLIC EXECUTE PACKAGE
17 PUBLIC GRANT PACKAGE
18 PUBLIC SELECT ANY DICTIONARY
19 PUBLIC SELECT MATERIALIZED VIEW
20 PUBLIC GRANT DOMAIN
21 PUBLIC USAGE DOMAIN
22 PUBLIC DUMP TABLE
22 rows got
已用时间: 1.241(毫秒). 执行号:1852.
SQL> grant create table to test;
操作已执行
已用时间: 1.397(毫秒). 执行号:1853.
案例2:规划一个用户test1,用户每60天变更一次密码,密码尝试连接2次失败,账号锁定5分钟,用户能查询dmhr.employee表。
SQL> create user test1 identified by dameng123 limit password_life_time 60,failed_login_attemps 2,password_lock_time 5;
操作已执行
已用时间: 2.984(毫秒). 执行号:1854.
//尝试登录2次后
SQL> select username,account_status,lock_date from dba_users;
行号 USERNAME ACCOUNT_STATUS LOCK_DATE
---------- ---------- -------------- -------------------
1 SYSSSO OPEN NULL
2 TEST OPEN NULL
3 DMHR OPEN NULL
4 SYSDBA OPEN NULL
5 TEST1 LOCKED 2020-04-21 11:07:45
6 SYS OPEN NULL
7 SYSAUDITOR OPEN NULL
7 rows got
已用时间: 19.225(毫秒). 执行号:1855.
SQL>alter user test1 account unlock;
操作已执行
已用时间: 17.614(毫秒). 执行号:1856.
SQL> select username,account_status,lock_date from dba_users;
行号 USERNAME ACCOUNT_STATUS LOCK_DATE
---------- ---------- -------------- ---------
1 SYSSSO OPEN NULL
2 TEST OPEN NULL
3 DMHR OPEN NULL
4 SYSDBA OPEN NULL
5 TEST1 OPEN NULL
6 SYS OPEN NULL
7 SYSAUDITOR OPEN NULL
7 rows got
已用时间: 5.447(毫秒). 执行号:1857.
SQL> grant select on dmhr.employee to test1; //赋权限
操作已执行
已用时间: 9.692(毫秒). 执行号:1858.
SQL> revoke select on dmhr.employee from test1; //发现权限过大
操作已执行
已用时间: 2.304(毫秒). 执行号:1859.
SQL> grant select(employee_name,hire_date) on dmhr.employee to test1; //赋权限
操作已执行
已用时间: 1.563(毫秒). 执行号:1860.
SQL> conn test1/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.566(毫秒)
SQL> select user;
行号 USER()
---------- ------
1 TEST1
已用时间: 1.760(毫秒). 执行号:1863.
SQL> select employee_name,hire_date from dmhr.employee limit 10;
行号 EMPLOYEE_NAME HIRE_DATE
---------- ------------- ----------
1 马学铭 2008-05-30
2 程擎武 2012-03-27
3 郑吉群 2010-12-11
4 陈仙 2012-06-25
5 金纬 2011-05-12
6 李慧军 2010-05-15
7 常鹏程 2011-08-06
8 谢俊人 2014-03-02
9 苏国华 2010-10-26
10 强洁芳 2011-07-16
10 rows got
已用时间: 0.984(毫秒). 执行号:1864.
案例3:企业招聘一批录入人员,权限固定,只能录入city表。
SQL> create role r1;
create role r1;
第1 行附近出现错误[-5514]:没有创建角色权限.
已用时间: 0.252(毫秒). 执行号:0.
SQL> conn sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.438(毫秒)
SQL> create role r1;
操作已执行
已用时间: 2.622(毫秒). 执行号:1865.
SQL> grant insert on dmhr.city to r1;
操作已执行
已用时间: 2.905(毫秒). 执行号:1866.
SQL> create user test2 identified by dameng123;
操作已执行
已用时间: 3.116(毫秒). 执行号:1867.
SQL> grant r1 to test2;
操作已执行
已用时间: 9.779(毫秒). 执行号:1868.
SQL> conn test2/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.439(毫秒)
SQL> insert into dmhr.city values('sdf','dfdss',7);
insert into dmhr.city values('sdf','dfdss',7);
[-5506]:没有引用表[REGION]上的权限.
已用时间: 2.148(毫秒). 执行号:0.
SQL> conn sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 11.033(毫秒)
SQL> grant references any table to test2;
操作已执行
已用时间: 2.129(毫秒). 执行号:1870.
SQL> conn test2/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 4.003(毫秒)
SQL> insert into dmhr.city values('aaa','bbbb',6);
影响行数 1
已用时间: 8.698(毫秒). 执行号:1871.
SQL> commit;
操作已执行
已用时间: 1.062(毫秒). 执行号:1872.
5.3.用户维护
收回权限:revoke
SQL> revoke select on dmhr.employee from test1;
赋权限:
SQL> grant references any table to test2;
修改用户密码
SQL> alter user test identified by 123456789;
锁定用户
SQL> alter user test account lock;
解锁用户
SQL> alter user test account unlock;
删除用户:
SQL> drop user test;
SQL> drop user test cascade;-------慎重,最好先备份
删除角色:
SQL> drop role r1;
模式是所有对象的集合(表,视图,索引,同义词,自增列)。
DM创建用户的时候,会默认去创建一个同名的模式。如果你创建的用户,模式名已存在,用户无法创建。
6.1.表的管理
6.1.1.达梦支持那些表
默认的表是索引组织表,支持堆表,临时表,分区表,外部表等。
6.1.2.如何去规划表
1、命名:字母开头,a-z,0-9,$#_
2、数据类型 int char varchar date clob blob number 等等。
3、存储位置:自已规划的表空间,如果没有指定表空间,则会存储在main表空间中。
4、约束(5大约束)非空约束,唯一约束,主键,外键,检查约束。
5、注释:comment.
遵循3范式。
案例1.规划一张学员信息表。
表名:STU
学号:id char(10)
姓名:sname varchar(20) not null
性别:sex char(1)
年龄:age int
电话:tel varchar(15) not null
家庭住址:address varchar(50)
表空间 STU
约束:主键列—学号,非空—姓名和电话。
备注:student info
create table "TEST1"."STU"
(
"ID" CHAR(10) ,
"SNAME" VARCHAR(20) not null ,
"SEX" CHAR(1) ,
"AGE" INT,
"TEL" VARCHAR(15) not null ,
"ADDRESS" VARCHAR(50),
primary key("ID")
)
storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU")
;
comment on table "TEST1"."STU" is 'STUDENT INFO';
6.1.3.创建表的时候指定约束
1、非空约束
SQL> create table test1.t1(id int);
SQL> alter table test1.t1 modify id int not null;
2、唯一约束
SQL> create table test1.t2(id int unique);
唯一约束遇到null,忽略,可录入多个。
3、主键约束(一张表只能有一个主键约束)
SQL> create table test1.t3(id int primary key);
SQL> create table test1.t4(id int);
SQL> alter table test1.t4 add constraint t4_pri primary key(id);
4、检查约束
SQL> create table test1.t5(id int check(id>=5));
外键约束
SQL> create table test1.t6(sid int primary key ,pid int);
SQL> create table test1.t7(id int primary key,sid int foreign key references test1.t6(sid));
7、对列加备注
SQL> comment on column test1.t6.sid is '编号';
6.1.4.导入数据到表中
1、insert into () values();
2、通过脚本把数据导入
Oracle:@?
Dm: start
[dmdba@localhost ~]$ cat a.sql
insert into test1.t1 values(1);
insert into test1.t1 values(2);
insert into test1.t1 values(3);
insert into test1.t1 values(4);
insert into test1.t1 values(5);
insert into test1.t1 values(6);
insert into test1.t1 values(7);
commit;
SQL> start /home/dmdba/a.sql
SQL> select * from test1.t1;
行号 ID
---------- -----------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
7 rows got
已用时间: 0.561(毫秒). 执行号:1947.
也通过数据迁移工具导入
6.1.5.如何去维护表
1、重命名:
SQL> alter table test1.t1 rename to tt;
2、增加删除列
SQL> alter table test1.tt add name varchar(10) default 'aaaa';
SQL> alter table test1.tt drop name;
3、启用和禁用约束
SQL> select table_name,constraint_name,constraint_type from dba_constraints where table_name='T5';
SQL> alter table test1.t5 enable constraint CONS134218779;
删除表:
SQL> drop table test1.tt;
如何去查看表结构
语法:sp_tabledef(‘模式名’,’表名’);
SQL> sp_tabledef('TEST','T1');
语法:DBMS_METADATA.GET_DDL(‘类型’,‘表名’,‘模式名’)
SQL> select dbms_metadata.get_ddl('TABLE','STU','TEST1');
6.2.视图的管理
视图分类:简单视图,复杂视图,物化视图
注意:简单视图和复杂视图不占磁盘空间,物化视图占磁盘空间。
6.2.1.简单视图
创建create view() as select() from () where();
SQL>create view test1.v1 as select * from dmhr.employee;
SQL>create view test1.v2 as select employee_name,hire_date,salary from dmhr.employee where hire_date >='2010-01-01';
相关数据字典:
Dba_views;
6.2.2.删除视图
SQL> drop view test1.v1;
6.3.索引的管理
索引的作用:加快表的查询,增加数据库查询性能,对数据库做DML操作的时候,数据库会自动维护索引。索引占空间。
索引是一棵倒置的树,使用索引,就是对这棵树做遍历。
达梦支持的索引:二级索引,位图索引,唯一索引,复合索引,函数索引,分区索引等。
6.3.1.建立索引的规则
适合建索引的情况:
1、经常查询的列
2、连接条件列
3、谓词经常出现的列(where)
4、查询是返回表的一小部分数据。
…
不适合建索引的情况
1、列上有大量的null
2、列上的数据是有限的(性限)
…
查看表的索引
SQL> select table_name,index_name from dba_indexes where table_name='STU';
行号 TABLE_NAME INDEX_NAME
---------- ---------- -------------
1 STU INDEX33555469
已用时间: 253.392(毫秒). 执行号:1956.
6.3.2.创建表的索引
规划索引表空间,表的数据无序的,索引的数据是有序
SQL> create tablespace index1 datafile '/dm7/data/DAMENG/index1_01.dbf' size 32; //创建索引表空间
操作已执行
已用时间: 96.426(毫秒). 执行号:1957.
SQL> create table test1.emp(id int);
操作已执行
已用时间: 57.330(毫秒). 执行号:1959.
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
行号 TABLE_NAME INDEX_NAME
---------- ---------- -------------
1 EMP INDEX33555471
已用时间: 4.661(毫秒). 执行号:1966.
SQL> create index ind_emp on test1.emp(id) tablespace index1;
操作已执行
已用时间: 8.171(毫秒). 执行号:1967.
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
行号 TABLE_NAME INDEX_NAME
---------- ---------- -------------
1 EMP INDEX33555471
2 EMP IND_EMP
已用时间: 4.786(毫秒). 执行号:1968.
SQL> explain select * from test1.emp where id<10;
1 #NSET2: [0, 1, 12]
2 #PRJT2: [0, 1, 12]; exp_num(2), is_atom(FALSE)
3 #SSEK2: [0, 1, 12]; scan_type(ASC), IND_EMP(EMP), scan_range(null2,10)//没出效果,需要重做实验
已用时间: 0.613(毫秒). 执行号:0.
SQL> begin //没有走我们自己建的索引,统计信息是旧的,需要重新收集
收集统计信息:
2 dbms_stats.gather_table_stats('TEST1','EMP');
3 end;
4 /
DMSQL 过程已成功完成
已用时间: 8.743(毫秒). 执行号:1969.
SQL> explain select * from test1.emp where id<10;
1 #NSET2: [0, 1, 12]
2 #PRJT2: [0, 1, 12]; exp_num(2), is_atom(FALSE)
3 #SSEK2: [0, 1, 12]; scan_type(ASC), IND_EMP(EMP), scan_range(null2,10)
已用时间: 0.416(毫秒). 执行号:0.
SQL>
注意:创建索引,删除索引,重建索引和收集统计信息,不要在业务高峰期去做。
6.3.3.维护索引
重建索引:
SQL> alter index test1.ind_emp rebuild;
SQL> alter index test1.ind_emp rebuild online; //online的作用?
删除索引:
SQL> drop index test1.ind_emp;
注意:达梦默认不会自动收集统计信息,需要手动收集。
6.4.序列的管理
预分配的一组内存空间,可以将序列作为自增列。
创建:
SQL> create sequence test1.s1
2 start with 1 -----序列的起始
3 increment by 1 ---自增多少
4 maxvalue 5 ----最大值
5 nocache ---是否缓存
6 nocycle ---是否循环
7 ;
应用:
SQL> create table test1.t10(id int primary key);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
SQL> insert into test1.t10 values(test1.s1.nextval);
修改序列:
SQL> alter sequence test1.s1 maxvalue 10;
SQL> insert into test1.t10 values(test1.s1.nextval);
删除序列:
SQL> drop sequence test1.s1;
6.5.同义词的管理
同义词是对象的别名,可以代替模式下的表,视图,序列,函数,存储过程等等。
同义词分为公共同义词和普通同义词
公共同义词:所有用户都可以使用的,使用的时候不用加上任何的模式名。
普通同义词:在某个模式下定义的同义词,引用的时候的需要加上模式名。
创建同义词:
普通同义词:SQL> create synonym test1.sy1 for dmhr.employee;
公共同义词:SQL> create public synonym sy2 for dmhr.city;
查询同义词
SQL> select table_name,synonym_name from dba_synonyms where synonym_name in ('SY1','SY2');
删除同义词:
SQL> drop public synonym sy2;
SQL> drop synonym sy2;
6.6.自增列
一个有序的数列,一个表只能有一个自增列
语法:identity[(种子,增量)]
种子:装载到表中的第一个行所使用的值。
增量:增量值,可以正数,也可以为负数,但不能为0
SQL> create table test1.t12(id int primary key identity(1,2),
name varchar(20));
DMSQL 基于sql92,部分sql99
SQL语句的分类
DQL:数据查询语句 select … from …where 组成的查询块。
DDL:数据定义语句 用来创建数据库的各种对象,包括数据库模式,表,视图,索引,同义词等。它的基本语句 create table,create view,create index等等。
DML:数据操作语句 用来改变数据库中的数据,它有3个基本的语句
Insert ,update, delete.
DCL:数据控制语句 用来授予或回收访问数据库的某种特权,控制数据操纵事务,对数据库进行监视等。基本语句:grant, revoke,commit,rollback,lock,unlock等。
7.1.简单查询
语法:select () from ()
第一个括号:*,column_name, alias, exprt || distinct
第二个括号:table_name,view_name
Select * from dmhr.city;
Select city_name,city_id from dmhr.city;
Select city_name cn from dmhr.city;
SQL> select employee_name||‘的工资是:’||salary as desc1 from dmhr.employee limit 10;
SQL> select distinct department_id from dmhr.employee;
7.2.过滤查询
where 子句的格式:
Where <搜索条件>
Where 子句常用的查询条件
谓词种类 | 谓词 |
---|---|
比较 | > < >= <= <> != not |
确定范围 | Between and >= and <= |
确定集合 | In ,not in |
字符匹配 | Like, not like |
空值 | Is null ,is not null |
多重条件 | And or |
Like % _
SQL> select employee_name,salary from dmhr.employee where employee_name like '马%';
SQL> select employee_name,salary from dmhr.employee where employee_name like '马_';
SQL> select employee_name,salary from dmhr.employee where salary between 20000 and 30000;
等价于:
SQL> select employee_name,salary from dmhr.employee where salary>=20000 and salary<=30000;
IN 枚举
SQL> select employee_name,salary from dmhr.employee where employee_name in ('宋建青','程海忠','戴明','陈继军','王迪玉');
等价于:
SQL> select employee_name,salary from dmhr.employee where employee_name='宋建青' or employee_name='程海忠' or employee_name='戴明' or employee_name='陈继军' or employee_name='王迪玉';
集函数:
1、sum(),avg(),max(),min(),count()
2、Listagg lower() upper()
3、Add_weeks,add_days,curdate()
4、Abs,ascII,char()
案例1:求各个部门的最高工资
SQL> select department_id,max(salary) from dmhr.employee group by department_id;
案例2:找出部门平均工资大于10000的所有部门
SQL> select department_id,avg(salary) av1 from dmhr.employee group by department_id having avg(salary)>10000;
注意:having 表示分组后的数据进行过滤,having不能单独使用,一定是和group by 一起使用。聚合函数不能出现在where子句中。
排序 升序asc 降序desc 默认升序
SQL> select department_id,avg(salary) av1 from dmhr.employee group by department_id having avg(salary)>10000 order by av1 desc;
单行函数
数值函数
Round() trunc(), abs() mod()
SQL> select round(456.789,2)
字符串函数
Upper lower initcap instr substr lpad rpad trim concat ||
SQL> select substr(email,1,(instr(email,'@')-1)),employee_name from dmhr.employee limit 10;
日期和字符串的转换
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
SQL> select to_date('2020-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss');
12.3多表联接查询
语法:select() from join() on()
第三个括号:表名
第四个括号:关联字段
1、内连接:结果集显示全部满足连接条件的记录 inner join
SQL> select employee_name,department_name from dmhr.employee e join dmhr.department d on e.department_id=d.department_id limit 10;
2、外连接
左外连接:把left join 左边的全部显示出来,右边的只显示满足条件的,不满足条件的用null 代替
SQL> update dmhr.employee set department_id=null where employee_id=1001;
SQL> select employee_name,department_name from dmhr.employee e left join dmhr.department d on e.department_id=d.department_id limit 10;
右外连接: 把写在right join右边的全部显示出来,左边的只显示满足条件的,不满足条件的用null代替
SQL> insert into dmhr.department values('1106','aaaa','9002',9);
SQL> select employee_name,department_name from dmhr.employee e right join dmhr.department d on e.department_id=d.department_id;
全外连接:返回所有的记录,包括不满足条件
select employee_name,department_name from dmhr.employee full join dmhr.department d on e.department_id=d.department_id;
全外连接=左外连接 union 右外连接
总结:
1、查询两个表的关联列相磁的数据用内连接
2、Col_l 是col_r的子集的时候用右外连接
3、Col_r 是col_l的子集的时候用左外连接
4、Col_r和col_l彼此有交集,但是彼此又不互为子集的时候,用全外连接。
备份作用?
1、防止误操作
2、软件硬件故障的时候,做恢复
3、防止天灾。
备份的方式:物理备份和逻辑备份
备份的介质:磁盘,磁带,光盘
集群:数据守护,dsc(rac)
也支持第三方的备份软件:上海爱数,鼎甲。
8.1.物理备份
冷备和热备
冷备:dmap服务是打开的,数据库实例是关闭的。
备份的方式
1、利用控制台工具去备份
[dmdba@localhost tool]$ cd /dm7/backup/
[dmdba@localhost backup]$ ll
总用量 6280
-rw-r--r-- 1 dmdba dinstall 6318592 4月 21 12:40 backup.bak
-rw-r--r-- 1 dmdba dinstall 107008 4月 21 12:40 backup.meta
[dmdba@localhost backup]$
3、DMRMAN工具备份
[dmdba@localhost backup]$ cd /dm7/bin
[dmdba@localhost bin]$ ./dmrman
dmrman V7.6.0.197-Build(2019.09.12-112648)ENT
RMAN> backup database '/dm7/data/DAMENG/dm.ini';
backup database '/dm7/data/DAMENG/dm.ini';
file dm.key not found, use default license!
checking if the database under system path [/dm7/data/DAMENG] is running...[4].
checking if the database under system path [/dm7/data/DAMENG] is running...[3].
checking if the database under system path [/dm7/data/DAMENG] is running...[2].
checking if the database under system path [/dm7/data/DAMENG] is running...[1].
checking if the database under system path [/dm7/data/DAMENG] is running...[0].
checking if the database under system path [/dm7/data/DAMENG] is running, write dmrman info.
EP[0] max_lsn: 44552
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
total 6 packages processed...
total 7 packages processed...
total 8 packages processed...
total 9 packages processed...
total 10 packages processed...
total 11 packages processed...
total 12 packages processed...
total 13 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/dm7/data/DAMENG/bak/DB_DAMENG_FULL_20200421_124303_000878] END, CODE [0]......
META GENERATING......
total 17 packages processed...
total 17 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 7021.769(ms)
RMAN>
[dmdba@localhost bak]$ ll
总用量 4
drwxr-xr-x 2 dmdba dinstall 4096 4月 21 12:43 DB_DAMENG_FULL_20200421_124303_000878
[dmdba@localhost bak]$
冷备份:要停止数据库,如果不停止造成数据丢失
热备份:(dmap服务是打开的,数据库实例是打开的,数据库是归档模式)
开归档:
1、命令方式:
SQL> alter database mount;
SQL> alter database add archivelog
'type=local,dest=/dm7/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select name,status$,arch_mode from v$database;
2、利用管理工具去开归档
命令行方式下全备,增量备
SQL> backup database full backupset '/dm7/backup/full_bak2';
增量备:
SQL> backup database increment backupset '/dm7/backup/incr_bak';
利用管理工具做热备
1、指定工作目录
还原:模拟表空间损坏tbs3
[dmdba@dca01 DAMENG]$ mv tbs3_01.dbf tbs3_01bak.dbf
重启服务,数据库处于mount状态,手动open
SQL> restore tablespace tbs3 from backupset '/dm7/backup/full_bak2/';
SQL> alter tablespace tbs3 online;
8.2.逻辑备份
导入导出(dexp,dimp)
分为四种级别:分别独立,互斥不能同时存在
数据库级别:导出或导入整个数据库的访问对象
用户:导入或导出一个或多个用户所拥有的所有对象
模式:导入或导出一个或多个模式下的所有的对象
表级:导出或导入一个或多个指定表或表分区
1、逻辑导出
[dmdba@dca01 tool]$ mkdir /dm7/backup/dexp
[dmdba@dca01 bin]$ ./dexp sysdba/dameng123@localhost:5236 file=dexp01.dmp log=dexp01.log directory=/dm7/backup/dexp full=y
2、逻辑导入
[dmdba@dca01 bin]$ ./dimp sysdba/SYSDBA@localhost:5239 file=/dm7/backup/dexp/dexp01.dmp log=/dm7/backup/dexp/dimp01.log
定时去执行一组任务
1、创建代理环境(会自动创建一个sysjob模式)
3、创建作业
作业1:每天晚上10:00去更新统计信息
作业2:每周三每六晚上10:00去做全备
作业3:自动清理过期备份文件
查看作业
Sysjobs:作业信息
Sysjobschedules:作业的调度信息
Sysjobhistories:作业的历史信息
SQL> select * from sysjob.sysjobs;
达梦支持那些语言做开发
C,c++, java,python ,php,perl
定义一个DM jdbc 的驱动串:
String jdbcstring=”dm.jdbc.driver.DmDriver”
DM URL连接串
String urlstring=”jdbc:dm://ip:5236”
10.1.配置ODBC
Linux环境中配置ODBC环境
检查:[root@dca01 ~]# rpm -aq|grep gcc 有没有gcc包,如果没有,配置yum源去安装。
解压安装包
[root@dca01 installdoc]# tar -xzvf unixODBC-2.3.0.tar.gz
配置odbc
[root@dca01 unixODBC-2.3.0]# cd unixODBC-2.3.0
[root@dca01 unixODBC-2.3.0]# ./configure --enable-gui=no
编译ODBC
[root@dca01 unixODBC-2.3.0]# make
[root@dca01 unixODBC-2.3.0]# make install
查看odbc的版本
[root@dca01 unixODBC-2.3.0]# odbc_config --version
查看ODBC配置文件的路径
[root@dca01 unixODBC-2.3.0]# odbc_config --odbcini
[root@dca01 unixODBC-2.3.0]# odbcinst -j
配置odbc.ini 和odbcinst.ini
[root@localhost ~]# cd /usr/local/etc/
[root@localhost etc]# cat odbc.ini
[dm7]
Description = DM ODBC DSND
Driver = DM7 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = dameng123
TCP_PORT = 5236
[root@localhost etc]#
[root@localhost etc]# cat odbcinst.ini
[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
DRIVER = /dm7/bin/libdodbc.so
[root@localhost etc]#
测试连接
[dmdba@localhost ~]$ isql dm7
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
10.2.存储过程
1、写匿名块
Declare (可选项)
Begin
Body;
exception
End;
SQL> set serveroutput on
SQL> set serverputput on
未知的 SET 选项 serverputput
SQL> set serveroutput on
SQL> begin
2 print('hello world');
3 end;
4 /
hello world
DMSQL 过程已成功完成
已用时间: 0.352(毫秒). 执行号:363.
SQL>
SQL> begin
2 for i in 1..5 loop
3 print(i);
4 end loop;
5 end;
6 /
1
2
3
4
5
DMSQL 过程已成功完成
已用时间: 0.452(毫秒). 执行号:364.
SQL>
2、存储过程
案例:根据员工的编号找出员工所在部门
SQL> CREATE PROCEDURE "TEST1"."FD"("BH" IN INT)
AS
DEPT INT;
BEGIN
SELECT department_id into DEPT FROM DMHR.EMPLOYEE WHERE EMPLOYEE_ID = BH;
print(DEPT);
END;
CALL TEST1.FD(1003);
CALL TEST1.FD(1003)
执行成功, 执行耗时2毫秒. 执行号:557
103
影响了1条记录
1条语句执行成功
10.3.触发器
分类:表级别,库级别,模式级别,视图
表级别的触发器
create trigger “TEST1”.“T1”
before UPDATE of “SALARY”
on “TEST1”.“EMP”
for each row
BEGIN
insert into TEST1.TAB2 VALUES(:OLD.SALARY,:NEW.SALARY);
END;
UPDATE TEST1.EMP SET SALARY=1 WHERE EMPLOYEE_ID=1003
11.常见问题处理
11.1.DMAP启动失败
[dmdba@localhost log]$ cat DmAPService.log
os_pipe2_create_server_with_name, name:[/dm7/bin/DM_PIPE_DMAP_LSNR_RD], error:[17]
dmap V7.6.0.197-Build(2019.09.12-112648)ENT
dmap init failed, code[-7157]: 管道文件已存在
bin下的这2个管道文件删掉后启动DMAP
DM_PIPE_DMAP_LSNR_WR
DM_PIPE_DMAP_LSNR_RD