DCA培训笔记
最近参与了达梦数据库DCA的培训,也就是达梦数据库认证管理员。
现将学习总结分享与此。
此次培训是基于Linux系统下的操作,所以Linux的基本操作还是需要了解。
特别注意一下,国产的芯片。华为....
[root@dca01 ~]# cd /home/dmdba
[root@dca01 dmdba]# vi .bash_profile
方式一:[dmdba@dca01 ~]$ umlimit -n 65536
方式二:[root@dca01 dmdba]# vi /etc/security/limits.conf
达梦数据库版本:
开发版:并发数和使用时间做了限制,功能和企业是一样的,但是不能做为商用。
标准版:适用于小型应用,不支持集群,对用户数和并发数有限制
企业版:适用于中大型应用,在生产环境中应用最多的一个版本,三权分立。
安全版:在企业版的基础上做了安全特性,增加了访问控制。四权分立。性能比企业版稍差。
根据服务器的软件硬件环境选择相应安装包。
.iso ,tar...
挂载安装盘:
[root@dca01 installdoc]# mount -o loop /installdoc/dm7_setup_rh6_64_ent_7.6.0.142_20190312.iso /mnt
命令行安装:
[dmdba@dca01 mnt]$ ./DMInstall.bin -i
安装目录介绍:
BIN:达梦数据库命令和lib库
BIN2:uft8
Desktop: 桌面快捷键
DOC:用户手册和操作手册
Drivers:驱动
Include:c语言,头文件
Jar:jar包(导入导出,快速加载,日志挖掘)
Log: 日志文件
Jdk:java包
Tool:客户端
Web:dem
Script:脚本文件
脚本uninstall.sh 在安装目录下。
[dmdba@dca01 tool]$ dbca.sh
1.测试查询语句:select 1;
select top 2 from v$dm_ini;
select from v$dm_ini limit 2;
select * from v$dm_ini where rownum<2;
2.达梦大小写:
DM7.6之前版本默认密码是转为大写存储的,登录时要注意。比如用户设置test/test123456,那么登录的时候用test/TEST123456和TEST/TEST123456可以登录,用test1/test123456和TEST1/test123456就不能登录。如果设置密码时加引号,则存储实际的密码。
DM8版本后大小写默认通用,用户名密码默认统一都存储大写的,登录时用大小写都可以,都转为大写做匹配。如果设置密码时加引号,则存储实际的密码。
3.语句拼接用“||”,如:select username||user_id users from dba_users;
4.oracle支持不等于的写法,DM只支持<>和!=,如下语句
select from dba_users d where d.username <> 'SYS';
select from dba_users d where d.username != 'SYS';
select * from dba_users d where d.username ^= 'SYS';
5.达梦数据库创建表空间数据文件要求最小要32M。添加的数据文件大小最小为4096页大小,如页大小为8K,则可添加的文件最小值为40968k=32M。
6.查看执行计划:explain select ID from TAB1;
启停连接数据库
启停数据库
[root@dm1 dm]# service DmServiceDMSERVER start
[root@dm1 dm]# service DmServiceDMSERVER stop
[root@dm1 dm]# service DmServiceDMSERVER restart
[root@dm1 dm]# service DmServiceDMSERVER status
连接数据库
注:在连接前是已经启动了数据库服务和配置环境变量的
连接命令:
disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 30.904(毫秒)
disql V7.6.0.77-Build(2018.07.17-94714)ENT
Connected to: DM 7.1.6.77
SQL>
如果没有配置环境变量可直接到DM路径的bin目录下操作
[root@dm1 dm]# su - dmdba
[dmdba@dm1 dmdbms]$ cd /home/dmdba/dmdbms/bin
[dmdba@dm1 bin]$ ./disql SYSDBA/DAMENG123@localhost
(使用dminit 创建的实例需要注册服务)
[dmdba@dca01 tool]$ dminit path=/dm7/data DB_NAME=DM02 instance_name=DM02 PORT_NUM=5239
[root@dca01 ~]# /dm7/script/root/dm_service_installer.sh -t dmserver -i /dm7/data/DM02/dm.ini -p DM02
5.1达梦数据库的模式:
5.2数据库的状态
5.3状态切换
Shutdown ---mount
Shutdown---open
Open ----mount
Mount----open;
5.4启动过程
分配共享内,启动后台的进程或是线程,打开控制文件。
根据控制文件,打开所有的数据文件和重做日志文件。
启动实例的方法:
1、服务查看器
达梦数据库DmAPService无法开启问题
达梦数据库DmAPService无法开启问题
我们在使用数据库中会用到备份功能,无论冷备份还是热备份,我们的DmAPService服务是必须开启的。那么有些人会发现自己的DmAPService服务是停止状态。并且手动开启也无法完成。
这里为了处理方便快捷看的清楚,使用可视化界面的方式处理。
1.首先我们看到服务停止,并且无法开启
2.报错信息中给了我们日志地址,要求我们查看日志。
从日志中可以发现,错误信息提示的是管道文件已存在,可以理解为,我们每次启动服务的时候,会自动生存管道文件,但或因为数据库异常或bug导致管道文件存在但服务缺异常的情况。这时候我们只要删除管道文件,让数据库重新生存即可。
3.现在我们到数据库的文件夹下,bin目录中,删除2个文件。
(数据库文件位置为安装数据库时所设置的位置)
如下图显示的地址,我的安装路径为dm7/bin
管道文件为:
DM_PIPE_DMAP_LSNR_RD
DM_PIPE_DMAP_LSNR_WR
我们将其删除。
4.删除后我们再启动服务,会发现服务已经可以正常开启了。
2、命令行启动:dmserver
当前session有效。关闭会话,连接就断了。
Linux 6: sevice DmServiceDM02 start
Linux7:systemctl start DmServiceDM02
判断DM数据库是不是启动的
6.1disql工具的使用
https://mp.weixin.qq.com/s/UKvdr8wHat_MP12KZCyDfQ
https://mp.weixin.qq.com/s/Nvx_oSPTidIeNqed7l1KTg
https://mp.weixin.qq.com/s/QGGOH1APIo2VpEhgn5YGkA
6.2数据库管理工具
6.3控制台工具
COMPATIBLE_MODE 是否兼容其他数据库模式。0:不兼容,1:兼容SQL92标准,2:兼容ORACLE,3:兼容MS SQL SERVER,4:兼容MYSQL
数据库---表空间-----数据文件--段---簇----页
页是最小的逻辑单元,是数据库最小的分配单位。
数据库由一个或多个表空间组成。
每一个表空间由一个或多个数据文件组成
每一个数据文件由一个或多个簇组成
段是簇的上级逻辑单位,一段可以跨多个数据文件
簇是磁盘上连续的页组成。一个簇总一个数据文件中。
页:数据块,最小的数据IO单元。
页的大小可以设置为4K,8k,16k,32k 默认8k.
数据页包含4个部分:页头控制信息,数据,空闲空间,行偏移数组。
簇:是由16或32个连续的数据页组成。默认16.
比如:数据文件 大小为32m ,页大小是8k,则共有 32M/8K/16=256个簇。
每个簇的大小,8k*16=128k
段:由表空间中的一组簇组成,数据文件可以由不同的簇来组成。
8.2.1配置文件
以ini结尾的文件
8.2.2 控制文件
控制文件是一个二进制文件,以ctl结尾。
控制文件参数:[dmdba@dca01 DAMENG]$ cat dm.ini|grep ctl
查看控制文件内容:
[dmdba@dca01 DAMENG]$ dmctlcvt help
[dmdba@dca01 DAMENG]$ dmctlcvt type=1 src=/dm7/data/DAMENG/dm.ctl dest=/tmp/dmctl.txt
不要随便去修改控制文件
8.2.4数据文件
以dbf结尾的文件
数据文件的大小范围:4096*页大小 -------2147483647*页大小
达梦数据库页大小:4K 8K 16K 32K 默认8k
表空间中数据文件的总数不超过256个
8.2.5重做日志文件
以log结尾的文件
SQL> alter database add logfile '/dm7/data/DAMENG/DAMENG04.log' size 128;
重做日志不能删除,所有日志文件大小要求一致。
8.2.6备份文件
以bak为扩展名的文件,还一个.meta元数据文件。
8.2.7归档日志文件
利用归档日志,将系统恢复至故障发生的前一刻,也可以还原指定的时间点,如果没有归档日志,则只能利用备份来进行恢复。
归档参数文件: dmarch.ini
[dmdba@dca01 DAMENG]$ cat dmarch.ini
8.2.8跟踪文件
跟踪日志文件记录了系统各会话执行的sql语句,错误信息,主要错误和性能问题。启动跟踪日志,对系统性能有较大的影响,默认情况下跟踪日志是关闭的。
Dm.ini svr_log 参数改为1就打开中跟踪日志。
8.2.9事件日志文件
记录了数据库运行期间的关键事件,如启动,关闭,内存申请失败,io错误等一些致命的错误。DM_HOME/log目录下。命名格式:dm_实例名_日期。
8.3.1共享内存
SQL> select distinct name,is_shared from v$mem_pool order by 2;
采用共享内存池可以一次性向操作系统申请一大片内存,即内存池在实例运行中需要内存时,可在共享内存池内进行申请或者释放。共享内存池可以在实例的配置文件(dm.ini)进行配置。
SQL> select para_name,para_value from v$dm_ini where para_name like '%MEMORY%';
MEMORY_TARGET 共享内存的总大小 。0:表示不限制。
Oracle: memory_target=sga+pga
公共池:Memory_pool 157 (减少系统调用)
8.3.2数据缓冲区
缓存使用的数据块,增加逻辑读的次数,提高修改和查询的性能。
参数:BUFFER
参考值:
Oltp:buffer 大小占整个物理内存的40%-60%
Olap:buffer 大小为整个物理内存的60%-80%
数据缓冲区保存的是数据页,包括用户更改的数据页,查询时从磁盘读取的数据页。
相关的视图:
V$bufferpool:用来记录页面缓冲区结构的信息。
V$buffer_lru_first:显示所有缓冲区LRU链首页信息。
V$buffer_lru_last:显示所有缓冲区LRU链末页信息。
V$buffer_upd_first:显示所有缓冲区update链首页信息。
V$buffer_upd_last:显示所有缓冲区update链末页信息。
数据缓冲区有5种类型:
Normal 、keep、 fast、 recycle 和roll;
ORACLE: RECYCLE和keep存的表。
DM:recycle和keep 存的是表空间。
修改参数值:
Oracle:alter system set ....
DM:SP_SET_PARA_VALUE(scope,para_name,para_value);
通过视图v$parameter来查看类型
DM的参数类型:
Sys/session:动态参数,同时修改内存和配置文件
Read only:在数据库运行状态时,不能修改。
IN FILE:静态参数,修改配置文件,重启服务生效。
Scope:
1:动态参数
2:静态参数。
SQL> Select para_name,para_value from v$dm_ini where para_name='BUFFER';
SQL> sp_set_para_value(2,'BUFFER',1500);
重启生效
BUFFER_POOLS: 缓冲池个数
Max_buffer:缓冲区最大值
是否读取多页:MULTI_PAGE_NUM,默认是单页。
在数据库加密或是启用ssd缓冲区,则不支持多页读取。
8.3.3字典缓冲区
字典缓冲区主要存的一些数据字典信息,如模式信息,表信息,列信息,触发器信息等等。实例在启动的时候,会将部分的数据字典信息加载到字典缓冲区中,并采LRU算法进行字典信息的控制。
DICT_BUF_SIZE
V$DICT_CACHE_ITEM:字典缓冲区中字典对象的信息。
V$DICT_CAHCE:字典缓冲区的信息.
8.3.4 Sql缓冲区
SQL> Select para_name,para_value from v$dm_ini where para_name='DICT_BUF_SIZE';
A 语法分析
B 语义分析(读字典表)
C 权限判断
D 查找数据块是否在内存(在内存,产生逻辑读,不在内存,产生物理读)
E 是否有可用的执行计划 ,如有的话,按执行计划来,如果没有,就生成执行计划,运行sql ,将结果集发回客户端)
Sql缓冲区里存放的都是最近使用的执行计划和最近查询的结果集。
USE_PLN_POOL:是否重用执行计划。
1:启执行计划重用
0:禁止执行计划重用
2:对不包含显示参数的语句进行常量参数优化。
3:即包含显示参数语句,也进行常量参数优化。
Cache_pool_size:sql缓冲区的大小
RS_CAN_CACHE:控制结果集缓存
0:禁止重用结果集
1:强制模式:默认缓存所有的结果集
2:手动模式:默认不缓存结果集。
仅当参数RS_CAN_CACHE=1 且USE_PLN_POOL非0的时候,才会缓存结果集。
相关的视图:
V$sql_plan:缓冲区中的执行计划信息。
V$sql_history:sql执行历史信息
V$sql_text:sql执行信息。
V$cachesql:缓冲区中SQL语句的信息。
8.3.5重做日志缓冲区
用于存放重做日志的内存缓冲区,为了避免直接对磁盘的io进行读写,对数据库的性能产生影响。
Rlog_buf_size:日志缓冲区的大小 单位:page 大小设置为2的幂。
Rlog_pool_size:最大日志缓冲区的大小 :单位M
机制是:每3秒写一次,或者是当我们提交的时候,commit;
8.8.6排序区
提供数据排序所需要的内存空间,如果内存排序无法完成,把部分排序转到磁盘上,tmp
SORT_BUF_SIZE
8.3.7Hash区
为了哈希连接设定的缓冲区,该缓冲区是虚拟缓冲区
HJ_BUF_SIZE
8.3.8 SSD缓冲区
将ssd文件用为内存缓存与普通磁盘之间的缓冲层,称为SSD缓存。默认SSD缓冲区是关闭 的,启用ssd缓冲,将SSD_BUF_SIZE设置为大于0,并指定SSD_FILE_PATH就可以了。
本机ping不通虚拟机,但虚拟机可以ping通本机时怎么解决
在各自网络都连接的情况下,本机ping不通虚拟机,但虚拟机可以ping通本机时解决方案:
1、linux虚拟机中连接方式选择NAT模式
2、本地启动VMnet8,然后选择VMnet8的属性,手动输入和linux虚拟机ip在同一网段的ip即可
达梦数据库是单进程、多线程结构
数据库实例:内存结构+一系列的线程组成的。
相关视图:
V$LATCHES:在等待线程信息
V$threads:当前系统中所有活的线程的信息。
V$wthrd_history:记录自数据库启动以来,所有活动过的线程的相关历史信息。
V$process:查看当前数据进程信息。
监听线程
IO线程
工作线程
调度线程
日志重做线程
日志归档线程
日志写线程 (把重做日志缓冲区的数据到重做日志中)
......
表空间是由一个或多个数据文件构成。
达梦数据库默认有哪些表空间和作用?
V$tablespace dba_tablespaces; v$huge_tablespace dba_data_files;
System:数据字典和全局的系统数据
Roll: 存放了数据库运行过程中产生的回滚记录。
TEMP:临时表空间
Main:数据库默认的表空间。创建数据对象的时候,如果不指定存放的位置,默认存放在该表空间。
HMAIN:HUGE表空间
相关参数:
Undo_retention :单位秒
查询所有表空间
SQL> select name from v$tablespace union select name from v$huge_tablespace;
案例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;
SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1_01.dbf' size 32;
初始文件大小是页的4096倍。 4096*8K =32M
案例2:创建一个表空间,初始大小50M,最大100M
SQL> create tablespace tbs2 datafile '/dm7/data/DAMENG/tbs2_01.dbf' size 50 autoextend on maxsize 100;
案例3:创建一个表空间,初始大小50M,表空间由2个数据文件组成,分别存储在不同磁盘上,每次扩展1m,每个数据文件最大100M.
SQL> create tablespace tb3 datafile '/dm7/data/DAMENG/tbs3_01.dbf' size 50 autoextend on next 1 maxsize 100,'/dm7/data/DAMENG/tbs3_02.dbf' size 50 autoextend on next 1 maxsize 100;
表空间不足,如何去维护表空间:
SQL> alter tablespace tbs1 add datafile '/dm7/data/DAMENG/tbs1_02.dbf' size 32;
达梦表空间的状态:
0:---online
1:---offline
注意:system,roll. Temp不能offline;
案例4:更换TB3的存储位置。
SQL> alter tablespace tb3 offline;
SQL> alter tablespace tb3 rename datafile '/dm7/data/DAMENG/tbs3_02.dbf' to '/dm7/data/tbs3_02.dbf';
SQL> alter tablespace tb3 online;
9.5删除表空间
SQL> drop tablespace tbs2;
在DM数据库中用户管理主要涉及到三块,用户,权限,角色。
权限:执行特定类型sql或是访问其他模式对象的权利。
系统权限:数据库对象的创建、删除、修改等等。
对象权限:对数据库对象中的数据的操作权限。
角色:是将具有相同权限的用户组织在一起,这一组具有相同权限的用户称为角色。角色是一组权限的集合。一个权限可以赋予不同的角色。
数据库预定义角色三个:DBA,PUBLIC,RESOUCE
三权分立和四权分立
三权分立:数据库管理员,数据安全员,数据库审计员
四权分立:数据库管理员,数据库对象操作员,数据库安全员,数据库审计员。
默认的账号:
数据库管理员:sysdba
数据库对象操作员:sysdbo :只有在安全版里面才会有
数据库安全员: syssso
数据库审计员:sysauditor
所有账号的默认口令都与用户名一致大写。
名字:字母开头,a-z,0-9,$#_
位置:对应的表空间
密码:口令策略
0:无策略
1:禁止与用户名相同
2:口令长度不小于9
4:至少包含一个大写字母
8:至少包含一个数字
16:至少包含一个标点符号(英文的状态下输入,除空格和“”)
口令可以单独使用,也可以组合使用,比如说需要策略1和2 则设置口令策略为3.
创建用户语句 password policy 子句来指定口令策略。用户密码最长为48个字节。
Faild_login_attemps :密码尝试登录次数
Password_lock_time :密码失败后锁定时间
Password_life_time :密码过期时间。
用户视图:
Sysuser , all_user, dba_user
案例1:建立用户test,用户可以创建自己的表,有属于自己独立的表空间,用户密码要求每60天变更一次。
SQL> create tablespace test datafile '/dm7/data/DAMENG/test01.dbf' size 32;
SQL> create user test identified by dameng123 limit password_life_time 60 default tablespace test;
SQL> grant create table to test;
如何查看用户权限
SQL> select grantee,granted_role from dba_role_privs where grantee='TEST';
SQL> select grantee,privliege from dba_sys_privs where grantee='PUBLIC';
案例2:规划一个用户,用户每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;
SQL> alter user test account unlock;
SQL> Grant select on dmhr.employee to test1;
SQL> revoke select on dmhr.employee from test1;
SQL> grant select(employee_name,hire_date) on dmhr.employee to test1;
SQL>select employee_name,hire_date from dmhr.employee;
案例3:企业招聘一批录入人员,权限固定,只能录入city表。
SQL> create user test2 identified by dameng123;
SQL> create role r1;
SQL> grant insert on dmhr.city to r1;
SQL> grant r1 to test2;
SQL> grant references any table to test2;
收回权限:revoke
SQL> revoke r1 from test2;
修改用户密码:
SQL> alter user test2 identified by 123456789;
锁定用户:
SQL> alter user test2 account lock;
解锁用户:
SQL> alter user test2 account unlock;
删除用户:
SQL> drop user test2;
SQL> drop user r1;
SQL> drop user test1 cascade;---慎重,最好备份
模式是所有对象的集合(表、视图、索引,序列,同义词,自增列)。
DM在创建用户的时候,会默认的创建一个同名的模式。
11.1.1达梦支持那些表
默认的表是索引组织表,支持堆表,临时表,分区表,外部表等等。
11.1.2如何去规划表
遵循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 "TEST"."STU"
(
"ID" CHAR(10) NOT NULL,
"SNME" VARCHAR(20) NOT NULL,
"SEX" CHAR(1),
"AGE" INT,
"TEL" VARCHAR(15) NOT NULL,
"ADDRESS" VARCHAR(50),
CLUSTER PRIMARY KEY("ID")) STORAGE(ON "STU", CLUSTERBTR) ;
COMMENT ON TABLE "TEST"."STU" IS 'STUDENT INFO';
创建表的时候指定约束
SQL> create table test.t2(id int);
SQL> alter table test.t2 modify id int not null;
唯一约束
SQL> create table test.t3(id int unique);
唯一约束遇到null,忽略,可录入多个。
主键约束(一张表只能有一个主键)
SQL> create table test.t4(id int primary key);
SQL> create table test.t5(id int);
SQL> alter table test.t5 add constraint t5_pri primary key(id);
检查约束
SQL> create table test.t6(id int check(id>=5));
外键约束(可以有多个外键,外键是另一张表的主键)
SQL> create table test.t7(sid int primary key,pid int);
SQL> create table test.t8(id int primary key,sid int foreign key references test.t7(sid));
对列加备注:
SQL> comment on column test.t7.sid is '编号';
导入数据到表中:
Vi a.sql 写入insert into test.T1 valuse(1); 然后:wq 退出
如何维护表:
SQL> alter table test.t1 rename to TT;
删除列
启用和禁用约束
SQL> select table_name,constraint_name,constraint_type from dba_constraints where table_name='T6';
SQL> alter table test.t6 disable constraint CONS134218842;
SQL> alter table test.t6 enable constraint CONS134218842;
删除表:
SQL> drop table test.tt;
如何去查看表结构
Sp_tabledef(‘模式名’,‘表名’)
DBMS_METADATA.GET_DDL(类型,表名,模式名)
视图分类:简单视图,复杂视图,物化视图
注意:简单视图和复杂视图不占磁盘空间,物化视图占磁盘空间。
11.2.1 简单视图
创建create view() as select () from () where ()
SQL> grant select on dmhr.employee to test;
SQL> create view test.v1 as select * from dmhr.employee;
相关视图
Dba_views;
删除视图:
SQL> drop view test.v1;
索引的作用:加快表的查询,对数据库做DML操作的时候,数据会自动维护索引。
索引是一棵倒置的树,使用索引,就是对这棵树做遍历,
达梦支持的索引:二级索引,位图索引,唯一索引,复合索引,函数索引,分区索引等。
11.3.1建立索引的规则:
适合建索引的情况
........
不适合建索引的情况
......
查看表的索引
创建索引:
规划索引表空间:
表的数据是无序的,索引的数据是有序的。
创建索引表空间:
SQL> create tablespace index1 datafile '/dm7/data/DAMENG/index101.dbf' size 32;
建索引:
SQL> create table test.emp as select * from dmhr.employee;
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
没有走索引,统计信息是旧的,需要重新收集
SP_CREATE_SYSTEM_PACKAGES(1);
注意,创建索引,删除,重建索引,收集统计信息的时候,不要在业务高峰去做。
11.3.2 维护索引
重建
SQL> alter index test.ind_emp rebuild;
SQL> alter index test.ind_emp rebuild online;
删除索引:
SQL> drop index test.ind_emp;
预分配一组内存空间,可以将序列作为自增列。
创建:
CREATE SEQUENCE "TEST"."S1"
INCREMENT BY 1 ----自增多少
START WITH 1 ---起始值
MAXVALUE 5 ---最大值
MINVALUE 1 --最小值
NOCYCLE ----是否循环
NOCACHE ---是否缓存
NOORDER ---是否顺序
;
应用:
SQL> create table test.t10(id int primary key);
SQL> insert into test.t10 values(test.s1.nextval);
SQL> insert into test.t10 values(test.s1.nextval);
SQL> insert into test.t10 values(test.s1.nextval);
SQL> insert into test.t10 values(test.s1.nextval);
SQL> insert into test.t10 values(test.s1.nextval);
SQL> insert into test.t10 values(test.s1.nextval);
修改序列:
SQL> alter sequence test.s1 maxvalue 10;
SQL> select test.s1.nextval;
行号 NEXTVAL
---------- --------------------
1 6
SQL> select sequence_name,max_value from dba_sequences where sequence_name='S1';
删除:
SQL> drop sequence test.s1;
同义词是对象的别名,可以替换模式下的表、视图、序列、函数、存储过程等对象。
同义词公共同义词和普通同义词。
公共同义词:所有用户可以使用,使用时不需要加任何的模式限定。
普通同义词:引用的时候需要加上模式名。
创建:
普通同义词:
SQL> create synonym test.sy1 for dmhr.employee;
公共同义词:
SQL> create public synonym sy2 for dmhr.employee;
查同义词:
SQL> select table_name,synonym_name from dba_synonyms where synonym_name in ('SY1','SY2');
删除同义词:
SQL> drop synonym test.sy1;
SQL> drop public synonym sy2;
一个表只能有一个自增列
语法:
Identity[(种子,增量)]
种子:装载到表中的第一个行所使用的值。
增量:增量值,被添加前一个已装载的行的标识值上。增量可以是正数或是负数,但不能为0;
CREATE TABLE "TEST"."TABLE_1"
(
"ID" INT IDENTITY(1, 1) NOT NULL,
CLUSTER PRIMARY KEY("ID")) STORAGE(ON "TEST", CLUSTERBTR) ;
DMSQL 基于sql92,部分基于sql99
SQL:
DDL:定义 create drop alter truncate
DML:管理 select update delete insert
DCL:控制 grant revoke
TCL:事务控制 commit rollback
Select
语法:select () from ()
第一个括号:*, column_name, alias,expr || distinct
第二个括号:table_name
Select * 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;
Where 子句常用的查询条件由谓词和逻辑运算符组成,谓词指一个条件,结果为一个布尔值,真,假或是未知。
逻辑运算符:and or not
比较谓词:< > <= >= <> =
BETWEEN IN LIKE NULL EXISTS
LIIKE % _
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;
集函数:
求各个部门的最高工资:
SQL> select department_id,max(salary) from dmhr.employee group by department_id;
排序:desc 降序 asc升序
SQL> select department_id,max(salary) ss from dmhr.employee group by department_id order by ss desc;
SQL> select department_id,max(salary) ss from dmhr.employee group by department_id order by ss ;
按照部门分组,求各部门的平均工资,找出部门平均工资大于10000.
SQL> select department_id,avg(salary) from dmhr.employee group by department_id having avg(salary)>10000;
注意:having表示分组后的数据进行过滤,having不能单独使用,一定是和group by 一起使用的。
Select 后出现的列(聚合函数除外),一定要出现在group by 之后。
语法:select () from () join () on()
第三个括号:表名
第四括号:关联字段。
SQL> select employee_name,department_name from dmhr.employee e join dmhr.department d on e.department_id=d.department_id limit 10;
SQL> select employee_name,department_name from dmhr.employee e join dmhr.department d using(department_id) limit 10;
外连接:
左外连接:把写left join 左边的全部显示,右边的只显示满足条件的,不满足条件的用null代替。
SQL> select e.employee_name,d.department_name from dmhr.employee e left join dmhr.department d on e.department_id=d.department_id limit 10;
SQL> update dmhr.employee set department_id=null where employee_name='马学铭';
右外连接:
把写在right join右边的全部显示出来,左边的只显示满足条条件,不满足条件的用null代替。
SQL> select e.employee_name,d.department_name from dmhr.employee e right join dmhr.department d on e.department_id=d.department_id limit 10;
全外连接
返回所有的记录,包括不满足条件的。
SQL> select e.employee_name,d.department_name from dmhr.employee e full join dmhr.department d on e.department_id=d.department_id limit 10;
全外连接=左外连接 union 右外连接
总结:
子查询是一个查询sql,嵌套在主查询中,并且其结果做为主查询的条件。子查询行于主查询运行。
1、结果集返回值是唯一的:
Select () from () where()=(子查询结果)
SQL> select employee_name,department_id from dmhr.employee where department_id=(select department_id from dmhr.employee where employee_name='陈仙');
Select() from () where () >|any|all(子查询)
ALL:>ALL(MAX) ANY:>ANY(MIN) 找出比104部门工资都高的人。 SQL> select employee_name,department_id,salary from dmhr.employee where salary >all(select salary from dmhr.employee where department_id=104); 找出比104部门任意一人工资都高的人。 SQL> select employee_name,department_id,salary from dmhr.employee where salary >any(select salary from dmhr.employee where department_id=104); IN EXISTS SQL> select employee_name,salary from dmhr.employee where employee_name in('刘瑛','陈伟 婷','薛辉明','于倩文','陈珂'); SQL> select employee_name,salary from dmhr.employee where exists (select employee_name from dmhr.employee where department_id='104000'); IN :把子查询运行完,再运行主查询 Exists :先运行子查询,如果有满足条件,再运主查询。 备份作用? 备份的方式:物理备份和逻辑备份 备份的介质:磁盘,磁带,光盘 集群:数据守护 ,dsc(rac) 也支持第三方的备份软件:上海爱数,鼎甲 冷备和热备 冷备:DMAP服务是打开的,数据库实例是关闭的); 方式: 利用控制台工具去备 冷备份,要停止数据库,如果不停止造成数据丢失。 热备份(DMAP服务是打开的,数据库实例是打开的,数据库是归档模式) 开归档: 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; [dmdba@dca01 ~]$ disql sysdba/SYSDBA@localhost:5238 命令行方式下全备,增量备(考试的时候建议用热备) 全备: SQL> backup database full backupset '/dm7/backup/full_bak'; 增量备: SQL> backup database increment backupset '/dm7/backup/incr_bak'; 还原: 模拟表空间损坏: [dmdba@dca01 DAMENG]$ mv tbs1_02.dbf tbs1_02.dbf.bak 重启服务 数据库处于mount状态,手动open SQL> restore tablespace tbs1 from backupset '/dm7/backup/full_bak/'; SQL> alter database open; SQL> alter tablespace tbs1 online; 导入导出(DIMP,DEXP) 分为四种级别: 数据库级别,用户级别,模式级别和表级别,四种级别独立互斥,不能同时存在,四种级别提供的功能: [dmdba@dca01 bin]$ ./dexp sysdba/dameng123@localhost:5236 file=dexp01.dmp log=dexp01.log directory=/dm7/backup/dexp full=y [dmdba@dca01 bin]$ ./dimp sysdba/SYSDBA@localhost:5238 file=/dm7/backup/dexp/dexp01.dmp log=/dm7/backup/dexp/dimp02.log; 定时去执行的一组任务 14.1定期去备份。 1、创建代理环境(达梦会创建一个sysjob模式) 2创建作业: call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('JOB1'); call SP_ADD_JOB_STEP('JOB1', 'JOB1', 5, '01000/dm7/backup/JOB', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('JOB1', 'JOB1', 1, 2, 1, 64, 0, '22:00:00', NULL, '2020-02-19 14:48:01', NULL, ''); call SP_JOB_CONFIG_COMMIT('JOB1'); call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('JOB2'); call SP_ADD_JOB_STEP('JOB2', 'JOB2', 5, '11000/dm7/backup/full_bak|/dm7/backup/JOB', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('JOB2', 'JOB2', 1, 2, 1, 63, 0, '22:00:00', NULL, '2020-02-19 14:53:32', NULL, ''); call SP_JOB_CONFIG_COMMIT('JOB2'); 达梦支持那些语言做开发 C C++ JAVA PYTHON PHP PERL 定义一个DM JDBC的驱动串: String jdbcString=”dm.jdbc.driver.DmDriver” DM URL连接串: String urlstring=”jdbc:dm://ip:5236” 检查: rpm -aq|grep gcc, 有没有gcc包,如果没有,配置yum源,用yum安装gcc. [root@dca01 unixODBC-2.3.0]# tar -xzvf unixODBC-2.3.0.tar.gz [root@dca01 unixODBC-2.3.0]# cd unixODBC-2.3.0 配置ODBC [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 测试ODBC 写匿名块 Declare (可选项) Begin Body; Exception End; SQL> set serveroutput on SQL> begin 2 print('hello world'); 3 end; 4 / hello world SQL> begin 2 for i in 1..5 loop 3 print(i); 4 end loop; 5 end; 6 / 1 2 3 4 5 // 案例1:根据员工的编号找出员工所在部门? CREATE PROCEDURE "TEST"."SNO"("BH" IN INT) AS DEPT INT; BEGIN SELECT DEPARTMENT_ID INTO DEPT FROM DMHR.EMPLOYEE WHERE EMPLOYEE_ID=BH; PRINT(DEPT); END;
13.1物理备份
13.2逻辑备份