DCA认证考前总结

##达梦数据库(DM8)DCA认证##
根据B站达梦给出有关视频和文档,自己跟着写了一些考前准备。

一、命令行达梦数据库的安装

  1. 收集软件信息
// 操作系统
[root@localhost ~]# cat /etc/issue
NeoKylin Linux General Server release 6.0  (Dhaulagiri) 
Kernel \r on an \m
// Linux内核
[root@localhost ~]# uname -a
2.6.32-220.el6.x86_64
  1. 收集硬件信息
// CPU信息
[root@localhost ~]# cat /proc/cpuinfo
// 磁盘信息
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -h
  1. 规划安装路径(软件,数据库文件)
[root@localhost ~]# mkdir /dm8
  1. 规划用户(不建议使用root,创建dmdba用户)
// 查看dmdba用户是否存在
[root@localhost ~]# id dmdba
id: dmdba:无此用户
// 创建用户组
[root@localhost ~]# groupadd dinstall
// 创建dmdba并指定用户组
[root@localhost ~]# useradd -g dinstall dmdba
// 校验用户是否创建成功
[root@localhost ~]# id dmdba
uid=500(dmdba) gid=501(dinstall) 组=501(dinstall)
// 给用户设置密码(我这里是dm123456)
[root@localhost ~]# echo "dameng123" | passwd --stdin dmdba
// 修改安装路径的权限
[root@localhost /]# ll -dl /dm8
drwxr-xr-x 2 root root 4096 10月 26 11:07 /dm8
[root@localhost /]# chown dmdba.dinstall -R /dm8
[root@localhost /]# ll -dl /dm8
drwxr-xr-x 2 dmdba dinstall 4096 10月 26 11:07 /dm8
  1. 配置环境变量(可选项,方便实用达梦命令)
[root@localhost /]# cd /home/dmdba
[root@localhost dmdba]# vi .bash_profile 
// 在.bash_profile最后增加
export DM_HOME=/dm7
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
// 验证是否配置成功
[root@localhost dmdba]# source .bash_profile 
  1. 配置文件最大打开数量
// 查看文件最大打开数量配置
[root@localhost dmdba]# ulimit -a
修改之后重启生效,只对dmdba有效,所有用户有效则把dmdba换为*
[root@localhost ~]# vi /etc/security/limits.conf
	dmdba soft nofile 4906
	dmdba hard nofile 65536
临时生效:ulimit -n 65536
  1. 准备安装包(使用Xftp 5等软件把安装包上传到/opt目录)
[root@localhost ~]# cd /opt
[root@localhost opt]# ll -l
-rw-r--r-- 1 root root 589234176 10月 14 10:51 dm7_setup_rh6_64_ent_7.6.0.197_20190917.iso
// 挂载
[root@localhost installdoc]# mount -o loop dm7_setup_rh6_64_ent_7.6.0.197_20190917.iso  /mnt
[root@localhost installdoc]# cd /mnt/
[root@localhost mnt]# ls -l
-r-xr-xr-x 1 root root 584382798  9月 16 11:04 DMInstall.bin
-r-xr-xr-x 1 root root   2266249  9月 12 16:45 DM_Install_en.pdf
-r-xr-xr-x 1 root root   2207674  9月 12 16:45 DM_Install_zh.pdf
-r-xr-xr-x 1 root root       868  9月 12 16:48 release_en.txt
-r-xr-xr-x 1 root root       973  9月 12 16:48 release_zh.txt
  1. 达梦数据库安装
[root@localhost mnt]# xhost +
access control disabled, clients can connect from any host
[root@localhost mnt]# export $DISPLAY
0
[root@localhost mnt]# su - dmdba
[dmdba@localhost ~]# export DISPLAY=:0
[dmdba@localhost ~]# cd /mnt
[dmdba@localhost mnt]# ll -l
-r-xr-xr-x 1 root root 584382798  9月 16 11:04 DMInstall.bin
-r-xr-xr-x 1 root root   2266249  9月 12 16:45 DM_Install_en.pdf
-r-xr-xr-x 1 root root   2207674  9月 12 16:45 DM_Install_zh.pdf
-r-xr-xr-x 1 root root       868  9月 12 16:48 release_en.txt
-r-xr-xr-x 1 root root       973  9月 12 16:48 release_zh.txt
命令行安装:
[dmdba@localhost  mnt]$ ./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
解压安装程序..........
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/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]:21

