目录
1、安装
1.1 安装前准备
1.1.1 关闭防火墙
[root] systemctl stop firewalld
[root] systemctl disable firewalld
1.1.2 新建dinstall用户组
# 创建用户组
groupadd dinstall
1.1.3 创建dmdba用户并修改密码
# 创建用户
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# 创建完成后使用以下命令查看是否成功
id dmdba
# 设置密码
passwd dmdba
1.1.4 创建安装目录
# 创建达梦安装路径
mkdir /dm8
# 更改文件夹的所属用户组、所属用户
chown dmdba:dinstall /dm8
# 查看是否更改成功
ll -ld /dm8
1.1.5 设置最大可打开文件数
修改配置文件/etc/security/limits.conf
vi /etc/security/limits.conf
添加如下语句:
dmdba hard nofile 204800
dmdba soft nofile 102400
root soft nofile 102400
root hard nofile 204800
使用su - dmdba切换到达梦用户,ulimit -a 查看是否成功。
1.1.6 挂载镜像文件
windows上传文件至银河麒麟v10,可使用Xftp远程连接
# 挂载镜像 mount /镜像地址 /挂载的目标路径
mount /opt/dm8_20220525_x86_rh6_64.iso /mnt
1.1.7 新建安装目录并修改目录权限
# 新建安装目录
mkdir /dm8
# 将新建的安装路径目录权限的用户修改为 dmdba,用户组修改为 dinstall
chown dmdba:dinstall -R /dm8/
# 设置权限
chmod -R 755 /dm8
1.1.8 /tmp临时扩大空间
当/tmp目录不足1.8G时,会报错设备空间不足,可直接临时扩大空间。
mount -t tmpfs -o size=2048m tmpfs /tmp
1.1.9 图形化界面需要再做配置
[root] xhost +
[root] echo $DISPLAY
:0.0
切换至dmdba用户配置环境变量
[root] su - dmdba
[dmdba] export DISPLAY=:0.0
1.2 安装
1.2.1 命令行安装
# 切换至dmdba用户
su - dmdba
# 进入挂载目录
cd /mnt/
# 安装
./DMInstall.bin -i
# 安装过程中注意参数的选择
# 1、默认时区21;
# 2、1-典型安装;
# 3、配置安装目录为/dm8
数据库安装完成后切换至root用户,并执行命令/dm8/script/root/root_installer.sh以创建DmAPService。
1.2.2 图形化安装
# 切换至dmdba用户
su - dmdba
# 进入挂载目录
cd /mnt/
# 安装
./DMInstall.bin
若出现报错:初始化图形界面失败,如果当前监视器窗口不支持图形界面,请进入安装文件所在文件夹并使用"./DMInstall.bin -i"进行命令行安装。
官方给定解决方法:
- 方法一:注销当前用户,登陆 dmdba 用户,执行 ./DMInstall.bin 命令,即重启直接登录dmdba用户;
- 方法二:用当前用户执行
xhost +
,切换到 dmdba 用户,执行export DISPLAY=:0
,再执行xhost +
命令。
相关参数选择与命令行一致,在此不再赘述,安装完成后按照提示执行脚本即可。
1.2.3 配置环境变量
切换至root用户,进入dmdba用户的根目录下,配置对应的环境变量。
# DM_HOME 变量和动态链接库文件的加载路径在程序安装成功后会自动导入
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
# 进入dmdba根目录并配置
cd /home/dmdba/
vim .bash_profile
加上最后一行内容,配置如下:
export LD_LIBRARY_PATH=“$LD_LIBRARY_PATH :/home/dmdba/dmdbms/bin"
export DM HOME=" /home/dmdba/dmdbms"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
切换至dmdba用户下,执行source .bash_profile命令使环境变量立刻生效。
1.3 配置实例
1.3.1 命令行方式
# 进入到目录
cd /dm8/bin
# 初始化数据库
./dminit path=/dm8/data db_name=DMTEST instance_name=DMTEST port_num=5237 page_size=16 SYSDBA_PWD=Dameng123
若报错,大多是目录权限导致的,可回到1.1.6重新执行目录权限的修改。
1.3.2 图形化方式
进入安装目录下的tool目录,使用./dbca.sh打开数据库配置助手
其后的各项配置可根据自身需要或其他要求选择
完成后根据提示执行脚本命令,即可完成创建。
1.4 注册数据库服务
1.4.1 命令行方式
# 进入到目录,root用户执行
cd /dm8/script/
# 执行注册数据库服务
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DAMENG/dm.ini -p DMSERVER
# 可根据自己的环境更改 dm.ini 文件的路径以及服务名
./dm_service_installer.sh -h
1.4.2 图形化方式
完成后,按照弹出的提示执行脚本即可。
1.5 卸载达梦数据库
1.5.1 命令行方式
# 进入到达梦根目录
./uninstall.sh -i
1.5.2 图形化方式
# 进入到达梦根目录(root用户执行,如果是dmdba用户执行,到最后会弹出以root用户执行命令的窗口)
./uninstall.sh
卸载完成后还需手动删除log目录
2、数据库连接
2.1 disql连接数据库
查看数据库状态
open状态转mount状态后
2.2 DM管理工具连接数据库
进入图形化管理工具
cd /dm8/tool
./manager
双击数据库并填入口令即可连接。
使用manager工具连接时,可在窗口 -> 选项 -> 查询编辑器 -> 编辑器 中启动sql语法检查等提示。
3、启动和关闭DM数据库
达梦数据库的启动顺序为:
Shutdown(关闭状态)–> Mount(配置状态)–> Open(打开状态)
mount 与 open 可以相互转换(此处与Oracle不同);suspend(挂起)与 open 也可以相互转换,但与 mount 不行。
3.1 命令行方法
前台启动:
#未注册数据库服务的只能选择此方法 /bin目录下
./dmserver /dm8/data/DAMENG/dm.ini(默认启动到 OPEN 状态)
./dmserver /dm8/data/DMOA/dm.ini mount(启动到 mount 状态)
后台启动:
cd /dm8/bin
ll Dm*
#DMTESTSVR是实例名
./DmServiceDMTESTSVR start/status/stop
3.2 图形化界面/服务器查看启动
在root用户下启动DM服务查看器
cd /dm8/tool
./dmservice.sh
3.3 系统命令启动
systemctl status/start/stop DmServiceDMSERVER.service
4、DM的客户端工具
4.1 DM管理工具(manager)
manager是一个图形化管理数据库,包含用户管理、角色权限管理、表空间、模式、模式下对象、数据库物理联机备份、作业管理等功能。
cd /dm8/tool
./manager
4.2 DM控制台工具(console)
console是一个脱机工具,提供脱机备份还原、修改数据库参数(修改后重启数据库才能生效)等功能。
cd /dm8/tool
./console
4.3 DM数据迁移工具(dts)
DM数据迁移工具支持其他数据库迁移到达梦,或者达梦迁移到文件等功能。
cd /dm8/tool
./dts
4.4 DM性能监视工具(monitor)
cd /dm8/tool
./monitor
5、参数配置
5.1 参数类型
达梦根据参数类型可分为静态参数和动态参数。
静态参数:只能修改配置文件中的值,对内存中的值不进行修改,因此修改后需重启数据库
动态参数:既能修改内存中的值,也能修改配置文件中的值,修改后立即生效。
5.1.1 READ ONLY
read only:只读参数,也是手工参数;不能通过系统函数、SQL命令来达到修改参数的目的,只能从dm.ini配置文件中进行修改;
5.1.2 SYS
sys:系统级动态参数,可以通过函数或SQL修改此类型的参数,既可修改内存中的值,也可修改参数文件file_value中的值;
5.1.3 IN FILE
in file:静态参数,可以通过函数或SQL修改此类型的参数,但不能修改其内存中的值,重启数据库后生效;
5.1.4 SESSION
session:会话级动态参数,可以通过系统函数和SQL命令达到修改参数的目的,可针对某个会话进行修改,便于调试。
5.2 参数修改方法
5.2.1 SQL语句修改及相关参数
both:既修改内存中的值,也修改配置文件中的值,重启不重启都一样生效;
spfile:只修改配置文件中的值,重启数据库生效;
memory:只修改内存中的值,重启数据库后恢复设置前的样子。(默认)
# 语法
alter system set ‘参数名’=参数值 spfile|memory|both;
# 例句
# 修改兼容参数类型
select name, value,type from v$parameter t where t.name like 'COMPATIBLE_MODE';
alter system set 'COMPATIBLE_MODE'=2 spfile;
# 动态参数
select name,type,value,sys_value,file_value from v$parameter t where name like 'UNDO_RETENTION';
#如果不指定则默认修改的是memory
alter system set 'UNDO_RETENTION'=180;
# 会话级参数
select name,type,value,sys_value,file_value from v$parameter t where name like 'LIST_TABLE';
alter session set 'LIST_TABLE'=1;
DM开启oracle兼容模式:
1、查看COMPATIBLE_MODE参数:
select para_name,para_value,para_type from v$dm_ini where para_name=‘COMPATIBLE_MODE’;
2、参数值的意义:
0:不兼容
1:兼容SQL92标准
2:兼容Oracle
3:兼容My SQL Server
4:兼容Mysql
3、修改参数:
sp_set_para_value(范围,参数名称,参数值);
范围:1-修改内存和参数文件;2-修改参数文件 --> 此处写2
sp_set_para_value(2,‘COMPATIBLE_MODE’,2);
4、重启数据库服务
service DmServiceDMSERVER restart
重复步骤1,查看修改是否生效
5.2.2 系统函数修改
查看可以使用的系统函数:
select name,id from v$ifun t where name like '%SP_SET%_PARA%';
查看系统函数的参数类型:
select * from v$ifun_arg t where id=584;
# 修改int类型的参数值COMPATIBLE_MODE
SQL> sp_set_para_value(2,'COMPATIBLE_MODE',0);
SQL> select name, value,FILE_VALUE, sys_value, type from v$parameter t where
t.name like 'COMPATIBLE_MODE';
5.2.3 使用dm.ini修改
# 直接编辑文件修改即可
cd /dm8/data/DAMENG
vim /dm8/data/服务名称 dm.ini
5.2.4 使用图形化修改
开启tool目录下的console即进入DM控制台
注意:该方法不修改内存中的值,需要重启后生效
6、数据缓冲区
定义:数据缓冲区是从磁盘读出的数据页在内存中的镜像,由INI配置中的BUFFER、FAST_POOL_PAGES、RECYCLE、KEEP等确定大小,不同类型的缓冲去主要表现为淘汰机制。
# 修改数据缓冲区buffer参数大小为 500M:
SQL> alter system set 'BUFFER'=500 spfile;
SQL> select name, value,FILE_VALUE, sys_value, type,description from
v$parameter t where t.name like 'BUFFER';
7.表空间管理
表空间是数据库最大逻辑存储单元。
项目初期,业务需要创建自己的表空间,若空间不够,则需扩容。
数据库创建完成后,会默认创建如下表空间:
SYSTEM:存储数据字典信息;
ROLL:存放回滚信息。UNDO_RETENTION存放回滚段的保留时长;
MAIN:用户默认表空间;
TEMP:临时表空间;
HMAIN:HTS表空间;HUGE表的默认表空间。
在线收缩临时表空间的方法:SP_TRUNC_TS_FILE(3,0,10);
7.1 命令行方式
常用命令:
create tablespace XX datafile ‘XX’;
alter tablespace XX add/rename/resize datafile XX;
alter tablespace XX online/offline;
drop tablespace XX;
7.1.1 创建表空间
create tablespace 表空间名 datafile '数据文件路径' SIZE 数据文件大小(单位为mb);
create tablespace dbtbs datafile 'TBS01.DBF' SIZE 32;
#查询页大小的4096倍,并换算成MB
select page*4096/1024/1024
7.1.2 修改数据库文件的扩展属性
alter tablespace tbs datafile 'TBS01.DBF' AUTOEXTEND off;
7.1.3 添加数据文件
alter tablespace tbs add datafile 'TBS02.DBF' SIZE 32 AUTOEXTEND off;
7.1.4 修改数据文件大小
alter tablespace 表空间名 resize datafile '数据文件路径' to 数据文件大小(单位为mb);
alter tablespace tbs resize datafile 'TBS01.DBF' to 64;
#修改表空间开启自动增长,增长步长,最大表空间
alter tablespace 表空间名 datafile '数据文件路径' autoextend on next 增长步长 maxsize 文件最大值
alter tablespace tbs datafile 'TBS01.DBF' autoextend on next 2 maxsize 10240;
7.1.5 删除表空间
用户自定义的表空间可以删除和脱机(脱机后该空间中的表将无法读写),但系统定义的不能;
删除后表空间下的数据文件也会级联删除。
drop tablesapce 表空间名;
drop tablespace dmtest;
7.1.6 增加表空间下的数据文件
alter tablespace 表空间名 add datafile '数据文件路径' size 数据文件大小(单位为mb);
alter tablespace tbs add datafile 'TBS02.DBF' size 64;
7.1.7 修改表空间的名称
自定义表空间支持重命名:
alter tablespace 修改前表空间名 rename to 修改后表空间名;
alter tablespace tbs rename to dmtest;
7.2 图形化方式
一定要打开“自动扩充”!!!
7.3 表空间迁移
新的表空间路径,必须是由安装数据库的用户提前进行创建,或者把这个文件夹授予数据库安装用户读写权限,否则会因权限问题报数据库文件路径错误。
命令行方式
1)创建新路径;
2)使表空间处于脱机状态 ;
3)指定要迁移的文件和迁移路径 ;
4)使表空间处于联机状态。
# 先将表空间离线
alter tablespace 表空间名 offline;
alter tablespace TBS offline;
# 重命名数据文件名,并迁移,后面的文件夹路径必须是由安装数据库的用户创建的
alter tablespace 表空间名 rename datafile '重命名的数据文件名' to '路径';
alter tablespace TBS rename datafile 'TBS01.DBF' to '/dm8/data/DAMENG/TBS/TBS01.DBF';
alter tablespace TBS rename datafile 'TBS02.DBF' to '/dm8/data/DAMENG/TBS/TBS02.DBF';
# 将表空间上线
alter tablespace 表空间名 online;
alter tablespace dmtest online;
7.4 temp表空间
查询temp表空间参数,达梦数据库启动的时候会根据这几个参数来创建或重建temp表空间:
select name,value,type from v$parameter where name like 'TEMP%';
TEMP_PATH:temp表空间的路径
TEMP_SIZE:temp表空间的初始值,单位为MB
TEMP_SPACE_LIMIT:temp表空间的空间限制,0表示不限制
修改temp表空间大小,重启后依然有效
# 设置temp表空间初始值
alter system set 'TEMP_SIZE'=64 spfile;
# 查看更改是否生效
cat /dm8/data/DAMENG/dm.ini |grep TEMP_SIZE
再次强调:在线收缩临时表空间temp的方法:SP_TRUNC_TS_FILE(3,0,10)。
第一个参数:临时表空间ID
第二个参数:临时表空间数据文件ID
第三个参数:截断至多大
temp表的相关信息可通过以下语句查询获得:
select * from v$tablespace where NAME='TEMP'; select table_name, tablespace_name from dba_tables where tablespace_name='TEMP';
8、重做日志文件
- 重做日志:用于记录redo信息,重做日志默认为256M,数据库中的增、删、改操作都会记录redo和undo信息;
- 其中redo信息写入联机日志文件(v$rlogfile记录联机日志),undo写入roll表空间对应的数据文件中;
- 达梦的联机日志只支持系统自动切换,不支持手动切换(oracle支持);
8.1 命令行方式
常用命令:
alter database add logfile ‘XXX’size xx;–添加联机日志
alter database resize logfile ‘XXX’ to xx; --修改联机日志大小
alter database rename logfile ‘XXX’ to xx; --迁移联机日志
8.1.1 查看联机日志
## 当前正在使用的联机日志
select * from v$rlog;
select * from v$logfile;
8.1.2 创建连接日志、修改连接日志大小
达梦只支持往大了改:
alter database add logfile '日志名称' size 日志大小(单位MB);
alter database add logfile 'DAMENG03.log' size 128
alter database resize logfile '日志路径' to 日志大小(单位MB);
alter database resize logfile '/dm8/data/DAMENG/DAMENG03.log' to 256;
8.1.3 重做日志迁移
注意:需要在mount状态下操作,且要提前创建迁移目录。
1) 创建目录;
2) 表空间处于mount状态;
3) 联机日志迁移;
4) 将表空间改回open状态。
# 将数据库状态设置为mount状态
alter database mount;
alter database rename logfile '原日志路径' to '迁移到的日志路径';
# 将数据库状态设置为open状态
alter database open;
alter database mount;
alter database rename logfile '/dm8/data/DAMENG/DAMENG01.log' to '/dm8/data/DAMENG/REDO/DAMENG01.log';
alter database rename logfile '/dm8/data/DAMENG/DAMENG02.log' to '/dm8/data/DAMENG/REDO/DAMENG02.log';
alter database rename logfile '/dm8/data/DAMENG/DAMENG03.log' to '/dm8/data/DAMENG/REDO/DAMENG03.log';
alter database open;
8.2 图形化方式
图形化联机日志迁移,此处可直接更改数据文件大小。
9、归档管理
默认达梦数据库运行在非归档模式。归档是对REDO日志的归档,备份归档是为了防止数据丢失。
9.1 命令行方式
9.1.1 开启归档:
注意:联机备份时一定要开启归档!!!
# 将数据库状态设置为mount
alter database mount;
# 打开归档
alter database archivelog;
# 归档配置,配置归档路径,归档文件大小(超过就新建一个文件),归档文件总的大小(超过限制,就会删除老的)
alter database add archivelog 'type=local,dest=/dm8/arch,file_size=64,space_limit=10240';
# 将数据库状态设置为open
alter database open;
# 查询归档状态
select arch_mode from v$database;
# 查看归档文件
select * from SYS."V$ARCH_FILE";
# 查询归档配置
select * from v$dm_arch_ini;
9.1.2 关闭归档
alter database mount;
# 关闭归档
alter database noarchivelog;
# 删除归档文件
alter database delete archivelog 'type=local,dest=/dm8/arch';
# 将数据库状态设置为open
alter database open;
# 查询归档状态
select arch_mode from v$database;
9.1.3 手动切换归档日志文件
与联机日志不同,达梦的归档日志文件由数据自动切换,但也支持手动切换:
alter system SWITCH LOGFILE;
alter SYSTEM ARCHIVE LOG CURRENT;
alter DATABASE ARCHIVELOG CURRENT;
9.1.4 归档数据字典
select * from v$arch_file;
9.1.5 归档清理
select * from v$ifun t where t.name like upper('sf_archive%');
SF_ARCHIVELOG_DELETE_BEFORE_LSN(3316220);
SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate -10);
9.2 图像化方式
现在系统管理中将状态转换为“配置”:
9.3 编辑配置文档
# 查看归档状态是否开启,0关闭、1开启
cat dm.ini|grep ARCH_INI
10、用户角色权限
10.1 用户管理
10.1.1 用户类型
SYS:内置用户,不能直接登陆
SYSDBA:系统管理员,拥有DBA角色(除了安全、审计其他都管)
SYSAUDITOR:系统审计管理员
SYSSSO:系统安全管理员
SYSDBO:系统安全操作员(达梦安全版才有)
10.1.2 命令行方式
create user 用户名 identified by 密码 default tablespace 表空间名;
create user dmtest identified by Dmeng123;
# 报错:密码长度不符合要求
# 原因:密码长度需要大于9
create user dmtest identified by Dmeng0123 PASSWORD_POLICY 15;
# 或者直接修改策略
alter system set 'PWD_POLICY' = 13 BOTH;
create user dmtest identified by Dmeng123;
设置密码时,需要查询下密码的策略
系统口令策略 PWD_POLICY 参数指定系统的口令策略,默认为 2;
系统支持的口令策略有:> 0 无策略
> 1 禁止与用户名相同
> 2 口令长度不小于 9
> 4 至少包含一个大写字母(A-Z)
> 8 至少包含一个数字(0-9)
>16至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号) 口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和4,则设置口 令策略为 2+4=6 即可。
select * from v$parameter where name = 'PWD_POLICY';
调整密码策略:
alter system set 'PWD_POLICY' = 上述策略前数字相加 both;
alter system set 'PWD_POLICY' = 31 BOTH;
调整密码错误次数参数,默认输错3次后锁定账号,并且1分钟后自动解锁
# 将密码输错锁定次数改为5次,锁定时间为3分钟
alter user 用户名 limit FAILED_LOGIN_ATTEMPS 5,PASSWORD_LOCK_TIME 3;
# 新版本支持使用PROFILE
select * from DBA_PROFILES;
create PROFILE profile1 LIMIT FAILED_LOGIN_ATTEMPS 5 PASSWORD_LOCK_TIME 5
SESSION_PER_USER 3;
alter user DMTEST PROFILE profile1;
手动锁定或解锁账号
# 手动解锁
alter user 用户名 account unlock;
# 手动锁定
alter user 用户名 account lock;
# 查看用户资源限制,例如最大并发数
select * from dba_users a,sysusers b where a.user_id = b.id;
删除用户
#用户下有对象默认不能删除,可以使用CASCADE级联删除用户及用户下对象
drop user if EXISTS dmtest;
10.1.3 图形化方式
10.2 权限管理
10.2.1 设置指定用户最大并发量:
# 设置用户名为hrtest的用户,最大连接数为3
alter user hrtest limit SESSION_PER_USER 3;
10.2.2 any权限
达梦默认DDL语句的any权限不能转授,由参数ENABLE_DDL_ANY_PRIV控制:
select * from v$parameter where name = 'ENABLE_DDL_ANY_PRIV';
# 开启参数
alter system set 'ENABLE_DDL_ANY_PRIV'=1 both;
# 进行授权
grant create any table to hrtest;
10.2.3 添加查询权限
grant select on 模式名.表名 to 用户名;
grant select on dmtest.temp to hrtest;
10.2.4 添加修改、删除权限
不能只授予修改、删除权限,还要授予查询权限
grant select on 模式名.表名 to 用户名;
grant update on 模式名.表名 to 用户名;
grant delete on 模式名.表名 to 用户名;
10.2.5 回收权限
revoke 角色名 from 用户名;
revoke 具体权限 from 用户名;
revoke r1 from dmtest;
revoke select table from dmtest;
revoke create table from dmtest;
注意:若回收的角色带有转授权限,那么需要加关键字,对其转授出去的角色一并级联回收
revoke select on sysdba.t_test from hrtest CASCADE;
10.2.6 权限转授
- 系统权限转授:with admin option
- 对象权限转授:with grant option
- 默认DDL语句的any权限不能转授
grant select on sysdba.t_test to hrtest with grant option;
10.3 角色管理
10.3.1 角色类型
DBA:系统管理员角色,拥有除审核、安全外的所有权限
RESOURCE:具有在当前用户模式下定义对象的权限,例如create table等
PUBLIC:具有在当前用户模式下数据操作的权限,例如insert table等
SOI:系统表(SYS为前缀)的访问权限
SVI:系统视图(VSYS为前缀)的视图权限
VTI:动态视图,具有 V$开头动态视图的查询权限
10.3.2 创建角色并授予角色权限
create role 角色名;
grant 权限 to 角色名;
create role r1;
grant create table to r1;
grant select (employee_id, employee_name) on dmhr.employee to r1;
# 将角色赋给用户
grant r1 to dmtest;
10.3.3 图形化方式创建角色
11、模式对象管理
模式的定义:
是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集
模式对象:
表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域
模式与用户之间的关系:
当系统建立一个用户时,会自动生成一个对应的模式。用户可以建立多个模式,DM 中用户和模式是一对多的关系,一个用户可以拥有多个模式, 一个模式仅能归属于一个用户。
Oracle 中用户和模式是一对一的关系。
11.1 创建模式
注:若在disql中执行此语句,空行后需要加上 / 再回车
# 创建模式前需要授予用户创建模式的权限
# 创建模式
create schema 模式名 authorization 用户名;
/
# 授予用户创建模式权限
grant create schema to 用户名;
11.2 查询模式
# 查询系统中的所有模式
select * from SYSOBJECTS a where a."TYPE$" = 'SCH'
# 查询模式和所属用户
select a.id scheid, a.name schename, b.id userid, b.name username
from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b
where a."TYPE$" = 'SCH' and a.pid = b.id;
# 查询当前模式
select sys_context('USERENV','CURRENT_SCHEMA');
# 查询当前用户,两种都可以
select user;
select sys_context('USERENV','CURRENT_USER');
11.3 切换模式
注意:模式切换只对当前会话生效,目前没有方法可以设置永久生效
set schema 模式名;
11.4 删除模式
drop SCHEMA IF EXISTS HRTEST01;
# 级联删除模式下对象,生产环境慎用。
drop SCHEMA IF EXISTS HRTEST01 CASCADE;
12、管理表
DM默认是索引组织表(也支持堆表),Oracle默认是堆表。
注意:DM中表名是区分大小写的
12.1 创建表
命令行方式
create table dmtest.t_testpid(
pid int,
pname varchar(10),
logtime datetime DEFAULT sysdate,
sex bit
) tablespace HRTBS;
从其它表复制:
# 只复制表结构(默认不带约束信息)
create table t_emp03 as select * from dmhr.employee where 1=0;
# 复制表结构+表数据
create table t_emp01 as select * from dmhr.employee;
create table t_emp02 like dmhr.employee;
图形化
客户端操作区分大小写,建议统一使用大写。
12.2 调整字段
# 添加字段
alter table dmtest.t_testpid add email varchar(20);
# 修改字段
alter table dmtest.t_testpid modify email varchar(30);
# 删除字段
alter table dmtest.t_testpid drop email;
12.3 插入值
insert into dmtest.t_testpid(pid, pname) values (1, 'aa');
12.4 约束
12.4.1 约束类型
NOT NULL:非空约束;
UNIQUE:唯一约束,可以为空,简写为UK_表名_字段名;
PRIMARY KEY:主键约束 (唯一约束+非空约束),简写为PK_表名_字段名;
FOREIGN KEY:外键引用约束,引用的是另一张表(父表)的主键或唯一键,简写为FK_表名_字段名
;CHECK:检验约束,用户校验数据的准确性,
简写为CK_表名_字段名;
主键约束和唯一约束的区别:一张表只能有一个主键,但是可以有多个唯一约束。
12.4.2 添加约束
注意:字段如果为小写需要小写并且加上双引号,字段为大写不需要加双引号
# 非空约束
alter table hrtest.t_testpid modify pname not null;
# 唯一约束
alter table hrtest.t_testpid add CONSTRAINT uk_testpid_email unique (email);
# 主键约束
alter table hrtest.t_testpid ADD CONSTRAINT pk_testpid_pid PRIMARY KEY(pid);
# 检验约束
alter table hrtest.t_testpid add salary number(10,2);
alter table hrtest.t_testpid ADD CONSTRAINT ck_testpid_salary CHECK (salary>=2100);
# 外键约束,REFERENCES表里的字段必须是主键或者是添加了唯一索引的字段
alter table hrtest.t_test add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES
hrtest.t_testpid(pid);
12.4.3 禁用和启用约束
alter table 模式名.表名 disable constraint "约束名"
alter table 模式名.表名 enable constraint "约束名"
图形化可右键直接禁/启用。
12.4.4 图形化点开“约束”报错的解决方案
解决:
12.5 数据导入
命令行下:
disql sysdba/Dameng123 '`/dm8/backup/DEPT.sql'
# 或者
SQL> start /dm8/backup/DEPT.sql
客户端上:
直接使用`/dm8/backup/DEPT.sql
注:客户端需要“提交”数据
12.6 索引管理
12.6.1 创建索引
create index idx_表名_字段名 ON 表名 (字段名,字段名);
create index ix_emp01_employeename ON HRTEST.T_EMP01(EMPLOYEE_NAME);
create index ix_testpid_name on dmtest.t_testpid(pname);
图形化:
12.6.2 索引监控
alter INDEX DMTEST.IX_TESTPID_NAME MONITORING USAGE;
alter INDEX DMTEST.IX_TESTPID_NAME noMONITORING USAGE;
select * from SYS."V$OBJECT_USAGE";
select * from user_indexes;
select * from user_ind_columns;
12.6.3 收集表的统计信息
dbms_stats.gather_table_stats('DMTEST','T_TEST');
dbms_stats.table_stats_show('DMTEST','T_TEST');
12.7 视图
12.7.1 创建视图
create or replace view 视图名称 as
select * from aaa where age > 10
create or REPLACE view v_empnum as select b.DEPARTMENT_NAME, a.department_id, count(*) empnum from t_emp a, t_dept b where a.department_id = b.DEPARTMENT_ID
group by b.DEPARTMENT_NAME, a.department_id having count(*) >=25;
12.7.2 动态视图查询等待
select * from v$trxwait;
两个会话窗口同时运行命令时,若其中一个未提交,则另一个将会卡住。(会话未提交导致的卡住问题只在表有主键时存在) ->
解决办法:用该语句查询等待,然后手动结束会话(sp_close_session(会话id)/线程),或者手动提交(commit)
# 查看被锁表
select * from v$lock t where t.BLOCKED =1;
13、数据库的备份还原
备份分为物理备份和逻辑备份。
物理备份是拷贝有效的数据页,逻辑备份是导出数据库中的逻辑数据。
物理备份=完全备份+增量备份,除此之外还能分为冷备(脱机备份)和热备(联机备份)。
13.1 两个参数
数据库备份需要关注两个参数:
select * from SYS."V$PARAMETER" t where t.name in ('BAK_USE_AP', 'BAK_PATH');
BAK_USE_AP:DMAP线程是否开启
BAK_PATH:bak路径,自定义备份路径不能与此相同
13.2 物理备份
13.2.1 联机备份(热备)
联机备份:数据库是开启状态,联机备份要求数据库打开归档,备份时AP服务需要为启动状态。
备份级别:库备份、表空间、表备份、归档备份都可以使用联机备份的方式。
命令行方式:
# 全库备份到默认路径下
backup database;
# 全库增量备份到默认路径下
backup database INCREMENT;
# 全库备份到指定路径下(备份目录不带文件名)
backup database full backupset '备份目录';
backup database to DMFULLBAK01 BACKUPSET '/dm8/backup/full/DMFULLBAK01';
# 基于基础备份集的增量备份,并备份到指定目录
backup database increment to incrbak01 backupset '/dm8/backup/incr/incrbak01';
# 基于默认备份集、指定备份集、增量备份目录下三个目录交集的最新的备份集,来进行增量备份
backup database increment with BACKUPDIR '/dm8/backup/full' to incrbak02 backupset '/dm8/backup/incr/incrbak02';
图形化方法:
如果备份在指定目录下,需要手动添加目录才能看到备份的内容
若备份时报错:收集到的归档日志不连续
-> 使用checkpoint(100)函数主动刷新检查点。
13.2.2 脱机备份(冷备)
是数据库关闭状态下的备份。
备份级别:库备份、表空间、表备份、归档备份。
命令行(dmrman):
dm8-bin目录下通过 ./dmrman 进入命令行环境
cd /dm8/bin
./dmrman
-->
backup database '/dm8/data/DAMENG/dm.ini' to DMFULLBAK03 backupset '/dm8/backup/full/DMFULLBAK03';
图形化:
打开 tool 下的 ./dmservice.sh 先停止数据库服务,打开 ./console DM控制台工具
13.3 物理备份的还原
DM8全库恢复和表空间恢复都只能在数据库脱机状态下实现
13.3.1 表空间的还原与恢复
# 模拟表空间故障,删除数据文件 TBS01.DBF
cd /dm8/data/TBS
ls
rm TBS0*
cd /dm8/bin
./dmrman
-->
# 还原
RMAN> restore database '/dm8/data/DAMENG/dm.ini' tablespace dmtbs from backupset
'/dm8/backup/full/DMFULLBAK03';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace dmtbs;
13.3.2 库级的还原与恢复
# 模拟数据库故障,删除 SYSTEM.DBF
cd /dm8/data/DAMENG
rm SYSTEM.DBF
cd /dm8/bin
./dmrman
-->
# 还原
RMAN>
1-
restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/full/DMFULLBAK03';
2- 归档还原
recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';
3- 更新魔数
recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
13.3.3 图形化
基于console:
13.4 逻辑备份
dexp在达梦的bin目录下,若未配置环境变量,使用时需写作 ./dexp
另外,需注意要先创建目录,且导入导出用户都使用dmdba
13.4.1 全库导出、导入
导出:
./dexp userid=SYSDBA/SYSDBA:5236 directory=/dm8/backup/dexp file=full.dmp log=full.log full=y
导入:
./dimp userid=SYSDBA/SYSDBA:5236 directory=/dm8/backup/dexp file=full.dmp log=full.log full=y
13.4.2 按用户导出、导入
导出:
./dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=HRTEST.dmp
log=HRTEST.log owner=HRTEST
导入:
./dimp SYSDBA/SYSDBA@192.168.109.22:5237 file=/home/dmdba/dmdbms/data/dexp_user/ dexp_user.dmp log=dimp_user.log owner=ttt directory=/ home/dmdba/dmdbms/data/dimp_user
13.4.3 按模式导出、导入
导出:
./dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=DMHR.dmp
log=DMHR.log schemas=DMHR
导入:
./dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=DMHR.dmp
log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST
13.4.4 按表导出
./dexp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=dmtest_emp.dmp log=dmtest_emp.log tables=DMTEST.T_EMP
14、作业管理
select * from SYSJOB.SYSJOBS;
select * from SYSJOB.SYSJOBHISTORIES2;
# 启动运行
dbms_job.run(1664259582); # 根据第一条语句的结果来
checkpoint(100);
15、ODBC的安装与配置
15.1 解压
# root用户下
tar -zxvf /opt/unixODBC-2.3.0.tar.gz
15.2 三步安装
# 进入解压目录
cd unixODBC-2.3.0
# 配置
./configure
# 编译
make
# 安装
make install
15.3 修改配置文件
cd /usr/local/etc/
ll
vim odbc.ini
[DM8] # 这个按要求改
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER # 要和下面对应
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
vim odbcinst.ini
[DM8 ODBC DRIVER] #与上面对应
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so --dm8安装目录的bin目录下
15.4 切换到dmdba目录并登陆
su - dmdba
isql dm8 -v