人性化易操作国产数据库达梦数据学习浅谈

网友投稿 567 2023-11-23

有幸参与了达梦数据库的DCA学习。

人性化易操作国产数据库达梦数据库学习浅谈

经过学习,一是对当前国产数据库有了概况了解,当前大环境下国产数据库可谓是百花齐放、百家争鸣。大体上可分为:完全自主开发、基于开源代码开发、基于授权下开发以及混合型(开源+授权)下开发,而完全自主开发且有所成就的仅有达梦一家,因此也对达梦有了特殊的感情,希望他越来越好。

      二是对达梦数据库有了进一步的认识,作为DCA方面主要有以下几点的学习(银河麒麟V10+DM8):

  1、数据库的安装;

  2、创建数据库及数据库实例管理;

  3、DM的客户端工具;

  4、DMsql;

  5、DM的体系结构;

  6、表空间管理;

  7、用户管理;

  8、模式对象管理;

  9、数据字典和动态性能视图;

  10、数据库的备份还原;

  11、作业管理;

  12、DM8开发。

以下就从每个部分涉及到主要操作---记录

第一部分

(一) 收集安装环境

1、 查看系统信息

[root@马吃水搬砖工人]# cat /proc/version

2、 查看 CPU

[root@马吃水搬砖工人]# lscpu

3、 查看内存

[root@马吃水搬砖工人]# free -m

4、 查看磁盘

[root@马吃水搬砖工人]# df -h

[root@马吃水搬砖工人]# df -h /tmp                 ---(特别注意该目录空间保持1G以上)

5、 Glibc、gcc 版本

[root@马吃水搬砖工人]# rpm -qa|grep glibc

[root@马吃水搬砖工人]# rpm -qa|grep gcc

第二部分 安装 DM8

1、规划安装用户和用户组:

[root@马吃水搬砖工人]# groupadd dinstall

[root@马吃水搬砖工人]# useradd -g dinstall dmdba

[root@马吃水搬砖工人]# passwd dmdba

2、规划安装目录:

[root@马吃水搬砖工人]# mkdir /dm8

[root@马吃水搬砖工人]# chown dmdba:dinstall /dm8

3、挂载安装:

[root@马吃水搬砖工人]# mkdir /mnt/dm

[root@马吃水搬砖工人]# mount /opt/dm8_xxxxxxx.iso /mnt/dm

[root@马吃水搬砖工人]# su - dmdba

4、设置图形化界面:

(1)第一次进入虚拟机,执行下 xhost +

root@马吃水搬砖工人]# xhost +

(2)切换 dmdba 用户

[root@马吃水搬砖工人]# su - dmdba

[dmdba@马吃水搬砖工人 ~]$ export DISPLAY=:0.0

[dmdba@马吃水搬砖工人 ~]$ cd /mnt/dm

5、图形化界面方式安装 DM 数据库

[dmdba@马吃水搬砖工人 dm]$ ./DMInstall.bin       ---(基本为点点点操作)

[root@马吃水搬砖工人 ~]# systemctl start/stop DmServiceDMTESTSVR.service   --ROOT用户的启动命令

[dmdba@马吃水搬砖工人 bin]$ ./disql sysdba/密码:端口号

第三部分 

删除数据库服务:

2、 root 执行注册服务脚本

[root@马吃水搬砖工人 root]# ./dm_service_installer.sh -t dmserver -p DMTESTSVR -dm_ini /dm8/data/DMTEST/dm.ini

创建服务(DmServiceDMTESTSVR)完成

3、 root 执行删除服务脚本

[root@马吃水搬砖工人 root]# ./dm_service_uninstaller.sh -h

[root@马吃水搬砖工人 root]# ./dm_service_uninstaller.sh -n DmServiceDMTESTSVR

   连接数据库

1、使用 DM 管理工具图形化界面连接数据库

2、使用 disql 命令行方式连接数据库

[dmdba@马吃水搬砖工人 ~]$ cd /dm8/bin

[dmdba@马吃水搬砖工人 bin]$ ./disql sysdba/密码:端口号

   启动和关闭 DM 数据库

DM 数据库的状态:

Shutdown:关闭状态

Mount:配置状态:可以修改数据库归档配置、主备等模式,不能进行数据文件的读写。

Open:打开状态:数据库正常状态,可以读写数据文件。正常访问表,读取数据。

Suspend:只读状态,只能读,不能写(DML 操作一旦 commit,即会被挂起)。