安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:
所需空间: 1088M

请选择安装目录 [/home/dmdba/dmdbms]:/dm8
可用空间: 29G
是否确认安装路径(/dm8)? (Y/y:是 N/n:否)  [Y/y]:y

安装前小结
安装位置: /dm8
所需空间: 1088M
可用空间: 29G
版本信息: 
有效日期: 
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2020-12-30 20:06:57 
[INFO] 安装达梦数据库...
2020-12-30 20:06:58 
[INFO] 安装 基础 模块...
2020-12-30 20:07:05 
[INFO] 安装 服务器 模块...
2020-12-30 20:07:05 
[INFO] 安装 客户端 模块...
2020-12-30 20:07:10 
[INFO] 安装 驱动 模块...
2020-12-30 20:07:11 
[INFO] 安装 手册 模块...
2020-12-30 20:07:14 
[INFO] 安装 服务 模块...
2020-12-30 20:07:15 
[INFO] 移动ant日志文件。
2020-12-30 20:07:15 
[INFO] 安装达梦数据库完成。

请以root系统用户执行命令:
/dm8/script/root/root_installer.sh

安装结束
// root用户执行:
[root@localhost ~]# /dm8/script/root/root_installer.sh
移动 /dm8/bin/dm_svc.conf 到/etc目录
修改服务器权限
创建DmAPService服务
ln -s '/usr/lib/systemd/system/DmAPService.service' '/etc/systemd/system/multi-user.target.wants/DmAPService.service'
创建服务(DmAPService)完成
启动DmAPService服务
  1. 创建数据库实例
  // 注:这里创建的SYSDBA的默认密码是SYSDBA
  命令行创建数据库实例:
(1)Help查看帮助:dminit help
(2)创建实例:
	[dmddba@localhost ~]$ dminit path=/dm8/data  db_name=DMTEST 			 			   			instance_name=DMTESTSERVER  port_num=5237
initdb V7.6.0.197-Build(2019.09.12-112648)ENT 
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2020-12-30
 log file path: /dm8/data/DMTEST/DM0101.log
 log file path: /dm8/data/DMTEST/DM0102.log
write to dir [/dm8/data/DMTEST].
create dm database success. 2020-12-30 16:34:40
(3)注册实例(root用户下):
	[root@localhost  ~]# cd /dm8/script/root/
	[root@localhost root]# ./dm_service_installer.sh -t dmserver -p 	DMTESTSERVER -dm_ini /dm8/data/DMTEST/dm.ini
(4)启动实例:[dm@localhost ~]$ DmServiceDMTESTSERVER start
(5)查看实例:dmservice.sh
    查看进程ps -ef | grep dmserver 
(6)删除实例:首先停止实例服务
[root@localhost root]#  ./dm_service_uninstaller.sh -n DmServiceDMTESTSERVER
是否删除服务(DmServiceDMTESTSERVER)?(Y/y:是 N/n:否): y
  1. 数据库实例的启动与停止
(1)root用户下:
方式一,root用户下操作(新手手选):
	[root@localhost ~]# cd /dm8/tool
	[root@localhost tool]# ./dmservice.sh
方式二:
  	 [root@localhost ~]# cd /dm8/tool
  	 // 查看状态
     [root@localhost tool]# systemctl status DmServiceDMSERVER.service
     // 启动
	 [root@localhost tool]# systemctl start DmServiceDMSERVER.service
	 // 停止
     [root@localhost tool]# systemctl stopDmServiceDMSERVER.service
(2)dmdba用户下:
方式一:
	[dmddba@localhost ~]$ cd /dm8/data/DMTEST
	[dmddba@localhost ~]$ ./dmserver dm.ini
