转载自王老师的课堂笔记,感谢老师的教导,连我这个小白也懂了一大半。

DCA
安装
创建数据库
管理数据库实例
表空间
用户
SQL(DDL,DML,DCL,TCL)
备份还原
作业
开发

2.安装
A 收集软硬件信息
cat /etc/issue
[root@localhost ~]# uname -r
[root@localhost ~]# uname -m
[root@localhost ~]# fdisk -l
P+E(0,1)<=4
[root@localhost ~]# parted
mkfs
[root@localhost ~]# df
[root@localhost ~]# iostat 1 10
注意raid lvm
[root@localhost /]# mdadm
[root@localhost /]# cat /proc/cpuinfo
主频,缓存,厂商(飞腾,龙芯,鲲鹏,海光,申威…)
[root@localhost /]# free
[root@localhost /]# top
B 规划用户
[root@localhost /]# groupadd dinstall
[root@localhost /]# useradd -g dinstall dmdba
[root@localhost /]# passwd dmdba
[root@localhost /]# id dmdba

cat /etc/default/useradd
[root@localhost /]# cat /etc/login.defs
C 规划安装路径和数据库的存储路径
[root@localhost /]# mkdir /dm7
D 注意权限
[root@localhost /]# ls -dl /dm7
[root@localhost /]# chown dmdba.dinstall -R /dm7
[root@localhost /]# ls -dl /dm7
E 选择安装版本(iso .zip .tar.gz)
[root@localhost opt]# file dm7_setup_rh6_64_ent.iso
zip/unzip tar.gz/ tar
F 配置环境变量
临时修改:
[root@localhost opt]# ulimit -n 65536
[root@localhost opt]# ulimit -a
[root@localhost security]# vim /etc/security/limits.conf
dmdba soft nofile 4096
dmdba hard nofile 65536
修改用户的环境变量:
cd /home/dmdba ; vim .bash_profile
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$PATH:$HOME/bin

安装:
[root@localhost opt]# mount -o loop dm7_setup_rh6_64_ent.iso /mnt
[root@localhost 桌面]# xhost +
[root@localhost opt]# su - dmdba
[dmdba@localhost mnt]$ ./DMInstall.bin
[root@localhost opt]# /dm7/script/root/root_installer.sh
bin 达梦常用的命令和库文件
doc 帮助手册
jar jar包()
license_zh.txt 、license_en.txt 许可信息
release_zh.txt release_en.txt 版本信息
tool 客户端工具
web DEM (利用web管理数据库)
bin2 UTF-8
drivers 驱动(jdbc)
jdk JAVA软件
log 日志
samples 例子
uninstall,uninstall.sh 卸载
desktop 桌面
include 头函数
script 脚本
卸载:
[dmdba@localhost dm7]$ ./uninstall.sh
[root@localhost opt]# /dm7/root_uninstaller.sh
G 回退方案
命令行安装:
[dmdba@localhost mnt]$ ./DMInstall.bin -i

3.创建数据库实例
GUI:dbca.sh (数据库配置助手)
CLI:dminit
[dmdba@localhost bin]$ ./dminit path=/dm7/data db_name=DM instance_name=TEST port_num=5237
[root@localhost root]# ./dm_service_installer.sh -t dmserver -p TEST -i /dm7/data/DM/dm.ini
4.管理数据库实例
是否启动:DM服务查看器
[dmdba@localhost root]$ ps -ef|grep dmserver
[dmdba@localhost root]$ netstat -ntl|grep 523

启动和关闭:
DM服务查看器
dmserver (调试)
[dmdba@localhost bin]$ ./dmserver /dm7/data/DM/dm.ini
SYSTEM IS READY.
service systemctl
[dmdba@localhost bin]$ service DmServiceTEST start

[dmdba@localhost init.d]$ /etc/rc.d/init.d/DmServiceTEST stop