MOUNT 和 OPEN 可以相互转换(与 Oracle 不同)。SUSPEND 和 OPEN 也可以相互转换。

但 MOUNT 和 SUSPEND 不能相互转换。

第四部分:DM 的客户端工具

DM 管理工具(图形化管理数据库,联机工具,包含用户管理、角色权限管理、表空间、模

式、模式下对象(表、索引、约束、函数、过程、视图等)、数据库物理联机备份、作业管理

等功能)

[dmdba@马吃水搬砖工人 tool]$ ./manager

DM 控制台工具(console 脱机工具)

提供脱机备份还原、修改数据库参数(修改后重启数据库才能生效)等功能。

[dmdba@马吃水搬砖工人 tool]$ ./console

DTS 数据迁移工具(支持其他数据库迁移到达梦,或者达梦迁移到文件等)

[dmdba@马吃水搬砖工人 tool]$ ./dts

DM 性能监视工具:

[dmdba@马吃水搬砖工人 tool]$ ./monitor

第五部分:DMSQL                                  --基本和其他数据库类似不过多介绍

第六部分:DM 的体系结构

体系结构概览

DM8 数据库是由数据库和实例构成

数据库:DM 数据库指的是磁盘上存放在 DM 数据库中的数据的集合

实例:实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成

   DM 存储结构

表空间是 DM 数据库的最大存储单元,所有数据都存储在表空间中。表空间采用段(segment)、簇(extent)和页(page)的方式管理。一个表空间可以包含一个或多个数据文件。一个数据文件仅能归属于一个表空间。

DM 物理文件包含:配置文件、控制文件、数据文件、联机日志(此四个文件必不可少,缺少一个将无法正常启动)。配置文件包括(服务配置 dm.ini,守护配置,复制配置,审计配置)控制文件,数据文件,重做日志文件,备份文件,归档日志文件,跟踪日志文件等

dm.ini 配置参数文件

参数的类型:

READ ONLY:只读参数,只能通过修改 dm.ini 文本文件修改此参数(需要重启数据库才能生

效)。

SYS:动态(系统级)参数。可以在数据库运行时修改。

SESSION:动态(会话级)参数,可以在数据库运行时修改,且可以只针对当前会话生效。

IN FILE:静态参数,可以在数据库运行时修改,可需要重启数据库才能生效。

SQL> select distinct para_type from v$dm_ini;

数据库参数的修改方法

(1) console 控制台工具 图形化界面方式修改,需要重启数据库才能生效。

(2) 直接修改 dm.ini 配置文件,需要重启数据库才能生效。

(3) 系统函数修改(可以用来修改静态和动态参数,但静态参数修改后需要重启数据库才能生效)。

(4) 使用 alter system set 语句修改(可以用来修改静态和动态参数,但静态参数修改后需要重启数据库才能生效)。

 DM 内存结构

数据缓冲区

用于缓存数据文件中的数据页。BUFFER 是从磁盘读出的数据页在内存中的镜像,由 INI配置中的 BUFFER、FAST_POOL_PAGES、RECYCLE、KEEP 等确定大小,不同类型的缓冲区主要表现为淘汰机制数据缓冲区的大小影响数据库的读写性能,OLTP,数据缓冲区占内存 40-60%,OLAP,数据缓冲区占内存 60-80%;

逻辑读:从内存中读取;物理读:从磁盘中读取。

select * from v$bufferpool; --数据缓冲区

select name, type, value, sys_value, file_value from v$parameter t where 

name in (BUFFER,KEEP,FAST_POOL_PAGES,RECYCLE);

修改数据库缓冲区 BUFFER 参数为 500:

alter system set BUFFER=500 spfile;

重做日志缓冲区

重做日志是数据库与磁盘间的一层缓存,将随机的磁盘写转换成顺序写,日志缓冲区是数据库和日志间的缓存对应 INI 参数 RLOG_BUF_SIZE

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;

字典缓冲区:

字典缓冲区是存在数据库对象的一片缓冲区,对应 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;

主内存池(共享内存池)

当其他内存池(不包含数据缓冲区)不够时,会像主内存池申请空间。服务器启动时从操作系统申请的一大片内存,后续服务器运行过程中,一般情况下,很多需要内存分配的地方都是从该池分配,如果需要的内存大于配置值(MEMORY_POOL),共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池能扩展到的最大大小.

select * from V$mem_pool;

MEMORY_POOL:初始大小

