说明:本笔记根据达梦培训课程整理,笔记内容仅供交流和参考,如内容有误请指正;如侵权,请联系本人处理,谢谢!
ps:如果需要视频录播的话,可以私信我哈
[root] xhost +
[root] echo %DISPLAY
:0.0
[dmdba] export DISPLAY=:0.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin
vim .bash_profile
source .bash_profile
cd /dm8/bin
./dminit path=/dm8/data db_name=数据库名 instance_name=实例名 port_num=5236 page_size=16
[dmdba] cd /dm8/tool
./dbca.sh(图形化)
记得用root执行三个操作
[dmdba] cd /dm8/tool
./dbca.sh(图形化)
选中dm.ini文件后确定,执行三个命令
systemctl enable/enable 注册/关闭自启动
systemctl start 启动服务
[root] cd /dm8/script/root
./dm_service_install.sh -t dmserver -p {?实例名} -dm_ini {?dm.ini 路径}
systemctl start DmService{?达梦实例名}.service
bin/disql
cd /dm8/bin
./disql sysdba/SYSDBA:5236
[root] 配置DISLPAY
root /dm8/tool/dmservice.sh启动停止服务
desc v$parameter;
desc v$dm_ini;
select distinct type from v$parameter;
v$parameter中value指当前会话的值,sys_value是内存中的值,file_value是文件中的值,description是配置描述
select * from sys.v$cacheitem;缓存的项目
select * from sys.v$cachepln;缓存的执行计划
select * from sys.v$cachesql;缓存的sql
select * from sys.v$cachers;缓存的结果集
select * from v$bufferpool;数据缓冲区,记录4种类型的bufferpool的命中率情况
select *from v$mem_pool;内存池,大的内存占用
select * from v$dict_cache
select * from sys.v$dynamic_tables; 动态视图的名称,存放的是系统监控视图的名称,例如sys.v$开头的视图
对于动态sql,尽量使用绑定变量的方式插入,using关键词
先看进程:ps -ef | grep dmserver
再看线程:ps -T -p pid,pid为线程号
其中dm_sql_thd就是客户端会话线程,会话越多,这个越多,一个会话会对应一个dm_sql_thd
top -H -p pid,监控线程内存使用情况
select * from v$process;进程
select * from v$thread;线程
select * from v$session;会话
select * from v$sql_history order by time_used desc;SQL历史执行时间倒序
/dm8/samples/sql_script/UTF-8/
MAX_SESSION_STATEMENT 句柄 相当于ORACLE的open_cursors
system:系统表空间,存放数据字典的定义,例如表定义、字段声明等
roll:回滚表空间,保证数据的一致性,在一个会话提交数据之前,另一个会话中读取的数据为roll表空间的数据
main:users的空间,如果创建用户时候,没有指定用户表空间,就会使用main表空间
temp:临时表空间,
hmain:huge表空间
user_tablespaces
v$tablespace
select * from dba_data_files;
select * from dba_segments t where t.segment_name like '表名';
dba_segments中的bytes字段是表占用空间大小,表越大,占用空间越大
craete tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 32;
定义的表空间大小不可低于page大小的4096倍,即select 4096*page/1024/1024;
添加数据文件:alter tablesapce"" add datafile '/dm8/data/DAMENG/TBS02.DBF' size 32;
改表空间大小:alter tablespace "" resize DATAFILE "" TO 128;
限制自动扩展的属性,默认是打开的:alter tablespace dmdbs "" datafile "" autoextend off;
修改每次扩展的大小(MB):alter tablespace dmdbs "" datafile "" autoextend on next 4 maxsize 10240;
alter tablespace "" rename datafile to "新路径"
删除表空间:
drop tablespaces "";有表结构的表空间不可删除
./manager中,左侧打开链接后,表空间,右键新建表空间
右键脱机、联机、修改
收缩临时表空间方法:
1、重启
2、临时表空间的在线收缩sp_trunc_ts_file(group_id,file_id,收缩大小)
v$parameter.undo_retation:闪回查询数据报表时长,dm默认闪回查询是关闭的,闪回查询可以找回误删操作,根据时间点找到数据
v$rlogfile
v$log;cur_file对应v$rlogfile的id
alter database rename logfile "/aaa" to "新路径"
./manager
数据库连接上右键->管理服务器->日志文件
select arch_mode from v$data_base;默认都是非归档状态
开启归档:(也可以直接改dm.ini,修改和arch相关的参数)
alter database mount
alter database archivelog;(noarchivelog为归档的关闭)
alter database add/(delete) archivelog "type=local, dest=/dm8/arch,file_size=64,space_limit=10240"
alter database open;
注意:设置归档的时候,不要设置空间大小过大,不然考试时候备份会提示空间不足
./manager管理服务器->归档配置(如果不能操作,需要切换成mount状态),点击,添加,为防止磁盘被撑爆,最好设置空间限制space_limit
转换为mount状态:管理服务器->状态转换,点击配置,再点转换
select * from sys.v$archived_log;
select * from sys.v$arch_file;
alter system switch logfile;
alter database archivelog current;
alter system archive log current;`在这里插入代码片`
select SF_ARCHIVELOG_DELETE_BEFORE_LSN();删除某个lsn之前的归档日志文件
select sf_archivelog_delete_before_time(sysdate-3);删除三天之前的归档日志文件
create/alter user 用户名 identified by "密码"
select * from v$parameter where name = 'PWD_POLICY';密码安全策略,默认是2(密码长度不小于9)
alter system set 'PWD_POLICY' = 31 both;
alter user 用户名 limit failed_login_attemps 5, password_lock_time 3,session_per_user 2;--设置用户5次登陆尝试,冻结3分钟,2个连接会话
session_per_user和max_session结合起来,max_session系统级别如果到达最大连接,即使session_per_user不达到最大连接,也不可再发起会话,
当业务达到最大session,是预留了一个sysdba会话可以连接的
如果密码有特殊字符,需要用双引号括起来
disql需要用单引号加双引号:disql dmtest dmtest/'"DAMENG@123"'
select * from dba_users;可查看lock_date被锁定时间,默认表空间,密码策略
drop user 用户名
创建表 create table
修改数据库 alter database
创建表空间 create tablespace
alter tablespace 修改表空间
创建用户、视图、存储过程、函数、角色、模式
grant create table to 用户名
grant select(id,lastname) on dmhr.employee to 用户名;--精确到表列的权限
revoke ... from ..
表、视图、序列、存储过程的alter delete execute insert references select update 等
grant select on DMHR.CITY to 用户名,给用户名授予city表的select 权限
revoke select on 表明 from 用户名,收回权限
select * from dba_roles;
DBA:具有几乎所有的权限,除了审计和强制访问之外的权限,默认赋给sysdba用户
public:具有对当前模式下对象的dml数据操作权限
resource:具有在当前模式下对象定义权限(创建表、索引、视图等)
soi:具有查询sys开头系统表的权限
vti:具有查询v$开头的动态视图权限
角色是一组权限的集合,方便给用户授权
create tole r1;
grant create table to r1;
grant r1 to user1;
启用禁用角色:sp_set_role('r1', 0/1); 1是启用
操作系统验证?DM8安全手册中讲到了(不是考点)
就是直接用disql / as sysdba
create schema dameng autorization sysdba;
select * from sys.sysobjects ;--系统中的 所有对象信息
where type$ = 'SCH'--查看模式信息
sysobjects表中的pid对应的是自己表中的id
select * fro user_tables;查所有表的信息,和表空间信息
desc user_tab_columns;查表列信息
alter table xx move tablespace xx;修改表的表空间,达梦中切换表空间、索引不会失效,oracle会失效
number(p,s)类型字段,DM中number(5,2)的格式为000.00,oracle中为00000,ora没有s的概念,唯一
DM中的varchar是以字节为保存,nvarchar是以字符保存
例如varchar(1)中保存不了1个汉字,但是nvarchar(1)就可以,默认国标中一个汉字是2个字符
新版本DM中支持nvarchar,但是老版本不行,可以修改字段类型为:varchar(2, char),括号中加char
time 和 date类型
布尔类型 bit
create table a as selct * from b;--oracle的方式,会丢失列索引,主键等
create table a as select * from b where 1=0;只复制了表结构
create table a like b;--mysql的方式
select * from dba_constraints;所有的约束信息
select * from dba_cons_columns;所有的约束字段信息,constraint_name
主键primary key和唯一键unique key:
主键只能定义一个,唯一键可以定义多个
唯一键不一定是主键
not null + unique = primary key
定义主键时自动创建聚簇索引。相反,Unique键生成非聚集索引。
设置外键索引后,字表中的pid字段插入时候会校验主表ID是否存在
alter table sonT add constraint 约束名 foreign key(pid) refereneces parentT(id);
设置外键时候,一定是要指向主表的主键或者唯一键,否则建立约束时候会报错
如果子表外键关联了主表,删除主表时候也会校验主表这条数据是否被外键引用
例如最低工资标准,不得低于3000
alter table ..... check(salary >= 3000);
1、导出为sql文件:表名上右键->浏览数据->选中所有,右键导出为sql
2、切换至目标用户conn hrtest/12345
3、用1前面的符号执行脚本:`sql文件
4、也可以用start xx.sql文件命令导入
5、界面客户端中的窗口要commit(很多容易在这里丢分)
select * from user_views;
create view if not exists xx as select xx
drop view if exists xx
create index xx on tablname(col) tablespace sbspname
- 删除索引:drop index xx
alter index xx rebuild;--重建,删除数据后会产生索引随便,可以考虑重建索引
explain sql语句; 查看sql语句执行计划
创建完索引后,执行计划中可以看到要走二级索引,就是secondary index seek
执行计划视图中,代价字段是耗时(ms),结果集是行数(预估),行数据处理长度是网络消耗
执行计划中的结果集是预估的,需要手动收集信息后执行
dbms_stats.gather_table_stats("模式名","表明")
dbms_stats.table_stats_show("模式名","表明");
dbms_stats.index_stats_show("模式名","索引名")
ALTER INDEX XX MONITORING USAGE;-- 开启索引监控
ALTER INDEX XX MONITORING USAGE;--关闭索引监控
select * from sys."v$object_usage";--used字段为yes时候,就表示索引在sql中用到过
增删改操作会更新索引,所以发现经常更新的表会查询变慢,这种的表不该建立过多索引
user_* 用户所拥有的对象信息;
all_* 用户能访问的对象信息
dba_* 整个数据库中的对象信息
select *from sysobjects 系统中所有对象的信息
sysindexes 所有索引定义信息
syscolumns 所有列定义信息
内存中或控制文件中的数据以表的形式展现出来,都是虚拟表,
select * from v$buffer;缓冲池动态性能表
select * from v$datafile;显示数据文件信息
select * from v$process;显示当前进程信息
select * from sys."v$traxwait";--等待事务,id在等待wait_for_id的事务,thrd_id当前事务的ID
select * from v$lock t where t.blocked=1;table_id为被锁的ID
select * from sys."v$sessions";--会话线程
select * from sys.sysobjects t where id = ?table_id
sp_close_session(thrd_id);关闭某个线程会话
DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的
有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库
系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日
志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间
点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。
还原与恢复是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的
过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复 到指定时间点和指定
LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务, 这些活动事务在恢复结束后的第一次数据库系统启动时,会由 DM
数据库自动进行回滚。 ———————————————— 版权声明:本文为CSDN博主「蝶恋玉儿」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44842658/article/details/124438825
select * from v$parameter t where name in ('BAK_PATH', 'BAK_USE_AP');
backup database;--前提是要开启归档日志,如果没有开启归档或者归档过晚,要执行checkpoint(100)函数,更新检查点,或者直接重启数据库
dmrman;--切换到rman,要查看备份集信息
show backupset '备份数据集路径';查看数据库对应备份集信息
check backupset 'xx';校验备份集
select * from sys."v$backupset";查看备份集
backupset中默认只能查看默认路径下的备份集,如果想看到其他路径下的备份集,可以使用函数进行添加路径:sf_backset_backup_dir_add('DISK', '其他路径')
show backupset '结果集'
remove backupset '结果集'
check backupset '结果集'
/dm8/bin/DmAPService status
开关:/dm8/bin/DmAPService start/stop
backup database full to FULLBACK01 BACKUPSET '生成路径';
如果不指定路径,默认是会去默认全量备份路径下找最近一次全备文件
backup database increment with backupdir '全量备份依据路径' to incrback01 backupset '生成路径';
增量备份之后,如果v$backupset中找不到备份结果集,也需要执行sp_bakset_backup_dir_add()
v\$backupset 中的base_name就是差异增量备份中依据的备份结果集
多个差异备份时,如果第一个差异备份丢了,后边的都不可用,依次类推
backup database increment cummulative with backupdir。。。
累积增量备份会依据默认的备份路径及注册的备份路径,找到最新的一个全备结果集作为基础,进行备份
v$backupset 中可以查到base_name为最新的全备结果集名称
先停止服务:bin/DmService实例名 stop
或disql中关机:shutdown immediate;
或bin/dmserver 实例名中的dm.ini
备份:backup database '/dm8/data/实例名/dm.ini' to 备份名称 backupset '结果集路径'
1 还原:
restore databse '恢复目标实例dm.ini' from backupset '全备路径';
2 恢复:
recover database '恢复目标实例dm.ini' with archivedir '归档路径';
如果是不完全恢复,可以最后指定until time ''或者 until LSN ''
3 库级别的恢复是需要更新数据库魔术:重要,不然启动不了数据库
recove databse '恢复目标实例dm.ini' update db_magic;
1 还原:
restore databse '恢复目标实例dm.ini' tablespace 表空间名 from backupset '源备份路径';
2 恢复:处理归档日志
recover database '恢复目标实例dm.ini' tablespace 表空间名;
1、如果没有表结构,需要先恢复表结构:
restore table struct from backupset ‘源结果集’
2、再恢复表数据:
restore table 表名 from backupset ‘源结果集’
类似定时任务
select * from dba_jobs
dbms_job.run(jobid)
select * from sysjob.sysjobhistories2
dbms_scheduler;默认是没有的,需要创建的
ODBC/JDBC/DPI/OLEDB
jdbc驱动放在/dm8/drivers/jdbc中
system status/stop firewalld防火墙关闭或查看
达梦HS环境搭建用的就是odbc
1、解压 tar -zxvf unixodbc.tar.gz
./configure -h查看帮助
--prefix指定安装目录,默认是安装在/usr/local下
2、编译 解压目录中执行./configure
3、安装 解压目录中执行make install
4、查看配置文件信息odbcinst -j,找打配置文件odbcinst.ini和odbc.ini
5、vim odbcinst.ini 配置信息
6、vim odbc.ini 配置数据源
7、测试连接
dmdba中执行isql dm8 -v
执行查询sql,能出结果即可
注意:odbc.ini中的driver名字对应的是odbcinst.ini中[]中的名字