方式二:
	[dmddba@localhost ~]$ cd /dm8/bin
    [dmddba@localhost ~]$ll Dm8*
	查看状态:[dmddba@localhost ~]$ DmServiceDMSERVER status
	启动实例:[dmddba@localhost ~]$ DmServiceDMSERVER start
	停止实例:[dmddba@localhost ~]$ DmServiceDMSERVER stop
  1. 数据库实例连接:
    ①[dm@localhost ~]$ cd /dm8/tool
    ②方式一:[dm@localhost tool] . / d i s q l 方 式 二 : [ d m @ l o c a l h o s t t o o l ] ./disql 方式二:[dm@localhost tool] ./disql[dm@localhosttool]./disql sysdba/dameng123
    方式三:[dm@localhost tool] . / d i s q l s y s d b a / d a m e n g 123 : 5237 方 式 四 : [ d m @ l o c a l h o s t t o o l ] ./disql sysdba/dameng123:5237 方式四:[dm@localhost tool] ./disqlsysdba/dameng123:5237[dm@localhosttool]./disql sysdba/dameng123@192.168.88.135:5236
    附加:网络配置助手:./nca.sh
    查看数据库信息:select * from V d a t a b a s e ; 数 据 库 实 例 信 息 : s e l e c t ∗ f r o m v database; 数据库实例信息:select * from v database;selectfromvinstance;
    查看状态:
    SQL>select status$ from v i n s t a n c e ; 行 号 S T A T U S instance; 行号 STATUS instance;STATUS
    1 OPEN
    修改状态:SQL>alter database mount;

二、表空间管理:

(1)达梦表空间介绍
// 查看达梦表空间有哪些
SQL> select tablespace_name from dba_tablespaces;
行号     TABLESPACE_NAME
---------- ---------------
1          SYSTEM
2          ROLL
3          TEMP
4          MAIN
5          DMHR
6          HMAIN
// SYSTEM:数据字典和全局的系统数据
// ROLL:存放了数据库运行过程中产生的回滚记录
	UNDO_RETENTION: 单位是秒。
   	sp_set_para_double_value(2,’UNDO_RETENTION’,2400)
// TEMP:临时表空间,临时字段,临时表都默认存放在临时表控件
// MAIN:数据库默认的一个表空间,创建数据对象时,如果不指定存储位置,默认存放到该表空间
// HMAIN:huge表空间

(2) 规划表空间
情况一:创建一个表空间
SQL> create tablespace tbs1 datafile '/dm7/data/DAMENG/tbs1_01.dbf' size 32;                   
// 表空间初始文件大小是页大小的4096倍

情况二:创建一个表空间,初始大小是50M,最大100M
SQL> create tablespace tbs2 datafile '/dm7/data/DAMENG/tbs2_01.dbf' size 50 autoextend on maxsize 100;

情况三:创建一个表空间,初始值50M,每次扩展1M,最大100M
SQL> create tablespace tbs3 datafile '/dm7/data/DAMENG/tbs3_01.dbf' size 50 autoextend on next 1 maxsize 100;

情况四:创建一个表空间,初始50M,表空间由2个数据文件组成,分别存储到不同的磁盘上,每次扩展1M,每个数据文件最大100M

SQL> create tablespace tbs4 datafile '/dm7/data/DAMENG/tbs4_01.dbf' size 50 autoextend on next 1 maxsize 100, '/dm7/data/tbs4_02.dbf' size 50 autoextend on next 1 maxsize 100;

(3) 维护表空间
表空间不足的时候,如何去维护表空间
创建大表空间,数据导出,导入resize数据文件大小
增加数据文件
SQL> alter tablespace tbs2 add datafile '/dm7/data/DAMENG/tbs2_02.dbf' size 50 autoextend on maxsize 100;
// 查看表空间
SQL> select file_name,tablespace_name from dba_data_files;

更换存储位置:
// 达梦的表空间状态:0-online;1-offline
// 注意:SYSTEM,ROLL,TEMP不能是offline
SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;
行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            0
5          DMHR            0
6          TBS1            0
7          TBS2            0
8          TBS3            0
9          TBS4            0
10         HMAIN           NULL
// 更改TBS1的存储位置
a.表空间offline
SQL> alter tablespace tbs1 offline;
b.修改存储位置
SQL> alter tablespace tbs1 rename datafile '/dm7/data/DAMENG/tbs1_01.dbf' to '/dm7/data/tbs1_01.dbf';
c.表空间online
SQL> alter tablespace tbs1 online;

(4)删除表空间(如果表空间存在数据,不允许直接删除)
SQL> drop tablespace tbs2;