MEMORY_EXTENT_SIZE:扩展大小

MEMORY_TARGET:目标大小

MEMORY_N_POOL:共享内存池个数,默认为 1,高并发时可设置多个。

运行时的内存池 

特点:使用时申请,用完即释放。包含:虚拟内存池、会话池、排序区、HASH 区等。 

排序区:SORT_BUF_SIZE 

少量的数据排序,优先在内存中排序,此时占用排序区; 

大量的数据排序,内存中放不下,占用临时表空间排序。 

如果业务经常有排序,可以适当调大排序区,提高效率。 

HASH 区:HJ_BUF_SIZE 

HASH 连接、HASH 分区占用哈希区。如果业务 hash 连接较多,可以调大哈希区。 

DM 线程

 DM 是单进程多线程对称服务器架构。

查看数据库进程:

[dmdba@马吃水搬砖工人 DM]$ ps -ef|grep dmserver

查看数据库对应的线程:

[dmdba@马吃水搬砖工人 DM]$ ps -T -p 1750

动态视图:

select * from V$process; --进程

select * from v$threads; --线程

监听线程 

用于在服务器端口上进行循环监听,有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理 

工作线程 

DM 的核心线程;默认 16 个工作线程,业务可根据实际情况修改。 

IO 线程 

用于读写数据 

需要处理的数据块不在缓冲区中,此时需要将相关数据块读入缓冲区 -物理读

缓冲区满或系统关闭时,此时需要将部分脏数据块写入磁盘 -写脏块

检查点到来时,需要将所有脏数据块写入磁盘 

日志刷新线程 

日志的刷盘。主要用于事务提交或检查点时将日志缓冲区中的 REDO 日志写入到日志文件中。 

日志归档线程 

完成 redo 日志的归档。

日志重做线程 

主要用于系统故障恢复,日志重做线程根据 REDO 日志进行并行的故障恢复调度线程 检查系统级的时间触发器;清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;自动执行检查点;会话超时检测;必要时执行数据更新页刷盘;唤醒等待的工作线程;

一个 sql 的执行过程:

客户端发起 sql 请求,到达服务端监听线程,生成会话线程、工作线程

语法语义权限解析(字典缓冲区)

查找 sql 语句、sql 执行计划(sql 缓冲区中查找 sql 语句,执行计划,如果找到—软解析,根据执行计划查询语句,生成对应的结果集。如果没有找到对应 sql 语句,则将此 sql语句加入 sql 缓冲区,并生成对应的执行计划 –-硬解析)

Sql 读,如果数据缓冲区中有对应的数据页,此时为逻辑读,如果数据缓冲区没有对应数据页,则 IO 线程从磁盘中(数据文件)读取数据放入数据缓冲区,此时为物理读(更消耗性能)。如果语句涉及多表 HASH 连接,则会占用 HASH 区,如果 sql 涉及排序,则少排序

占用排序区。

Sql 写,数据缓冲区,产生的 redo 放入日志缓冲区,如果执行 commit,日志刷新线程将写入日志缓冲区中数据写入联机日志。后期数据库执行检查点,或数据缓冲区将满,则 IO线程将数据缓冲区中的数据写入数据文件。

第七部分:表空间管理

   管理表空间

DM 默认预定义 SYSTEM、ROLL、MAIN、TEMP、HMAIN 五个表空间。

SYSTEM:系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、权限信息等)

ROLL:回滚表空间,存放回滚页,数据库中的 DML 操作对应都会生成 redo 和 undo,undo 信息放入 ROLL 表空间。

alter system set UNDO_RETENTION= 300 both;

select * from v$parameter t where name like UNDO_RETENTION;

MAIN:用户默认表空间,当创建用户时,如果为指定用户的默认表空间,则 MAIN 为用户的默认表空间。

TEMP:临时表空间,存放临时表数据等、当大量的数据排序或创建索引占用临时表空间。DM 中临时表空间由参数 TEMP_SIZE 指定。

select * from v$parameter t where name like TEMP%;

TEMP_SIZE:临时表空间初始大小

TEM_PATH: 临时表空间路径

TEMP_SPACE_LIMIT:临时表空间的空间限制,0 表示不限制。

修改临时表空间的初始大小:

alter system set TEMP_SIZE=100 spfile;

收缩 TEMP 表空间的方法:

1、 重启数据库,TEMP 表空间数据文件会重建。