启动的过程
A shutdown---mount
分配共享内存,启动后台进程和线程。打开控制文件。
B mount --- open
根据控制文件,打开数据库文件和重做日志文件

连接数据
A disql (默认连接5236)
[dmdba@localhost bin]$ ./disql sysdba/[email protected]:5236
[dmdba@localhost bin]$ ./disql [email protected]:5237

B DM管理工具

补充数据库的状态查看和改变?
SQL> select status$ from v$instance;
open mount suspend
open ---mount
SQL> alter database mount;
mount --- open
SQL> alter database open;

4.表空间管理
数据库的物理结构和逻辑结构
物理结构:文件系统----数据文件
逻辑结构:数据库---表空间(一个或多个数据文件)---段----簇---页
数据库的构成:
客户端+服务器 c/s
服务器:数据库(database,数据文件)+实例(instance,共享内存+后台的进程或者线程)
SQL> desc v$database
数据文件:SQL> select path from v$datafile;
重做日志文件:SQL> select path from v$rlogfile;
控制文件:SQL> select para_name,para_value from v$dm_ini where para_name='CTL_PATH';
SQL> desc v$instance
数据缓冲区:SQL> select para_name,para_value from v$dm_ini where para_name='BUFFER';
字典缓冲区:SQL> select para_name,para_value from v$dm_ini where para_name='DICT_BUF_SIZE';
SQL缓冲区:SQL> select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';
排序区:SQL> select para_name,para_value from v$dm_ini where para_name='SORT_BUF_SIZE';
哈希连接区:SQL> select para_name,para_value from v$dm_ini where para_name='HJ_BUF_SIZE';
线程:SQL> select name,thread_desc from v$threads;

对于参数的设置和调整:
SQL> sp_set_para_value(2,'BUFFER',500);
(范围,参数名,参数值)
COMPATIBLE_MODE
是否兼容其他数据库模式。0:不兼容,1:兼容SQL92标准,2:兼容ORACLE,3:兼容MS SQL SERVER,4:兼容MYSQL

A. 默认那些?作用?
SQL> select tablespace_name from dba_tablespaces;
行号 TABLESPACE_NAME


1 SYSTEM
2 ROLL
3 TEMP
4 MAIN
5 HMAIN
SYSTEM 系统表空间,存放的数据字典。
ROLL 回滚表空间 ,回滚段(MVCC)
TEMP 临时表空间,临时数据
MAIN 数据库默认的表空间
HMAIN huge表空间(列存)
B. 如何创建?
案例一:规划一个表空间,初始大小50M,最大1G。
SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1.dbf' size 50 autoextend on maxsize 1024;
注意:10m,最大1g?
表空间的数据文件初始大小是page的4096倍。
案例二:创建一个表空间,初始大小32M,最大1g,每次扩展1m。
SQL> create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3.dbf' size 32 autoextend on next 1 maxsize 1024;
默认:SQL> select sf_get_extent_size;
案例三:规划一个表空间,初始50M,最大值1G,要求表空间有2个数据文件。
SQL> create tablespace tbs4 datafile '/dm7/data/disk1/tbs4_1.dbf' size 50 autoextend on maxsize 1024,'/dm7/data/disk2/tbs4_2.dbf' size 50 autoextend on maxsize 1024;
C. 如何维护?
大小不足?
增加数据文件?
SQL> alter tablespace tbs5 add datafile '/dm7/data/DAMENG/tbs5_1.dbf' size 32 autoextend on maxsize 33;

更换存储位置?
注意:表空间的状态?
offline online
system,roll,temp不能offline
SQL> alter tablespace tbs5 offline;
SQL> select tablespace_name,status from dba_tablespaces;
SQL> alter tablespace tbs5 online;
SQL> select tablespace_name,file_name from dba_data_files;
SQL> alter tablespace tbs1 offline;
SQL> alter tablespace tbs1 rename datafile '/dm7/data/DAMENG/tbs1.dbf' to '/dm7/tbs1/tbs1.dbf';
SQL> alter tablespace tbs1 online;
删除表空间?
SQL> drop tablespace tbs5;
drop tablespace tbs5;