三、用户管理

(1)查看达梦数据库有哪些用户
SQL> select username from dba_users;
行号     USERNAME  
---------- ----------
1          SYSSSO
2          DMHR
3          SYSDBA
4          SYS
5          SYSAUDITOR
// SYS:达梦数据库内置管理员用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图sys
// SYSDBA:数据库的管理员
// SYSAUDITOR:审计用户
// SYSSSO:安全用户
// SYSDBO:数据操作员(安全版才存在)

(2)口令策略
用户密码最长为48个字节,创建用户时使用password policy字句来指定口令策略。dm.ini中有PWD_POLICY系统的口令策略:
0:无策略
1:禁止与用户名相同
2:口令长度不小于9
4:至少包含一个大写字母(A-Z)
8:至少包含一个数字(0-9)
16:至少包含一个标点符号(英文状态下输入,除’'和空格)
口令策略可以单独使用,也可以组合使用,比如:需要应用策略4和8,那么设置口令策略为4+8=12

// 查看数据库密码策略
SQL> select para_name,para_value from v$dm_ini where para_name='PWD_POLICY';
行号     PARA_NAME  PARA_VALUE
---------- ---------- ----------
1          PWD_POLICY 2
// 密码策略设置为6
SQL> sp_set_para_value(1,'PWD_POLICY',6);
DMSQL 过程已成功完成
已用时间: 10.577(毫秒). 执行号:43.
// 再次查看数据库密码策略
SQL> select para_name,para_value from v$dm_ini where para_name='PWD_POLICY';
行号     PARA_NAME  PARA_VALUE
---------- ---------- ----------
1          PWD_POLICY 6

密码尝试登录次数:FAILED_LOGIN_ATTEMPS
密码锁定时间:PASSWORD_LOCK_TIME
密码过期时间:PASSWORD_LIFE_TIME

SQL> select b.username, a.failed_num, a.failed_attemps from sysusers a right join all_users b on a.id=b.user_id;
行号     USERNAME   FAILED_NUM  FAILED_ATTEMPS
---------- ---------- ----------- --------------
1          SYSDBA     0           0
2          SYS        0           0
3          SYSAUDITOR 0           0
4          SYSSSO     0           0
5          DMHR       3           0

(3)策略案例分析
案例1:为数据库设置一个用户,该账户可以创建自己的表,有属于自己的独立表空间,用户的密码要求每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;
// 校验是否创建成功
[dmdba@localhost ~]$ disql test/Dameng123
SQL> select user;
行号     USER()
---------- ------
1          TEST

案例2:规划一个账号每60天变更一次密码,密码尝试连接2次失败,账号锁定5分钟,用户还可以查询dmhr.employee表
// 创建用户
SQL> create user test1 identified by Test12345 limit password_life_time 60,failed_login_attemps 2,password_lock_time 5;
// 解锁用户
SQL> alter user test1 account unlock;
// 赋予权限
SQL> grant select on dmhr.employee to test1;
注:一般情况,创建完用户,给resource角色,就基本上可以满足需求。具体需要根据生产环境的来。

案例3:企业招聘一个录入信息人员,权限是固定的,只能录入city表。
角色:一类权限的集合。把某些特定的权限给一个固定的角色,然后再把角色给用户
// 创建角色
SQL> create role r1; 
// 赋予权限给角色
SQL> grant insert on dmhr.city to r1;
// 创建用户
SQL> create user test2 identified by Dameng123;
// 赋予角色给用户
SQL> grant r1 to test2;

(4)用户维护
// 删除权限
SQL> revoke insert on dmhr.ctiy form r1;
// 修改密码
SQL> alter user test2 identified by Dameng12345;
// 锁定/解锁账户
SQL> alter user test2 account lock/unlock;
// 删除账号
SQL> drop user test2;
// 删除账号(用户下有创建表),慎用!删除前记得做备份
SQL> drop user test2 cascade;
// 删除角色
SQL> drop role r1;

四、表、视图、索引管理
(1)模式:一组数据对象的集合,在创建用户的时候,就会生成一个跟用户同名的模式
(2)表
达梦支持的表:默认的表(索引组织表),堆表,临时表,分区表,外部表等
规划表规则:
–命名:字符开头a-z,0-9,$#_
–数据类型:int,char,varchar,date,clob,blob,number等
–存储位置:自己规划的表空间,未指定则是默认空间
–约束:非空,唯一,主键,检查,外键
–注释:comment
案例1:规划一张学员信息表
​ 表名:STU
​ 列:学号(id,char(10)),姓名(name,varchar(20)),性别(sex,char(1)),
​ 年龄(age,int),电话(tel,varchar(15)),家庭住址(address,varchar(50))
​ 表空间:STU
​ 约束:主键–学号,非空–姓名,电话
​ 备注:学员信息表

// 创建的SQL
create table "TEST"."STU"
(
	"id" CHAR(10) not null ,
	"name" VARCHAR(20) not null ,
	"sex" CHAR(1),
	"age" INT unique ,
	"tel" VARCHAR(15) not null ,
	"address" VARCHAR(50),
	primary key("id")
)
storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU")
;
comment on table "TEST"."STU" is '学员信息表';
comment on column "TEST"."STU"."id" is '学号';
comment on column "TEST"."STU"."name" is '姓名';
comment on column "TEST"."STU"."sex" is '性别';
comment on column "TEST"."STU"."age" is '年龄';
comment on column "TEST"."STU"."tel" is '电话';
comment on column "TEST"."STU"."address" is '家庭住址';

// 如何查看表在哪个表空间
SQL> select table_name,tablespace_name from dba_tables where table_name='STU';
行号     TABLE_NAME TABLESPACE_NAME
---------- ---------- ---------------
1          STU        STU
// 如何查看表有哪些约束
SQL> select table_name,constraint_name,constraint_type from dba_constraints where table_name='STU';
行号     TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE
---------- ---------- --------------- ---------------
1          STU        CONS134218775   P
2          STU        CONS134218774   U

案例2:创建表的时候指定约束

SQL> create table test.t2(id int);
SQL> alter table test.t2 modify id int not null;
// 上面两条语句等价于
SQL> create table test.t3(id int not null);
// 唯一约束
SQL> create table test.t4(id int unique);
// 主键约束
SQL> create table test.t5(id int primary key);
SQL> create table test.t6(id int);
SQL> alter table test.t6 add constraint t6_pri primary key(id);
// 检查约束
SQL> create table test.t8(id int);
SQL> alter table test.t8 add constraint t9_check check(id>=5);

SQL> create table test.t7(id int check(id>=5));
// 外键约束
SQL> create table test.t9(sid int primary key,pid int);
SQL> create table test.t10(id int primary key, sid int foreign key references test.t9(sid));
// 增加备注
SQL> comment on column test.t2.id is '编号';

导入SQL数据

登录用户:./disql testuser/dameng123
查看用户:SQL> select user
执行命令:SQL> start /dm8/data/backup/dmhr.sql
		SQL> commit;

(3)视图

分类:简单视图、复杂视图、物化视图
注:简单视图和复杂视图不占用磁盘空间
创建视图
SQL> create view v1 as select * from dmhr.employee;
视图查看
SQL> select * from v1 limit 2;
行号     EMPLOYEE_NAME JOB_ID
---------- ------------- ------
1          马学铭     11
2          程擎武     21
查看视图
SQL> select view_name,text from dba_views where view_name='V1';
行号     VIEW_NAME TEXT                                           
---------- --------- -----------------------------------------------
1          V1         SELECT EMPLOYEE_NAME,JOB_ID FROM DMHR.EMPLOYEE

修改视图
SQL> create or replace view v1 as select employee_name from dmhr.employee;

SQL> select view_name,text from dba_views where view_name='V1';
行号     VIEW_NAME TEXT                                    
---------- --------- ----------------------------------------
1          V1         SELECT EMPLOYEE_NAME FROM DMHR.EMPLOYEE
删除视图
SQL> drop view v1;

(4)索引

达梦的分类:二级索引,唯一索引,复合索引,函数索引,分区索引等
默认的表是索引组织表,利用rowid创建一个默认的索引,所以我们创建的索引是二级索引

查看索引
SQL> select table_name,index_name from dba_indexes where table_name='T11';
行号     TABLE_NAME INDEX_NAME   
---------- ---------- -------------
1          T11        INDEX33555483

索引的作用:加快表的查询,对数据库做DML操作的时候,数据库会自动维护索引。索引是一棵倒置的树,使用索引,就是对这个索引树进行遍历。
建立索引的规则:
  1、经常查询的列
  2、连接条件列
  3、谓词经常出现的列(where)
  4、查询是返回表的一小部分数据 
不适合创建索引的情况:
  1、列上有大量的null
  2、列上的数据有限(例如:性别)

创建索引
// 1.规划索引表空间
// 2.表的数据是无须的,索引的数据是有序的
案例:复制dmhr.employee为emp,给employee_id建立所以
// 建立表
SQL> create table test.emp as select * from dmhr.employee;
// 建立表空间
SQL> create tablespace indx datafile '/dm7/data/DAMENG/indx01.dbf' size 32;
// 建立索引
SQL> create index ind_mep on test.emp(employee_id) tablespace indx;

查询索引
SQL> select table_name,index_name from dba_indexes where table_name='EMP';
行号     TABLE_NAME INDEX_NAME   
---------- ---------- -------------
1          EMP        INDEX33555484
2          EMP        IND_MEP

维护索引
// 重建索引
SQL> alter index ind_emp rebuild;
// 删除索引
SQL> drop index ind_emp;

五、备份、还原
物理备份:
​ 冷备:dmap服务打开的状态下,数据库是关闭的

root用户关闭数据库:systemctl stop DmServiceDMSERVER.service
切换dmdba用户:su - dmdba
进入/dm8/bin:cd /dm8/bin 
执行:./dmrman
RMAN> backup database ‘/dm8/data/DAMENG/dm.ini’ full;
(生成.bak  .meta文件)

(2)还原

root用户关闭数据库:systemctl stop DmServiceDMSERVER.service
切换dmdba用户:su - dmdba
进入/dm8/bin:cd /dm8/bin 
执行:./dmrman
RMAN> restore database ‘/dm8/data/DAMENG/dm.ini’from backupset 
‘/dm8/data/DAMENG/bak/DB_DAMENG_FULL_20200821_160405_556837’
RMAN> recover database ‘/dm8/data/DAMENG/dm.ini’ update db_magic;(更新魔数)
​ 热备:dmap服务一定是打开的,数据库是打开的,数据库要开归档

逻辑备份:
​ 导入:dexp
导出:dimp

启动数据库:DmServiceDMSERVER start
dexp:cd /dm8/bin
./dexp help
导出:./dexp userid=sysdba/deng123:5236 directory=/dm8/data/back file=dexpDAMENG_fulltest.dmp log=dexpDAMENG.log full=y

导入:./dimp userid=sysdba/SYSDBA:5236 directory=/dm8/data/back file=dexpDAMENG_fulltest.dmp log=dexpDAMENGimp.log full=y

六、DMSQL

SQL:结构化查询语句
DDL:定义语句 createdropaltertruncate
DML:管理语句 selectupdatedeleteinsert
DCL:控制语句 grantrevoke
TCL:事务控制 commitrollback

(1) 简单查询

// 语法:select () from ()
// 第一个括号:*,column_name,alias,expr,||,distinct
// 第二个括号:table_name
SQL> select * from dmhr.city;
SQL> select city_id,city_name from dmhr.city;
SQL> select employee_name,salary as tol from dmhr.employee limit 10;
SQL> select employee_name,salary+1000 from dmhr.employee limit 10;
SQL> select employee_name||'的工资是:'||salary as desc1 from dmhr.employee limit 2;
行号     DESC1                        
---------- -----------------------------
1          马学铭的工资是:30000
2          程擎武的工资是:9000
SQL> select distinct department_id from dmhr.employee;

(2) 过滤查询

// 语法:select () from () where ();
// 第一个括号:*, column_name,alias, expr,||, distinct
// 第二个括号:table_name
// 第三个括号:过滤条件
// 比较查询:=,!=,>,>=,<,<=
SQL> select employee_name,salary from dmhr.employee where salary >= 25000;
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          马学铭     30000
2          苏国华     30000
3          郑晓同     30000
// 逻辑运算:and,or
SQL> select employee_name,salary from dmhr.employee where employee_name='马学铭';
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          马学铭     30000
SQL> select employee_name,salary from dmhr.employee where employee_name='马学铭' or employee_name='苏国华';
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          马学铭     30000
2          苏国华     30000
// 模糊查询:like %匹配0个或多个字符;_匹配1个字符
SQL> select employee_name,salary from dmhr.employee where employee_name like '王%' limit 2;
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          王岳荪     5000
2          王金玉     3133
SQL> select employee_name,salary from dmhr.employee where employee_name like '王_' limit 2;
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          王辉        9685
2          王欣        9755
// is null,is not null
SQL> select employee_name,commission_pct from dmhr.employee where commission_pct is not null limit 2; 
行号     EMPLOYEE_NAME COMMISSION_PCT
---------- ------------- --------------
1          马学铭     0
2          程擎武     0
// in 枚举
SQL> select employee_name,salary from dmhr.employee where employee_name in ('陈仙','郑吉群','马学铭','程擎武');
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          马学铭     30000
2          程擎武     9000
3          郑吉群     15000
4          陈仙        12000
// between...and
SQL> select employee_name,salary from dmhr.employee where salary between 20000 and 30000;
行号     EMPLOYEE_NAME SALARY     
---------- ------------- -----------
1          马学铭     30000
2          苏国华     30000
3          郑晓同     30000
// 排序
SQL> select employee_name,salary from dmhr.employee order by salary desc;

(3) 多表查询

// 语法:select () from () join() on ().
// 第三个括号:表名
// 第四个括号:关联字段
// 内连接 自然连接
SQL> select e.employee_name,d.department_name from dmhr.employee e natural join dmhr.department d limit 2; 
行号     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          马学铭     总经理办
2          林子程     技术支持部
SQL> select e.employee_name,d.department_name from dmhr.employee e join dmhr.department d using(department_id) limit 2;  
行号     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          马学铭     总经理办
2          程擎武     行政部
SQL> select e.employee_name,d.department_name from dmhr.employee e join dmhr.department d on e.department_id=d.department_id limit 2; 
行号     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          马学铭     总经理办
2          程擎武     行政部

(4) 外连接

// 外连接-左外连接:把写在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 2; 
行号     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          马学铭     总经理办
2          程擎武     行政部
// 外连接-右外连接:把写在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 2; 
行号     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          马学铭     总经理办
2          陈辰        总经理办
// 外连接-全外连接
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 2; 
行号     EMPLOYEE_NAME DEPARTMENT_NAME
---------- ------------- ---------------
1          马学铭     总经理办
2          程擎武     行政部

(5) 分组查询

// 语法:select 聚合函数 () from () group by () having();
// 聚合函数:sum,avg,max,min,count
// 算出各个部门的平均工资
SQL> select avg(salary),department_id from dmhr.employee group by department_id having avg(salary)>=16000;
行号     AVG(SALARY)  DEPARTMENT_ID
---------- ------------ -------------
1          16589.500000 303
2          19252.841270 703
// 算出各个部门的工资和,找出部门工资和大于500000的部门。
SQL> select department_id,sum(salary) from dmhr.employee group by department_id having sum(salary)>500000;        
行号     DEPARTMENT_ID SUM(SALARY)         
---------- ------------- --------------------
1          703           2425858
2          705           564024
// 注:having是分组后的数据进行过虑,不能单独使用,having前面一定是有group by。
// 注:在select后出现的列,都要出现在group by后,聚合函数列不算。

(1) 子查询

// 子查询的结果是主查询的条件,子查询先于主查询运行。
// a.返回值是唯一的。
//   语法:select () from () where () = ()
// 找出和马学铭同一个部门的人员
SQL> select employee_name,department_id from dmhr.employee where department_id=(select department_id from dmhr.employee where employee_name='马学铭');
行号     EMPLOYEE_NAME DEPARTMENT_ID
---------- ------------- -------------
1          马学铭     101
2          陈辰        101
3          杨毓        101
4          严云飞     101
5          郑旭明     101
// b.返回值是多行的
//   语法:select () from () where () >/< any/all ();
// 找出比1002部门所有人员工资都高的人
select employee_name,department_id,salary from dmhr.employee where salary >all(select salary from dmhr.employee where department_id=1002);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值