2、 在线收缩临时表空间 SP_TRUNC_TS_FILE。

HMAIN:HUGE 表的默认表空间(HTS 表空间)。

DM 数据文件大小,最大值不能低于页大小的 4096 倍(如果页大小是 8K,最小值将不低于 32M),最大值为页大小的 2 的 31 次方-1(如果页大小是 8K,最大值为 16T-1)。

数据库安装用户 dmdba 有对该目录操作的权限。

alter TABLESPACE tbs RENAME DATAFILE TBS01.DBF TO /dm8/data/DM/TBS/TBS01.DBF;

相关数据字典:

select * from dba_tablespaces;

select * from DBA_DATA_FILES;

select * from v$tablespace;

select * from v$datafile;

select * from DBA_FREE_SPACE; --数据文件剩余空间

创建表空间:

create tablespace tbs DATAFILE TBS01.DBF size 32; SYSTEM、ROLL、TEMP 表空间不能脱机,系统预定义的表空间都不能删除。

表空间脱机后,该表空间中的数据将不能读写。

举例:

create table t_test(id int, name VARCHAR(20)) TABLESPACE tbs;

insert into t_test(id, name) values(1, aaa);

commit;

alter tablespace tbs offline;

select * from t_test;

表空间[TBS]处于脱机状态

表空间重命名:

alter tablespace tbs RENAME TO dmtbs;

删除表空间(只能删除空的表空间):

drop tablespace dmtbs;

create tablespace "TBSTEST" datafile /dm8/data/DM/TBS/TBSTEST01.DBF size 64 

autoextend on next 2 maxsize 10240, /dm8/data/DM/TBS/TBSTEST02.DBF size 64 autoextend 

on next 2 maxsize 10240 CACHE = NORMAL;

   管理数据文件

修改表空间:

alter TABLESPACE tbs add DATAFILE TBS02.DBF size 128 AUTOEXTEND on NEXT 2 

MAXSIZE 20480;

alter tablespace tbs DATAFILE TBS01.DBF AUTOEXTEND on NEXT 2 MAXSIZE

20480;

alter tablespace tbs DATAFILE TBS01.DBF AUTOEXTEND off;

alter tablespace tbs RESIZE DATAFILE TBS01.DBF TO 128;

迁移表空间数据文件:

alter tablespace tbs offline;

alter TABLESPACE tbs RENAME DATAFILE TBS01.DBF TO

/dm8/data/DM/TBS/TBS01.DBF;

alter TABLESPACE tbs RENAME DATAFILE TBS02.DBF TO

/dm8/data/DM/TBS/TBS02.DBF;

alter tablespace tbs online;

   管理重做日志文件

联机重做日志:存放 redo 信息,循环使用,不断覆盖。DM 数据库联机日志自动切换,不能手工切换。

数据字典:

select * from v$rlogfile;

select * from v$rlog; --cur_file表示正在使用的联机日志

修改联机日志文件大小

alter database RESIZE LOGFILE /dm8/data/DM/DM01.log TO 300;

alter database RESIZE LOGFILE /dm8/data/DM/DM02.log TO 300;

添加联机日志文件

alter DATABASE ADD LOGFILE /dm8/data/DM/DM03.log SIZE 300;

修改联机日志文件路径(迁移联机日志文件)

alter database mount;

alter database RENAME LOGFILE DM01.log TO /dm8/data/DM/REDO/DM01.log;

alter database RENAME LOGFILE DM02.log TO /dm8/data/DM/REDO/DM02.log;

alter database RENAME LOGFILE DM03.log TO /dm8/data/DM/REDO/DM03.log;

alter database open;

DM 管理工具图形化界面管理联机日志:

   归档管理

默认情况,DM 不开启归档。

归档是对 REDO 的归档。归档的目的是使数据库故障时可以恢复到故障的前一刻(完全恢复),或者恢复到指定的时间点或指定 LSN(不完全恢复)。

开启归档的方法:

1、sql 命令开启归档

SQL> alter database mount;

SQL> alter database archivelog;

SQL> select arch_mode from v$database;

行号 ARCH_MODE

---------- ---------

1 N

已用时间: 0.654(毫秒). 执行号:714.

SQL> select * from v$dm_arch_ini;

未选定行

2、图形化界面开启归档

(1)设置数据库为 MOUNT 配置状态

(2)开启归档、配置归档

(3)数据库修改为 OPEN 状态

3、修改 dm.ini 和 dmarch.ini 配置文件

