DCA培训讲义

news/2025/3/22 14:32:42/文章来源:https://www.cnblogs.com/jipeitao/p/18786544

DM8-第 24 期 DCA 培训讲义
1、DM8 安装
1.1DM8 版本介绍
DM8 一共分为 4 个版本:开发版、标准版、企业版及安全版。
开发版:不能作为商用,1 年时间(从产品发布之日起)有效。
标准版:不支持集群(数据守护集群、读写分离集群、DMDSC、DMDPC、MPP)的特性,
满足中小型企业的使用。
企业版:支持集群的特性,满足中大型企业使用,是生产环境中用到最多的版本。
安全版:在企业版基础上四权分立,安全性有进一步增强,增加强访问控制、环境标记等。
1.2 配置 DM8 安装环境
查看 cpu 的信息:
[root@localhost /]# lscpu
注意:特别是国产 cpu,例如龙芯、飞腾、鲲鹏等。安装的数据库软件要与 cpu、操作系统
匹配。
内存要求:
[root@localhost /]# free -m
可能用内存至少为 1G
查看硬盘及分区的信息
[root@localhost /]# fdisk -l
[root@localhost /]# df -h
注意:/tmp 分区如果单独已经分区,那么/tmp 分区至少要在 2g 及以上的空间。
网络要求:
100M 网卡,支持 TCP/IP 协议
查看防火墙状态:
[root@localhost /]# systemctl status firewalld
关闭防火墙:
[root@localhost /]# systemctl stop firewalld
禁止防火墙开机自启动:
[root@localhost /]# systemctl disable firewalld
系统要求:
内核要在 2.6 及以上才能安装 DM8
[root@localhost /]# uname -ar
Linux localhost.localdomain 4.19.90-24.4.v2101.ky10.x86_64 #1 SMP Mon May 24 12:14:55 CST
2021 x86_64 x86_64 x86_64 GNU/Linux
创建安装用户和组:
[root@localhost /]# groupadd dinstall
[root@localhost /]# useradd -g dinstall dmdba
[root@localhost /]# passwd dmdba
更改用户 dmdba 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
创建安装路径并授予权限:
创建安装路径:
[root@localhost /]# mkdir -p /dm8
将/dm8 的所属用户和所属组分别改为 dmdba,dinstall
[root@localhost /]# chown dmdba.dinstall -R /dm8
查看目录/dm8 的权限
[root@localhost /]# ls -ld /dm8/
挂载 iso 软件包
[root@localhost opt]# mount -o loop /opt/dm8_20231109_x86_kylin10_64.iso /mnt
设置临时安装目录:
切换用户
[root@localhost mnt]# su - dmdba
创建临时目录
[dmdba@localhost ~]$ mkdir -p /home/dmdba/tmp
编辑环境变量文件
[dmdba@localhost ~]$ vi /home/dmdba/.bash_profile
加入:
export DM_INSTALL_TMPDIR=/home/dmdba/tmp
使环境变量生效
[dmdba@localhost ~]$ source .bash_profile
1.3 安装 DM8 软件
1.3.1 图形化方式安装 DM8
设置 DISPLAY 值,调用图形化界面:
[root@localhost 桌面]# xhost +
access control disabled, clients can connect from any host
[root@localhost 桌面]# echo $DISPLAY
:0.0
[root@localhost 桌面]# su - dmdba
上一次登录: 三 8 月 21 10:58:43 CST 2024 pts/1 上
[dmdba@localhost ~]$ export DISPLAY=:0.0
安装:
[dmdba@localhost ~]$ cd /mnt
[dmdba@localhost mnt]$ ./DMInstall.bin
没有 key 也可以安装 DM;
替换 key:将 key 文件放在$DM_HOME/bin,重启数据库实例生效
使用 root 用户执行脚本文件:
[root@localhost 桌面]# /dm8/script/root/root_installer.sh
1.3.2 命令行方式安装 DM8
[dmdba@localhost dm8]$ cd /mnt
[dmdba@localhost mnt]$ ./DMInstall.bin -i
安装语言:
[1]: 简体中文
[2]: English
请选择安装语言 [1]:
解压安装程序.......... core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 11443
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 11443
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可打开文件数过少,建议至少设置为 65536 或更多。
欢迎使用达梦数据库安装程序
是否输入 Key 文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:n
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:
所需空间: 2037M
请选择安装目录 [/home/dmdba/dmdbms]:/dm8
可用空间: 12G
是否确认安装路径(/dm8)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /dm8
所需空间: 2037M
可用空间: 12G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2024-08-21 11:43:27
[INFO] 安装达梦数据库... 2024-08-21 11:43:27
[INFO] 安装 基础 模块... 2024-08-21 11:43:30
[INFO] 安装 服务器 模块... 2024-08-21 11:43:31
[INFO] 安装 客户端 模块... 2024-08-21 11:43:32
[INFO] 安装 驱动 模块... 2024-08-21 11:43:33
[INFO] 安装 手册 模块... 2024-08-21 11:43:33
[INFO] 安装 服务 模块... 2024-08-21 11:43:34
[INFO] 移动日志文件。
2024-08-21 11:43:34
[INFO] 安装达梦数据库完成。
请以 root 系统用户执行命令:
/dm8/script/root/root_installer.sh
安装结束
介绍 DM 安装目录:
bin : 数据库服务文件、 命令行工具、key 文件
tool:图形化客户端工具
log :日志
doc :DM 官方手册
samples :示例库
Uninstall/ uninstall.sh :卸载软件
drivers :驱动
script :脚本文件
1.4 卸载 DM8 软件
卸载 DM8 软件可以通过图形化或者命令行方式。
图形化方式卸载:
[dmdba@localhost dm8]$ cd /dm8/
使用 root 用户执行脚本文件:
[root@localhost 桌面]# /dm8/root_uninstaller.sh
手动清空/dm8 下的内容:
[dmdba@localhost dm8]$ rm -rf /dm8/* 2、创建 DM 数据库实例
一个数据库软件可以创建多个数据库实例,实例之间通过端口号区分。达梦数据库默认端口
号就是 5236. 图形化方式建库:
[root@localhost 桌面]# xhost +
access control disabled, clients can connect from any host
[root@localhost 桌面]# echo $DISPLAY
:0.0
[root@localhost 桌面]# su - dmdba
上一次登录: 三 8 月 21 11:21:00 CST 2024 pts/0 上
[dmdba@localhost ~]$ export DISPLAY=:0.0
[dmdba@localhost ~]$ cd /dm8/tool/
[dmdba@localhost tool]$ ./dbca.sh
考试时,一定要按要求设置数据库管理员 SYSDBA 用户密码,SYSDBA 密码错误记 0 分。
使用 root 用户执行三个脚本文件:
[root@localhost 桌 面 ]# mv /dm8/bin/DmServiceDMSERVER.service
/usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost 桌面]# systemctl enable DmServiceDMSERVER.service
[root@localhost 桌面]# systemctl start DmServiceDMSERVER.service
命令行方式建库:
/dm8/bin/dminit
[dmdba@localhost DAMENG]$ cd /dm8/bin
查看帮助手册:
[dmdba@localhost bin]$ ./dminit help
创建数据库 DMDB,实例名 PROD,端口号是 5237,存放路径/dm8/data,数据库管理员密码
dameng123
[dmdba@localhost bin]$ ./dminit db_name=DMDB instance_name=PROD port_num=5237
path=/dm8/data sysdba_pwd=dameng123
注册数据库服务:
[root@localhost DMDB]# cd /dm8/script/root/
查看帮助手册:
[root@localhost root]# ./dm_service_installer.sh -h
[root@localhost root]# ./dm_service_installer.sh -t dmserver -p PROD -dm_ini
/dm8/data/DMDB/dm.ini
3、数据库实例管理
3.1 连接数据库
(1)disql
1)bin
[dmdba@localhost tool]$ cd /dm8/bin
[dmdba@localhost bin]$ ./disql sysdba/Dameng123
[dmdba@localhost bin]$ ./disql sysdba/Dameng123@192.168.240.100:5236
通过服务名方式连接数据库:
[root@localhost root]# vi /etc/dm_svc.conf
DMDB=(192.168.240.100:5237)
[dmdba@localhost bin]$ ./disql sysdba/dameng123@DMDB
2)tool
[dmdba@localhost tool]$ ./disql
disql V8
SQL> conn sysdba/Dameng123
SQL> conn sysdba/dameng123@192.168.240.100:5237
(2)manager
/dm8/tool
[dmdba@localhost bin]$ cd /dm8/tool/
[dmdba@localhost tool]$ ./manager
3.2 数据库实例状态
查看数据库实例的状态:
SQL> select instance_name,status$ from v$instance;
DM 数据库实例的状态:
Shutdown:关闭状态
Mount:配置状态,配置开启数据库归档模式,配置集群
Open:打开状态,数据库可以读写访问
Suspend:挂起状态,数据库只读访问
数据库实例状态的转换:
Shutdown-mount
Mount-shutdown
Mount-open
Open-mount
Open-suspend
Suspend-open
3.3 启动和关闭数据库
第一种通过前台方式启动和关闭数据库
适用于没有注册数据库服务
启动:
[dmdba@localhost bin]$ ./dmserver /dm8/data/DMDB/dm.ini
关闭:
直接输入 exit
第二种通过后台进程方式启动和关闭数据库
启动:
[dmdba@localhost bin]$ ./DmServicePROD start
关闭:
[dmdba@localhost bin]$ ./DmServicePROD stop
重启:
[dmdba@localhost bin]$ ./DmServicePROD restart
4、DM 常用工具介绍
/dm8/tool
(1)DM 管理工具
数据库日常运维:模式对象管理、表空间管理、用户管理、热备、逻辑备份、作业管理系统
等。
[dmdba@localhost tool]$ ./manager
(2)DM 控制台工具
查看和修改数据库的参数,对数据库做冷备和还原
[dmdba@localhost tool]$ ./console
(3)DM 性能监视工具
监视数据库的运行情况
[dmdba@localhost tool]$ ./monitor
(4)DM 数据迁移工具
[dmdba@localhost tool]$ ./dts
5、DMSQL
SQL 是结构化查询语句,是应用程序和数据库交互的接口。SQL 集数据操作、数据定义、数
据控制功能于一体的。
DMSQL 基于 SQL92 和 SQL99 标准。
5.1DMSQL 分类
DML:数据操纵语言,select,insert,update,delete
DDL:数据定义语言,create table,alter table,truncate table,drop table
DCL:数据控制语言,grant,revoke
TCL:事务控制语言,commit,rollback
SQL 语句书写规范:
SQL 语言大小写不敏感,字符串默认大小写敏感
SQL 可以写在一行或多行
关键字不能被拆分、缩写
使用缩进可以提高 SQL 语句可读性
5.2 简单查询
语法:
Select () from ();
第一个括号:单列查询、多列查询、全列查询、去重查询、对列起别名、表达式、连接列||
第二个括号:表
单列查询:查询员工姓名
select employee_name from dmhr.employee;
多列查询:查询员工姓名及入职时间
select employee_name,HIRE_DATE from dmhr.employee;
全列查询
select * from dmhr.employee;
去重查询:
select DISTINCT department_id from dmhr.employee;
对列起别名:
select employee_name,salary gz from dmhr.employee;
select employee_name,salary as gz from dmhr.employee;
接表达式:
给每个员工工资+500
select employee_name,salary,salary+500 as total from dmhr.employee;
连接 ||
不仅可以连接列,也可以连接字符串
....的工资是:..... select employee_name||'的工资是:'||salary from dmhr.employee;
5.3 排序查询
对一组结果集进行排序
关键字 ORDER BY
排序子句放在 SQL 语句的句尾
排序可以分为:升序和降序
升序:ASC 默认,从小到大
降序:DESC,从大到小
升序:从小到大
select employee_name,salary from dmhr.EMPLOYEE ORDER by salary asc;
select employee_name,salary from dmhr.EMPLOYEE ORDER by salary ;
select employee_name,salary from dmhr.EMPLOYEE ORDER by 2 asc;
select employee_name,salary from dmhr.EMPLOYEE ORDER by 2 ;
降序:从大到小
select employee_name,salary from dmhr.EMPLOYEE ORDER by salary desc;
select employee_name,salary from dmhr.EMPLOYEE ORDER by 2 desc;
5.4 过滤查询
使用 WHERE 子句,将不满足条件的行过滤掉。
语法:
Select () from () where ();
(1)比较运算符
= > >= < <= != <>
枚举 in() 返回列表中的值
取值范围 between .... and ..... 模糊查询 like
判断列上的值是否为空 is null/is not null
查询部门编号是 101 的员工的信息(员工姓名、部门编号)。
select employee_name,department_id from dmhr.EMPLOYEE where DEPARTMENT_ID=101;
查询工资大于等于 30000 的员工的信息(员工姓名、部门编号、入职时间、工资)
select employee_name,department_id,hire_date,salary from dmhr.EMPLOYEE where
salary>=30000;
查询部门编号是 101 或 103 的员工的信息。
select employee_name,department_id from dmhr.EMPLOYEE where DEPARTMENT_ID in
(101,103);
查询工资在 18000-19000 的员工的信息(员工姓名、工资、入职时间)
取值范围 18000-19000,并且包含 18000 和 19000

=18000 <=19000
select employee_name,hire_date,salary from dmhr.EMPLOYEE where salary BETWEEN 18000 and
19000;
模糊查询:
Like _ 匹配 1 个字符
Like % 匹配 0 个或多个字符
查询姓“王”的员工
select employee_name,department_id from dmhr.employee where employee_name like '王%';
查询姓“王”的员工,名字只包含 1 个字
select employee_name,department_id from dmhr.employee where employee_name like '王_';
查询姓名中包含“王”的员工信息
select employee_name,department_id from dmhr.employee where employee_name like '%王%';
查询姓名中以“天”结尾的员工
select employee_name,department_id from dmhr.employee where employee_name like '%天';
is null/is not null
构造数据:
create table test1 (id int,name varchar(30));
insert into test1 (id,name) values (1,'AAA');
insert into test1 (id) values (2);
insert into test1 (id) values (3);
insert into test1 (id,name) values (4,'CCC');
insert into test1 (id,name) values (5,'DDD');
commit;
select * from test1 where name is not null;
select * from test1 where name is null;
(2)逻辑运算符
AND :所有的条件同时满足,才会返回数据
OR :满足其中任意一个条件,就返回数据
NOT :当给出的条件为假时,就会返回数据
查询部门编号是 101 并且员工工资大于等于 30000。
select employee_name,salary,department_id from dmhr.EMPLOYEE where DEPARTMENT_ID=101
and salary>=30000;
查询部门编号是 101 或者员工工资大于等于 30000。
select employee_name,salary,department_id from dmhr.EMPLOYEE where DEPARTMENT_ID=101
or salary>=30000;
查询工资大于 2000 的员工
select employee_name,salary from dmhr.EMPLOYEE where not salary <2000;
5.5 分组汇总
聚合函数:
Count:统计、计数
Max:最大值
Min:最小值
Avg:平均值
Sum:求和
统计公司员工数量
select count(employee_name) from dmhr.EMPLOYEE;
select count() from dmhr.EMPLOYEE;
获取公司最高工资
select max(salary) from dmhr.EMPLOYEE;
获取公司最低工资
select min(salary) from dmhr.EMPLOYEE;
获取公司平均工资
select avg(salary) from dmhr.EMPLOYEE;
获取工资总和
select sum(salary) from dmhr.EMPLOYEE;
(1)group by
语法:
Select () from () group by () ;
Select () from () where () group by () ;
统计每个部门的人数
select department_id,count(
) from dmhr.EMPLOYEE group by DEPARTMENT_ID;
获取部门工资总和
select department_id,sum(salary) from dmhr.EMPLOYEE group by DEPARTMENT_ID;
(2)Having
语法:
Select () from () group by () having();
Select () from () where () group by () having() ;
查询部门平均工资大于 12000,平均工资降序显示。
select department_id,avg(salary) from dmhr.EMPLOYEE group by DEPARTMENT_ID
having avg(salary) >12000
order by avg(salary) desc;
5.6 连接查询
在 SQL99 中,查询可以分为内连接查询和外连接查询。
内连接查询:查询只会返回满足条件的数据。
外连接查询:查询除了返回满足条件的数据外,不满足的也返回,用 null 代替。
(1)内连接查询
内连接查询:自然连接查询、交叉连接查询、USING、ON。
语法:
SELECT table1.column, table2.column
FROM table1
[CROSS JOIN table2] |
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON(table1.column_name = table2.column_name)];
自然连接查询
自然连接查询的表,不需要指定连接列。要求两个表中有同名且相同数据类型的列。
语法:
SELECT table1.column, table2.column
FROM table1
NATURAL JOIN table2;
select a.EMPLOYEE_NAME,DEPARTMENT_ID,b.DEPARTMENT_NAME from
dmhr.EMPLOYEE a NATURAL JOIN dmhr.DEPARTMENT b;
交叉连接查询
交叉连接查询也叫笛卡集,是两个表的乘积。
语法:
SELECT table1.column, table2.column
FROM table1
CROSS JOIN table2;
select count() from dmhr.EMPLOYEE ;---856
select count(
) from dmhr.DEPARTMENT;---46
select count(*) from dmhr.EMPLOYEE CROSS join dmhr.DEPARTMENT;
USING 子句
在 NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的

使用 USING 可以在有多个列满足条件时进行选择
不要给选中的列中加上表名前缀或别名
语法:
SELECT table1.column, table2.column
FROM table1
JOIN table2 USING (column_name);
select a.employee_name,a.salary,B.DEPARTMENT_NAME from dmhr.EMPLOYEE a join
dmhr.DEPARTMENT b
using (department_id);
ON 子句
语法:
SELECT table1.column, table2.column
FROM table1
JOIN table2
ON(table1.column_name = table2.column_name);
select a.employee_name,a.salary,B.DEPARTMENT_NAME from dmhr.EMPLOYEE a join
dmhr.DEPARTMENT b
on (a.DEPARTMENT_ID=b.DEPARTMENT_ID);
(2)外连接查询
外连接查询:左外连接、右外连接、全外连接查询。
语法:
SELECT table1.column, table2.column
FROM table1
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)];
左外连接
Left join /left outer join
会返回左边表的全部数据,右边表数据匹配上就返回,没有匹配上就用 NULL 代替。
select c.city_name,l.street_address from dmhr.city c left join dmhr.location l on
c.city_id=l.city_id;
右外连接
Right join /right outer join
会返回右边表的全部数据,左边表数据匹配上就返回,没有匹配上就用 NULL 代替。
select c.city_name,l.street_address from dmhr.city c RIGHT join dmhr.location l on
c.city_id=l.city_id;
全外连接
左外连接+右外连接
full join /full outer join
select c.city_name,l.street_address from dmhr.city c full join dmhr.location l on
c.city_id=l.city_id;
5.7 子查询
当一个查询的结果是另外一个查询的条件时,就叫子查询。子查询可以嵌套子查询。
子查询可以分为:单行子查询和多行子查询。
单行子查询:子查询的结果只返回一条数据
多行子查询:子查询的结果返回不止一条数据
语法:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list FROM table);
单行子查询
= > >= < <= != 查询和陈仙在一个部门的员工。
select employee_name,department_id,salary from dmhr.EMPLOYEE where DEPARTMENT_ID=
(select department_id from dmhr.EMPLOYEE where EMPLOYEE_NAME='陈仙');
多行子查询
in any all
IN 等于列表中的任意一个
ANY 将值与子查询返回的任意一个值进行比较
ALL 将值与子查询返回的每个值进行比较
查询比 102 号部门工资都高的人
select employee_name,department_id,salary from dmhr.EMPLOYEE where salary > all
(select salary from dmhr.EMPLOYEE where DEPARTMENT_ID=102);
6、DM8 体系结构
DM 数据库是一个典型的 C/S 架构,由 client+server 组成
数据库(SERVER)=实例+数据库(狭义上的数据库)
数据库:一堆磁盘上的数据库文件,包括:配置文件、控制文件、数据文件、重做日志文件、
归档日志文件、备份文件、日志文件
实例:正在运行的一个进程和一组后台线程+共享内存区域
一个实例管理一个数据库,就叫单机环境
多个实例管理一个数据库,就是 DSC 环境
6.1 存储结构
6.1.1 物理存储结构
(1)配置文件
DM 数据库只有 1 个配置文件,dm.ini
select para_name,para_value,para_type from v$dm_ini;
参数类型:
SESSION:动态会话级参数,即改即生效,针对当前会话有效
SYS:动态系统级参数,即改即生效,修改动态参数会同时修改内存和配置文件中的值。
INFILE:静态参数,只修改配置文件中的值,修改完后,需要重启数据库实例生效,
READ ONLY:只读参数,只能通过文本编辑器修改参数
修改动态参数:
方法 1:
Sp_set_para_value(参数类型,参数名,参数值);
参数类型为 1,代表动态参数
参数类型为 2,代表静态参数
sp_set_para_value(1,'SVR_LOG',1);
方法 2:
alter system set 'SVR_LOG'=0 both;
Both:会同时修改内存和配置文件中的值
Spfile:只修改配置文件中的值
Memory:只修改内存中的值
方法 3:
通过文本编辑器、console 工具
修改静态参数:
COMPATIBLE_MODE
是否兼容其他数据库模式。
0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,
4:部分兼容 MYSQL,5:兼容 DM6,6:部分兼容 TERADATA,7:部分兼容 POSTGRES
修改数据库兼容模式为兼容 ORACLE 数据库
sp_set_para_value(2,'COMPATIBLE_MODE',2);
alter system set 'COMPATIBLE_MODE' = 2 spfile;
(2)控制文件
以.ctl 结尾的文件
DM 只有一个控制文件,无法做到多路复用
查看控制文件
[dmdba@localhost ctl_bak]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmctlcvt help
将控制文件转换为文本文件:
[dmdba@localhost bin]$ ./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl
dest=/home/dmdba/ctl.txt
控制文件记录的内容:

  1. 数据库名称;
  2. 数据库服务器模式;
  3. OGUID 唯一标识;
  4. 数据库服务器版本;
  5. 数据文件版本;
  6. 数据库的启动次数;
  7. 数据库最近一次启动时间;
  8. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的
    表空间,数组的方式保存起来;
  9. 控制文件校验码
    (3)重做日志文件
    重做日志文件记录的是数据库发生变更的信息。达梦数据库默认有两个重做日志文件,没有
    日志组。
    重做日志文件的特点:循环写、可覆盖。
    查看重做日志文件:
    select path,RLOG_SIZE/1024/1024 from v$rlogfile;
    添加重做日志文件:
    alter DATABASE ADD LOGFILE '/dm8/data/DAMENG/DAMENG03.log' SIZE 300;
    Resize 重做日志文件大小
    alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG01.log' to 300;
    alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG02.log' to 300;
    注意:重做日志文件,只能添加不能删除;只能扩大,不能缩小。
    (4)数据文件
    以.DBF 结尾的文件
    select * from v$datafile;
    select * from DBA_DATA_FILES;
    6.1.2 逻辑存储结构
    页:页是数据库的最小的使用单元,页支持 4k、8k、16k、32k,标准页大小为 8k。
    查看数据库页大小:
    select page;
    簇:连续的 16、32、64 个页组成。簇是数据库最小的分配单元。
    段:段是簇上级逻辑单元。段可以跨多个数据文件,段会占用存储空间。类型:表、索引、
    临时段、回滚段。
    表空间:数据库可以拥有多个表空间,一个表空间可以拥有一个或多个数据文件,一个数据
    文件只能属于一个表空间。
    6.2 内存结构
    (1)共享内存池
    服务器启动会向操作系统申请一大片内存,供其他内存池或者缓冲区不够用时,提供调用。
    参数:MEMORY_POOL
    MEMORY_TARGET:共享内存池在扩充到此大小以上后,空闲时收缩回此指定大小
    MEMORY_EXTENT_SIZE:共享内存池每次增量扩充大小
    (2)数据缓冲区
    缓存的是数据页。
    参数:BUFFER
    select para_name,para_value from v$dm_ini where para_name='BUFFER';
    数据缓冲区类型:
    Normal,keep 缓存的是数据页,可以手动管理,达梦数据库 keep 的是表空间
    Fast,recycle 缓存的是临时页和回滚页,数据库自动管理。
    数据缓冲区和共享内存池没有关系,数据缓冲区满了,会淘汰 LRU 链表上很少被使用到的
    数据页。
    数据缓冲区大小设置建议:
    Oltp,建议设置物理内存的 40%-60%
    Olap,建议设置物理内存的 60%-80%
    如果数据库中查询有大量的全表扫描,可以考虑调整参数 MULTI_PAGE_GET_NUM
    将数据缓冲区大小设置为 800m
    sp_set_para_value(2,'BUFFER',800);
    (3)重做日志缓冲区
    重做日志缓冲区缓存的是重做日志的信息。
    参数:RLOG_BUF_SIZE
    单位是:页
    select para_name,para_value,para_type from v$dm_ini where para_name='RLOG_BUF_SIZE';
    当重做日志缓冲区不够用时,会向操作系统申请内存。
    (4)SQL 缓冲区
    SQL 缓冲区缓存的是 SQL、执行计划、结果集的信息。
    参数:CACHE_POOL_SIZE
    select para_name,para_value,para_type from v$dm_ini where para_name='CACHE_POOL_SIZE';
    当 SQL 缓冲区不够用时,会向共享内存池申请内存。
    (5)字典缓冲区
    缓存的是数据字典的信息。
    参数:DICT_BUF_SIZE
    select para_name,para_value,para_type from v$dm_ini where para_name='DICT_BUF_SIZE';
    当字典缓冲区不够用时,会向共享内存池申请内存。
    (6)其他运行时内存池
    其他运行时内存池具有需要时被创建、使用完立即销毁的特点。包括:会话内存池、虚拟
    机内存池、排序区、hash 区等。
    6.3 线程结构
    (1)监听线程
    在数据库服务器端监听来自客户端的连接请求,加入工作线程对列。
    (2)IO 线程
    将磁盘上数据文件中的数据页加载到数据缓冲区中;将数据缓冲区中的脏页在一定机制(数
    据缓冲区满、执行检查点、数据库正常关闭)下更新到磁盘上的数据文件中。
    (3)日志刷新线程
    将重做日志缓冲区中重做日志(事务提交、执行检查点)更新到磁盘上的重做日志文件中。
    (4)日志归档线程
    数据库开启归档模式后,在重做日志文件被覆盖前将重做日志文件内容拷贝到归档路径下做
    副本。
    (5)日志重做线程
    利用重做日志文件信息和 undo 信息将数据库恢复到一致的状态。
    (6)调度线程
    检查系统级的时间触发器;
    清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
    动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
    自动执行检查点;
    会话超时检测;
    必要时执行数据更新页刷盘;
    唤醒等待的工作线程;
    (7)工作线程
    内核的工作线程机制包括普通内核线程和用户态线程两种,普通内核线程的切换完全由操作
    系统决定,但操作系统无法了解进程内部的运行机制,只能采取通用的调度策略来管理各个
    内核线程;用户态线程在内核线程内部自主调度,有效减少上下文切换
    7、表空间管理
    7.1 查询表空间
    select * from v$tablespace;
    select * from dba_tablespaces;
    介绍 DM 表空间:
    SYSTEM:系统表空间,主要存放数据库的数据字典和动态性能视图的信息。
    TEMP:临时表空间,临时表、排序等。
    MAIN:默认表空间,新建用户时没有指定默认表空间,就是 MAIN 表空间。
    ROLL:回滚表空间,存放回滚记录。
    7.2 创建表空间
    例:创建表空间 TEST,数据文件/dm8/data/DAMENG/TEST01.DBF,数据文件初始大小为 30M.
    数据文件最小大小为 4096*页大小
    8k 数据文件最小为 32M
    例:创建表空间 TEST,数据文件/dm8/data/DAMENG/TEST01.DBF,数据文件初始大小为 50M,
    数据文件开启自动扩展,每次扩展 2M,最大可扩展至 1G.
    create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 50 autoextend on next 2
    maxsize 1024 CACHE = NORMAL;
    例:创建表空间 TBS,数据文件分别为
    /dm8/data/DAMENG/TBS01.DBF,/dm8/data/DAMENG/TBS02.DBF,数据文件初始大小为 50M,每
    个数据文件开启自动扩展,每次扩展 1M,最大可扩展至 10G.
    create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 50 autoextend on next 1
    maxsize 10240, '/dm8/data/DAMENG/TBS02.DBF' size 50 autoextend on next 1 maxsize 10240
    CACHE = NORMAL;
    7.3 管理表空间
    (1)表空间状态
    select tablespace_name,STATUS from dba_tablespaces;
    Status:0 代表联机,在线;1 代表脱机,离线
    表所在表空间脱机后,将无法访问该表的数据
    将 MAIN 表空间脱机和联机
    alter TABLESPACE MAIN OFFLINE;
    alter TABLESPACE MAIN ONLINE;
    (2)表空间维护
    当表空间不够用时:
    Resize 数据文件大小
    alter tablespace "TEST" resize datafile 'TEST01.DBF' to 100;
    添加数据文件
    alter tablespace "TEST" add datafile '/dm8/data/DAMENG/TEST02.DBF' size 32;
    迁移数据文件:
    Alter tablespace "TEST" offline;
    alter tablespace "TEST" rename datafile 'TEST01.DBF' to '/home/dmdba/TEST01.DBF';
    alter tablespace "TEST" online;
    (3)修改 TEMP 表空间大小
    将 TEMP 表空间大小改为 100M
    sp_set_para_value(2,'TEMP_SIZE',100);
    (4)删除表哦空间
    drop tablespace "TBS";
    注意:SYSTEM、TEMP、ROLL 表空间不能脱机、删除。 8、用户管理
    8.1 用户
    查看和介绍 DM 用户
    select username,ACCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE,DEFAULT_TABLESPACE from
    dba_users;
    企业版用户,三权分立:
    SYSDBA:数据库管理员
    SYSAUDITOR:数据库审计员,创建审计规则,查看审计记录
    SYSSSO:数据库安全员,创建数据库安全规则
    SYS:不能登录,存放数据字典和动态性能视图的信息
    安全版用户,四权分立:
    在企业版用户基础上,新增数据库对象操作员 SYSDBO
    8.2 权限
    权限可以分为:系统权限和对象权限。
    8.3 角色
    角色就是一组权限的集合,使用角色就是为了方便权限管理。
    角色可以被授予给角色,也可以被授予给用户。
    8.4 创建用户
    创建用户时应该考虑到:
    用户的命名:以字母开头,长度不超过 128 个字符
    密码
    权限:系统权限、对象权限、角色
    资源配置:失败登录次数、密码有效期等
    默认表空间
    例 1:创建用户 TEST,密码 dameng123,拥有创建表、创建视图、创建索引的权限。该用户
    的默认表空间是 TEST,失败登录 5 次后,账号锁定 3 分钟。
    create user "TEST" identified by "dameng123"
    limit FAILED_LOGIN_ATTEMPS 5 PASSWORD_LOCK_TIME 3
    default tablespace "TEST";
    grant "PUBLIC","SOI" to "TEST";
    grant CREATE TABLE,CREATE VIEW,CREATE INDEX to "TEST";
    8.5 创建 profile
    CREATE PROFILE "PROFILE1" LIMIT FAILED_LOGIN_ATTEMPS 3, PASSWORD_LOCK_TIME 1, PASSWORD_GRACE_TIME 10 ,SESSION_PER_USER 500 ,PASSWORD_LIFE_TIME 90;
    修改用户资源设置为 profile1
    alter user test PROFILE profile1;
    8.6 创建角色
    create role "ROLE1";
    grant "RESOURCE" to "ROLE1";
    grant CREATE TABLE,CREATE VIEW to "ROLE1";
    grant SELECT on "DMHR"."EMPLOYEE" to "ROLE1";
    8.7 修改用户
    revoke CREATE INDEX from "TEST";
    grant UPDATE("PHONE_NUM") on "DMHR"."EMPLOYEE" to "TEST";
    grant SELECT on "DMHR"."DEPARTMENT" to "TEST";
    grant SELECT("HIRE_DATE") on "DMHR"."EMPLOYEE" to "TEST";
    grant UPDATE("EMAIL") on "DMHR"."EMPLOYEE" to "TEST";
    grant SELECT("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "TEST";
    将 ROLE1 角色授予给 TEST 用户:
    grant "ROLE1" to "TEST";
    修改用户密码:
    alter user "TEST" identified by "DAMENG123";
    修改用户默认表空间:
    alter user "TEST" default tablespace "DMHR";
    锁定和解锁用户:
    alter user TEST ACCOUNT LOCK;
    alter user TEST ACCOUNT UNLOCK;
    查看用户 TEST,角色 ROLE1 被授予的系统权限:
    select * from dba_sys_privs where GRANTEE in ('TEST','ROLE1');
    查看用户 TEST,角色 ROLE1 被授予的对象权限:
    select * from SYS.DBA_TAB_PRIVS where GRANTEE in ('TEST','ROLE1');
    select * from SYS.DBA_COL_PRIVS where GRANTEE in ('TEST','ROLE1');
    查看 TEST 用户被授予的角色:
    select * from SYS.DBA_ROLE_PRIVS where GRANTEE='TEST';
    删除用户:
    drop user "TEST";
    9、模式对象管理
    9.1 模式
    模式就是一组数据库对象的集合,使用模式方便数据库对象管理。
    模式与用户的关系:
    一个用户可以拥有多个模式,一个模式只能属于一个用户。新建用户时,会自动创建一个同
    名的模式。
    访问某个模式下的表,不加模式名
    方法一:切换模式
    set schema dmhr;
    select * from employee;
    方法二:创建同义词
    9.2 表
    DM 数据库支持表的类型:索引组织表、堆表、外部表、分区表、临时表等。
    DM 数据库默认表的类型是索引组织表。
    规划表考虑到的因素:
    表名:以字母开头
    列及数据类型:int,number,char,varchar,varchar2,text,clob,date,time,datetime,clob,blob
    约束:非空、唯一、主键、外键、检查约束
    表空间
    权限
    范式
    9.2.1 创建表
    (1)非空约束
    (2)唯一约束
    创建唯一约束会自动创建唯一索引,唯一约束会忽视 NULL,NULL 不等于任何值。
    CREATE TABLE "TEST"."TEST2"
    ("ID" INT, "NAME" VARCHAR(50), UNIQUE("NAME")) STORAGE(ON "MAIN") ;
    执行数据批量导入:
    管理工具(manager):
    /home/dmdba/script.sql disql 工具: 方法一: /home/dmdba/script.sql
    方法二:
    start /home/dmdba/script.sql
    (3)主键约束
    主键约束:非空+唯一,一个表只能有一个主键约束
    CREATE TABLE "TEST"."TEST3"
    ("ID" INT NOT NULL,
    "NAME" VARCHAR(60), NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "TEST", CLUSTERBTR) ;
    (4)外键约束
    外键约束也叫引用约束
    CREATE TABLE "TEST"."TEST4"
    ("ID" INT, "NAME" VARCHAR(50), FOREIGN KEY("ID") REFERENCES "TEST"."TEST3"("ID")) STORAGE(ON "TEST", CLUSTERBTR) ;
    insert into test.test3 values(1,'AAA');
    insert into test.test4 values(1,'AAA');
    insert into test.test3 values(2,'BBB');
    insert into test.test4 values(2,'BBB');
    Commit;
    delete from test.test4 where id=1;
    delete from test.test3 where id=1;
    Commit;
    注意:有主外键约束关系的表,在插入数据时,先插入主键约束表的记录,再插入外键约束
    表的记录;在删除数据时,要先删除外键约束表的记录,再删除主键约束表的记录。
    update test.test2 set name='FFF' where id=4;
    (5)检查约束
    number(精度,标度)
    精度:数字有多少位
    标度:小数点位数
    number(5,2)
    999.99
    CREATE TABLE "TEST"."TEST5"
    ("ID" NUMBER(5,2), CHECK(ID > 5)) STORAGE(ON "TEST", CLUSTERBTR) ;
    取值范围:5.01-999.99
    9.2.2 修改表
    添加列:
    alter table "TEST"."TEST1" add column("ADD1" VARCHAR(50));
    删除列:
    alter table "TEST"."TEST1" drop column "ADD1";
    重命名表:
    alter TABLE test.test6 rename to test1;
    重命名列:
    alter table test.test1 RENAME COLUMN id1 to id;
    禁用/启用约束:
    alter table test.test5 DISABLE CONSTRAINT CONS134218875;
    alter table test.test5 ENABLE CONSTRAINT CONS134218875;
    查看约束:
    select * from SYS.DBA_CONSTRAINTS where OWNER='TEST';
    删除表:
    drop table "TEST"."TEST5";
    9.3 视图
    DM 视图分为:简单视图、复杂视图、物化视图
    视图就是一个查询语句,一张虚拟表。
    创建视图:
    Create view .... as select ...;
    Create or replace view .... as select ...;
    grant select on dmhr.employee to test;
    create view test.view_emp as select employee_name,department_id,salary
    from dmhr.employee where department_id=101;
    删除视图:
    drop view test.VIEW_EMP;
    9.4 索引
    索引是一种数据库对象。
    索引的特点:
    索引会占用存储空间
    对表做维护时,数据库会自动维护索引
    适合建立索引:
    连接列
    Where 条件中出现的列
    不适合建立索引:
    列上有大量的重复数据或者空值
    结果集返回大量数据
    创建索引:
    create index "DMHR"."IND_NAME" on "DMHR"."EMPLOYEE"("EMPLOYEE_NAME");
    维护索引:
    索引的不可见/可见
    alter INDEX dmhr.ind_name INVISIBLE;
    alter INDEX dmhr.ind_name VISIBLE;
    索引的无效和有效
    alter INDEX dmhr.ind_name UNUSABLE;
    alter INDEX dmhr.ind_name REBUILD;
    注意:索引不可见,执行计划不会选择索引,表维护时会自动维护索引;
    索引无效后,执行计划不会选择索引,表维护时不会维护索引,只能重建。
    删除索引:
    drop index dmhr.ind_name;
    10、备份还原
    10.1 冷备
    创建备份路径:
    mkdir -p /dm8/backup
    需要关闭数据库,需要开启 DmAP 服务
    [dmdba@localhost bin]$ ./DmServiceDMSERVER stop
    方法一:
    [dmdba@localhost tool]$ ./console
    方法二:dmrman
    [dmdba@localhost tool]$ cd /dm8/bin
    [dmdba@localhost bin]$ ./dmrman
    dmrman V8
    RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
    10.2 热备
    需要数据库在打开状态
    [dmdba@localhost bin]$ ./DmServiceDMSERVER start
    数据库 DmAP 服务在运行状态
    [dmdba@localhost bin]$ ./DmAPService start
    需要数据库开启归档模式
    查看数据库是否开启归档模式:
    select name,arch_mode from v$database;
    图形化开归档:
    命令行开归档:
    Alter database mount;
    alter database archivelog;
    alter database add archivelog 'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=0, ARCH_FLUSH_BUF_SIZE=0';
    Alter database open;
    查看归档信息:
    select * from v$arch_status;
    (1)数据库
    管理工具:
    提示的原因:没有备份到数据库的默认备份路径
    Disql 工具:
    SQL> backup database full backupset '/dm8/backup/full1';
    (2)表空间
    表空间备份只能热备;表空间还原恢复,只能脱机还原
    方法一:管理工具
    方法二:disql 工具
    backup tablespace main full backupset '/dm8/backup/ts2';
    (3)表
    方法一:管理工具
    方法二:disql 工具
    backup table test.test1 backupset '/dm8/backup/tab2';
    10.3 还原恢复
    整库和表空间还原恢复都需要关闭数据库。
    [dmdba@localhost bin]$ ./DmServiceDMSERVER stop
    需要 DmAP 服务在运行中
    (1)整库还原恢复
    还原——恢复——更新数据库魔数
    方法一:console 工具
    方法二:dmrman 工具
    restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup';
    RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/arch';
    RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
    (2)表空间还原恢复
    还原表空间——恢复表空间
    方法一:console 工具
    方法二:dmrman 工具
    RMAN> restore database '/dm8/data/DAMENG/dm.ini' tablespace dmhr from backupset
    '/dm8/backup';
    RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace dmhr with archivedir
    '/dm8/arch';
    10.4 逻辑备份还原
    逻辑导出一共有 4 个级别:
    FULL:整库导出
    OWNER:用户级别导出
    SCHEMAS:模式级别导出
    TABLES:表级别导出
    导出/导入
    dexp/dimp
    查看帮助手册:
    /dm8/bin/dexp help
    /dm8/bin/dimp help
    (1)整库级别导出
    /dm8/bin/dexp SYSDBA/Dameng123 DIRECTORY=/dm8/backup FILE=full.dmp FULL=Y
    LOG=full.log
    (2)用户级别导出
    /dm8/bin/dexp SYSDBA/Dameng123 DIRECTORY=/dm8/backup FILE=test.dmp OWNER=TEST
    LOG=test.log
    (3)模式级别导出
    /dm8/bin/dexp SYSDBA/Dameng123 DIRECTORY=/dm8/backup FILE=dmhr.dmp
    SCHEMAS=DMHR,PERSON LOG=dmhr.log
    (4)表级别导出
    /dm8/bin/dexp SYSDBA/Dameng123 DIRECTORY=/dm8/backup FILE=tables.dmp
    TABLES=DMHR.DEPARTMENT,DMHR.EMPLOYEE,DMHR.LOCATION LOG=tables.log
    (5)将 DMHR 模式下的数据库对象导入到 TEST 模式
    /dm8/bin/dimp sysdba/Dameng123 file=dmhr.dmp directory=/dm8/backup log=imp_dmhr.log
    remap_schema=dmhr:test
    11、作业管理系统
    作业管理系统类似于服务器的计划任务。
    可以完成数据库自动备份、执行 sql、更新统计信息。
    创建代理环境:
    新建作业 JOB1,每周日 22:00 对数据库做完全备份
    call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,'');
    call SP_JOB_CONFIG_START('JOB1');
    call SP_ADD_JOB_STEP('JOB1', 'B1', 6, '00000000', 0, 0, 0, 0, NULL, 0);
    call SP_ADD_JOB_SCHEDULE('JOB1', 'D1', 1, 2, 1, 1, 0, '22:00:00', NULL, '2024-08-23 16:44:28', NULL, '');
    call SP_JOB_CONFIG_COMMIT('JOB1');
    新建作业 JOB2,每周一、二、三、四、五、六对 22:00 对数据库做增量备份。
    call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'');
    call SP_JOB_CONFIG_START('JOB2');
    call SP_ADD_JOB_STEP('JOB2', 'B2', 6, '10000000/dm8/backup', 0, 0, 0, 0, NULL, 0);
    call SP_ADD_JOB_SCHEDULE('JOB2', 'D2', 1, 2, 1, 126, 0, '22:00:00', NULL, '2024-08-23 16:48:17', NULL, '');
    call SP_JOB_CONFIG_COMMIT('JOB2');
    12、DM8 开发
    Linux 环境下 ODBC 安装与配置
    [root@localhost opt]# tar -xvf unixODBC-2.3.0.tar.gz
    [root@localhost opt]# cd unixODBC-2.3.0/
    [root@localhost unixODBC-2.3.0]# ./configure
    [root@localhost unixODBC-2.3.0]# make && make install
    [root@localhost unixODBC-2.3.0]# cd /usr/local/etc/
    配置文件:
    Odbc.ini
    [root@localhost etc]# vi odbc.ini
    [DM8]
    Description = DM ODBC DSN
    Driver = DM8 ODBC DRIVER
    SERVER = localhost
    UID = SYSDBA
    PWD = Dameng123
    TCP_PORT = 5236
    Odbcinst.ini
    [root@localhost etc]# vi odbcinst.ini
    [DM8 ODBC DRIVER]
    Description = ODBC DRIVER FOR DM8
    Driver = /dm8/bin/libdodbc.so
    使用 dmdba 用户测试连接:
    13、考试
    考试形式:上机实操
    考试时间:120 分钟
    考试分数:100 分总分,70 分合格,内部员工 90 分拿证。
    考试内容:DM8 软件安装、创建数据库、创建表空间、用户管理、修改数据库参数、创建
    表、导入数据、创建视图、创建索引、数据库备份还原、数据库逻辑备份、作业管理、DM8
    开发接口配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903468.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绿联nas防火墙导致docker网络无法互通

问题描述设备:绿联nas dxp4800 系统:ugnas pro 绿联新系统在12月份更新后,原本用nginx代理的alist,青龙等服务全都连接不上,在ugnas系统防火墙设置如下:对外只通过80端口,其他docker服务都只能通过nginx反代访问,系统更新前一直都没问题。 问题排查 经过反复排查发现关…

20244119 实验一 《Python程序设计》 实验报告

课程:《Python程序设计》 班级: 2441 姓名: 霍彬斌 学号:20244109 实验教师:王志强 必修/选修: 公选课 一、实验内容 熟悉Pycharm等开发环境; 掌握基本的Python运行和调试技能; 掌握基本的Python编程技能。 二、实验过程及结果 1.熟悉Python开发环境; 本次实验使用pyc…

一步一步教你部署ktransformers,大内存单显卡用上Deepseek-R1

环境准备 硬件环境 CPU:intel四代至强及以上,AMD参考同时期产品 内存:800GB以上,内存性能越强越好,建议DDR5起步 显卡:Nvidia显卡,单卡显存至少24GB(用T4-16GB显卡实测会在加载模型过程中爆显存),nvidia compute capability至少8.0(CUDA GPUs - Compute Capability …

20244119实验一《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2441 姓名: 霍彬斌 学号:20244109 实验教师:王志强 必修/选修: 公选课 一、实验内容 熟悉Pycharm等开发环境; 掌握基本的Python运行和调试技能; 掌握基本的Python编程技能。 二、实验过程及结果 1.熟悉Python开发环境; 本次实验使用pyc…

WebSocket系列 注册 @ServerEndpoint类失败

WebSocket系列—注册 @ServerEndpoint类失败 目录WebSocket系列—注册 @ServerEndpoint类失败一、问题背景二、寻找问题三、解决问题3.1、自己定义的切面3.2、外部框架的切面四、参考博客五、WebSocket系列地址 一、问题背景 博主最近分到后端主动推送报警业务,调研了一圈(轮…

实验1 C语言输入输出和简单程序编写补充

任务二:判断它能否构成三角形 #include <stdio.h> int main(){ double a, b, c; scanf_s("%lf%lf%lf", &a, &b, &c); if ((a + b > c) && (a + c > b) && (b + c > a)) printf("能构成三角…

ASE15N45-ASEMI智能家居专用ASE15N45

ASE15N45-ASEMI智能家居专用ASE15N45编辑:ll ASE15N45-ASEMI智能家居专用ASE15N45 型号:ASE15N45 品牌:ASEMI 封装:TO-220 批号:最新 最大漏源电流:15A 漏源击穿电压:450V RDS(ON)Max:0.38Ω 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道M…

什么是RabbitMQ入门

一.什么是RabbitMQ 中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件=平台+…

使用BL0937 IC进行交流电源监控

一个简单的电路来监测交流电源,接线板可以插在任何地方,显示电压,电流和功率。交流电源监控是当今物联网相关应用中的一个惊人功能,例如智能风扇,开关和板。一些优秀的公司董事会在他们的产品中实施了这项技术,并持续监控供应的输出功率。在本地设备层面监控电源有其自身…

20244224 实验一《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名: 旦曾央京 学号:20244224 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等; 4.编…

【智慧构造题】CF1427E Xum

我们发现这个原数为奇数的条件比较神秘,于是我们考虑每次把这个数字第一位 \(1\) 给干了。 考虑怎么构造。 令 $d=\lfloor \log_2 x \rfloor $ 令 \(x=1abc1\) \(x1=1abc10000\) \(x2=1abc0abc1\) \(x3=x2+x1=1abc01abc1\) \(x4=x ⊕ x3=1abc000000\) \(x5=x1+x1=1abc100000…

DataGrip结果运行在代码区域

DataGrip运行过后发现运行的结果在代码区域解决方式进入设置界面 点击左上角File(文件)->settings(设置) 搜索栏输入results或output and results 找到下面的设置界面 找到Results下的 Show results in editor ,取消勾选