DCA准考笔记
达梦单机数据库安装
查看操作系统版本(root帐户)
cat /proc/version Linux version 4.19.90-24.4.v2101.ky10.x86_64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 24 12:14:55 CST 2021 |
[root@DCA ~]# uname -r 4.19.90-24.4.v2101.ky10.x86_64 |
查看 Glibc、gcc 版本
ldd --version ldd (GNU libc) 2.28 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper. |
Gcc版本
gcc --version gcc (GCC) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
#卸载数据库
./uninstall.sh –i
簇大小、页大小、字符集、大小写敏感、VARCHAR 类型以字符为单位等一旦指定,数据库 创建完成将无法更改。 页d是达梦数据库的最小存储单元,达梦中 varchar 类型长度默认不能大于页大小的一半。
数据库页大小 | varchar实际最大长度(字节) |
4K | 约 1900 |
8K | 约 3900 |
16K | 约 8000 |
32K | 约 8188 |
root 执行删除服务脚本
./dm_service_uninstaller.sh -n DmServiceDMTESTSVR |
达梦数据库单机端口开放
firewall-cmd --add-port=5236/tcp --permanent --zone=public firewall-cmd –reload firewall-cmd --list-ports |
DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线 程,启动数据库实例,启动到 mount 状态,根据控制文件中的数据文件路径和练级日志文件 路径,找到并打开数据文件和联机日志,启动到 OPEN 状态
SUSPEND 和 OPEN 也可以相互转换。 但 MOUNT 和 SUSPEND 之间不能相互转换。
图形功能需要在./dts,/manager下运行
在服务器本机上
Root帐户下
安装DAMENG数据库
创建相关用户
groupadd dinstall -g useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba echo "Dameng123" |passwd --stdin dmdba |
创建数据库软件环境变量
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin" export DM_HOME="/dm8" export DISPLAY=:0 export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool |
创建相关目录
Mkdir -p /dm8 Mkdir -p /dm8/arch Mkdr -p /dm8/data Chown -R dmdba:dinstall /dm8 |
安装达梦数据库软件
./DMInstall.bin –i 请选择安装语言(C/c:中文 E/e:英文) [C/c]: 解压安装程序.......... 欢迎使用达梦数据库安装程序 是否输入 Key 文件路径? (Y/y:是 N/n:否) [Y/y]:n 是否设置时区? (Y/y:是 N/n:否) [Y/y]: 设置时区: [ 1]: GTM-12=日界线西 [ 2]: GTM-11=萨摩亚群岛 [ 3]: GTM-10=夏威夷 [ 4]: GTM-09=阿拉斯加 [ 5]: GTM-08=太平洋时间(美国和加拿大) [ 6]: GTM-07=亚利桑那 [ 7]: GTM-06=中部时间(美国和加拿大) [ 8]: GTM-05=东部部时间(美国和加拿大) [ 9]: GTM-04=大西洋时间(美国和加拿大) [10]: GTM-03=巴西利亚 [11]: GTM-02=中大西洋 [12]: GTM-01=亚速尔群岛 [13]: GTM=格林威治标准时间 [14]: GTM+01=萨拉热窝 [15]: GTM+02=开罗 [16]: GTM+03=莫斯科 [17]: GTM+04=阿布扎比 [18]: GTM+05=伊斯兰堡 [19]: GTM+06=达卡 [20]: GTM+07=曼谷,河内 [21]: GTM+08=中国标准时间 [22]: GTM+09=汉城 [23]: GTM+10=关岛 [24]: GTM+11=所罗门群岛 [25]: GTM+12=斐济 [26]: GTM+13=努库阿勒法 [27]: GTM+14=基里巴斯 请选择设置时区 [21]: |
安装类型: 1 典型安装 2 服务器 3 客户端 4 自定义 请选择安装类型的数字序号 [1 典型安装]: |
请选择安装目录 [/home/dmdba/dmdbms]:/dm8 可用空间: 14G 是否确认安装路径(/dm8)? (Y/y:是 N/n:否) [Y/y]:y |
安装位置: /dm8 所需空间: 1178M 可用空间: 14G 版本信息: 有效日期: 安装类型: 典型安装 是否确认安装? (Y/y:是 N/n:否):y [INFO] 安装达梦数据库... [INFO] 安装 基础 模块... [INFO] 安装 服务器 模块... [INFO] 安装 客户端 模块... [INFO] 安装 驱动 模块... [INFO] 安装 手册 模块... [INFO] 安装 服务 模块... [INFO] 移动日志文件。 [INFO] 安装达梦数据库完成。 |
执行root脚本安装相关
/dm8/script/root/root_installer.sh |
移动 /dm8/bin/dm_svc.conf 到/etc 目录
修改服务器权限
创建 DmAPService 服务
Created symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service →
/usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动 DmAPService 服务
创建数据库实例
./dminit PATH=/SJ/data DB_NAME=PROD INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Dameng123 ARCH_FLAG=1 CASE_SENSITIVE=0 LOG_PATH=/dm8/data/DAMENG/DMSERVER01.log LOG_PATH=/dm8/data/DAMENG/DMSERVER02.log LOG_PATH=/dm8/data/DAMENG/DMSERVER03.log LOG_SIZE=128 EXTENT_SIZE=16 PAGE_SIZE=8 |
注册数据库服务
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/bin/dm.ini |
Select path from v$datafile; |
查询数据运行状态
SQL> select name,status$ from v$instance; 行号 name status$ ---------- ----- ------- 1 OASRV OPEN 已用时间: 1.299(毫秒). 执行号:703. |
第五部分:DMSQL
SQL 分类
DML(Data Mannipulation Language)数据操纵语言:
查询、操纵数据表资料行,包含 SELECT、INSERT、UPDATE、DELETE,MERGE。
默认情况下,DML 不自动提交,需要手工提交(commit)和回滚(rollback);对数据的操作
会产生 REDO 和 UNDO;
DDL(Data Definition Language)数据定义语言: 建立、修改、删除数据库中数据表对象,包含 CREATE、ALTER、DROP、TRUNCATE、 COMMENT。默认情况下,DDL 自动提交。 DCL(Data Control Language)数据控制语言: 用于执行权限授予与收回操作,包含 GRANT、REVOKE。 TCL(Transactional Control Language)事物控制语言: 维护数据的一致性,包含 COMMIT、ROLLBACK、SAVEPOINT。
DELETE 和 TRUNCATE 的区别: DELETE:DML 语言,产生 redo 和 undo,删除大量数据会很慢;可以带 where 条件,支持 回滚,delete 的数据支持闪回查询、不立即释放空间(DM 中系统定时自动清理回滚页,时 长由参数 undo_retention 指定)。 truncate:DDL 语句,不产生 redo 和 undo,只能删除整张表的数据,且立即释放空间, 不支持回滚,不支持 where 条件,truncate 表很快(大表也依然很快)。TRUNCATE 可以降 低表的水位线。
Sql 语法语义权限解析(字典缓冲区,语法语义校验,权限校验):首先在 sql 缓冲区 中查找是否有对应的 sql 语句,如果找到,再查找对应的执行计划,找到执行计划,根据执 行计划执行 sql,这个过程称为软解析;
如果 sql 缓冲区中没有找到对应 sql 语句,会将该 sql 语句加入 sql 缓冲区,并生成对应执行计划,执行计划放入 sql 缓冲区,根据执行计划 执行 sql 语句,返回结果集,这个过程称为硬解析)。从系统性能提升来说,要减少硬解析。
隐式转换和显式转换
隐式类型转换的问题:
(1)程序可读性差,且依赖数据库的隐式转换规则,效率差,会增加处理时间;且如果数据库升级,则程序可能无法正确执行;
(2)有可能会导致索引失效;
(3)有可能会导致意想不到的结果
CUBE 与 ROLLUP
达梦的 GROUP BY 语句除了最基本的语法外,还支持 ROLLUP 和 CUBE 语句。
ROLLUP(A, B, C): 首先会对(A、B、C)进行 GROUP BY,然后对(A、B)进行 GROUP BY,
然后是(A)进行 GROUP BY,最后对全表进行 GROUP BY 操作。
CUBE(A, B, C):首先会对(A、B、C)进行 GROUP BY,然后依次是(A、B),(A、C),(A),
(B、C),(B),(C),最后对全表进行 GROUP BY 操作。
CUBE 和 ROLLUP 之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
表外键创建测试
create table employees ( employee_id dec(6,0) not null, employee_name varchar(20) not null, email varchar(25) not null, phone_number varchar(20), hire_date datetime(6) not null, job_id varchar(10) not null, salary dec(8,2), commission_pct dec(2,2), manager_id dec(6,0), department_id dec(4,0), primary key(employee_id)); create table departments ( department_id dec(4,0) not null, department_name varchar(30) not null, manager_id dec(6,0), location_id dec(4,0), primary key(department_id) ); alter table employees add constraint forkey01 foreign key ("department_id") references "departments" ("department_id"); |
第六部分:DM 的体系结构
表空间是 DM 数据库的最大存储单元,所有数据都存储在表空间中。 表空间采用段(segment)、簇(extent)和页(page)的方式管理。 一个表空间可以包含一个或多个数据文件。一个数据文件仅能归属于一个表空间。 DM 物理文件包含:配置文件、控制文件、数据文件、联机日志(此四个文件必不可少,缺少 一个将无法正常启动)。 配置文件包括(服务配置 dm.ini,守护配置,复制配置,审计配置)
配置参数文件 dm.ini DM 数据库参数的类型: READ ONLY:手动参数,不能通过 SQL 命令或函数修改;只能通过修改 dm.ini 文本文件修改 此参数(需要重启数据库才能生效)。 SYS:动态(系统级)参数。可以即可以修改内存中的值,也可以修改参数文件中的值。可 以通过 SQL 命令或函数修改。 SESSION:动态(会话级)参数,可以即可以修改内存中的值,也可以修改参数文件中的值。 可以通过 SQL 命令或函数修改,且可以只针对当前会话生效。 IN FILE:静态参数,可以通过 SQL 命令或函数修改,不能修改内存中的值,只能修改参数 文件中的值,所以需要重启数据库才能生效。 静态参数在数据库运行期间不能修改内存中的值,动态参数在数据库运行期间可以修改内存 中的值(修改后立即生效)。
DM 数据库参数的类型:
READ ONLY:手动参数,不能通过 SQL 命令或函数修改;只能通过修改 dm.ini 文本文件修改 此参数(需要重启数据库才能生效)。
SYS:动态(系统级)参数。数据库运行中可以直接修改,可以即可以修改内存中的值,也 可以修改参数文件中的值。可以通过 SQL 命令或函数修改。
SESSION:动态(会话级)参数,数据库运行中可以直接修改,可以即可以修改内存中的值, 也可以修改参数文件中的值,还可以只修改当前会话的值。可以通过 SQL 命令或函数修改, 且可以只针对当前会话生效。
IN FILE:静态参数,不能修改内存中的值,只能修改参数文件中的值,可以通过 SQL 命令 45 / 117 或函数修改,但需要重启数据库才能生效。 静态参数在数据库运行期间不能修改内存中的值,动态参数在数据库运行期间可以修改内存 中的值(修改后立即生效)。
SQL> select distinct para_type from v$dm_ini; 行号 PARA_TYPE ---------- --------- 1 READ ONLY 2 SYS 3 IN FILE 4 SESSION 已用时间: 78.067(毫秒). 执行号:300. |
Select * from v$ifun; |
DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线
程,启动数据库实例,启动到 mount 状态,根据控制文件中的数据文件路径和练级日志文件
路径,找到并打开数据文件和联机日志,启动到 OPEN 状态。
Oracle 启动顺序:nomount->mount->open
Shutdown:关闭状态
Mount:配置状态,此时可以修改数据库归档配置、主备等模式,不能进行数据文件的读写。
此时数据库不能对外正常提供服务。
Open:打开状态,此时数据库提供正常的服务。可以读写数据文件。正常访问表,读取数据。
Suspend:只读状态,只能读,不能写(DML 操作一旦 commit,数据库即会被挂起)。
MOUNT 和 OPEN 可以相互转换(与 Oracle 不同)。SUSPEND 和 OPEN 也可以相互转换。
但 MOUNT 和 SUSPEND 之间不能相互转换。
alter system set 'COMPATIBLE_MODE' =2 spfile; |
从磁盘的数据文件中读取数据—物理读 从内存(数据缓冲区)读取数据—逻辑读
select * from v$bufferpool; --数据缓冲区 |
DM数据库防火墙配置
firewall-cmd --add-port=5236/tcp --permanent --zone=public firewall-cmd --reload firewall-cmd --list-ports |
修改数据缓冲区大小为500M:
alter system set 'BUFFER'= 500 spfile; |
SQL 缓冲区 缓存 sql 语句、对应的执行计划、缓存结果集(需要开启结果集缓存,默认不开启) SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息 (PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG 比较多、复杂的系统,建议将该参数调大。 参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默 认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。
DM.INI配置文件参数类型
会话级,内存级,静态级
select name, type, value, sys_value, file_value, description from v$parameter where name like '%COMPA%MODE%'; |
修改 LIST_TABLE(会话级动态参数),如果不指定修改参数范围,默认是 memory:
select name,type,value,sys_value,file_value,description from v$parameter t where t.name='LIST_TABLE'; alter system set 'LIST_TABLE' =1 both|memory|spfile; alter session set 'LIST_TABLE'=1; |
相关数据字典:
select * from v$cacheitem; select * from v$cachesql; select * from v$cachepln; select * from v$cachers; |
DM 支持执行计划的清理和绑定:
select * from v$ifun t where name like '%PLN%'; select t.name, b.* from v$ifun t, SYS."V$IFUN_ARG" B where t.name like '%SP_CLEAR_PLAN_CACHE%' and t.id = b.id; |
数据缓冲区
用于缓存数据文件中的数据页。BUFFER 是从磁盘读出的数据页在内存中的镜像,包含 49 / 117 四个类型,分别是 normal、fast、recycle、keep,由 INI 配置中的 BUFFER、FAST_POOL_PAGES、 RECYCLE、KEEP 等确定大小,不同类型的缓冲区主要表现为淘汰机制不同。
从磁盘的数据文件中读取数据—物理读 从内存(数据缓冲区)读取数据—逻辑读
select * from v$bufferpool; --数据缓冲区 |
SQL> select * from SYS."V$PARAMETER" t WHERE name in ('BUFFER','FAST_POOL_PAGES','RECYCLE','KEEP'); 行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION ---------- ----------- --------------- ------- ----- --------- ---------- -------------------------------------------- 1 23 BUFFER IN FILE 500 500 500 Initial System Buffer Size In Megabytes 2 26 FAST_POOL_PAGES IN FILE 3000 3000 3000 Fast Pool Pages 3 28 KEEP IN FILE 8 8 8 Initial System KEEP Buffer Size In Megabytes 4 29 RECYCLE IN FILE 64 64 64 Initial System KEEP Buffer Size In Megabytes |
修改数据缓冲区大小为500M:
alter system set 'BUFFER'= 500 spfile; |
SQL 缓冲区
缓存 sql 语句、对应的执行计划、缓存结果集(需要开启结果集缓存,默认不开启) SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息 (PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG 比较多、复杂的系统,建议将该参数调大
参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默 认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。 |
SP_CLEAR_PLAN_CACHE(PLAN_ID); --清理执行计划
--SP_SET_PLN_BINDED --绑定执行计划
select * from V$mem_pool; |
DM 线程 DM 是单进程多线程对称服务器架构。Oracle 是多进程架构。
查看数据库进程:
[root@DCA ~]# ps -ef|grep dmserver dmdba 1759 1 0 08:25 ? 00:00:07 /dm8/bin/dmserver /SJ/data/PROD/dm.ini -noconsole root 12035 11949 0 09:57 pts/2 00:00:00 grep dmserver |
根据达梦数据库进程查看达梦数据库线程
[root@DCA ~]# ps -T -p 1759 PID SPID TTY TIME CMD 1759 1759 ? 00:00:02 dmserver 1759 1974 ? 00:00:00 dm_quit_thd 1759 1980 ? 00:00:00 dm_io_thd 1759 1981 ? 00:00:00 dm_io_thd 1759 1982 ? 00:00:00 dm_io_thd 1759 1983 ? 00:00:00 dm_io_thd 1759 2182 ? 00:00:00 dm_rsyswrk_thd 1759 2183 ? 00:00:00 dm_rsyswrk_thd 1759 2185 ? 00:00:00 dm_rsyswrk_thd 1759 2188 ? 00:00:00 dm_chkpnt_thd 1759 2189 ? 00:00:00 dm_redolog_thd 1759 2204 ? 00:00:00 dm_hio_thd 1759 2205 ? 00:00:00 dm_hio_thd 1759 2206 ? 00:00:00 dm_hio_thd 1759 2207 ? 00:00:00 dm_hio_thd 1759 2283 ? 00:00:00 dm_sqllog_thd 1759 2287 ? 00:00:00 dm_purge_thd |
动态视图:
select * from V$process; --进程 select * from v$threads; --线程 |
DM 的核心线程;默认 16 个工作线程。
IO 线程
日志刷新线程
日志归档线程
日志重做线程
调度线程
第七部分:表空间管理
DM 默认预定义 SYSTEM、ROLL、MAIN、TEMP、HMAIN 五个表空间。
SYSTEM:系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、用户角 色权限信息等,部分隐含参数写入 SYSTEM 表空间)
ROLL:回滚表空间,存放回滚页,数据库中的 DML 操作对应都会生成 redo 和 undo, undo 信息放入 ROLL 表空间对应的数据文件,redo 信息写入联机日志文件,用于保证数据 的一致性。
ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。 遇到查询记录过旧的错误(等同于 oracle 的快照过旧的错误)。解决方法:
1、 增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。
2、查询时间过长导致,可以考虑优化查询。
alter system set 'UNDO_RETENTION'= 300 both; select * from v$parameter t where name like 'UNDO_RETENTION'; |
达梦 TEMP 表空间,数据库启动时会按照如下参数重建 TEMP 表空间。
select name, value, type from v$parameter t where name like 'TEMP%'; |
alter system set 'TEMP_SIZE'=100 spfile;
将控制文件转成文本文件
dmctlcvt type=1 src=dm.ctl dest=dmctl.txt |
SQL 管理表空间
创建表空间
CREATE TABLESPACE DMTBS DATAFILE ' /SJ/data/OA/DMTBS01.DBF' SIZE 1024 AUTOEXTEND ON NEXT 200 MAXSIZE 10240,'/SJ/data/TEST02.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240; |
表空间下线
alter tablespace DMTBS offline; alter tablespace DMTBS online; |
表空间重命名
alter tablespace tbs RENAME TO dmtbs; |
删除表空间
有数据不能删除表空间
drop tablespace dmtbs; |
修改表空间添加数据文件:
alter TABLESPACE tbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2 MAXSIZE 20480; |
修改表空间数据文件的大小:
alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128; |
修改联机日志文件大小
alter database RESIZE LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO 500; |
添加联机日志文件
alter DATABASE ADD LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' SIZE 500; |
修改联机日志文件路径(迁移联机日志文件)
alter database mount; alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER01.log' TO '/SJ/redo/DM01.log'; alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER02.log' TO '/SJ/redo/DM02.log'; alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO '/SJ/redo/DM03.log'; alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' TO '/SJ/redo/DM04.log'; alter database open; |
开启归档的方法:
查看归档置: select arch_mode from v$database; select * from v$dm_arch_ini; 归档开启: alter database mount; alter database ARCHIVELOG; alter database ADD ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64, space_limit=10240'; alter database open; |
迁移自定义表空间数据文件
alter tablespace china offline; alter TABLESPACE china RENAME DATAFILE 'china01.DBF' TO '/SJ/china01.DBF'; |
管理重做日志文件 重做日志包含联机日志和归档日志(数据库在归档模式下才会产生归档日志文件)。 联机重做日志:存放 redo 信息,循环使用,不断覆盖。 联机日志 v$rlog 中记录有日志序列号(LSN: Log Sequence Number) DM 数据库联机日志自动切换,不能手工切换。DM 联机日志没有日志组。
select * from v$rlogfile; select * from v$rlog; --cur_file表示正在使用的联机日志 |
SQL 关闭归档
SQL> alter database mount; SQL> alter database noarchivelog; SQL> alter database delete archivelog 'type=local,dest=/dm8/arch'; SQL> alter database open; SQL> select arch_mode from v$database; |
DM 支持手工切换归档;
alter SYSTEM ARCHIVE LOG CURRENT; alter SYSTEM SWITCH LOGFILE; alter DATABASE ARCHIVELOG CURRENT; 归档文件的删除: select * from v$ifun t where name like 'SF_ARCHIVELOG_%'; |
归档文件的删除:
Select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-10); |
第八部分:用户管理
DM 默认的预定义用户:
SYS:系统内置用户,不允许登录。
SYSDBA:系统管理员,拥有几乎所有权限(除审计和强制访问控制)
SYSAUDITOR:系统审计管理员,具有审计相关权限。
SYSSSO:系统安全管理员,具有强制访问控制等权限;
SYSDBO:安全版本才有的用户,安全操作员
系统口令策略
PWD_POLICY(隐含参数,不在 dm.ini 中)参数指定系统的口令策略,默认为 2;
系统支持的口令策略有:
0 无策略
1 禁止与用户名相同
2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值
4 至少包含一个大写字母(A-Z)
8 至少包含一个数字(0-9)
16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口
令策略为 2+4=6 即可。
PWD_POLICY 是隐含参数,PWD_POLICY,只能通过函数或 SQL 语句修改。
select * from v$parameter t where t.name = 'PWD_POLICY'; |
create user hr IDENTIFIED by dameng123; |
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 15 BOTH; |
用户锁定和解锁:
alter user hr ACCOUNT LOCK; alter user hr ACCOUNT UNLOCK; |
修改用户的默认表空间:
alter user hr DEFAULT TABLESPACE TEST; |
删除用户:
drop user if EXISTS hr CASCADE; --生产环境慎用 |
用户资源限制
用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3; |
密码带有特殊字符的登录处理,其中’’具有转义功能
disql hrtest/'"Dameng@123"' |
在SQL环境下则不需要转义
conn hrtest/"Dameng@123" |
权限管理
grant create table to hrtest; |
赋予对象权限:
grant select on dmhr.employee to hrtest; |
grant RESOURCE to HR; |
权限的回收
SQL> revoke select on dmhr.employee from hrtest; SQL> revoke create table from hrtest; SQL> grant select (employee_id, employee_name) on dmhr.employee to hrtest; |
相关数据字典:
select * from dba_sys_privs t where t.GRANTEE= 'HR'; select * from dba_role_privs t where t.GRANTEE= 'HR'; select * from dba_tab_privs t where t.GRANTEE= 'HR'; |
DM默认不能授予用户在其他模式下数据定义( DDL )的权限.由参数ENABLE_DDL_ANY_PRIV 指定,默认为0。
select * from v$parameter t where name like '%ENABLE_DDL_ANY_PRIV%'; |
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --开启后可正常赋予权限 |
角色管理
角色是权限的集合,角色使权限管理更加方便。 DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。 PUBLIC:具有对当前模式下对象的 DML 数据操作权限。 RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等); SOI:具有查询 sys 开头系统表的权限; VTI:具有查询 v$开头的动态视图权限(动态视图记录在 v$dynamic_tables,如果没有此权 限,DM 管理工具上会报没有查询 v$视图权限) DB_AUDIT_开头的角色是审计相关角色,具有审计相关权限,默认赋给 SYSAUDITOR。 DB_POLICY_开头的角色是安全相关角色,具有强制访问控制等权限,默认赋给 SYSSSO。
赋予对象权限增加 with grant option 说明权限可以转授,回收时要增加 cascade 关键字级联 回收权限。
revoke select on dmhr.employee from r2 CASCADE; |
第九部分:模式对象管理
管理模式
模式与用户之间的关系:
模式定义:模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干 对象的对象集 模式对象: 表、视图、约束、索引、序列、触发器、存储过程/函数、包、同 义词、类、域 模式与用户之间的关系: 当系统建立一个用户时,会自动生成一个同名的模式 用户还可以建立其他模式,DM 中用户和模式是一对多的关系,一个用户可以拥有多个模式, 一个模式仅能归属于一个用户。Oracle 中用户和模式是一对一的关系。
select * from SYSOBJECTS t where t."TYPE$" ='SCH'; --查看模式 select * from SYSOBJECTS t where t."SUBTYPE$" ='USER'; --查看用户 |
--查询模式和用户的对应关系:
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; |
模式管理 --创建模式 (创建用户时会自动创建模式)
CREATE SCHEMA "dba01" AUTHORIZATION "dba01"; |
--查看当前模式和当前用户
select sys_context('USERENV','CURRENT_SCHEMA'); select sys_context('USERENV','CURRENT_USER'); 或 select user; |
--切换模式(仅对当前会话生效)
set SCHEMA dmhr; |
--删除模式
drop SCHEMA IF EXISTS HRTEST01; drop SCHEMA IF EXISTS HRTEST01 CASCADE; --级联删除模式下对象,生产环境慎 用。 |
管理表
索引组织表:有且仅有一个聚簇索引键,表数据按照聚簇索引键排序(数据是有序的,插入 有序),如果在创建表时未指定聚簇索引键,默认使用 rowid 为聚簇索引键。rowid 是逻辑 rowid,占用存储空间,所以索引组织表比堆表占用较多空间。 堆表:数据是无序的,插入无序,堆表插入效率较高,rowid 是物理 rowid,不占用存储空 间。所以堆表比索引组织表节约空间。 对聚簇索引键的范围查询,索引组织表更高效
SQL 管理表
create table dba01.t_test ( pid int, pname varchar(20), sex bit, logtime datetime); |
添加字段: alter table dba01.t_test add column email varchar(20); 修改字段类型: alter table dba01.t_test modify email varchar(50); 删除字段: alter table dba01.t_test drop logtime; 对字段添加默认值(大表不建议添加字段时给默认值,耗时很长) alter table dba01.t_test add column logtime datetime default sysdate; 重命名表或字段: alter table dba01.t_test rename to dba01.t_testoa; select * from dba01.t_testoa; alter table dba01.t_testoa rename column pid to id; SQL> desc dba01.t_testoa; 行号 name type$ nullable ---------- ------- ----------- -------- 1 id INTEGER Y 2 pname VARCHAR(20) Y 3 sex BIT Y 4 email VARCHAR(50) Y 5 logtime DATETIME(6) Y 对表和字段添加注释: comment on column dba01.t_testoa.sex is 'sex. 0:female 1: male'; comment on table dba01.t_testoa is 'this is a test table'; select * from user_tab_comments; select * from user_col_comments 修改表的表空间(DM 会自动重建该表上的索引) alter table dba01.t_testoa move tablespace main; SQL 管理约束 非空约束 alter table dba01.t_testoa modify pname not null; 唯一约束 alter table dba01.t_testoa add CONSTRAINT uk_testpid_email unique (email); 主键约束 alter table dba01.t_testoa ADD CONSTRAINT pk_testpid_id PRIMARY KEY(id); 检验约束 alter table dba01.t_testoa add salary number(10,2); alter table dba01.t_testoa ADD CONSTRAINT ck_testpid_salary CHECK (salary>=2100); 外键约束(外键引用两一张表的主键或者唯一键) alter table dba01.t_testoa add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES dba01.t_testoa(id); --约束的禁用和启用、删除 alter table dba01.t_testoa disable CONSTRAINT fk_test_id; alter table dba01.t_testoa enable CONSTRAINT fk_test_id; alter table dba01.t_testoa drop CONSTRAINT fk_test_id; insert into dba01.t_testoa(id, pname, sex, email, salary) values(1, 'test', 0, 'test@qq.com', 2300); insert into dba01.t_testoa(id, pname, sex, email, salary) values(2, '123', 0, '123@qq.com', 2300); commit; 相关数据字典: select * from dba_constraints t where t.owner='DBA01'; select * from DBA_CONS_COLUMNS t where t.owner='DBA01'; |
批量禁用外键约束:
select 'alter table '||owner||'.'||table_name||' disable constraint '|| t.CONSTRAINT_NAME ||';' from DBA_CONSTRAINTS t where t.OWNER ='DMTEST' and t.CONSTRAINT_TYPE = 'R'; |
SQL> explain select * from dmhr.employee t where T.EMPLOYEE_NAME = '马学铭'; 1 #NSET2: [1, 21, 280] 2 #PRJT2: [1, 21, 280]; exp_num(12), is_atom(FALSE) 3 #SLCT2: [1, 21, 280]; t.EMPLOYEE_NAME = '马学铭' 4 #CSCN2: [1, 856, 280]; INDEX33555537(EMPLOYEE as t) |
创建索引
SQL> create index ix_emp01_employeename ON dmhr.employee(EMPLOYEE_NAME); 操作已执行 已用时间: 7.398(毫秒). 执行号:51905. |
SQL> create table t_EMP like DMHR.EMPLOYEE; 操作已执行 已用时间: 18.638(毫秒). 执行号:51906. |
统计信息的收集:
SQL> dbms_stats.gather_table_stats('dmhr','t_emp'); DMSQL 过程已成功完成 已用时间: 116.526(毫秒). 执行号:51911. |
统计信息的查看
SQL> dbms_stats.table_stats_show('dmhr','t_emp'); 行号 NUM_ROWS LEAF_BLOCKS LEAF_USED_BLOCKS ---------- -------------------- -------------------- -------------------- 1 856 16 12 已用时间: 1.591(毫秒). 执行号:51912. |
SQL> dbms_stats.index_stats_show('dmhr','ix_emp01_employeename'); 行号 BLEVEL LEAF_BLOCKS DISTINCT_KEYS CLUSTERING_FACTOR NUM_ROWS SAMPLE_SIZE ---------- ----------- -------------------- -------------------- ----------------- -------------------- -------------------- 1 NULL NULL NULL NULL NULL NULL 已用时间: 3.264(毫秒). 执行号:51913. |
索引的监控:
SQL> alter index dmhr.ix_emp_employeename MONITORING USAGE; --开启索引监控 操作已执行 已用时间: 1.482(毫秒). 执行号:51914 |
SQL> alter index dmhr.ix_emp_employeename MONITORING USAGE;--开启索引监控 操作已执行 已用时间: 1.482(毫秒). 执行号:51914. SQL> alter index dmhr.ix_emp_employeename NOMONITORING USAGE;--关闭索引监控 操作已执行 已用时间: 7.694(毫秒). 执行号:51915. SQL> select * from v$object_usage;--查看索引的监控信息 行号 INDEX_NAME SCH_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING ---------- ------------------- -------- ---------- ---------- ---- ------------------- ------------------- 1 ix_emp_employeename DMHR t_EMP NO NO 2022-07-31 22:08:42 2022-07-31 22:09:50 已用时间: 2.081(毫秒). 执行号:51916. |
索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):
alter index dmhr.ix_emp_employeename rebuild ONLINE; 索引的数据字典: select * from dba_indexes t where t.OWNER ='XXX'; select * from dba_ind_columns t where t.index_OWNER ='XXX'; |
删除索引:
SQL> drop index dmhr.ix_emp_employeename; 操作已执行 已用时间: 26.384(毫秒). 执行号:51922. |
外键创建测试
create table employees ( employee_id dec(6,0) not null, employee_name varchar(20) not null, email varchar(25) not null, phone_number varchar(20), hire_date datetime(6) not null, job_id varchar(10) not null, salary dec(8,2), commission_pct dec(2,2), manager_id dec(6,0), department_id dec(4,0), primary key(employee_id)); create table departments ( department_id dec(4,0) not null, department_name varchar(30) not null, manager_id dec(6,0), location_id dec(4,0), primary key(department_id) ); alter table employees add constraint forkey01 foreign key ("department_id") references "departments" ("department_id"); |
视图创建
create view dmhr.v_emp as select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.EMAIL, a.PHONE_NUM from dmhr.employee a where a.DEPARTMENT_ID = 1001; SQL> select * from dmhr.v_emp; 行号 EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUM ---------- ----------- ------------- ----------------------- ----------- 1 10001 龚顺超 gongshunchao@dameng.com 18812370452 2 10100 陈伟婷 chenweiting@dameng.com 13612350355 3 10101 何杭菊 hehangju@dameng.com 18412363124 4 10102 欧锋利 oufengli@dameng.com 15712377535 5 10103 薛辉明 xuehuiming@dameng.com 18412349538 已用时间: 3.291(毫秒). 执行号:51924. |
创建复杂视图:
create or REPLACE view dmhr.v_emp_salary as select a.DEPARTMENT_ID, sum(A.SALARY) SUM_SALARY from dmhr.employee a group by a.DEPARTMENT_ID having sum(A.SALARY) > 100000; SQL> select * from dmhr.v_emp_salary; 行号 DEPARTMENT_ID SUM_SALARY ---------- ------------- -------------------- 1 103 129443 2 105 194399 3 301 112344 4 303 497685 5 304 103007 6 305 220802 7 306 188212 8 404 142321 9 701 134447 10 703 2425858 11 704 323230 行号 DEPARTMENT_ID SUM_SALARY ---------- ------------- -------------------- 12 705 564024 13 706 463811 14 905 128917 15 1004 101528 16 1005 135444 17 1104 110625 18 1105 142443 18 rows got |
数据的导入
SQL> start /dm8/backup/dts/t_department.sql |
创建索引并指定表空间
create index ix_emp_empname on t_emp(EMPLOYEE_NAME) tablespace DMTBSIDX; |
第十部分:数据字典和动态性能视图
数据字典 存储在 SYSTEM 表空间中,包含对象定义、权限、用户角色等信息。
USER_* 用户所拥有的对象信息
ALL_* 用户能访问的对象信息
DBA_* 整个数据库中的对象信息
系统中所有对象的信息 SELECT * FROM SYSOBJECTS; 系统中所有索引定义信息 SELECT * FROM SYSINDEXES; 系统中所有列定义的信息 SELECT * FROM SYSCOLUMNS; |
动态性能视图是从内存中或控制文件中读取的数据 SELECT * FROM V$BUFFERpool; --数据缓冲区 SELECT * FROM V$mem_pool; 显示数据文件、表空间信息 SELECT * FROM V$DATAFILE; SELECT * FROM V$tablespace; 显示当前进程、线程信息 SELECT * FROM V$PROCESS; SELECT * FROM V$threads; |
查询事务等待:
select * from sys."v$trxwait"; select * from v$lock t where t.blocked =1; select a.sess_id, a.sql_text, a.state, b.* from v$sessions a, v$trxwait b where a.trx_id = b.id; |
-- 查询未提交事务
select b.object_name, c.sess_id, c.thrd_id, c.state, c.sql_text, a.* from v$lock a, dba_objects b, v$sessions c where a.table_id = b.object_id and a.ltype = 'OBJECT' and a.trx_id = c.trx_id and a.ign_flag=0; |
第十一部分:数据库的备份还原
备份包含物理备份和逻辑备份。 物理备份是拷贝有效的数据页。逻辑备份是导出数据库中逻辑数据。 物理备份分为完全备份、增量备份;联机备份(热备)和脱机备份(冷备)。 完全备份是指一个备份包含指定数据库或表空间的所有数据; 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增 加或者被修改的文件; 增量备份包含差异增量备份和累积增量备份,默认是差异增量备份。 差异增量备份的基础备份集可以是全量备份,也可以是增量备份; 累计增量备份的基备份集只能是全量备份。 热备:指数据库启动状态下的备份 冷备:指数据库关闭状态下的备份。
备份还原两个重要参数:
select * from v$parameter t where name in ('BAK_PATH', 'BAK_USE_AP'); |
库备份(冷备)
停库备份
RMAN> backup database '/SJ/data/PROD/dm.ini' to FULLBAK01 backupset '/backup/bak'; backup database '/SJ/data/PROD/dm.ini' to FULLBAK01 backupset '/backup/bak'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[34948], file_lsn[34948] Processing backupset /backup/bak [Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00] backup successfully! time used: 00:00:01.041 |
全库恢复
restore database '/SJ/data/PROD/dm.ini' from backupset '/SJ/data/PROD/bak/DB_PROD_FULL_20220731_122440_470479'; |
(2)数据库的恢复
RMAN> recover database '/dm8/data/DM/dm.ini' with archivedir '/dm8/arch'; |
(3)更新是数据库魔数
RMAN> recover database '/dm8/data/DM/dm.ini' update db_magic; |
表空间备份与恢复
全库备份 SQL>backup tablespace DMHR full to DMTBSFULLBAK01 backupset '/backup/oa/dmtbsfullbak01'; 还原表空间 RMAN> restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa'; restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL begin redo pwr log collect, last ckpt lsn: 38480 ... redo pwr log collect finished EP[0]'s cur_lsn[38480], file_lsn[38480] restore successfully. time used: 00:00:02.388 恢复表空间到最新 RMAN> recover database '/SJ/data/OA/dm.ini' tablespace DMHR; recover database '/SJ/data/OA/dm.ini' tablespace DMHR; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL begin redo pwr log collect, last ckpt lsn: 38480 ... redo pwr log collect finished EP[0]'s cur_lsn[38480], file_lsn[38480] EP:0 total 2 pkgs applied, percent: 16% EP:0 total 4 pkgs applied, percent: 33% EP:0 total 6 pkgs applied, percent: 50% EP:0 total 8 pkgs applied, percent: 66% EP:0 total 10 pkgs applied, percent: 83% EP:0 total 12 pkgs applied, percent: 100% recover successfully. time used: 544.255(ms) |
show 查看备份集
RMAN> show backupset '/dm8/data/DAMENG/bak_full'; |
remove 删除备份集
RMAN> remove backupset '/dm8/data/DAMENG/bak_increment'; |
check 检查备份集
RMAN> check backupset '/dm8/data/DAMENG/bak_full'; |
表空间还原时会校验数据库魔数:
select permanent_magic; --查询数据库永久魔数 select db_magic from v$rlog; --查询数据库当前魔数 |
--增量备份
backup database increment BASE ON BACKUPSET '/dm8/backup/full/ONLINEBAK_01' to ONLINEBAKINCR_01 backupset '/dm8/backup/incr/ONLINEBAK_01' ; backup database increment with BACKUPDIR '/dm8/backup/full/' to ONLINEBAKINCR_02 backupset '/dm8/backup/incr/ONLINEBAK_02' ; |
备份集管理
--校验备份集 select SF_BAKSET_CHECK('DISK','/dm8/backup/incr/ONLINEBAK_02'); select * from v$backupset; --查看备份集 |
select * from v$ifun t where t.name like 'SF_BAKSET%'; SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/full/'); SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/incr/'); |
表空间备份
backup tablespace dmtbs; backup tablespace dmtbs INCREMENT with BACKUPDIR '/dm8/backup/full/' to DMTBSINCR_01 backupset '/dm8/backup/incr/DMTBSINCR_01' ; |
表和归档的备份
backup table dmhr.employee; --表的备份 backup ARCHIVELOG all; --归档备份 |
dexp/dimp 逻辑导出和导入
dexp 逻辑导出、dimp 逻辑导入四个级别:
全库(full=y)
按用户(owner=XXX)
按模式(schemas=XXX)
按表(tables=XX)
按用户导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=HRTEST.dmp
log=HRTEST.log owner=HRTEST
按模式导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=DMHR.dmp
log=DMHR.log schemas=DMHR
按表导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=EMPLOYEE.dmp
log=EMPLOYEE.log tables=DMHR.EMPLOYEE
按模式导入(将 A 模式导入到 B 模式,使用 REMAP_SCHEMA 参数):
dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=DMHR.dmp
log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST
dimp userid=sysdba/SYSDBA:5238 directory=/dm8/backup/dexp
file=t_dept.dmp log=t_dept.log tables=SYSDBA.t_dept remap_schema=SYSDBA:DMHR
dimp V8
DM兼容oracle的DBMS_JOB和DBMS_SHCEDULER系统包。
select * from v$ifun t where t.name like '%INIT%';
call SP_INIT_DBMS_SCHEDULER_SYS(1); --创建 DMBS_SCHEDULER
创建数据库JOB
call SP_CREATE_JOB('JOB01',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('JOB01'); call SP_ADD_JOB_STEP('JOB01', 'FULLBAK', 6, '00000000/dm8/backup/full', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('JOB01', 'FULLBAK', 1, 2, 1, 1, 0, '22:00:00', NULL, '2021-12-22 16:32:21', NULL, ''); call SP_JOB_CONFIG_COMMIT('JOB01'); |
JOB 运行和日志查看
--查看job select * from sysjob.sysjobs;
--运行job dbms_job.run(1640162093);
--查看job运行日志
select * from SYSJOB.SYSJOBHISTORIES2;
checkpoint(100); --执行完全检查点,解决刚开归档备份,报错归档日志不连续的问题
ODBC 连接 DM 数据库
ODBC 的安装和配置:
tar -zxvf unixODBC-2.3.0.tar.gz
./configure 注:configure 时可以使用--prefix 参数指定安装路径,不指定使用默认安装路径/usr/local make make install (3) 配置驱动信息 odbcinst.ini 和数据源信息 odbc.ini cd /usr/local/etc/ drwxr-xr-x 2 root root 6 12 月 22 16:56 ODBCDataSources -rw-r--r-- 1 root root 0 12 月 22 16:56 odbc.ini -rw-r--r-- 1 root root 0 12 月 22 16:56 odbcinst.ini |
vi odbcinst.ini
[DM8 ODBC DRIVER] Description = ODBC DRIVER FOR DM8 Driver = /dm8/bin/libdodbc.so |
vi odbc.ini
[DM8] Description = DM ODBC DSN Driver = DM8 ODBC DRIVER SERVER = localhost UID = SYSDBA PWD = Dameng123 TCP_PORT = 5236 |
root 执行会报错,是因为 root 没有配置 LD_LIBRARY_PATH 环境变量:
# isql dm8 -v |
DCA试题
1.注意:数据库无法启动,数据库密码错误,成绩无效记0分。
3.kylin linux 10系统上安装DM8企业版本。
a)软件安装在/dm目录下
b)以dmdba用户身份进行安装,密码为Dameng123
2.管理员部署一个数据库,用来存放员工信息和订单信息
a)数据文件存放到/SJ/data目录下
mkdir -p /SJ/data
chown -R dmdba:dinstall /SJ
b)数据库名为PROD,实例名DBSERVER,端口号5239
c)数据库管理员的密码为Dameng123
d)口令长度不小于9,禁止与用户名相同,至少包含一个大写字母(A-z)
e)创建3组日志,每组日志大小为300M
f)簇大小为16页,页大小为8k
cd /dm8/bin
./dminit PATH=/SJ/data DB_NAME=PROD INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Dameng123 ARCH_FLAG=1 CASE_SENSITIVE=0 LOG_PATH=/dm8/data/DAMENG/DMSERVER01.log LOG_PATH=/dm8/data/DAMENG/DMSERVER02.log LOG_PATH=/dm8/data/DAMENG/DMSERVER03.log LOG_SIZE=128 EXTENT_SIZE=16 PAGE_SIZE=8
创建表空间
create tablespace dba datafile '/SJ/data/PROD/dba01.dbf' size 1024 autoextend on next 50 maxsize 10240 CACHE = NORMAL;
创建用户
create user dba01 identified by "Dameng123" limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace dba;
grant DBA,PUBLIC,RESOURCE,SOI,VTI to dba01 with admin option;
创建模式
CREATE SCHEMA dba01 AUTHORIZATION dba01;
CREATE SCHEMA "dba01" AUTHORIZATION "dba01";
select distinct object_name TABLE_SCHEMA from all_objects where object_type = 'SCH';
create table dba01.t_test(id int, name varchar(20));
create table dba01.t_test (
pid int,
pname varchar(20),
sex bit,
logtime datetime);
添加字段:
alter table dba01.t_test add column email varchar(20);
修改字段类型:
alter table dba01.t_test modify email varchar(50);
删除字段:
alter table dba01.t_test drop logtime;
对字段添加默认值(大表不建议添加字段时给默认值,耗时很长)
alter table dba01.t_test add column logtime datetime default sysdate;
重命名表或字段:
alter table dba01.t_test rename to dba01.t_testoa;
select * from dba01.t_testoa;
alter table dba01.t_testoa rename column pid to id;
SQL> desc dba01.t_testoa;
行号 name type$ nullable
---------- ------- ----------- --------
1 id INTEGER Y
2 pname VARCHAR(20) Y
3 sex BIT Y
4 email VARCHAR(50) Y
5 logtime DATETIME(6) Y
对表和字段添加注释:
comment on column dba01.t_testoa.sex is 'sex. 0:female 1: male';
comment on table dba01.t_testoa is 'this is a test table';
select * from user_tab_comments;
select * from user_col_comments
修改表的表空间(DM 会自动重建该表上的索引)
alter table dba01.t_testoa move tablespace main;
SQL 管理约束
非空约束
alter table dba01.t_testoa modify pname not null;
唯一约束
alter table dba01.t_testoa add CONSTRAINT uk_testpid_email unique (email);
主键约束
alter table dba01.t_testoa ADD CONSTRAINT pk_testpid_id PRIMARY KEY(id);
检验约束
alter table dba01.t_testoa add salary number(10,2);
alter table dba01.t_testoa ADD CONSTRAINT ck_testpid_salary CHECK (salary>=2100);
外键约束(外键引用两一张表的主键或者唯一键)
alter table dba01.t_testoa add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES dba01.t_testoa(id);
--约束的禁用和启用、删除
alter table dba01.t_testoa disable CONSTRAINT fk_test_id;
alter table dba01.t_testoa enable CONSTRAINT fk_test_id;
alter table dba01.t_testoa drop CONSTRAINT fk_test_id;
insert into dba01.t_testoa(id, pname, sex, email, salary) values(1, 'test', 0, 'test@qq.com', 2300);
insert into dba01.t_testoa(id, pname, sex, email, salary) values(2, '123', 0, '123@qq.com', 2300);
commit;
相关数据字典:
select * from dba_constraints t where t.owner='DBA01';
select * from DBA_CONS_COLUMNS t where t.owner='DBA01';
> insert into t_testpid(id, pname, sex, email, salary) values(1,'test', 0, 'test@qq.com', 2300);
select distinct object_name TABLE_SCHEMA from all_objects where object_type = 'SCH';
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/bin/dm.ini
./dm_service_installer.sh -t dmserver(达梦数据库服务器这个是固定的) -p 实例名 -dm_ini dm.ini物理位置
./disql SYSDBA/'"Dameng123"''
3.现划USERS表空间,用来存储企业员工信息和部门信息(6分)
a)数据文件存在储目录/SJ/data中
b)包含2个数据文件,分别为USERS01.dbf和USERS02.dbf
c)每个文件初始大小为50M,每次扩展1M,数据文件最大10g
create tablespace users datafile '/SJ/data/USERS01.dbf' SIZE 50 AUTOEXTEND ON NEXT 1 MAXSIZE 10240,'/SJ/data/USERS02.DBF' SIZE 50 AUTOEXTEND ON NEXT 1 MAXSIZE 10240;
4.企业的员工信息和部门信息由TEST用户管理,密码为Dameng123,密码在90天后过期。TEST用户有创建表,索引的权限,TEST用户默认表空间为USERS。(8分)
create tablespace TEST datafile '/SJ/data/TEST01.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240,'/SJ/data/TEST02.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;
CREATE USER test identified by "Dameng123" limit password_life_time 90 default tablespace users;
5.数据库中的EMPLOYEES表用于存放所有员工的信息,DEPARTMENTS表用于存放所有的部门信息,EMPLOYEES表外键引用DEPARTMENTS表的外键引用DEPARTMENTS表的主键,其中EMPNO为DEPARTMENTS表的主键,EMPLOYEES表的COMM默认值为0,两个表均存储在USERS表空间中,两表的结构如下;(12分)
EMPLOYEES表结构:
行号 NAME TYPE
1 EMPNO DEC(4)
2 ENAME VARCHAR(10)
3 JOB VARCHAR(9)
4 MGR DEC(4)
5 SAL DEC(7,2) N
6 COMM DEC(7,2) Y
7 DEPTNO DEC(2) N
DEPARTMENTS表结构:
行号 NAME TYPE NULLABLE
CREATE TABLE "users"."EMPLOYEES"
(
"EMPNO" IDEC(4),
"ENAME" VARCHAR(10),
"JOB" VARCHAR(9),
"MGR" DEC(4),
"SAL" DEC(7,2) N,
COMM DEC(7,2) Y
DEPTNO DEC(2) N;
CREATE TABLE "DMTEST"."DEPARTMENTS"
(
"DEPT_ID" INTEGER NOT NULL,
"DEPT_NAME" VARCHAR(30),
"LOCATION_ID" INTEGER,
"LOCATION_ADDR" VARCHAR(30),
NOT CLUSTER PRIMARY KEY("DEPT_ID")) STORAGE(ON "USERS", CLUSTERBTR) ;
5.数据库中的EMPLOYEES表用于存放所有员工的信息,DEPARTMENTS表用于存放所有的部门信息,EMPLOYEES表的主键,DEPTNO为DEPARTMENTS表的主键,EMPLOYEES表的COMM默认值为0,两个表均存储在USERS表空间上,两天的结构如下:(12分)
行号 NAME TYPE NULLABLE
1 EMPNO DEC(4) N
2 ENAME VARCHAR(10) Y
3 JOB VARCHAR(9) Y
4 MGR DEC(4) Y
5 SAL DEC(7,2) N
6 COMM DEC(7,2) Y
7 DEPTNO DEC(2) N
DEPARTMENTS表结构
行号 NAME TYPE NULLABLE
1 DEPTNO DEC(2) N
2 DNAME VARCHAR(14) N
3 LOC VARCHAR(13) Y
6.企业在重新部署数据库前把历史的员工信息和部门信息导入到/opt/script1.sql,需要管理把这些信息加载到现有的数据库中(8分)
7.为了保证数据库的安全性,企业需求管理员做好充分的备份工作。(9分)
a)要求每次备份的文件统一存放/backup中。
b)对当前数据库第一次完整的备份。保证数据能还原到失败前任意一个时刻。
8.创建一个视图V_SAL存放部门的工资总和小于9000的部门信息。(3分)
9.执行/opt/oper.sh启动数据库 (8分)
10.对用户TEST逻辑导出,备份文件放在/BACKUP中,备份文件命名为"db_test.dmp" ,日志文件命名为"db_test.log"
(5分)
11.新建HR用户,密码Dameng123,将TEST用户下的数据库对象导入到HR用户中,生成日志在/BACKUP中,导入日志文件命令为"imp_hr.log".(7分)
12.将重做日志文件/SJ/data/PROD/PROD03.log迁移至/SJ/data/PROD目录下。
13.安装配置系统调用的ODBC驱动(安装包在/OPT下)(5分)
(1)数据库安装目录:在/dm8目录下(1)
(2)以dmdba用户身份进行安装,dmdba用户密码设置为Dameng123
2.创建数据库实例
(1)实例的数据文件存放目录:在/dm8/data/目录下(1分)
(2)数据库名设置为DAMENG,实例名设置为DMSERVER,端口设置为5238 (6分)
(3)数据库管理员密码设置为Dameng123(1)分
(4)创建3个日志文件,每个日志文件大小为128M(2分)
(5)实例的簇大小为16页,页大小为16K(2分)
3.数据库配置
(1) 设置达梦数据库的数据缓冲区大小为500M
(2) 设置数据库兼容为ORACLE模式
(3) 创建表空间TEST;
a)表空间数据文件存储在/dm/data
b)表空间包含两个数据文件,分别为TEST01.dbf和TEST02.dbf
c)每个数据文件初始大小为128M,打开文件的自动扩展功能,每次扩展2M,每个数据文件最大10G
4.用户和角色管理
(1) 创建角色ROLEDM,角色ROLEDM具有创建表,创建视图,创建索引的权限
(2) 为数据库创建用户DMTEST,密码为Dameng123,默认表空间为TEST
(3) 将角色ROLEDM授予给DMTEST用户
5.表管理
在DMTEST用户下创建EMP表和DEPT表。EMP表用户存放所有员工的信息,DEPT用于存放所有部门的信息。两个表结构如下:
EMP表结构:
行号 NAME TYPES NULLABLE
1 EMP_ID INTEGER N
2 EMP_NAME VARCHAR(20) Y
3 EMAIL VARCHAR(50) Y
4 PHONE_NUM VARCHAR(20) Y
5 BIRTHDAY DATE Y
6 HIRE_DATE DATE Y
7 JOB_ID VARCHAR(10) Y
8 SALARY INTEGER Y
9 DEPT_ID INTEGER Y
DEPT表结构:
行号 NAME TYPES NULLABLE
1 DEPT_ID INTEGER N
2 DEPT_NAME VARCHAR(30) Y
3 LOCATION_ID INTEGER Y
4 LOCATION_ADDR VARCHAR(30) Y
其中
(1) EMP_ID为EMP的主键,DEPT_ID为DEPT表的主键,DEPT_ID为表的外键,参照列为DEPT表的DEPT_ID列。
(2) 为EMP表建立check约束,要求该约束设置后,EMP表中出生日期(BIRTHDAY)这一列的值早于"2003-01-01"。
6.数据导入
(1) 执行脚本存放在/opt/script1.sql,将数据导入到EMP表和DEPT表
7.数据库备份及作业管理
(1)开启数据库归档,归档文件存放至/dm8/arch目录,归档文件大为64M
(2) 对当前数据库做一次联机完全备份,备份名为"FULL_BAK",备份集文件存放在/dm8/backup/FULL_BAK目录中,备份
集文件存放在其他路径下
(3)对数据库进行整库逻辑导出,逻辑备份文件存放在/dm8/backup中,备份文件命名为"db_full.dmp",日志文件命名为"db_full.log"。逻辑备份存放在其他路径下。
(4)创建JOB1,每周日22:00对数据库做完全备份
(5)创建JOB2,每周一到周六22:00对数据库做增量备份
8.数据库日常管理
(1)将TEMP表空间大小调整为100M
(2)在DMTEST用户下创建视图VIEW_EMP,用于查询部门平均工资大于9000元的部门,视图显示信息为:部门编号,部门名称,部门平均工资
(3)为了提升查询效率,需要在列EMP.EMP_NAME添加索引IND_EMP_NAME
9数据库安装环境配置
(1)安装ODBC驱动,安装包在/opt下,将ODBC安装在/usr/local路径
(2)配置ODBC连接DM8数据库,连接名为dm8,ODBC模板配置文件在/opt路径
10.在CSDN,ITPUB及个人公众号等发布一篇关于达构数据库使用的博文链接给”达梦培训中心“ QQ号,根据博文质量判分,未提交者,该题不得分。
数据库软件安装
图形化使用方法如下:
第一步:查询端口号。使用root帐号登录考试机器,执行echo $DISPLAY
echo $DISPLAY
查询结查示例
第二步:root帐号执行命令xhost+
xhost+
access control disabled,clients can connect from any host
第三步:由root帐号切换为dmdba
su - dmdba
第四步:设置端口号为第一步查询出来的端口号,即可使用图形化界面
export DISPLAY=:2.0
(1)数据库安装目录:在/dm8目录下
(2)以dmdba用户身份进行安装,dmdba用户密码设置为Dameng123
2.创建数据库实例
(1)实例的数据文件存放目录:在/dm8/data目录下
(2)数据库名设置为DAMENG,实例名设置为DMSERVER,端口设置为5238
(3)数据库管理员密码设置为Dameng123
(4)创建3个日志文件,每个日志文件大小为128M
(5)实例的簇大小为16页,页大小为16k
3.数据库配置
(1)设置达梦数据库的数据缓冲区大小为500M
(2)设置数据库兼容为Oracle模式
(3)创建表空间TEST;
a)表空间数据文件存储在/dm8/data/
b)表空间包含两个数据文件,分别为TEST01.dbf和TEST02.dbf
c)每个数据文件初始大小为128M,打开文件的自动扩展功能,每次扩展2M,每个数据文件最大10G
4.用户和角色管理
(1)创建角色ROLEDM,角色ROLEDM具有创建表,创建视图、创建索引的权限
(2)为数据库创建用户DMTEST,密码为Dameng123,默认表空间为TEST
(3)将角色ROLEDM授予给DMTEST用户
5.表管理
在DMTEST用户下创建EMP表和DEPT表。EMP表用户存放所有员工的信息,DEPT用于存放所有部门的信息,两个表的结构如下:
EMP表结构
行号 NAME TYPE$ NULLABLE
1 EMP_ID INTEGER N
2 EMP_NAME VARCHAR(20) Y
3 EMAIL VARCHAR(50) Y
4 PHONE_NUM VARCHAR(20) Y
5 BIRTHDAY DATE Y
6 HIRE_DATE DATE Y
7 JOB_ID VARCHAR(10) Y
8 SALARY INTEGER Y
9 DEPT_ID INTEGER Y
DEPT表结构:
行号 NAME TYPES NULLABLE
1 DEPT_ID INTEGER N
2 DEPT_NAME VARCHAR(30) Y
3 LOCATION_ID INTEGER Y
4 LOCATION_ADDR VARCHAR(30) Y
其中
##########这部分可以不做###########################
# 调整内核参数
tee /etc/sysctl.d/dm.conf<<-"EOF"
fs.file-max = 6815744
fs.aio-max-nr = 1048576
# 控制共享内存页数,Linux页为4K,取值= (9/16物理内存大小)/4K
kernel.shmall = 2097152
#大于memory_target最大可设置成物理内存,这里是2G
kernel.shmmax = 2147483648
#最大共享内存段数量,通常不需要修改
kernel.shmmni = 4096
# 信号灯的相关配置,cat proc/sys/kernel/sem
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.overcommit_memory = 1
# 关闭swap
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
EOF
sysctl -p
sysctl -p /etc/sysctl.conf
sysctl -q vm.swappiness
# 关闭swap
swapoff -a
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
# 调整limits.conf
ulimit -n65536
tee /etc/security/limits.d/dmdba.conf <<-'EOF'
* soft nice 0
* hard nice 0
* soft as unlimited
* hard as unlimited
* soft fsize unlimited
* hard fsize unlimited
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
* soft core unlimited
* hard core unlimited
* soft data unlimited
* hard data unlimited
EOF
sysctl -p
tee /etc/profile.d/dm.sh<<-"EOF"
ulimit -SHn 65536
IP=$(hostname -I|awk '{ print $1}')
PS1="\[\e[1;32m\]\u\[\e[m\]\[\e[1;33m\]@$(hostname) $IP\[\e[m\]\[\e[1;35m\] \t \[\e[m\][pwd:\w]\\$ "
EOF
source /etc/profile
# 调整login
sed -i '/pam_limits.so/d' /etc/pam.d/login
tee >>/etc/pam.d/login<<-"EOF"
session required /lib64/security/pam_limits.so
session required pam_limits.so
EOF
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
##############以上部分可以不做#######################
# 1. 数据库安装
------------------------------
# 1)创建用户
groupadd dinstall
useradd -g dinstall dmdba
echo "Dameng123" |passwd --stdin dmdba
id dmdba
# 2)创建目录
mkdir /dm8
chown dmdba:dinstall /dm8 -R
cd /opt
mount dm8_20211111_x86_rh6_64_ent_8.1.2.18_pack16.iso /mnt
su - dmdba
cd /opt
# 3)安装软件
./DMInstall.bin -i
# 切到root执行
exit
/dm8/script/root/root_installer.sh
su - dmdba
# 修改环境变量
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin:/dm8/tool"
export DM_HOME="/dm8"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
source ~/.bash_profile
--------------------------------
# 2. 建库
dminit PATH=/dm8/data DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5238 SYSDBA_PWD=Dameng123 LOG_PATH=/dm8/data/DAMENG/DMSERVER01.log LOG_PATH=/dm8/data/DAMENG/DMSERVER02.log LOG_PATH=/dm8/data/DAMENG/DMSERVER03.log LOG_SIZE=128 EXTENT_SIZE=16 PAGE_SIZE=16
------------------------------
# 3. 数据库配置
cd /dm8/data/DAMENG
vi dm.ini
# 1) 修改数据缓冲区
BUFFER = 500
SELECT T.NAME,T.FILE_VALUE FROM V$PARAMETER T WHERE T.NAME LIKE 'BUFFER';
ALTER SYSTEM SET 'BUFFER'= 500 SPFILE; --修改BUFFER值为1000。
# 2) 修改兼容性
COMPATIBLE_MODE = 2
select name, type, value, sys_value, file_value, description
from v$parameter where name like '%COMPA%MODE%';
firewall-cmd --add-port=5236/tcp --permanent --zone=public
firewall-cmd --reload
firewall-cmd --list-ports
DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线
程,启动数据库实例,启动到 mount 状态,根据控制文件中的数据文件路径和练级日志文件
路径,找到并打开数据文件和联机日志,启动到 OPEN 状态。
Oracle 启动顺序:nomount->mount->open
Shutdown:关闭状态
Mount:配置状态,此时可以修改数据库归档配置、主备等模式,不能进行数据文件的读写。
此时数据库不能对外正常提供服务。
Open:打开状态,此时数据库提供正常的服务。可以读写数据文件。正常访问表,读取数据。
Suspend:只读状态,只能读,不能写(DML 操作一旦 commit,数据库即会被挂起)。
MOUNT 和 OPEN 可以相互转换(与 Oracle 不同)。SUSPEND 和 OPEN 也可以相互转换。
但 MOUNT 和 SUSPEND 之间不能相互转换。
SQL 分类
DML(Data Mannipulation Language)数据操纵语言:
查询、操纵数据表资料行,包含 SELECT、INSERT、UPDATE、DELETE,MERGE。
默认情况下,DML 不自动提交,需要手工提交(commit)和回滚(rollback);对数据的操作
会产生 REDO 和 UNDO;
alter system set 'COMPATIBLE_MODE'=2 spfile;
# 注册服务,启动数据库
exit
sh dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/data/DAMENG/dm.ini
su - dmdba
DmServiceDMSERVER start
# 3) 创建表空间TEST
disql SYSDBA/Dameng123:5238
create tablespace TEST datafile '/dm8/data/TEST01.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240,'/dm8/data/TEST02.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;
--------------------------------
# 4. 用户和角色管理
create role ROLEDM;
GRANT CREATE TABLE,CREATE VIEW,CREATE INDEX TO roledm;
create user DMTEST IDENTIFIED BY "Dameng123" default tablespace TEST;
grant ROLEDM to DMTEST;
# 检查权限
select * from dba_role_privs t where t.GRANTEE= 'DMTEST';
-----------------------------
# 5. 表管理
CREATE TABLE "DMTEST"."DEPT"
(
"DEPT_ID" INTEGER NOT NULL,
"DEPT_NAME" VARCHAR(30),
"LOCATION_ID" INTEGER,
"LOCATION_ADDR" VARCHAR(30),
NOT CLUSTER PRIMARY KEY("DEPT_ID")) STORAGE(ON "TEST", CLUSTERBTR) ;
CREATE TABLE "DMTEST"."EMP"
(
"EMP_ID" INTEGER NOT NULL,
"EMP_NAME" VARCHAR(20),
"EMAIL" VARCHAR(50),
"PHONE_NUM" VARCHAR(20),
"BIRTHDAY" DATE,
"HIRE_DATE" DATE,
"JOB_ID" VARCHAR(10),
"SALARY" INTEGER,
"DEPT_ID" INTEGER,
FOREIGN KEY("DEPT_ID") REFERENCES "DMTEST"."DEPT"("DEPT_ID"),
NOT CLUSTER PRIMARY KEY("EMP_ID"),
CHECK(birthday < to_date('2003-01-01', 'yyyy-mm-dd'))) STORAGE(ON "TEST", CLUSTERBTR) ;
----------------------------
# 6. 数据导入
start /opt/script1.sql
-------------------------
# 7. 备份和作业管理
# 1) 开归档
alter database mount;
alter database add archivelog 'dest=/dm8/arch,type=local,file_size=64';
alter database archivelog;
alter database open;
# 2)联机完全备份
SQL下执行
backup database to FULL_BAK backupset '/dm8/backup/FULL_BAK';
select arch_mode from v$database;
# 3)逻辑备份
./dexp SYSDBA/Dameng123:5238 FILE=/dm8/backup/db_full.dmp LOG=/dm8/backup/db_full.log full=y
# 4)job 自己用考试机上的manager做一遍,这个跟考试系统上有一点不一样
call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,'full_bak1');
call SP_JOB_CONFIG_START('JOB1');
call SP_ALTER_JOB_STEP('JOB1', '全备', 6, '00000000/dm8/backup', 0, 0, 0, 0, NULL, 0);
call SP_JOB_CONFIG_COMMIT('JOB1');
# 5) 增备
call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'每周一到周六22:00对数据库做增量备份');
call SP_JOB_CONFIG_START('JOB2');
call SP_ADD_JOB_STEP('JOB2', 'inc_bak', 6, '10000000/dm8/backup|/dm8/backup', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB2', 'inc_bak_schedule', 1, 2, 1, 126, 0, '22:00:00', NULL, '2022-06-08 18:35:26', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB2');
-------------------------
# 8. 数据库日常管理
# 1) 扩展表空间
alter tablespace temp resize datafile '/SJ/data/PROD/TEMP.DBF' to 1000;
# 2)视图
create view dmtest.view_emp as select d.dept_id as 部门编号,d.dept_name as 部门名称, avg(e.salary) as 平均工资 from dmtest.emp e,dmtest.dept d where e.dept_id=d.dept_id group by d.dept_name,d.dept_id having avg(e.salary)>9000 ;
# 3)添加索引
create index dmtest.IND_EMP_NAME on dmtest.emp(emp_name);
--------------------------
# 9. ODBC 安装软件/usr/local下
tar xvf unixODBC-2.3.2.tar.gz
cd unixODBC-2.3.2
./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes
make && make install
odbcinst -j
cat >/usr/local/etc/odbc.ini <<-EOF
[dm8]
Driver=DM8 ODBC DRIVER
DESCRIPTION=DM8 ODBC DRIVER
SERVER=localhost:5238
UID=sysdba
PWD=Dameng123
EOF
cat >/usr/local/etc/odbcinst.ini <<-EOF
[DM8 ODBC DRIVER]
Driver=/dm8/bin/libdodbc.so
UsageCount=1
EOF
su - dmdba
isql dm8 -v
select * from dba_users;
、sys -----达梦数据库内置管理用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图sys。
2、Sysdba -----数据库管理员用户
3、Sysauditor ----审计用户
4、Syssso —安全用户
5、Sysdbo ----数据操作员
#############################################################################
达梦redo日志管理
select * from v$rlogfile;
select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;
#增加redo日志大小
alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 150;
#############################################################################
https://wenku.baidu.com/view/a01d0e966adc5022aaea998fcc22bcd127ff425f.html
create tablespace china datafile '/SJ/data/china01.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;
alter TABLESPACE china add DATAFILE 'china01.DBF' size 128 AUTOEXTEND on NEXT 2 MAXSIZE 20480;
alter tablespace china offline;
alter TABLESPACE china RENAME DATAFILE 'china01.DBF' TO '/SJ/china01.DBF';
select * from v$rlogfile;
select * from v$rlog; --cur_file表示正在使用的联机日志
修改联机日志文件大小
alter database RESIZE LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO 500;
alter DATABASE ADD LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' SIZE 500;
alter tablespace china online;
alter tablespace jacky RENAME TO dmtbs;
修改联机日志文件路径(迁移联机日志文件)
alter database mount;
alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER01.log' TO '/SJ/redo/DM01.log';
alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER02.log' TO '/SJ/redo/DM02.log';
alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO '/SJ/redo/DM03.log';
alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' TO '/SJ/redo/DM04.log';
alter database open;
开启归档的方法:
查看归档配置:
select arch_mode from v$database;
select * from v$dm_arch_ini;
归档开启:
alter database mount;
alter database ARCHIVELOG;
alter database ADD ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,
space_limit=10240';
alter database open;
SQL 关闭归档
SQL> alter database mount;
SQL> alter database noarchivelog;
SQL> alter database delete archivelog 'type=local,dest=/dm8/arch';
SQL> alter database open;
SQL> select arch_mode from v$database;
DM 支持手工切换归档;
alter SYSTEM ARCHIVE LOG CURRENT;
alter SYSTEM SWITCH LOGFILE;
alter DATABASE ARCHIVELOG CURRENT;
归档文件的删除:
select * from v$ifun t where name like 'SF_ARCHIVELOG_%';
PWD_POLICY 是隐含参数,PWD_POLICY,只能通过函数或 SQL 语句修改。
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by dameng123;
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 15 BOTH;
用户锁定和解锁:
alter user hr ACCOUNT LOCK;
alter user hr ACCOUNT UNLOCK;
alter user hr DEFAULT TABLESPACE TEST;
用户资源限制
用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
grant RESOURCE to HR;
权限的回收:
SQL> revoke select on dmhr.employee from hrtest;
SQL> revoke create table from hrtest;
SQL> grant select (employee_id, employee_name) on dmhr.employee to hrtest;
select * from dba_sys_privs t where t.GRANTEE= 'HR';
select * from dba_role_privs t where t.GRANTEE= 'HR';
select * from dba_tab_privs t where t.GRANTEE= 'HR';
create schema hrtest01 AUTHORIZATION HR;
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER'); 或 select user;
backup database '/SJ/data/PROD/dm.ini' to FULLBAK01 backupset '/backup/bak';
restore database '/SJ/data/PROD/dm.ini' from backupset '/SJ/data/PROD/bak/DB_PROD_FULL_20220731_122440_470479';
表空间还原时会校验数据库魔数:
select permanent_magic; --查询数据库永久魔数
select db_magic from v$rlog; --查询数据库当前魔数
按用户导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=HRTEST.dmp
log=HRTEST.log owner=HRTEST
按模式导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=DMHR.dmp
log=DMHR.log schemas=DMHR
按表导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=EMPLOYEE.dmp
log=EMPLOYEE.log tables=DMHR.EMPLOYEE
按模式导入(将 A 模式导入到 B 模式,使用 REMAP_SCHEMA 参数):
dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=DMHR.dmp
log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST
dimp userid=sysdba/SYSDBA:5238 directory=/dm8/backup/dexp
file=t_dept.dmp log=t_dept.log tables=SYSDBA.t_dept remap_schema=SYSDBA:DMHR
dimp V8
./configure
注:configure 时可以使用--prefix 参数指定安装路径,不指定使用默认安装路径/usr/local
make
make install
(3) 配置驱动信息 odbcinst.ini 和数据源信息 odbc.ini
cd /usr/local/etc/
drwxr-xr-x 2 root root 6 12 月 22 16:56 ODBCDataSources
-rw-r--r-- 1 root root 0 12 月 22 16:56 odbc.ini
-rw-r--r-- 1 root root 0 12 月 22 16:56 odbcinst.ini
vi odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
vi odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5236
select * from dmhr.employee;
explain select * from dmhr.employee t where T.EMPLOYEE_NAME = '马学铭';
create index ix_emp01_employeename ON dmhr.employee(EMPLOYEE_NAME);
create table dmhr.t_emp like DMHR.EMPLOYEE;
create index ix_emp_employeename ON dmhr.t_emp(employee_name);
dbms_stats.gather_table_stats('dmhr','t_emp');
dbms_stats.table_stats_show('dmhr','t_emp');
dbms_stats.index_stats_show('dmhr','ix_emp01_employeename');
alter index dmhr.ix_emp_employeename MONITORING USAGE; --开启索引监控
alter index dmhr.ix_emp_employeename NOMONITORING USAGE; --关闭索引监控
select * from v$object_usage; --查看索引的监控信息
SQL> alter index dmhr.ix_emp_employeename MONITORING USAGE;--开启索引监控
操作已执行
已用时间: 1.482(毫秒). 执行号:51914.
SQL> alter index dmhr.ix_emp_employeename NOMONITORING USAGE;--关闭索引监控
操作已执行
已用时间: 7.694(毫秒). 执行号:51915.
SQL> select * from v$object_usage;--查看索引的监控信息
行号 INDEX_NAME SCH_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
---------- ------------------- -------- ---------- ---------- ---- ------------------- -------------------
1 ix_emp_employeename DMHR t_EMP NO NO 2022-07-31 22:08:42 2022-07-31 22:09:50
已用时间: 2.081(毫秒). 执行号:51916.
索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):
alter index dmhr.ix_emp_employeename rebuild ONLINE;
索引的数据字典:
select * from dba_indexes t where t.OWNER ='XXX';
select * from dba_ind_columns t where t.index_OWNER ='XXX';
删除索引:
drop index dmhr.ix_emp_employeename;
create view dmhr.v_emp
as
select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.EMAIL, a.PHONE_NUM
from dmhr.employee a
where a.DEPARTMENT_ID = 1001;
SQL> select * from dmhr.v_emp;
行号 EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUM
---------- ----------- ------------- ----------------------- -----------
1 10001 龚顺超 gongshunchao@dameng.com 18812370452
2 10100 陈伟婷 chenweiting@dameng.com 13612350355
3 10101 何杭菊 hehangju@dameng.com 18412363124
4 10102 欧锋利 oufengli@dameng.com 15712377535
5 10103 薛辉明 xuehuiming@dameng.com 18412349538
已用时间: 3.291(毫秒). 执行号:51924.
\\
创建复杂视图:
create or REPLACE view dmhr.v_emp_salary
as
select a.DEPARTMENT_ID, sum(A.SALARY) SUM_SALARY
from dmhr.employee a
group by a.DEPARTMENT_ID
having sum(A.SALARY) > 100000;
SQL> select * from dmhr.v_emp_salary;
行号 DEPARTMENT_ID SUM_SALARY
---------- ------------- --------------------
1 103 129443
2 105 194399
3 301 112344
4 303 497685
5 304 103007
6 305 220802
7 306 188212
8 404 142321
9 701 134447
10 703 2425858
11 704 323230
行号 DEPARTMENT_ID SUM_SALARY
---------- ------------- --------------------
12 705 564024
13 706 463811
14 905 128917
15 1004 101528
16 1005 135444
17 1104 110625
18 1105 142443
18 rows got
create or REPLACE view v_empnum
as select t.DEPARTMENT_ID, count(*) empnum
from t_emp01 t
group by t.DEPARTMENT_ID
having count(*) > 25;
--排行榜视图:
create view dmhr.v_salarytop as
select emp.employee_name,
dept.department_name,
emp.salary,
91 / 117
rank() over(order by salary desc) rank,
dense_rank() over(order by salary desc) dense_rank,
row_number() over(order by salary desc) rownumber
from dmhr.employee emp, dmhr.department dept
where emp.department_id = dept.department_id(+);
系统中所有对象的信息
SELECT * FROM SYSOBJECTS;
系统中所有索引定义信息
SELECT * FROM SYSINDEXES;
系统中所有列定义的信息
SELECT * FROM SYSCOLUMNS;
动态性能视图是从内存中或控制文件中读取的数据
SELECT * FROM V$BUFFERpool; --数据缓冲区
SELECT * FROM V$mem_pool;
显示数据文件、表空间信息
SELECT * FROM V$DATAFILE;
SELECT * FROM V$tablespace;
显示当前进程、线程信息
SELECT * FROM V$PROCESS;
SELECT * FROM V$threads;
查询事务等待:
select * from sys."v$trxwait";
select * from v$lock t where t.blocked =1;
select a.sess_id, a.sql_text, a.state, b.* from v$sessions a, v$trxwait b
where a.trx_id = b.id;\
\\\
insert into dmhr.t_dept select * from dmhr.department;
select arch_mode from v$database;
alter database mount;
alter database ARCHIVELOG;
alter database ADD ARCHIVELOG 'type=local, dest=/oaarch, file_size=64,space_limit=0';
alter database open;
checkpoint(100);
create table dmhr.t_dept as select * from dmhr.department;
backup database '/SJ/data/OA/dm.ini' to FULLBAK01 backupset '/backup/oa/';
SF_BAKSET_BACKUP_DIR_ADD('DISK','/backup/oa/');
表空间备份与恢复
全库备份
SQL>backup tablespace DMHR full to DMTBSFULLBAK01 backupset '/backup/oa/dmtbsfullbak01';
还原表空间
restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';
恢复表空间到最新
recover database '/SJ/data/OA/dm.ini' tablespace DMHR;
全库备份
SQL>backup tablespace DMHR full to DMTBSFULLBAK01 backupset '/backup/oa/dmtbsfullbak01';
还原表空间
RMAN> restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';
restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 38480 ...
redo pwr log collect finished
EP[0]'s cur_lsn[38480], file_lsn[38480]
restore successfully.
time used: 00:00:02.388
恢复表空间到最新
RMAN> recover database '/SJ/data/OA/dm.ini' tablespace DMHR;
recover database '/SJ/data/OA/dm.ini' tablespace DMHR;
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
begin redo pwr log collect, last ckpt lsn: 38480 ...
redo pwr log collect finished
EP[0]'s cur_lsn[38480], file_lsn[38480]
EP:0 total 2 pkgs applied, percent: 16%
EP:0 total 4 pkgs applied, percent: 33%
EP:0 total 6 pkgs applied, percent: 50%
EP:0 total 8 pkgs applied, percent: 66%
EP:0 total 10 pkgs applied, percent: 83%
EP:0 total 12 pkgs applied, percent: 100%
recover successfully.
time used: 544.255(ms)
社区地址:https://eco.dameng.com