数据库自动完成归档的切换,DM 支持手工切换归档;

alter SYSTEM ARCHIVE LOG CURRENT;

alter SYSTEM SWITCH LOGFILE;

alter DATABASE ARCHIVELOG CURRENT;

归档文件的删除:

select * from v$ifun t where name like SF_ARCHIVELOG_%;

SF_ARCHIVELOG_DELETE_BEFORE_LSN

SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate -7);

针对业务繁忙期间,出现磁盘 IO 不定时繁忙的情况。因为配置了归档的空间上限(归档达到此上限),生成新的归档日志前删除旧的归档日志文件。

配置 JOB 作业,在业务空间期定时清理 N 天之前的归档文件。

 第八部分:用户管理

DM 默认的预定义用户:

SYS:系统内置用户,不允许登录。

SYSDBA:系统管理员,拥有几乎所有权限(除审计和强制访问控制)

SYSAUDITOR:系统审计员,具有审计相关权限。

SYSSSO:系统安全员,具有强制访问控制等权限;

SYSDBO:安全版本才有的用户,安全操作员。

PWD_POLICY 参数指定系统的口令策略,默认为 2;

系统支持的口令策略有:

   0 无策略

   1 禁止与用户名相同

   2 口令长度不小于 9    4 至少包含一个大写字母(A-Z)    8 至少包含一个数字(0-9)    16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。

select * from v$parameter t where t.name = PWD_POLICY;

create user hr IDENTIFIED by 密码;

alter SYSTEM set PWD_POLICY = 15 BOTH;

create user hrtest IDENTIFIED by 密码;

用户输入错误多次(默认 3 次),将会被锁定。

select * from dba_users;

select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID;

创建用户

create user hrtest IDENTIFIED by 密码 DEFAULT TABLESPACE TBSTEST;

用户锁定和解锁:

alter user hr ACCOUNT UNLOCK;

alter user hr ACCOUNT LOCK;

修改用户的默认表空间:

alter user hr DEFAULT TABLESPACE dmtbs;

用户资源限制设置(DM 新版本已经支持使用 profile 来管理用户的资源限制):

alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;

密码带有特殊字符的登录处理:

alter user hrtest IDENTIFIED by "Dameng@123";

[dmdba@马吃水搬砖工人 ~]$ disql hrtest/"Dameng@123"

服务器[LOCALHOST:端口号]:处于普通打开状态

登录使用时间 : 1.589(ms)

disql V8

SQL> conn hrtest/"Dameng@123"

删除用户:

drop user if EXISTS hr;

drop user if EXISTS hr CASCADE; --生成环境慎用

DM 管理工具创建用户:

相关数据字典:

select * from dba_sys_privs t where t.GRANTEE= HRTEST;

select * from dba_role_privs t where t.GRANTEE= HRTEST;

select * from dba_tab_privs t where t.GRANTEE= HRTEST;

DM 默 认 不 能 授 予 用 户 在 其 他 模 式 下 数 据 定 义 ( DDL ) 的 权 限 , 由 参 数

ENABLE_DDL_ANY_PRIV 指定,默认为 0。

grant select any table to hrtest;

select * from v$parameter t where name like %ENABLE_DDL_ANY_PRIV%;

alter SYSTEM set ENABLE_DDL_ANY_PRIV = 1 both; --开启后可正常赋予权限

grant create any table to hrtest;

grant create any index to hrtest;    角色管理

角色是权限的集合,角色使权限管理更加方便。

DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。

PUBLIC:具有对当前模式下对象的 DML 数据操作权限。

RESOURCE:具有在当前模式下数据定义权限(创建表、索引、视图等),

SOI:具有查询 sys 开头系统表的权限

VTI:具有查询 v$开头的动态视图权限

select * from dba_roles;

create role r1;

grant create table to r1;

grant select on dmhr.department to r1;

grant r1 to hrtest;

sp_set_role(R1,0) --角色禁用和启用,禁用后角色权限将不在生效。

DM 管理工具创建角色:

赋予对象权限增加 with grant option 说明权限可以转授,回收时要增加 cascade 关键字级联回收权限。

revoke select on dmhr.employee from r2 CASCADE; 第九部分:模式对象管理

   管理模式

模式与用户之间的关系:

当系统建立一个用户时,会自动生成一个对应的模式,用户还可以建立其他模式,用户和模式是一对多的管理,一个用户可以拥有多个模式,一个模式仅能归属于一个用户。