5.用户管理
安全?

  1. 默认那些用户,作用?
    SQL> select username from dba_users;
    行号 USERNAME

    1 SYS
    2 SYSDBA
    3 SYSAUDITOR
    4 SYSSSO
    SYS 数据库内置管理用户,不能登录数据库
    SYSDBA 数据库的管理员
    SYSAUDITOR 审计员
    SYSSSO 安全员(安全版)
    SYSDBO 操作员(安全版)
    SQL> select * from v$version;

  2. 规划用户?
    a. 用户名(字母开头,$_#,128字符)
    b. 默认存储位置(表空间)
    c. 密码(长度,复杂度,密码历史,期限)
    PWD_POLICY
    设置系统默认口令策略。0: 无策略;1: 禁止与用户名相同;2: 口令长度不小于6;4: 至少包含一个大写字母(A-Z);8 :至少包含一个数字(0-9);16:至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号;若为其他数字,则表示配置值的和,如3=1+2,表示同时启用第1项和第2项策略。当COMPATIBLE_MODE=1时,PWD_POLICY的实际值均为0

密码历史等信息,通过limit选项配置的。
案例1:创建用户user1,密码尝试登陆2次,锁定2分钟,密码有效期为180天。宽限期5天,默认的表空间为tbs2.
create user "USER1" identified by "dameng123"
limit failed_login_attemps 2, password_life_time 180, password_lock_time 2, password_grace_time 5
default tablespace "TBS2";
SQL> desc sysusers
如何解锁用户和锁定用户。
SQL> alter user user1 account unlock;
SQL> alter user user1 account lock;
d. 权限(系统权限,对象权限)
SQL> select grantee,granted_role from dba_role_privs where grantee='USER1';
SQL> select grantee,privilege from dba_sys_privs where grantee='PUBLIC';
新创建的用户默认分配public的角色。
系统权限:
SQL> grant create table to user1;
一般情况,把resource角色分给用户,基本可以满足用户的基本需求。(系统权限)
SQL> grant resource to user1;
对象权限:
查看DMHR.CITY
SQL> grant select on dmhr.city to user1;
SQL> grant select (employee_name) on dmhr.employee to user1;
撤销权限:
SQL> revoke create table from user1;
SQL> revoke select on dmhr.city from user1;
e. 资源限制(CPU,内存的使用限制)
案例2:创建用户user2,最大会话数是100,私有的内存200M。
create user "USER2" identified by "dameng123"
limit session_per_user 100, failed_login_attemps 3, password_lock_time 1,
password_grace_time 10, mem_space 200
default tablespace "TBS2";
grant "PUBLIC","RESOURCE" to "USER2";
SQL> create user abc identified by "dameng123" default tablespace tbs2;

  1. 维护用户?
    改密码
    SQL> alter user abc identified by 123456789;
    修改资源限制
    SQL> alter user abc limit password_life_time 180;
    删除
  2. 角色管理?
    一类权限的集合
    SQL> create role r1;
    SQL> grant select on dmhr.city to r1;
    SQL> grant r1 to user2;
    SQL> sp_set_role('R1',0);--禁用
    SQL> sp_set_role('R1',1);--启用
    SQL> drop role r1;

6.SQL
DDL 数据定义语言
create drop truncate alter

数据库的数据对象,存放到某个模式下。
创建一个用户的时候,会生成一个与用户同名的模式。
模式是一类数据对象的集合。(安全)

达梦支持哪些表?
默认表(索引组织表),堆表,外部表,分区表(范围,列表,哈希)
如何规划表?
表名称
权限
功用(规划列名和数据类型)
数据类型:int varchar char date clob blob
存储位置
备注(注释)
comment
范式(三范式)
约束
非空约束(不能录入空值)
create table "SYSDBA"."T1"
(
"C1" INT not null
)
tablespace tbs3
;
comment on table "SYSDBA"."T1" is '测试表';
insert into t1 values (1);
查看表的创建方法:
sp_tabledef('SYSDBA','T1');
录入SQL脚本:
SQL> start /home/dmdba/a.sql

唯一约束 (录入的值唯一)
create table "SYSDBA"."T2"
(
"C1" DEC(4, 2)
)
tablespace tbs3
;
alter table "SYSDBA"."T2" add constraint "T2_UNI" unique("C1");
select table_name,constraint_name,constraint_type from dba_constraints where table_name in ('T2','T3');
注意null

主键约束(唯一非空,一张表只能有一个主键)

create table "SYSDBA"."T4"
(
"C1" CHAR(10) primary key
)
tablespace "TBS3"
;
注意:设计主键的时候,尽量放到无任何业务逻辑的列上。

检查约束:
create table "SYSDBA"."T5"
(
"C1" INTEGER check (c1>=6)
) tablespace tbs3;
create table t6 (name varchar(20) check(name<>'老四')) tablespace tbs3;

外键约束
create table t9 (id int primary key,pid int);
create table t10 (sid int primary key,id int foreign key references t9(id));

维护表?
增加列,删除列
SQL> alter table t1 add name varchar(10);
SQL> alter table t1 drop name;
重命名:
SQL> alter table test rename to t11;
删除表:
SQL> drop table t11;
视图(简单视图)
视图理解一张表的透析。(视图本身不存储数据,视图查到的数据在表上)
创建
SQL> create view v1 as select * from dmhr.city;
SQL> select view_name,text from dba_views where view_name='V1';
修改
SQL> create or replace view v1 as select city_id,city_name from dmhr.city;
删除
SQL> drop view v1;

索引
理解成是一本书的目录。加快查询,对表做增删改操作,数据库会自动维护索引。
索引是一棵倒树,使用索引是多索引结构做遍历。
创建索引的基本规则:

  1. 经常查询的列
  2. 谓词后经常出现的列上
  3. 连接条件的列上
  4. NULL不是适合创建索引
  5. 列上的数据非常局限
    创建索引
    SQL> create table emp as select from dmhr.employee;
    SQL> select index_name from dba_indexes where table_name='EMP';
    二级索引
    SQL> create index ind_emp on emp (employee_id) tablespace main;
    SQL> explain select
    from emp where employee_id<100;
    使用索引
    注意:表或者数据库的统计信息是不是最新的。
    更新统计信息:
    dbms_stats
    begin dbms_stats.gather_table_stats('SYSDBA','EMP');
    end;
    /
    维护索引
    重建
    SQL> alter index ind_emp rebuild;
    SQL> alter index ind_emp rebuild online;
    删除
    SQL> drop index ind_emp;
    注意:一般在业务低谷去执行。

备份还原
目的:防止误操作,防止软硬件故障,自然灾害
方法:第三方工具,数据库的备份命令,集群
方式:物理备份,逻辑备份
物理备份:
脱机备份
数据库关闭
[dmdba@localhost ~]$ /etc/rc.d/init.d/DmServiceDMSERVER stop
Dmap服务是打开
[dmdba@localhost ~]$ /etc/rc.d/init.d/DmAPService start
利用控制台做备份和还原
注意:先做还原,在做恢复。
联机备份
数据库是打开
[dmdba@localhost 20200109]$ /etc/rc.d/init.d/DmServiceDMSERVER status
Dmap服务是打开
[dmdba@localhost 20200109]$ /etc/rc.d/init.d/DmAPService status
数据是归档模式
SQL> select arch_mode from v$database;
打开数据库归档:
数据库到配置模式:SQL> alter database mount;
配置归档文件:
SQL> alter database add archivelog 'dest=/dm7/arch,type=local,file_size=64,space_limit=0';
打开归档配置:
SQL> alter database archivelog;
打开数据库:
SQL> alter database open;
备份和还原
备份数据库,表空间,表,归档
备份数据库:
SQL> backup database backupset '/dm7/backup/20200109';
表空间:(system,roll不能单独备份)
SQL> backup tablespace dmhr backupset '/dm7/backup/dmhr_full';
备份表:
SQL> backup table dmhr.city backupset '/dm7/backup/city_bak';
备份归档:
SQL> backup archivelog backupset '/dm7/backup/arch_bak';

案例1:假设dmhr的表空间损坏?
SQL> alter tablespace dmhr offline;
SQL> restore tablespace dmhr from backupset '/dm7/backup/dmhr_full/';
SQL> alter tablespace dmhr online;
案例2:假设整个数据库损坏?
利用达梦控制台工具

逻辑备份:(打开)
dexp dimp
备份整个数据库,备份用户,备份模式,备份表
[dmdba@localhost 20200109]$ dexp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=emp
[dmdba@localhost 20200109]$ dimp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=emp

作业
定期制定某项任务

  1. 定期做备份
  2. 定期执行脚本
  3. 定期收集统计信息
  4. 做迁移等
    配置作业的步骤:
  5. 初始代理环境(生成一个sysjob的模式)
  6. 打开作业
  7. 配置步骤
  8. 配置调度
  9. 提交作业
    案例1:每周三晚上23:00对数据库做完全备份。
    call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'');
    call SP_JOB_CONFIG_START('full_bak');
    call SP_ADD_JOB_STEP('full_bak', 'f1', 6, '01000000/dm7/backup/bak', 1, 2, 0, 0, NULL, 0);
    call SP_ADD_JOB_SCHEDULE('full_bak', 'f2', 1, 2, 1, 8, 0, '23:00:00', NULL, '2020-01-09 11:03:08', NULL, '');
    call SP_JOB_CONFIG_COMMIT('full_bak');

