大家好,欢迎来到IT知识分享网。
达梦数据库DM8使用介绍
达梦数据库DM8使用介绍
一、安装达梦数据库
1.挂载数据库iso
创建挂载目录
mkdir /mnt/dm
挂载iso
mount dm8_xx_xx_xx_xx.iso /mnt/dm
2.进入/mnt/dm可以看到达梦数据库安装文件
3.安装达梦数据库不建议在root用户下所以在安装之前创建一个用户dmdba将达梦数据库安装在此目录下
创建用户组
groupadd dinstall useradd -g dinsatll -m -d /home/dmdba -s /bin/bash dmdba passwd dmdba
4.在root用户下创建达梦数据库安装目录并赋权给dmdba
mkdir /dm8 chown -R dinstall:dmdba /dm8
查看目录/dm8 所属用户
ls -ld /dm8
5.设置图形化
在root用户下执行
echo $DISPLAY xhost +
在dmdba用户执行
export DISPLAY=:0.0
6.图形化安装达梦数据库
进入 /mnt/dm 执行 ./DMInstall.bin
报错tmp空间不够
解决办法
创建一个新目录作为安装程序临时目录
mkdir tmp_dm8 export DM_INSTALL_TMPDIR=/home/dmdba/tmp_dm8
7.图形化安装步骤
设置语言与时区
点击确定
达梦数据库安装向导
点击下一步
点击接受许可证协议
点击下一步
如果有dm.key文件
选择key文件路径
没有点击下一步
选择典型安装
点击下一步
选择数据库安装位置/dm8
点击确定
查看安装小结
在root用户下执行对话框命令
数据库安装完成
二、初始化数据库实例
点击【初始化】
点击创建数据库实例
点击【开始】
选择【一般用途】,取消【自动调整数据库性能参数】,点击【下一步】
选择【数据库数据目录】
修改【数据库名】,【实例名】,【端口号】
选择【控制文件】路径
选择【数据文件】路径
选择【日志文件】路径
选择【初始化日志】文件路径
点击【下一步】,修改【数据化初始参数】簇大小、页大小、字符集等
点击下一步,修改【数据库密码】
点击下一步,【创建示例库】
点击完成
在root用户下执行命令
[root@localhost /]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service [root@localhost /]# systemctl enable DmServiceDMSERVER.service Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmServiceDMSERVER.service. [root@localhost /]# systemctl start DmServiceDMSERVER.servicesystemctl
可以看到数据库创建完成,点击【完成】
三、SQL 分类
DML(Data Mannipulation Language)数据操纵语言:
查询、操纵数据表资料行,包含 SELECT、INSERT、UPDATE、DELETE,MERGE。
默认情况下,DM 中 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可以降低表的水位线。DM 中,TRUNCATE 会重置表的自增列。
SQL 的基础组成:
SELECT:(必选)查询列,聚合函数、distinct 去重
FROM:(可选)查询的表
WHERE:(可选)查询条件
GROUP BY:(可选)分组列。默认 select 出现的列(非聚合函数),group by 中要出现。
Having:(可选)聚合的过滤条件(配合 group by 使用)
ORDER BY:(可选)排序,默认 asc, 倒序排 desc,NULL 默认排在最前面(由参数
ORDER_BY_NULLS_FLAG,Oracle 默认排在最后面)
DM中union和distinct只去重,不排序。
Oracle中union和distinct去重且排序。
单表查询:
select t.EMPLOYEE_ID, t.EMPLOYEE_NAME, t.EMAIL, t.PHONE_NUM from dmhr.employee t;
select t.EMPLOYEE_ID, t.EMPLOYEE_NAME, t.EMAIL, t.PHONE_NUM from dmhr.employee t where t.DEPARTMENT_ID = 101;
select employee_id,employee_name,salary as sal from dmhr.employee where employee_name like '马%' order by 3 desc;
group by和having的用法:
select a.DEPARTMENT_ID, count(*) as empnum from dmhr.employee a group by a.DEPARTMENT_ID having count(*) >=30;
select a.DEPARTMENT_ID, a.JOB_ID, count(*) as empnum from dmhr.employee a group by cube(a.DEPARTMENT_ID, a.JOB_ID) having count(*) >=20;
select a.DEPARTMENT_ID, a.JOB_ID, count(*) as empnum from dmhr.employee a group by rollup(a.DEPARTMENT_ID, a.JOB_ID) having count(*) >=20;
order by 用法:
DM 中空值排序,默认排在最前面。可以指定排在最后面。
select a.DEPARTMENT_ID, count(*) as empnum from dmhr.employee a group by a.DEPARTMENT_ID having count(*) >=30 order by empnum desc; update dmhr.employee t set t.salary=null where t.employee_id=1100; commit; select t.EMAIL, t.EMPLOYEE_ID, t.EMPLOYEE_NAME, t.DEPARTMENT_ID, t.SALARY from dmhr.employee t where t.DEPARTMENT_ID = 101 order by t.SALARY desc NULLS LAST ;
CUBE 与 ROLLUP
达梦的 GROUP BY 语句除了最基本的语法外,还支持 ROLLUP 和 CUBE 语句。
ROLLUP(A, B, C): 首先会对(A、B、C)进行 GROUP BY,然后对(A、B)进行 GROUP BY,然后是(A)进行 GROUP BY,最后对全表进行 GROUP BY 操作,合计 N+1 的组合(N 表示分组列数)。
CUBE(A, B, C):首先会对(A、B、C)进行 GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),©,最后对全表进行 GROUP BY 操作,合计 8 种组合(2 的 N 次方,N 表示分组列数)。
CUBE 和 ROLLUP 之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
多表连接
内连接:返回两张表中满足连接条件的记录。
外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不
满足条件的行,这种连接称为左(或右)外连接
两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,
这种连接称为全外连接。
表的连接方式:nested loop join、HASH JOIN 等
两张小表关联可以使用 nested loop join,连接列上可以创建索引。
Hash join:主要用于两张大表的连接。以较小的表为驱动表,连接效率更快。
[执行语句1]:
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum from dmhr.employee a join dmhr.DEPARTMENT b on a.DEPARTMENT_ID = b.DEPARTMENT_ID group by a.DEPARTMENT_ID having count(*) >=30 order by empnum desc;
执行失败(语句1)
第6 行附近出现错误[-4080]:
不是 GROUP BY 表达式
NATURAL JOIN用法:
select department_id deptid, b.DEPARTMENT_NAME, count(a.employee_id) empnum, sum(a.salary) sum_salary, min(a.salary) min_salary, max(a.salary) max_salary, avg(a.salary) avg_salary from dmhr.employee a NATURAL JOIN dmhr.DEPARTMENT b where (DEPARTMENT_ID BETWEEN 101 and 201 ) --and a.SALARY >= 10000 group by DEPARTMENT_ID, b.DEPARTMENT_NAME having avg(a.salary) >=10000 order by empnum desc;
JOIN USING用法:
select department_id deptid, b.DEPARTMENT_NAME, count(a.employee_id) empnum, sum(a.salary) sum_salary, min(a.salary) min_salary, max(a.salary) max_salary, avg(a.salary) avg_salary from dmhr.employee a JOIN dmhr.DEPARTMENT b using (department_id, manager_id) where (DEPARTMENT_ID BETWEEN 101 and 201 ) --and a.SALARY >= 10000 group by DEPARTMENT_ID, b.DEPARTMENT_NAME having avg(a.salary) >=10000 order by empnum desc;
内连接案例:
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum from dmhr.employee a, dmhr.DEPARTMENT b where a.DEPARTMENT_ID = b.DEPARTMENT_ID group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME having count(*) >=30 order by empnum desc; select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum from dmhr.employee a join dmhr.DEPARTMENT b on a.DEPARTMENT_ID = b.DEPARTMENT_ID group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME having count(*) >=30 order by empnum desc;
左外连接:
构造数据:
update dmhr.employee a set a.DEPARTMENT_ID = null where a.DEPARTMENT_ID = 101; commit; select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as empnum from dmhr.employee a, dmhr.DEPARTMENT b where a.DEPARTMENT_ID = b.DEPARTMENT_ID(+) group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME -- having count(*) >=30 --order by empnum desc; select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as empnum from dmhr.employee a left join dmhr.DEPARTMENT b on a.DEPARTMENT_ID = b.DEPARTMENT_ID group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME -- order by empnum desc;
右外关联:
insert into dmhr.DEPARTMENT(DEPARTMENT.DEPARTMENT_ID, DEPARTMENT.DEPARTMENT_NAME) values(,'Test'); commit; select a.DEPARTMENT_ID, b.DEPARTMENT_id, b.DEPARTMENT_NAME, count(a.employee_id) as empnum from dmhr.employee a, dmhr.DEPARTMENT b where a.DEPARTMENT_ID(+) = b.DEPARTMENT_ID group by a.DEPARTMENT_ID, b.DEPARTMENT_id, b.DEPARTMENT_NAME; select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as empnum from dmhr.employee a right join dmhr.DEPARTMENT b on a.DEPARTMENT_ID = b.DEPARTMENT_ID group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;
全外关联:
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as empnum from dmhr.employee a full join dmhr.DEPARTMENT b on a.DEPARTMENT_ID = b.DEPARTMENT_ID group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;
子查询:
Exists、in、内关联的不同写法
SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE E WHERE EXISTS ( SELECT * FROM DMHR.JOB_HISTORY J WHERE E.EMPLOYEE_ID = J.EMPLOYEE_ID ); SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE E WHERE E.EMPLOYEE_ID in ( SELECT J.EMPLOYEE_ID FROM DMHR.JOB_HISTORY J); SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE E join DMHR.JOB_HISTORY J on E.EMPLOYEE_ID = J.EMPLOYEE_ID; Not exist、Not In、 外关联的不同写法 explain SELECT count(*) FROM DMHR.EMPLOYEE E WHERE not EXISTS ( SELECT * FROM DMHR.JOB_HISTORY J WHERE E.EMPLOYEE_ID = J.EMPLOYEE_ID ); explain SELECT count(*) FROM DMHR.EMPLOYEE E WHERE E.EMPLOYEE_ID not in ( SELECT J.EMPLOYEE_ID FROM DMHR.JOB_HISTORY J); explain SELECT count(*) FROM DMHR.EMPLOYEE E left join DMHR.JOB_HISTORY J on E.EMPLOYEE_ID = J.EMPLOYEE_ID where j.EMPLOYEE_ID is null;
DML:
Insert
插入时表名后建议带上列名。支持多行插入:
DELETE子查询更新:
Mysql的写法:
DELETE DMHR.EMPLOYEE, DMHR.JOB_HISTORY FROM DMHR.EMPLOYEE E JOIN DMHR.JOB_HISTORY J ON E.EMPLOYEE_ID = J.EMPLOYEE_ID;
转换到达梦中的写法:
写法一:
DELETE FROM DMHR.EMPLOYEE E where exists**(select** 1 from DMHR.JOB_HISTORY J where E.EMPLOYEE_ID = J.EMPLOYEE_ID);
写法二:
DELETE FROM DMHR.EMPLOYEE E where E.EMPLOYEE_ID in (**select** J.EMPLOYEE_ID from DMHR.JOB_HISTORY**);
四、 DM 内存结构
数据缓冲区
用于缓存数据文件中的数据页。BUFFER 是从磁盘读出的数据页在内存中的镜像,包含四个类型,分别是 normal、fast、recycle、keep,由 INI 配置中的 BUFFER、FAST_POOL_PAGES、RECYCLE、KEEP 等确定大小,不同类型的缓冲区主要表现为淘汰机制不同。
数据缓冲区采用 LRU(Latest Recently Used 最近最少使用)算法淘汰。
数据缓冲区的大小影响数据库的读写性能,OLTP 数据缓冲区占内存 40-60%,OLAP 可以稍大;系统应尽量减少物理读,提高逻辑读。
当数据库执行检查点时会做数据缓冲区的刷盘,检查点将数据缓冲区中的脏页(被修改的数据页)写入对应数据文件。
从磁盘的数据文件中读取数据—物理读从内存(数据缓冲区)读取数据—逻辑读
select * from v$bufferpool; –数据缓冲区
select * from SYS.“V$PARAMETER” t
WHERE name in (‘BUFFER’,‘FAST_POOL_PAGES’,‘RECYCLE’,‘KEEP’);
修改数据缓冲区大小为500M:
alter system set ‘BUFFER’= 500 spfile;
DM 默认读 1 页,可以开启读多页(依赖业务场景),有参数 MULTI_PAGE_GET_NUM 指定。
重做日志缓冲区
重做日志是数据库与磁盘间的一层缓存,将随机的磁盘写转换成顺序写,日志缓冲区是
数据库和日志间的缓存对应 INI 参数 RLOG_BUF_SIZE
减少 commit 次数,可以提高性能。
SQL 缓冲区
缓存 sql 语句、对应的执行计划、缓存结果集(需要开启结果集缓存,默认不开启)
SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息(PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG比较多、复杂的系统,建议将该参数调大。
参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。
对应参数 CACHE_POOL_SIZE,如果 sql 较多、结果集缓存,可以适当调大 sql 缓冲区。
相关数据字典:
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 i f u n t , S Y S . ” V ifun t, SYS.”V ifunt,SYS.”VIFUN_ARG” B
where t.name like ‘%SP_CLEAR_PLAN_CACHE%’
and t.id = b.id;
SP_CLEAR_PLAN_CACHE(PLAN_ID); –清理执行计划
–SP_SET_PLN_BINDED –绑定执行计划
字典缓冲区
字典缓冲区是存在数据库对象的一片缓冲区,对应 INI 参数 DICT_BUF_SIZE,DM8 里面
数据对象其实对应的是系统表上的一些信息,内存中的数据对象是通过将系统表上的信息取
出并解析出来得到的,该缓冲区一是避免了频繁向磁盘请求获取系统表信息,二是可以减少
系统表信息解析开销。
select * from v$dynamic_tables t where T.NAME like ‘%DICT%’;
select * from V$DICT_CACHE_ITEM;
select * from V$DICT_CACHE;
select name, type, value, sys_value, file_value from v$parameter t where name like
‘DICT_BUF_SIZE’;
主内存池(共享内存池)
当其他内存池(比如运行时内存池:虚拟内存池 vm pool 和会话池 session pool 等)不够时,会先向主内存池申请空间。
服务器启动时从操作系统申请的一大片内存,后续服务器运行过程中,一般情况下,很多需要内存分配的地方都是从该池分配,如果需要的内存大于配置值(MEMORY_POOL),共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池能扩展到的最大大小.
select * from V$mem_pool; select name, type,value, sys_value, file_value from v$parameter t where name like 'MEMORY%';
MEMORY_POOL:初始大小 MEMORY_EXTENT_SIZE:扩展大小 MEMORY_TARGET:目标大小 MEMORY_N_POOL:共享内存池个数,默认为 1,高并发时可设置多个。 MAX_OS_MEMORY:内存占用操作系统内存的比例,默认 100,建议调整到 80-90%。
运行时的内存池
特点:使用时申请,用完即释放。包含:虚拟内存池 vm pool、会话池 session pool、RT_HEAP,(排序区、HASH 区)等。
排序区和 HASH 区
排序区:SORT_BUF_SIZE
少量的数据排序,优先在内存中排序,此时占用排序区;
大量的数据排序,内存中放不下,占用临时表空间排序。
如果业务经常有排序,可以适当调大排序区,提高效率。
select name, type, value, sys_value, file_value from v$parameter t where name like 'SORT%';
HASH 区:HJ_BUF_SIZE
HASH 连接、HASH 分区占用哈希区。如果业务 hash 连接较多,可以调大哈希区。
select name, type, value, sys_value, file_value from v$parameter t where name like 'HJ%';
HASH 区和排序区都属于虚拟缓冲区,实际申请时使用虚拟内存池或会话内存池。
虚拟内存池 VM POOL 和会话内存池 SESSION POOL.
相关参数:
VM_POOL_SIZE 64 静态
系统执行时虚拟机内存池大小,在执行过程中用到的内存大部分是从这里申请的,它的空间是从操作系统中直接申请的,有效值范围(32~1024*1024)
VM_POOL_TARGET 16384 静态
虚拟机内存池能扩充到的最大大小,以 KB为单位,有效值范围(0~1010241024),0 表示不限制
SESS_POOL_SIZE 64 动态,系统级
会话缓冲区大小,以 KB 为单位,有效值范围(16~1024*1024)。若所申请的内存超过实际能申请的大小,则系统将按 16KB 大
小重新申请
SESS_POOL_TARGET 16384 动态,系统级
会话缓冲区能扩充到的最大大小,以 KB 为单位,有效值范围(0~1010241024),0 表示不限制
Sql 执行会占用会话池或虚拟池。
五、表空间的管理
管理表空间
创建表空间
创建表空间时需要指定表空间名和其拥有的数据文件列表。
create tablespace tbs DATAFILE 'TBS01.DBF' size 64 AUTOEXTEND on NEXT 2 MAXSIZE 10240; create tablespace tbs DATAFILE 'tbs02.dbf' size 64 AUTOEXTEND on NEXT 2 MAXSIZE 10240;
为 0 或者 UNLIMITED 表示无限制,单位是 M,缺省为无限制。
扩展表空间
扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成。
删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间。
DROP TABLESPACE bookshop;
修改表空间名
可修改已存在的由用户创建的表空间的名称。
alter TABLESPACE tbs rename to tbs02;
修改表空间状态
用户表空间有联机和脱机两种状态。
系统(SYSTEM)表空间、回滚(ROLL)表空间、重做日志表空间(RLOG)和临时(TEMP)表空间不允许脱机。
设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。
ALTER TABLESPACE bookshop OFFLINE; ALTER TABLESPACE bookshop ONLINE;
可以使用的数据缓冲区有 NORMAL 和 KEEP。表空间修改成功后,并不会立即生效,而是需要服务器重启。
例:将 bookshop 表空间绑定到 KEEP 缓冲区。
ALTER TABLESPACE tbs01 cache="KEEP"; ALTER TABLESPACE tbs01 cache="NORMAL"
管理数据文件
添加数据文件
一个表空间中,数据文件和镜像文件一起不能超过 256 个。
alter TABLESPACE tbs01 add datafile 'tbs01_2.dbf' size 64 AUTOEXTEND off;
删除数据文件
删除表空间中数据文件时必须遵守文件 ID 从大到小的原则。
ALTER TABLESPACE tbs01 DROP DATAFILE 'tbs01_2.dbf';
alter tablespace TBS01 resize datafile 'tbs01_2.dbf' to 65;
alter TABLESPACE TBS01 offline; alter TABLESPACE TBS01 rename datafile 'tbs01_2.dbf' to '/dm8/data/DM01/TBS/TBS01.DBF'; alter TABLESPACE TBS01 online;
ALTER TABLESPACE bookshop ADD HUGE PATH '/dm8/data/HUGE';
管理系统表空间
SYSTEM表空间对应的数据文件自动扩展属性不允许关闭。
ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。
遇到“-7120:回滚记录版本太旧,无法获取用户记录”(等同于 Oracle 的快照过旧的错误)。
解决方法:
1、 查询时间过长导致,可以考虑优化查询,加快查询速度。
2、增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。
MAIN:用户默认表空间,当创建用户时,如果没有指定用户的默认表空间,则 MAIN为用户的默认表空间。相当于 Oracle 的 USERS 表空间。
TEMP:临时表空间,存放临时表数据、临时结果集等,当大量的数据排序或创建索引等占用临时表空间。
注意:DM 中临时表空间大小由参数 TEMP_SIZE 指定,如果要修改TEMP表空间大小需要修改系统参数TEMP_SIZE。
达梦 TEMP 表空间,数据库启动时会重建 TEMP 表空间。
DM 服务器关闭的状态下可使用 dmctlcvt 工具将控制文件转换为文本文件
首先转换控制文件到文本文件:
./dmctlcvt TYPE=1 SRC=/opt/dm.ctl DEST=opt/dmctl.txt
编辑 ctl.txt 文本文件中 fil_path
最后转换文本文件到控制文件:
./dmctlcvt TYPE=2 SRC=/opt/dmctl.txt DEST=/opt/dm.ctl
这种修改文件路径的方法也可用于重做日志文件,SYSTEM 表空间文件、回滚表空间等路径的修改。
管理重做日志文件
修改redo文件大小
alter database resize LOGFILE 'DM0101.log' to 300; alter database resize LOGFILE 'DM0102.log' to 300;
修改redo文件路径
alter DATABASE mount; alter database rename logfile 'DM0101.log'to '/dm8/data/DM01/rlog/DM0101.log'; alter DATABASE rename LOGFILE 'DM0102.log' to '/dm8/data/DM01/rlog/DM0102.log'; alter DATABASE open;
增加redo文件
alter DATABASE add LOGFILE '/dm8/data/DM01/rlog/DM0103.log' size 300;
查看redo文件
select * from v$rlog; select * from v$rlogfile;
六、数据字典
存储在 SYSTEM 表空间中,包含对象定义、权限、用户角色等信息。
USER_* 用户所拥有的对象信息
ALL_* 用户能访问的对象信息
DBA_* 整个数据库中的对象信息
系统中所有对象的信息
SELECT * FROM SYSOBJECTS;
系统中所有索引定义信息
SELECT * FROM SYSINDEXES;
系统中所有列定义的信息
SELECT * FROM SYSCOLUMNS
select * from sysstats;
select * from SYSOBJECTS t where id = 1058;
select * from SYSCONS;
七、 动态性能视图
动态性能视图是从内存中或控制文件中读取的数据
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;
事务等待案例验证:
会话一:在 t_testpid(pid 为主键)中插入一行记录(不提交):
打开会话二:在 t_testpid 中插入相同记录:
查询事务等待:
select * from v$trxwait;
select * from v$lock t where t.blocked =1;
109 / 139*select a.sess_id, a.sql_text, a.state, b. from v s e s s i o n s a , v sessions a, v sessionsa,vtrxwait b
where a.trx_id = b.id;
select * from sys.sysobjects t where id= 1069; –查询被锁的表
sp_close_session(sess_id); –结束某个会话
– 查询未提交事务
select b.object_name, c.sess_id, c.thrd_id, c.state, c.sql_text, a.*
from v l o c k a , d b a o b j e c t s b , v lock a, dba_objects b, v locka,dbaobjectsb,vsessions c
where a.table_id = b.object_id
and a.ltype = ‘OBJECT’
and a.trx_id = c.trx_id
and a.ign_flag=0;
八、备份还原
备份还原
备份就是数据库在某一个时间点的副本
数据库备份目的:防止数据丢失,防止天灾人祸(地震、火灾、人为操作、硬件故障)
备份主要有物理备份和逻辑备份
物理备份主要是备份使用过的有效的数据页,逻辑备份主要是备份数据库对象(表,索引,视图,存储过程等)
物理备份:分为联机备份和脱机备份;完全备份和增量备份
完全备份:备份的是整个数据库或者表空间的全部数据
增量备份:备份的是上一次全备或增备后,以后每次备份只需要备份修改过的数据页
还原就是将某个时间点的数据库副本拷贝到对应的目录下。
恢复就是在完成数据库还原之后,应用部分或者是全部归档日志。
物理备份
冷备:
冷备:不需要开启归档,需要开启DmAP服务,需要关闭数据库实例,针对整库做备份
1、console工具备份
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
2、用dmrman工具备份,只支持冷备
[dmdba@localhost backup]$ cd /dm8/bin [dmdba@localhost bin]$ ./dmrman dmrman V8 RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
热备:
需要开启归档,数据库需要打开(open)
可以备份数据库、表空间、表、归档日志
查看数据库归档模式:
SQL> select name,arch_mode from v$database;
用manager工具做热备
整库备份查看备份
命令行做全备:disql工具
SQL> backup database full to "DB_DAMENG_FULL";--备份到参数文件中的备份路径 SQL> backup database full to "DB_DAMENG_FULL2" BACKUPSET '/dm8/backup';
做增量备份
backup database increment to "DB_DAMENG_INCRE_2024_09_08_18_24_15" backupset 'DB_DAMENG_INCRE_2024_09_08_18_25_06';
表空间备份
表空间备份只能联机,还原只能脱机
用manager工具
用disql
backup tablespace "DMHR" full to "TS_DMHR_FULL" backupset 'TS_DMHR_FULL';
表备份:backup table "DMHR"."DEPARTMENT" to "TAB_DMHR_DEPARTMENT" backupset 'TAB_DMHR_DEPARTMENT';
归档备份:
backup archivelog all to "ARCH_BAK" backupset 'ARCH_BAK';
物理还原
检查备份集是否有效
Console工具还原
恢复dmrman工具还原
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup'; RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/data/arch'; RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
表空间还原
RMAN>restore database '/dm8/data/DAMENG/dm.ini' tablespace MAIN from backupset '/dm8/backup'; RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace MAIN;
逻辑备份
备份的是数据库对象
逻辑备份可以用来迁移和重组数据库,是数据库辅助型备份
dexp/dimp四个级别导入导出:
库级别
用户
模式
表
查看帮助:
[dmdba@localhost bin]$ ./dexp help [dmdba@localhost bin]$ ./dimp help
全库导出:
[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=full.dmp log=full.log directory=/dm8/backup full=y
用户导出:
[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=dmhr.dmp log=dmhr.log directory=/dm8/backup owner=dmhr
导出表:
[dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=emp.dmp log=emp.log directory=/dm8/backup tables=emp
全库导入:
[dmdba@localhost bin]$ ./dimp SYSDBA/Dameng123 file=full.dmp log=imp_full.log directory=/dm8/backup full=y
注意事项:执行用户导入时,如果用户不存在,要先创建用户。
九、DM8开发
Linux配置odbc
用root配置
检查gcc包
[root@localhost ]# rpm -qa|grep gcc
[root@localhost opt ]# tar -zxvf 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]# odbcinst -j
配置文件/usr/local/etc/odbcinst.ini
配置文件/usr/local/etc/odbc.ini
[root@localhost unixODBC-2.3.0]#cd /usr/local/etc/
对/usr/local/etc目录下的2个文件(odbc.ini和odbcinst.ini)进行修改配置
其中DRIVER根据达梦8数据库的安装路径而定
[root@localhost etc]# vim odbcinst.ini
[DM8 ODBC DRIVER] Description = ODBC DRIVER FOR DM8 DRIVER = /dm8/bin/libdodbc.so
[root@localhost etc]# vi odbc.ini
[dm8] Description = DM ODBC DSND Driver = DM8 ODBC DRIVER SERVER = localhost UID = SYSDBA PWD = Dameng123 TCP_PORT = 5237
其中SERVER、UID、PWD、TCP_PORT可以根据实际情况进行修改
export LD_LIBRARY_PATH=/dm8/bin:$LD_LIBRARY_PATH
测试连接
用dmdba账号
[dmdba@localhost bin]$ isql dm8
达梦社区地址:https://eco.dameng.com
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/148428.html