select * from SYSOBJECTS t where t."TYPE$" =SCH; --查看模式

select * from SYSOBJECTS t where t."SUBTYPE$" =USER; --查看用户

--查看模式和用户的关系

select a.id, a.name, b.id, b.name 

from SYSOBJECTS a, SYSOBJECTS b 

where a.pid = b.id and a."TYPE$" = SCH;

创建模式

create schema hrtest01 AUTHORIZATION HRTEST;

create table hrtest01.t_test(id int, name varchar(20));

--查看当前模式和当前用户

select sys_context(USERENV,CURRENT_SCHEMA);

select sys_context(USERENV,CURRENT_USER);

--切换模式

set SCHEMA dmhr;

---------- ---------------------------------------

1 DMHR

--删除模式

drop SCHEMA IF EXISTS HRTEST01;

drop SCHEMA IF EXISTS HRTEST01 CASCADE; --级联删除模式下对象,生产环境慎

用。

   管理表

DM 默认创建的是索引组织表,Oracle 默认创建的是堆表:

索引组织表和堆表的区别:

索引组织表有且仅有一个聚簇索引键,表数据按照聚簇索引键排序(数据是有序的,插入有序),rowid 是逻辑 rowid,占用存储空间,所以索引组织表比堆表占用较多空间。

堆表,插入无序,数据无序,rowid 是物理 rowid,不占用存储空间,所以堆表更节约空间,支持并发。如果是对聚簇索引键的范围查询,索引组织表更高效。

DM 默认创建的索引组织表,由参数 LIST_TABLE 指定。

select * from v$parameter t where name =LIST_TABLE;

DM 创建表时如果指定了主键,则主键为聚簇索引键;如果创建表示未指定主键,则 rowid

为聚簇索引键(由参数 PK_WITH_CLUSTER 指定);

相关数据字典:

select * from dba_constraints t where t.owner=HRTEST;

select * from DBA_CONS_COLUMNS t where t.owner=HRTEST;

DM 管理工具创建约束:

管理索引

索引:二级索引(B 树索引),索引的存在是为了提高查询速度。索引存放的是索引列值和 rowid。一种数据库对象,通过指针加速查询速度,通过快速定位数据的方法,减少磁盘 I/O。索引与表相互独立,索引占用存储空间(如果一个表越大,其索引也会越来越大),索引相当于一个小表,索引是有序的(按照索引字段排序),在查询时服务器自动使用索引,DML 操作时自动维护索引。

索引不是越多越好,索引会降低 DML 的效率(DML 操作需要维护索引)。

索引包含:聚簇索引、二级索引、函数索引、位图索引、组合索引等

组合索引创建时要注意索引列的顺序(一般经常查询的列放在前面,等值查询的列放在前面)。

explain select * from hrtest.t_emp01 t where T.EMPLOYEE_NAME = 马学铭;

create index ix_emp01_employeename ON HRTEST.T_EMP01(EMPLOYEE_NAME);

统计信息的收集:

dbms_stats.gather_table_stats(HRTEST,T_EMP01);

统计信息的查看:

dbms_stats.table_stats_show(HRTEST,T_EMP01);

dbms_stats.index_stats_show(HRTEST,IX_EMP01_EMPLOYEENAME); 

索引的监控:

alter index HRTEST.IX_EMP01_EMPLOYEENAME MONITORING USAGE; --开启索引监控

alter index HRTEST.IX_EMP01_EMPLOYEENAME NOMONITORING USAGE; --关闭索引监控

select * from v$object_usage;

索引的重建(生成环境建议使用 online 方式重建,不影响表的 DML 操作):

alter index HRTEST.IX_EMP01_EMPLOYEENAME rebuild ONLINE;

索引的数据字典:

select * from dba_indexes t where t.OWNER =HRTEST;

select * from dba_ind_columns t where t.index_OWNER =HRTEST;

删除索引:

drop index HRTEST.ix_emp01_employeename;

DM 管理工具创建索引:

   管理视图

普通视图(物化视图除外)中不包含数据,数据来源于基表。视图提供一个查询窗口。从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由 SELECT 语句组成的查询定义的虚拟表

简单视图:单表查询,不包含聚合函数、group by 等。一般可以支持 DML 操作,对视图的DML 操作都会转化为对基表的 DML 操作,DML 操作要满足基表的约束条件。

复杂视图:多表连接,包含聚合函数、group by 等。一般不支持增删改操作。