select from "SYSJOB"."SYSJOBS";
select
from "SYSJOB"."SYSJOBSTEPS";
select from "SYSJOB"."SYSJOBSCHEDULES";
select
from "SYSJOB"."SYSJOBHISTORIES";
案例2:周一,周二,周四到周日做增量备份(23:00)
call SP_CREATE_JOB('inc_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('inc_bak');
call SP_ADD_JOB_STEP('inc_bak', 'i1', 6, '11000000/dm7/backup|/dm7/backup', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('inc_bak', 'i2', 1, 2, 1, 119, 0, '23:00:00', NULL, '2020-01-09 11:10:14', NULL, '');
call SP_JOB_CONFIG_COMMIT('inc_bak');

开发
达梦支持的语言:C C++ JAVA PHP…

JAVA: JDBC
DM7 JDBC编程注意事项
// 定义DM JDBC 驱动串
String jdbcString = "dm.jdbc.driver.DmDriver";
// 定义DM URL 连接串
String urlString = "jdbc:dm://localhost:5236";

ODBC:
[dmdba@localhost 桌面]$ tar -xf unixODBC-2.3.0.tar.gz
[dmdba@localhost 桌面]$ rpm -qa|grep gcc
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make
[root@localhost unixODBC-2.3.0]# make install
查看版本:
[root@localhost etc]# odbc_config –version
查看odbc配置文件的路径:
[root@localhost etc]# odbc_config –odbcini
[root@localhost etc]# odbc_config –odbcinstini
修改odbc.ini文件
[dmdba@localhost]# vi /usr/local/etc/odbc.ini
[dm]
Description = DM ODBC DSN
Driver = DM7 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
修改odbcinst.ini文件
[dmdba@localhost]# vi /usr/local/etc/odbcinst.ini
[DM7 ODBC DRIVER]
Description = ODBC DRIVER FOR DM7
Driver = /dm7/bin/libdodbc.so
[dmdba@localhost ~]$ isql dm

总结:
安装—创建数据库---创建表空间---创建用户---创建表---导入数据---备份---作业---配置开发