第十部分:数据字典和动态性能视图

 数据字典

存储在 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 t.TRX_ID, t.SESS_ID, t.SQL_TEXT, t.STATE, t.THRD_ID from v$sessions t;

select * from v$lock t where t.BLOCKED = 1;

sp_close_session(140279172804584); --结束某个 session

第十一部分:数据库的备份还原

备份还原基本概念

备份包含物理备份、逻辑备份。物理备份是拷贝有效的数据页。逻辑备份是导出数据库中逻辑数据。物理备份分为完全备份、增量备份;联机备份(热备)和脱机备份(冷备)。

备份级别:全库备份、表空间级备份、表级备份、归档备份。

增量备份包含差异增量备份和累积增量备份:差异增量备份的基础备份集可以是全量备份,也可以是增量备份;累计增量备份的基备份集只能是全量备份。

物理还原是备份的逆过程;恢复是使用归档将数据库恢复到最新状态或指定时间点;或使用备份集中的 redo 信息将数据库恢复至一致性状态。

   脱机备份与还原数据库

脱机备份(数据库关闭状态下的备份)

一、使用 dmrman 工具可以脱机备份

库备份(冷备):

RMAN> backup database /dm8/data/DM/dm.ini;

表空间的还原和恢复(DM8 表空间联机备份,脱机还原)

测试场景:删除 TBS01.DBF 数据文件

表空间的还原:

RMAN> restore database /dm8/data/DM/dm.ini tablespace dmtbs from backupset /dm8/backup/full/DMTBSFULL_02;

RMAN> recover database /dm8/data/DM/dm.ini tablespace dmtbs with archivedir /dm8/arch;

全库的还原与恢复

测试场景:删除 system 数据文件

假如 a(全量)->b1(增量)-> b2(增量)

 -> c1(增量)

如果全量备份丢失,基于其增量的备份也将无法正常使用

(1)数据库的还原

RMAN> restore database /dm8/data/DM/dm.ini from backupset 

(2)数据库的恢复

RMAN> recover database /dm8/data/DM/dm.ini with archivedir /dm8/arch;

(3)更新是数据库魔数

RMAN> recover database /dm8/data/DM/dm.ini update db_magic;

二、 使用 console 控制台工具脱机备份

数据库备份

还原:

恢复:

更新数据库魔数:

表空间还原时会校验数据库魔数:

select permanent_magic; --查询数据库永久魔数

select db_magic from v$rlog; --查询数据库当前魔数

   联机备份与还原数据库

联机备份:数据库是启动状态,联机备份要求数据库打开归档。

DM 默认使用 AP 服务备份(由参数 BAK_USE_AP),所以备份时要保证 AP 服务是启动的。

BAK_USE_AP 1

动态,系

统级

备份还原实现策略。

1:DMAP 辅助进程方式,要求必须启动DMAP 服务,可支持第三方备份。DMAP 插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率,特别是加密、压缩的处理效率。

2:无辅助进程方式,不依赖 DMAP,由主进程 DMSERVER 自身执行备份还原,但不支持

第三方备份。

DM 默认的备份路径由参数 BAK_PATH 指定,建议备份路径不要和数据库原始数据文件放在同一磁盘,避免磁盘损坏,数据文件和备份文件同时损坏的情况。

select * from v$parameter t where name in (BAK_USE_AP,BAK_PATH);

select * from v$backupset; --查看备份集

select * from v$ifun t where t.name like SF_BAKSET%;

SF_BAKSET_BACKUP_DIR_ADD(DISK,/dm8/backup/full/);

SF_BAKSET_BACKUP_DIR_ADD(DISK,/dm8/backup/incr/);

备份数据库

backup database; --全量备份

backup database increment; --增量备份

backup database full to ONLINEBAK_01 backupset /dm8/backup/full/ONLINEBAK_01;

backup database increment BASE ON BACKUPSET  /dm8/backup/full/ONLINEBAK_01 to ONLINEBAKINCR_01 backupset /dm8/backup/incr/ONLINEBAK_01 ;

backup database increment with BACKUPDIR /dm8/backup/full/ to ONLINEBAKINCR_02 backupset /dm8/backup/incr/ONLINEBAK_02 ;

--校验备份集

select SF_BAKSET_CHECK(DISK,/dm8/backup/incr/ONLINEBAK_02);

--表空间备份

backup tablespace dmtbs;

backup tablespace dmtbs INCREMENT with BACKUPDIR /dm8/backup/full/ to DMTBSINCR_01 backupset /dm8/backup/incr/DMTBSINCR_01 ;

backup table dmhr.employee; --表的备份

backup ARCHIVELOG all; --归档备份

库级、表空间的还原和恢复不支持联机恢复,只支持脱机还原恢复。

DM 管理工具图形化界面备份:

表空间备份:

   逻辑备份

dexp 逻辑导出、dimp 逻辑导入

四个级别:

全库(full=y)

按用户(owner=XXX)

按模式(schemas=XXX)

按表(tables=XX)

全库导出:

[dmdba@马吃水搬砖工人 dexp]$ dexp userid=sysdba/密码:端口号 

directory=/dm8/backup/dexp file=full.dmp log=full.log full=y

按用户导出:

dexp userid=sysdba/密码:端口号 directory=/dm8/backup/dexp file=HRTEST.dmp  log=HRTEST.log owner=HRTEST

按模式导出:

dexp userid=sysdba/密码:端口号 directory=/dm8/backup/dexp file=DMHR.dmp  log=DMHR.log schemas=DMHR

按表导出:

dexp userid=sysdba/密码:端口号 directory=/dm8/backup/dexp  file=EMPLOYEE.dmp log=EMPLOYEE.log tables=DMHR.EMPLOYEE

全库导入:

dimp userid=sysdba/密码:端口号 directory=/dm8/backup/dexp file=full.dmp  log=impfull.log full=y

按模式导入(将 A 模式导入到 B 模式,使用 REMAP_SCHEMA 参数):

dimp userid=sysdba/密码:端口号 directory=/dm8/backup/dexp file=DMHR.dmp  log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST

全库导出(DM 管理工具):

全库导入(DM 管理工具):

第十二部分:作业管理

创建代理环境:

sp_init_job_sys(1); --执行存储过程

或界面上右击【代理】,选择【创建代理环境】:

创建作业:

call SP_CREATE_JOB(JOB01,1,0,,0,0,,0,);

call SP_JOB_CONFIG_START(JOB01);

call SP_ADD_JOB_STEP(JOB01, FULLBAK, 6,

00000000/dm8/backup/full, 0, 0, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE(JOB01, FULLBAK, 1, 2, 1, 1, 0,

22:00:00, NULL, 2021-12-22 16:32:21, NULL, );

call SP_JOB_CONFIG_COMMIT(JOB01);

增量备份:

--查看job

select * from sysjob.sysjobs;

--运行job

dbms_job.run(1640162093);

--查看job运行日志

select * from SYSJOB.SYSJOBHISTORIES2;

checkpoint(100); --执行完全检查点

DM兼容oracle的DBMS_JOB和DBMS_SHCEDULER.

SP_INIT_DBMS_SCHEDULER_SYS(1);

dbms_scheduler;

第十三部分:DM8 开发

   DM 支持开发语言的种类

   DM 开发语言接口配置

DM8 JDBC 编程注意事项

// 定义 DM JDBC 驱动串

String jdbcString = "dm.jdbc.driver.DmDriver";

// 定义 DM URL 连接串

String urlString = "jdbc:dm://localhost:端口号";

ODBC 的安装:

(1)解压

[root@马吃水搬砖工人]# tar -zxvf unixODBC-2.3.0.tar.gz

(2)源码安装三部曲(配置、编译、安装)

[root@马吃水搬砖工人]# cd unixODBC-2.3.0/

[root@马吃水搬砖工人 unixODBC-2.3.0]# ./configure

[root@马吃水搬砖工人 unixODBC-2.3.0]# make

[root@马吃水搬砖工人 unixODBC-2.3.0]# make install

(3) 配置 odbc.ini 数据源信息和 odbcinst.ini 驱动信息

[root@马吃水搬砖工人 unixODBC-2.3.0]# cd /usr/local/etc/

[root@马吃水搬砖工人 etc]# vim odbcinst.ini

[root@马吃水搬砖工人 etc]# vim odbc.ini

来自 “ ITPUB博客 ” ,链接:http://blog.itpub-/70014159/viewspace-2856755/,如需转载,请注明出处,否则将追究法律责任。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从Oracle数据库迁移到国产数据库的11个难点解析
下一篇:直播强势来袭:Oracle nologgiing;数据库上云;国产数据库比对
相关文章

 发表评论

暂时没有评论,来抢沙发吧~