暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DCA准考笔记

原创 谈笑人生 2022-08-08
2314

DCA准考笔记

达梦单机数据库安装

查看操作系统版本(root帐户)

cat /proc/version

Linux version 4.19.90-24.4.v2101.ky10.x86_64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 24 12:14:55 CST 2021

[root@DCA ~]# uname -r

4.19.90-24.4.v2101.ky10.x86_64

查看 Glibc、gcc 版本

ldd --version

ldd (GNU libc) 2.28

Copyright (C) 2018 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Roland McGrath and Ulrich Drepper.

Gcc版本

gcc --version

gcc (GCC) 7.3.0

Copyright (C) 2017 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

#卸载数据库

./uninstall.sh –i

簇大小、页大小、字符集、大小写敏感、VARCHAR 类型以字符为单位等一旦指定,数据库 创建完成将无法更改。 页d是达梦数据库的最小存储单元,达梦中 varchar 类型长度默认不能大于页大小的一半。

数据库页大小

varchar实际最大长度(字节)

4K

约 1900

8K

约 3900

16K

约 8000

32K

约 8188

root 执行删除服务脚本

./dm_service_uninstaller.sh -n DmServiceDMTESTSVR

达梦数据库单机端口开放

firewall-cmd --add-port=5236/tcp --permanent --zone=public

firewall-cmd –reload

firewall-cmd --list-ports

DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线 程,启动数据库实例,启动到 mount 状态,根据控制文件中的数据文件路径和练级日志文件 路径,找到并打开数据文件和联机日志,启动到 OPEN 状态

SUSPEND 和 OPEN 也可以相互转换。 但 MOUNT 和 SUSPEND 之间不能相互转换。

图形功能需要在./dts,/manager下运行

在服务器本机上

Root帐户下

安装DAMENG数据库

创建相关用户

groupadd dinstall -g

useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

echo "Dameng123" |passwd --stdin dmdba

创建数据库软件环境变量

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"

export DM_HOME="/dm8"

export DISPLAY=:0

export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

创建相关目录

Mkdir -p /dm8

Mkdir -p /dm8/arch

Mkdr -p /dm8/data

Chown -R dmdba:dinstall /dm8

安装达梦数据库软件

./DMInstall.bin –i

请选择安装语言(C/c:中文 E/e:英文) [C/c]:

解压安装程序..........

欢迎使用达梦数据库安装程序

是否输入 Key 文件路径? (Y/y:是 N/n:否) [Y/y]:n

是否设置时区? (Y/y:是 N/n:否) [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]:

安装类型:

1 典型安装

2 服务器

3 客户端

4 自定义

请选择安装类型的数字序号 [1 典型安装]:

请选择安装目录 [/home/dmdba/dmdbms]:/dm8

可用空间: 14G

是否确认安装路径(/dm8)? (Y/y:是 N/n:否) [Y/y]:y

安装位置: /dm8

所需空间: 1178M

可用空间: 14G

版本信息:

有效日期:

安装类型: 典型安装

是否确认安装? (Y/y:是 N/n:否):y

[INFO] 安装达梦数据库...

[INFO] 安装 基础 模块...

[INFO] 安装 服务器 模块...

[INFO] 安装 客户端 模块...

[INFO] 安装 驱动 模块...

[INFO] 安装 手册 模块...

[INFO] 安装 服务 模块...

[INFO] 移动日志文件。

[INFO] 安装达梦数据库完成。

执行root脚本安装相关

/dm8/script/root/root_installer.sh

移动 /dm8/bin/dm_svc.conf 到/etc 目录

修改服务器权限

创建 DmAPService 服务

Created symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service →

/usr/lib/systemd/system/DmAPService.service.

创建服务(DmAPService)完成

启动 DmAPService 服务

创建数据库实例

./dminit PATH=/SJ/data DB_NAME=PROD INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Dameng123 ARCH_FLAG=1 CASE_SENSITIVE=0 LOG_PATH=/dm8/data/DAMENG/DMSERVER01.log LOG_PATH=/dm8/data/DAMENG/DMSERVER02.log LOG_PATH=/dm8/data/DAMENG/DMSERVER03.log LOG_SIZE=128 EXTENT_SIZE=16 PAGE_SIZE=8

注册数据库服务

./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/bin/dm.ini

Select path from v$datafile;

查询数据运行状态

SQL> select name,status$ from v$instance;

行号 name status$

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

1 OASRV OPEN

已用时间: 1.299(毫秒). 执行号:703.

第五部分:DMSQL

SQL 分类

DML(Data Mannipulation Language)数据操纵语言:

查询、操纵数据表资料行,包含 SELECT、INSERT、UPDATE、DELETE,MERGE。

默认情况下,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 可以降 低表的水位线。

Sql 语法语义权限解析(字典缓冲区,语法语义校验,权限校验):首先在 sql 缓冲区 中查找是否有对应的 sql 语句,如果找到,再查找对应的执行计划,找到执行计划,根据执 行计划执行 sql,这个过程称为软解析;

如果 sql 缓冲区中没有找到对应 sql 语句,会将该 sql 语句加入 sql 缓冲区,并生成对应执行计划,执行计划放入 sql 缓冲区,根据执行计划 执行 sql 语句,返回结果集,这个过程称为硬解析)。从系统性能提升来说,要减少硬解析。

隐式转换和显式转换

隐式类型转换的问题:

(1)程序可读性差,且依赖数据库的隐式转换规则,效率差,会增加处理时间;且如果数据库升级,则程序可能无法正确执行;

(2)有可能会导致索引失效;

(3)有可能会导致意想不到的结果

CUBE 与 ROLLUP

达梦的 GROUP BY 语句除了最基本的语法外,还支持 ROLLUP 和 CUBE 语句。

ROLLUP(A, B, C): 首先会对(A、B、C)进行 GROUP BY,然后对(A、B)进行 GROUP BY,

然后是(A)进行 GROUP BY,最后对全表进行 GROUP BY 操作。

CUBE(A, B, C):首先会对(A、B、C)进行 GROUP BY,然后依次是(A、B),(A、C),(A),

(B、C),(B),(C),最后对全表进行 GROUP BY 操作。

CUBE 和 ROLLUP 之间的区别在于:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

表外键创建测试

create table employees

(

employee_id dec(6,0) not null,

employee_name varchar(20) not null,

email varchar(25) not null,

phone_number varchar(20),

hire_date datetime(6) not null,

job_id varchar(10) not null,

salary dec(8,2),

commission_pct dec(2,2),

manager_id dec(6,0),

department_id dec(4,0),

primary key(employee_id));

create table departments

(

department_id dec(4,0) not null,

department_name varchar(30) not null,

manager_id dec(6,0),

location_id dec(4,0),

primary key(department_id)

);

alter table employees add constraint forkey01 foreign key ("department_id") references "departments" ("department_id");

第六部分:DM 的体系结构

表空间是 DM 数据库的最大存储单元,所有数据都存储在表空间中。 表空间采用段(segment)、簇(extent)和页(page)的方式管理。 一个表空间可以包含一个或多个数据文件。一个数据文件仅能归属于一个表空间。 DM 物理文件包含:配置文件、控制文件、数据文件、联机日志(此四个文件必不可少,缺少 一个将无法正常启动)。 配置文件包括(服务配置 dm.ini,守护配置,复制配置,审计配置)

配置参数文件 dm.ini DM 数据库参数的类型: READ ONLY:手动参数,不能通过 SQL 命令或函数修改;只能通过修改 dm.ini 文本文件修改 此参数(需要重启数据库才能生效)。 SYS:动态(系统级)参数。可以即可以修改内存中的值,也可以修改参数文件中的值。可 以通过 SQL 命令或函数修改。 SESSION:动态(会话级)参数,可以即可以修改内存中的值,也可以修改参数文件中的值。 可以通过 SQL 命令或函数修改,且可以只针对当前会话生效。 IN FILE:静态参数,可以通过 SQL 命令或函数修改,不能修改内存中的值,只能修改参数 文件中的值,所以需要重启数据库才能生效。 静态参数在数据库运行期间不能修改内存中的值,动态参数在数据库运行期间可以修改内存 中的值(修改后立即生效)。

DM 数据库参数的类型:

READ ONLY:手动参数,不能通过 SQL 命令或函数修改;只能通过修改 dm.ini 文本文件修改 此参数(需要重启数据库才能生效)。

SYS:动态(系统级)参数。数据库运行中可以直接修改,可以即可以修改内存中的值,也 可以修改参数文件中的值。可以通过 SQL 命令或函数修改。

SESSION:动态(会话级)参数,数据库运行中可以直接修改,可以即可以修改内存中的值, 也可以修改参数文件中的值,还可以只修改当前会话的值。可以通过 SQL 命令或函数修改, 且可以只针对当前会话生效。

IN FILE:静态参数,不能修改内存中的值,只能修改参数文件中的值,可以通过 SQL 命令 45 / 117 或函数修改,但需要重启数据库才能生效。 静态参数在数据库运行期间不能修改内存中的值,动态参数在数据库运行期间可以修改内存 中的值(修改后立即生效)。

SQL> select distinct para_type from v$dm_ini;

行号 PARA_TYPE

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

1 READ ONLY

2 SYS

3 IN FILE

4 SESSION

已用时间: 78.067(毫秒). 执行号:300.

Select * from v$ifun;

DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线

程,启动数据库实例,启动到 mount 状态,根据控制文件中的数据文件路径和练级日志文件

路径,找到并打开数据文件和联机日志,启动到 OPEN 状态。

Oracle 启动顺序:nomount->mount->open

Shutdown:关闭状态

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

此时数据库不能对外正常提供服务。

Open:打开状态,此时数据库提供正常的服务。可以读写数据文件。正常访问表,读取数据。

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

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

但 MOUNT 和 SUSPEND 之间不能相互转换。

alter system set 'COMPATIBLE_MODE' =2 spfile;

从磁盘的数据文件中读取数据—物理读 从内存(数据缓冲区)读取数据—逻辑读

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

DM数据库防火墙配置

firewall-cmd --add-port=5236/tcp --permanent --zone=public

firewall-cmd --reload

firewall-cmd --list-ports

修改数据缓冲区大小为500M:

alter system set 'BUFFER'= 500 spfile;

SQL 缓冲区 缓存 sql 语句、对应的执行计划、缓存结果集(需要开启结果集缓存,默认不开启) SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息 (PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG 比较多、复杂的系统,建议将该参数调大。 参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默 认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。

DM.INI配置文件参数类型

会话级,内存级,静态级

select name, type, value, sys_value, file_value, description

from v$parameter where name like '%COMPA%MODE%';

修改 LIST_TABLE(会话级动态参数),如果不指定修改参数范围,默认是 memory:

select name,type,value,sys_value,file_value,description from v$parameter t where t.name='LIST_TABLE';

alter system set 'LIST_TABLE' =1 both|memory|spfile;

alter session set 'LIST_TABLE'=1;

相关数据字典:

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$ifun t, SYS."V$IFUN_ARG" B where t.name like '%SP_CLEAR_PLAN_CACHE%' and t.id = b.id;

数据缓冲区

用于缓存数据文件中的数据页。BUFFER 是从磁盘读出的数据页在内存中的镜像,包含 49 / 117 四个类型,分别是 normal、fast、recycle、keep,由 INI 配置中的 BUFFER、FAST_POOL_PAGES、 RECYCLE、KEEP 等确定大小,不同类型的缓冲区主要表现为淘汰机制不同。

从磁盘的数据文件中读取数据—物理读 从内存(数据缓冲区)读取数据—逻辑读

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

SQL> select * from SYS."V$PARAMETER" t

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

行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION

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

1 23 BUFFER IN FILE 500 500 500 Initial System Buffer Size In Megabytes

2 26 FAST_POOL_PAGES IN FILE 3000 3000 3000 Fast Pool Pages

3 28 KEEP IN FILE 8 8 8 Initial System KEEP Buffer Size In Megabytes

4 29 RECYCLE IN FILE 64 64 64 Initial System KEEP Buffer Size In Megabytes

修改数据缓冲区大小为500M:

alter system set 'BUFFER'= 500 spfile;

SQL 缓冲区

缓存 sql 语句、对应的执行计划、缓存结果集(需要开启结果集缓存,默认不开启) SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息 (PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG 比较多、复杂的系统,建议将该参数调大

参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默 认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。

SP_CLEAR_PLAN_CACHE(PLAN_ID); --清理执行计划

--SP_SET_PLN_BINDED --绑定执行计划

select * from V$mem_pool;

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

查看数据库进程:

[root@DCA ~]# ps -ef|grep dmserver

dmdba 1759 1 0 08:25 ? 00:00:07 /dm8/bin/dmserver /SJ/data/PROD/dm.ini -noconsole

root 12035 11949 0 09:57 pts/2 00:00:00 grep dmserver

根据达梦数据库进程查看达梦数据库线程

[root@DCA ~]# ps -T -p 1759

PID SPID TTY TIME CMD

1759 1759 ? 00:00:02 dmserver

1759 1974 ? 00:00:00 dm_quit_thd

1759 1980 ? 00:00:00 dm_io_thd

1759 1981 ? 00:00:00 dm_io_thd

1759 1982 ? 00:00:00 dm_io_thd

1759 1983 ? 00:00:00 dm_io_thd

1759 2182 ? 00:00:00 dm_rsyswrk_thd

1759 2183 ? 00:00:00 dm_rsyswrk_thd

1759 2185 ? 00:00:00 dm_rsyswrk_thd

1759 2188 ? 00:00:00 dm_chkpnt_thd

1759 2189 ? 00:00:00 dm_redolog_thd

1759 2204 ? 00:00:00 dm_hio_thd

1759 2205 ? 00:00:00 dm_hio_thd

1759 2206 ? 00:00:00 dm_hio_thd

1759 2207 ? 00:00:00 dm_hio_thd

1759 2283 ? 00:00:00 dm_sqllog_thd

1759 2287 ? 00:00:00 dm_purge_thd

动态视图:

select * from V$process; --进程

select * from v$threads; --线程

DM 的核心线程;默认 16 个工作线程。

IO 线程

日志刷新线程

日志归档线程

日志重做线程

调度线程

第七部分:表空间管理

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

SYSTEM:系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、用户角 色权限信息等,部分隐含参数写入 SYSTEM 表空间)

ROLL:回滚表空间,存放回滚页,数据库中的 DML 操作对应都会生成 redo 和 undo, undo 信息放入 ROLL 表空间对应的数据文件,redo 信息写入联机日志文件,用于保证数据 的一致性。

ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。 遇到查询记录过旧的错误(等同于 oracle 的快照过旧的错误)。解决方法:

1、 增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。

2、查询时间过长导致,可以考虑优化查询。

alter system set 'UNDO_RETENTION'= 300 both;

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

达梦 TEMP 表空间,数据库启动时会按照如下参数重建 TEMP 表空间。

select name, value, type from v$parameter t where name like 'TEMP%';

alter system set 'TEMP_SIZE'=100 spfile;

将控制文件转成文本文件

dmctlcvt type=1 src=dm.ctl dest=dmctl.txt

SQL 管理表空间

创建表空间

CREATE TABLESPACE DMTBS DATAFILE ' /SJ/data/OA/DMTBS01.DBF' SIZE 1024 AUTOEXTEND ON NEXT 200 MAXSIZE 10240,'/SJ/data/TEST02.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;

表空间下线

alter tablespace DMTBS offline;

alter tablespace DMTBS online;

表空间重命名

alter tablespace tbs RENAME TO dmtbs;

删除表空间

有数据不能删除表空间

drop tablespace dmtbs;

修改表空间添加数据文件:

alter TABLESPACE tbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2 MAXSIZE 20480;

修改表空间数据文件的大小:

alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128;

修改联机日志文件大小

alter database RESIZE LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO 500;

添加联机日志文件

alter DATABASE ADD LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' SIZE 500;

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

alter database mount;

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER01.log' TO '/SJ/redo/DM01.log';

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER02.log' TO '/SJ/redo/DM02.log';

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO '/SJ/redo/DM03.log';

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' TO '/SJ/redo/DM04.log';

alter database open;

开启归档的方法:

查看归档置:

select arch_mode from v$database;

select * from v$dm_arch_ini;

归档开启:

alter database mount;

alter database ARCHIVELOG;

alter database ADD ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,

space_limit=10240';

alter database open;

迁移自定义表空间数据文件

alter tablespace china offline;

alter TABLESPACE china RENAME DATAFILE 'china01.DBF' TO '/SJ/china01.DBF';

管理重做日志文件 重做日志包含联机日志和归档日志(数据库在归档模式下才会产生归档日志文件)。 联机重做日志:存放 redo 信息,循环使用,不断覆盖。 联机日志 v$rlog 中记录有日志序列号(LSN: Log Sequence Number) DM 数据库联机日志自动切换,不能手工切换。DM 联机日志没有日志组。

select * from v$rlogfile;

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

SQL 关闭归档

SQL> alter database mount;

SQL> alter database noarchivelog;

SQL> alter database delete archivelog 'type=local,dest=/dm8/arch';

SQL> alter database open;

SQL> select arch_mode from v$database;

DM 支持手工切换归档;

alter SYSTEM ARCHIVE LOG CURRENT;

alter SYSTEM SWITCH LOGFILE;

alter DATABASE ARCHIVELOG CURRENT;

归档文件的删除:

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

归档文件的删除:

Select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-10);

第八部分:用户管理

DM 默认的预定义用户:

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

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

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

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

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

系统口令策略

PWD_POLICY(隐含参数,不在 dm.ini 中)参数指定系统的口令策略,默认为 2;

系统支持的口令策略有:

0 无策略

1 禁止与用户名相同

2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值

4 至少包含一个大写字母(A-Z)

8 至少包含一个数字(0-9)

16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

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

令策略为 2+4=6 即可。

PWD_POLICY 是隐含参数,PWD_POLICY,只能通过函数或 SQL 语句修改。

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

create user hr IDENTIFIED by dameng123;

修改系统口令策略:

alter SYSTEM set 'PWD_POLICY' = 15 BOTH;

用户锁定和解锁:

alter user hr ACCOUNT LOCK;

alter user hr ACCOUNT UNLOCK;

修改用户的默认表空间:

alter user hr DEFAULT TABLESPACE TEST;

删除用户:

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

用户资源限制

用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):

alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;

密码带有特殊字符的登录处理,其中’’具有转义功能

disql hrtest/'"Dameng@123"'

在SQL环境下则不需要转义

conn hrtest/"Dameng@123"

权限管理

grant create table to hrtest;

赋予对象权限:

grant select on dmhr.employee to hrtest;

grant RESOURCE to HR;

权限的回收

SQL> revoke select on dmhr.employee from hrtest;

SQL> revoke create table from hrtest;

SQL> grant select (employee_id, employee_name) on dmhr.employee to hrtest;

相关数据字典:

select * from dba_sys_privs t where t.GRANTEE= 'HR';

select * from dba_role_privs t where t.GRANTEE= 'HR';

select * from dba_tab_privs t where t.GRANTEE= 'HR';

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

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

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

角色管理

角色是权限的集合,角色使权限管理更加方便。 DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。 PUBLIC:具有对当前模式下对象的 DML 数据操作权限。 RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等); SOI:具有查询 sys 开头系统表的权限; VTI:具有查询 v$开头的动态视图权限(动态视图记录在 v$dynamic_tables,如果没有此权 限,DM 管理工具上会报没有查询 v$视图权限) DB_AUDIT_开头的角色是审计相关角色,具有审计相关权限,默认赋给 SYSAUDITOR。 DB_POLICY_开头的角色是安全相关角色,具有强制访问控制等权限,默认赋给 SYSSSO。

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

revoke select on dmhr.employee from r2 CASCADE;

第九部分:模式对象管理

管理模式

模式与用户之间的关系:

模式定义:模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干 对象的对象集 模式对象: 表、视图、约束、索引、序列、触发器、存储过程/函数、包、同 义词、类、域 模式与用户之间的关系: 当系统建立一个用户时,会自动生成一个同名的模式 用户还可以建立其他模式,DM 中用户和模式是一对多的关系,一个用户可以拥有多个模式, 一个模式仅能归属于一个用户。Oracle 中用户和模式是一对一的关系。

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

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

--查询模式和用户的对应关系:

select a.id scheid, a.name schename, b.id userid, b.name username from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b where a."TYPE$" = 'SCH' and a.pid = b.id;

模式管理 --创建模式 (创建用户时会自动创建模式)

CREATE SCHEMA "dba01" AUTHORIZATION "dba01";

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

select sys_context('USERENV','CURRENT_SCHEMA');

select sys_context('USERENV','CURRENT_USER'); 或 select user;

--切换模式(仅对当前会话生效)

set SCHEMA dmhr;

--删除模式

drop SCHEMA IF EXISTS HRTEST01;

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

管理表

索引组织表:有且仅有一个聚簇索引键,表数据按照聚簇索引键排序(数据是有序的,插入 有序),如果在创建表时未指定聚簇索引键,默认使用 rowid 为聚簇索引键。rowid 是逻辑 rowid,占用存储空间,所以索引组织表比堆表占用较多空间。 堆表:数据是无序的,插入无序,堆表插入效率较高,rowid 是物理 rowid,不占用存储空 间。所以堆表比索引组织表节约空间。 对聚簇索引键的范围查询,索引组织表更高效

SQL 管理表

create table dba01.t_test (

pid int,

pname varchar(20),

sex bit,

logtime datetime);

添加字段:

alter table dba01.t_test add column email varchar(20);

修改字段类型:

alter table dba01.t_test modify email varchar(50);

删除字段:

alter table dba01.t_test drop logtime;

对字段添加默认值(大表不建议添加字段时给默认值,耗时很长)

alter table dba01.t_test add column logtime datetime default sysdate;

重命名表或字段:

alter table dba01.t_test rename to dba01.t_testoa;

select * from dba01.t_testoa;

alter table dba01.t_testoa rename column pid to id;

SQL> desc dba01.t_testoa;

行号 name type$ nullable

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

1 id INTEGER Y

2 pname VARCHAR(20) Y

3 sex BIT Y

4 email VARCHAR(50) Y

5 logtime DATETIME(6) Y

对表和字段添加注释:

comment on column dba01.t_testoa.sex is 'sex. 0:female 1: male';

comment on table dba01.t_testoa is 'this is a test table';

select * from user_tab_comments;

select * from user_col_comments

修改表的表空间(DM 会自动重建该表上的索引)

alter table dba01.t_testoa move tablespace main;

SQL 管理约束

非空约束

alter table dba01.t_testoa modify pname not null;

唯一约束

alter table dba01.t_testoa add CONSTRAINT uk_testpid_email unique (email);

主键约束

alter table dba01.t_testoa ADD CONSTRAINT pk_testpid_id PRIMARY KEY(id);

检验约束

alter table dba01.t_testoa add salary number(10,2);

alter table dba01.t_testoa ADD CONSTRAINT ck_testpid_salary CHECK (salary>=2100);

外键约束(外键引用两一张表的主键或者唯一键)

alter table dba01.t_testoa add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES dba01.t_testoa(id);

--约束的禁用和启用、删除

alter table dba01.t_testoa disable CONSTRAINT fk_test_id;

alter table dba01.t_testoa enable CONSTRAINT fk_test_id;

alter table dba01.t_testoa drop CONSTRAINT fk_test_id;

insert into dba01.t_testoa(id, pname, sex, email, salary) values(1, 'test', 0, 'test@qq.com', 2300);

insert into dba01.t_testoa(id, pname, sex, email, salary) values(2, '123', 0, '123@qq.com', 2300);

commit;

相关数据字典:

select * from dba_constraints t where t.owner='DBA01';

select * from DBA_CONS_COLUMNS t where t.owner='DBA01';

批量禁用外键约束:

select 'alter table '||owner||'.'||table_name||' disable constraint '|| t.CONSTRAINT_NAME ||';' from DBA_CONSTRAINTS t where t.OWNER ='DMTEST' and t.CONSTRAINT_TYPE = 'R';

SQL> explain select * from dmhr.employee t where T.EMPLOYEE_NAME = '马学铭';

1 #NSET2: [1, 21, 280]

2 #PRJT2: [1, 21, 280]; exp_num(12), is_atom(FALSE)

3 #SLCT2: [1, 21, 280]; t.EMPLOYEE_NAME = '马学铭'

4 #CSCN2: [1, 856, 280]; INDEX33555537(EMPLOYEE as t)

创建索引

SQL> create index ix_emp01_employeename ON dmhr.employee(EMPLOYEE_NAME);

操作已执行

已用时间: 7.398(毫秒). 执行号:51905.

SQL> create table t_EMP like DMHR.EMPLOYEE;

操作已执行

已用时间: 18.638(毫秒). 执行号:51906.

统计信息的收集:

SQL> dbms_stats.gather_table_stats('dmhr','t_emp');

DMSQL 过程已成功完成

已用时间: 116.526(毫秒). 执行号:51911.

统计信息的查看

SQL> dbms_stats.table_stats_show('dmhr','t_emp');

行号 NUM_ROWS LEAF_BLOCKS LEAF_USED_BLOCKS

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

1 856 16 12

已用时间: 1.591(毫秒). 执行号:51912.

SQL> dbms_stats.index_stats_show('dmhr','ix_emp01_employeename');

行号 BLEVEL LEAF_BLOCKS DISTINCT_KEYS CLUSTERING_FACTOR NUM_ROWS SAMPLE_SIZE

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

1 NULL NULL NULL NULL NULL NULL

已用时间: 3.264(毫秒). 执行号:51913.

索引的监控:

SQL> alter index dmhr.ix_emp_employeename MONITORING USAGE; --开启索引监控

操作已执行

已用时间: 1.482(毫秒). 执行号:51914

SQL> alter index dmhr.ix_emp_employeename MONITORING USAGE;--开启索引监控

操作已执行

已用时间: 1.482(毫秒). 执行号:51914.

SQL> alter index dmhr.ix_emp_employeename NOMONITORING USAGE;--关闭索引监控

操作已执行

已用时间: 7.694(毫秒). 执行号:51915.

SQL> select * from v$object_usage;--查看索引的监控信息

行号 INDEX_NAME SCH_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING

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

1 ix_emp_employeename DMHR t_EMP NO NO 2022-07-31 22:08:42 2022-07-31 22:09:50

已用时间: 2.081(毫秒). 执行号:51916.

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

alter index dmhr.ix_emp_employeename rebuild ONLINE;

索引的数据字典:

select * from dba_indexes t where t.OWNER ='XXX';

select * from dba_ind_columns t where t.index_OWNER ='XXX';

删除索引:

SQL> drop index dmhr.ix_emp_employeename;

操作已执行

已用时间: 26.384(毫秒). 执行号:51922.

外键创建测试

create table employees

(

employee_id dec(6,0) not null,

employee_name varchar(20) not null,

email varchar(25) not null,

phone_number varchar(20),

hire_date datetime(6) not null,

job_id varchar(10) not null,

salary dec(8,2),

commission_pct dec(2,2),

manager_id dec(6,0),

department_id dec(4,0),

primary key(employee_id));

create table departments

(

department_id dec(4,0) not null,

department_name varchar(30) not null,

manager_id dec(6,0),

location_id dec(4,0),

primary key(department_id)

);

alter table employees add constraint forkey01 foreign key ("department_id") references "departments" ("department_id");

视图创建

create view dmhr.v_emp

as

select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.EMAIL, a.PHONE_NUM

from dmhr.employee a

where a.DEPARTMENT_ID = 1001;

SQL> select * from dmhr.v_emp;

行号 EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUM

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

1 10001 龚顺超 gongshunchao@dameng.com 18812370452

2 10100 陈伟婷 chenweiting@dameng.com 13612350355

3 10101 何杭菊 hehangju@dameng.com 18412363124

4 10102 欧锋利 oufengli@dameng.com 15712377535

5 10103 薛辉明 xuehuiming@dameng.com 18412349538

已用时间: 3.291(毫秒). 执行号:51924.

创建复杂视图:

create or REPLACE view dmhr.v_emp_salary

as

select a.DEPARTMENT_ID, sum(A.SALARY) SUM_SALARY

from dmhr.employee a

group by a.DEPARTMENT_ID

having sum(A.SALARY) > 100000;

SQL> select * from dmhr.v_emp_salary;

行号 DEPARTMENT_ID SUM_SALARY

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

1 103 129443

2 105 194399

3 301 112344

4 303 497685

5 304 103007

6 305 220802

7 306 188212

8 404 142321

9 701 134447

10 703 2425858

11 704 323230

行号 DEPARTMENT_ID SUM_SALARY

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

12 705 564024

13 706 463811

14 905 128917

15 1004 101528

16 1005 135444

17 1104 110625

18 1105 142443

18 rows got

数据的导入

SQL> start /dm8/backup/dts/t_department.sql

创建索引并指定表空间

create index ix_emp_empname on t_emp(EMPLOYEE_NAME) tablespace DMTBSIDX;

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

数据字典 存储在 SYSTEM 表空间中,包含对象定义、权限、用户角色等信息。

USER_* 用户所拥有的对象信息

ALL_* 用户能访问的对象信息

DBA_* 整个数据库中的对象信息

系统中所有对象的信息

SELECT * FROM SYSOBJECTS;

系统中所有索引定义信息

SELECT * FROM SYSINDEXES;

系统中所有列定义的信息

SELECT * FROM SYSCOLUMNS;

动态性能视图是从内存中或控制文件中读取的数据

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;

查询事务等待:

select * from sys."v$trxwait";

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

select a.sess_id, a.sql_text, a.state, b.* from v$sessions a, v$trxwait b

where a.trx_id = b.id;

-- 查询未提交事务

select b.object_name, c.sess_id, c.thrd_id, c.state, c.sql_text, a.* from v$lock a, dba_objects b, v$sessions c where a.table_id = b.object_id and a.ltype = 'OBJECT' and a.trx_id = c.trx_id and a.ign_flag=0;

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

备份包含物理备份和逻辑备份。 物理备份是拷贝有效的数据页。逻辑备份是导出数据库中逻辑数据。 物理备份分为完全备份、增量备份;联机备份(热备)和脱机备份(冷备)。 完全备份是指一个备份包含指定数据库或表空间的所有数据; 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增 加或者被修改的文件; 增量备份包含差异增量备份和累积增量备份,默认是差异增量备份。 差异增量备份的基础备份集可以是全量备份,也可以是增量备份; 累计增量备份的基备份集只能是全量备份。 热备:指数据库启动状态下的备份 冷备:指数据库关闭状态下的备份。

备份还原两个重要参数:

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

库备份(冷备)

停库备份

RMAN> backup database '/SJ/data/PROD/dm.ini' to FULLBAK01 backupset '/backup/bak';

backup database '/SJ/data/PROD/dm.ini' to FULLBAK01 backupset '/backup/bak';

Database mode = 0, oguid = 0

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

EP[0]'s cur_lsn[34948], file_lsn[34948]

Processing backupset /backup/bak

[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]

backup successfully!

time used: 00:00:01.041

全库恢复

restore database '/SJ/data/PROD/dm.ini' from backupset '/SJ/data/PROD/bak/DB_PROD_FULL_20220731_122440_470479';

(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;

表空间备份与恢复

全库备份

SQL>backup tablespace DMHR full to DMTBSFULLBAK01 backupset '/backup/oa/dmtbsfullbak01';

还原表空间

RMAN> restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';

restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';

Database mode = 0, oguid = 0

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

begin redo pwr log collect, last ckpt lsn: 38480 ...

redo pwr log collect finished

EP[0]'s cur_lsn[38480], file_lsn[38480]

restore successfully.

time used: 00:00:02.388

恢复表空间到最新

RMAN> recover database '/SJ/data/OA/dm.ini' tablespace DMHR;

recover database '/SJ/data/OA/dm.ini' tablespace DMHR;

Database mode = 0, oguid = 0

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

begin redo pwr log collect, last ckpt lsn: 38480 ...

redo pwr log collect finished

EP[0]'s cur_lsn[38480], file_lsn[38480]

EP:0 total 2 pkgs applied, percent: 16%

EP:0 total 4 pkgs applied, percent: 33%

EP:0 total 6 pkgs applied, percent: 50%

EP:0 total 8 pkgs applied, percent: 66%

EP:0 total 10 pkgs applied, percent: 83%

EP:0 total 12 pkgs applied, percent: 100%

recover successfully.

time used: 544.255(ms)

show 查看备份集

RMAN> show backupset '/dm8/data/DAMENG/bak_full';

remove 删除备份集

RMAN> remove backupset '/dm8/data/DAMENG/bak_increment';

check 检查备份集

RMAN> check backupset '/dm8/data/DAMENG/bak_full';

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

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

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

--增量备份

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');

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 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; --归档备份

dexp/dimp 逻辑导出和导入

dexp 逻辑导出、dimp 逻辑导入四个级别:

全库(full=y)

按用户(owner=XXX)

按模式(schemas=XXX)

按表(tables=XX)

按用户导出:

dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=HRTEST.dmp

log=HRTEST.log owner=HRTEST

按模式导出:

dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=DMHR.dmp

log=DMHR.log schemas=DMHR

按表导出:

dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=EMPLOYEE.dmp

log=EMPLOYEE.log tables=DMHR.EMPLOYEE

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

dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=DMHR.dmp

log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST

dimp userid=sysdba/SYSDBA:5238 directory=/dm8/backup/dexp

file=t_dept.dmp log=t_dept.log tables=SYSDBA.t_dept remap_schema=SYSDBA:DMHR

dimp V8

DM兼容oracle的DBMS_JOB和DBMS_SHCEDULER系统包。

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

call SP_INIT_DBMS_SCHEDULER_SYS(1); --创建 DMBS_SCHEDULER

创建数据库JOB

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 运行和日志查看

--查看job select * from sysjob.sysjobs;

--运行job dbms_job.run(1640162093);

--查看job运行日志

select * from SYSJOB.SYSJOBHISTORIES2;

checkpoint(100); --执行完全检查点,解决刚开归档备份,报错归档日志不连续的问题

ODBC 连接 DM 数据库

ODBC 的安装和配置:

tar -zxvf unixODBC-2.3.0.tar.gz

./configure

注:configure 时可以使用--prefix 参数指定安装路径,不指定使用默认安装路径/usr/local

make

make install

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

cd /usr/local/etc/

drwxr-xr-x 2 root root 6 12 月 22 16:56 ODBCDataSources

-rw-r--r-- 1 root root 0 12 月 22 16:56 odbc.ini

-rw-r--r-- 1 root root 0 12 月 22 16:56 odbcinst.ini

vi odbcinst.ini

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

Driver = /dm8/bin/libdodbc.so

vi odbc.ini

[DM8]

Description = DM ODBC DSN

Driver = DM8 ODBC DRIVER

SERVER = localhost

UID = SYSDBA

PWD = Dameng123

TCP_PORT = 5236

root 执行会报错,是因为 root 没有配置 LD_LIBRARY_PATH 环境变量:

# isql dm8 -v

DCA试题

1.注意:数据库无法启动,数据库密码错误,成绩无效记0分。

3.kylin linux 10系统上安装DM8企业版本。

a)软件安装在/dm目录下

b)以dmdba用户身份进行安装,密码为Dameng123

2.管理员部署一个数据库,用来存放员工信息和订单信息

a)数据文件存放到/SJ/data目录下

mkdir -p /SJ/data

chown -R dmdba:dinstall /SJ

b)数据库名为PROD,实例名DBSERVER,端口号5239

c)数据库管理员的密码为Dameng123

d)口令长度不小于9,禁止与用户名相同,至少包含一个大写字母(A-z)

e)创建3组日志,每组日志大小为300M

f)簇大小为16页,页大小为8k

cd /dm8/bin

./dminit PATH=/SJ/data DB_NAME=PROD INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Dameng123 ARCH_FLAG=1 CASE_SENSITIVE=0 LOG_PATH=/dm8/data/DAMENG/DMSERVER01.log LOG_PATH=/dm8/data/DAMENG/DMSERVER02.log LOG_PATH=/dm8/data/DAMENG/DMSERVER03.log LOG_SIZE=128 EXTENT_SIZE=16 PAGE_SIZE=8

创建表空间

create tablespace dba datafile '/SJ/data/PROD/dba01.dbf' size 1024 autoextend on next 50 maxsize 10240 CACHE = NORMAL;

创建用户

create user dba01 identified by "Dameng123" limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace dba;

grant DBA,PUBLIC,RESOURCE,SOI,VTI to dba01 with admin option;

创建模式

CREATE SCHEMA dba01 AUTHORIZATION dba01;

CREATE SCHEMA "dba01" AUTHORIZATION "dba01";

select distinct object_name TABLE_SCHEMA from all_objects where object_type = 'SCH';

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

create table dba01.t_test (

pid int,

pname varchar(20),

sex bit,

logtime datetime);

添加字段:

alter table dba01.t_test add column email varchar(20);

修改字段类型:

alter table dba01.t_test modify email varchar(50);

删除字段:

alter table dba01.t_test drop logtime;

对字段添加默认值(大表不建议添加字段时给默认值,耗时很长)

alter table dba01.t_test add column logtime datetime default sysdate;

重命名表或字段:

alter table dba01.t_test rename to dba01.t_testoa;

select * from dba01.t_testoa;

alter table dba01.t_testoa rename column pid to id;

SQL> desc dba01.t_testoa;

行号 name type$ nullable

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

1 id INTEGER Y

2 pname VARCHAR(20) Y

3 sex BIT Y

4 email VARCHAR(50) Y

5 logtime DATETIME(6) Y

对表和字段添加注释:

comment on column dba01.t_testoa.sex is 'sex. 0:female 1: male';

comment on table dba01.t_testoa is 'this is a test table';

select * from user_tab_comments;

select * from user_col_comments

修改表的表空间(DM 会自动重建该表上的索引)

alter table dba01.t_testoa move tablespace main;

SQL 管理约束

非空约束

alter table dba01.t_testoa modify pname not null;

唯一约束

alter table dba01.t_testoa add CONSTRAINT uk_testpid_email unique (email);

主键约束

alter table dba01.t_testoa ADD CONSTRAINT pk_testpid_id PRIMARY KEY(id);

检验约束

alter table dba01.t_testoa add salary number(10,2);

alter table dba01.t_testoa ADD CONSTRAINT ck_testpid_salary CHECK (salary>=2100);

外键约束(外键引用两一张表的主键或者唯一键)

alter table dba01.t_testoa add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES dba01.t_testoa(id);

--约束的禁用和启用、删除

alter table dba01.t_testoa disable CONSTRAINT fk_test_id;

alter table dba01.t_testoa enable CONSTRAINT fk_test_id;

alter table dba01.t_testoa drop CONSTRAINT fk_test_id;

insert into dba01.t_testoa(id, pname, sex, email, salary) values(1, 'test', 0, 'test@qq.com', 2300);

insert into dba01.t_testoa(id, pname, sex, email, salary) values(2, '123', 0, '123@qq.com', 2300);

commit;

相关数据字典:

select * from dba_constraints t where t.owner='DBA01';

select * from DBA_CONS_COLUMNS t where t.owner='DBA01';

> insert into t_testpid(id, pname, sex, email, salary) values(1,'test', 0, 'test@qq.com', 2300);

select distinct object_name TABLE_SCHEMA from all_objects where object_type = 'SCH';

./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/bin/dm.ini

./dm_service_installer.sh -t dmserver(达梦数据库服务器这个是固定的) -p 实例名 -dm_ini dm.ini物理位置

./disql SYSDBA/'"Dameng123"''

3.现划USERS表空间,用来存储企业员工信息和部门信息(6分)

a)数据文件存在储目录/SJ/data中

b)包含2个数据文件,分别为USERS01.dbf和USERS02.dbf

c)每个文件初始大小为50M,每次扩展1M,数据文件最大10g

create tablespace users datafile '/SJ/data/USERS01.dbf' SIZE 50 AUTOEXTEND ON NEXT 1 MAXSIZE 10240,'/SJ/data/USERS02.DBF' SIZE 50 AUTOEXTEND ON NEXT 1 MAXSIZE 10240;

4.企业的员工信息和部门信息由TEST用户管理,密码为Dameng123,密码在90天后过期。TEST用户有创建表,索引的权限,TEST用户默认表空间为USERS。(8分)

create tablespace TEST datafile '/SJ/data/TEST01.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240,'/SJ/data/TEST02.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;

CREATE USER test identified by "Dameng123" limit password_life_time 90 default tablespace users;

5.数据库中的EMPLOYEES表用于存放所有员工的信息,DEPARTMENTS表用于存放所有的部门信息,EMPLOYEES表外键引用DEPARTMENTS表的外键引用DEPARTMENTS表的主键,其中EMPNO为DEPARTMENTS表的主键,EMPLOYEES表的COMM默认值为0,两个表均存储在USERS表空间中,两表的结构如下;(12分)

EMPLOYEES表结构:

行号 NAME TYPE

1 EMPNO DEC(4)

2 ENAME VARCHAR(10)

3 JOB VARCHAR(9)

4 MGR DEC(4)

5 SAL DEC(7,2) N

6 COMM DEC(7,2) Y

7 DEPTNO DEC(2) N

DEPARTMENTS表结构:

行号 NAME TYPE NULLABLE

CREATE TABLE "users"."EMPLOYEES"

(

"EMPNO" IDEC(4),

"ENAME" VARCHAR(10),

"JOB" VARCHAR(9),

"MGR" DEC(4),

"SAL" DEC(7,2) N,

COMM DEC(7,2) Y

DEPTNO DEC(2) N;

CREATE TABLE "DMTEST"."DEPARTMENTS"

(

"DEPT_ID" INTEGER NOT NULL,

"DEPT_NAME" VARCHAR(30),

"LOCATION_ID" INTEGER,

"LOCATION_ADDR" VARCHAR(30),

NOT CLUSTER PRIMARY KEY("DEPT_ID")) STORAGE(ON "USERS", CLUSTERBTR) ;

5.数据库中的EMPLOYEES表用于存放所有员工的信息,DEPARTMENTS表用于存放所有的部门信息,EMPLOYEES表的主键,DEPTNO为DEPARTMENTS表的主键,EMPLOYEES表的COMM默认值为0,两个表均存储在USERS表空间上,两天的结构如下:(12分)

行号 NAME TYPE NULLABLE

1 EMPNO DEC(4) N

2 ENAME VARCHAR(10) Y

3 JOB VARCHAR(9) Y

4 MGR DEC(4) Y

5 SAL DEC(7,2) N

6 COMM DEC(7,2) Y

7 DEPTNO DEC(2) N

DEPARTMENTS表结构

行号 NAME TYPE NULLABLE

1 DEPTNO DEC(2) N

2 DNAME VARCHAR(14) N

3 LOC VARCHAR(13) Y

6.企业在重新部署数据库前把历史的员工信息和部门信息导入到/opt/script1.sql,需要管理把这些信息加载到现有的数据库中(8分)

7.为了保证数据库的安全性,企业需求管理员做好充分的备份工作。(9分)

a)要求每次备份的文件统一存放/backup中。

b)对当前数据库第一次完整的备份。保证数据能还原到失败前任意一个时刻。

8.创建一个视图V_SAL存放部门的工资总和小于9000的部门信息。(3分)

9.执行/opt/oper.sh启动数据库 (8分)

10.对用户TEST逻辑导出,备份文件放在/BACKUP中,备份文件命名为"db_test.dmp" ,日志文件命名为"db_test.log"

(5分)

11.新建HR用户,密码Dameng123,将TEST用户下的数据库对象导入到HR用户中,生成日志在/BACKUP中,导入日志文件命令为"imp_hr.log".(7分)

12.将重做日志文件/SJ/data/PROD/PROD03.log迁移至/SJ/data/PROD目录下。

13.安装配置系统调用的ODBC驱动(安装包在/OPT下)(5分)

(1)数据库安装目录:在/dm8目录下(1)

(2)以dmdba用户身份进行安装,dmdba用户密码设置为Dameng123

2.创建数据库实例

(1)实例的数据文件存放目录:在/dm8/data/目录下(1分)

(2)数据库名设置为DAMENG,实例名设置为DMSERVER,端口设置为5238 (6分)

(3)数据库管理员密码设置为Dameng123(1)分

(4)创建3个日志文件,每个日志文件大小为128M(2分)

(5)实例的簇大小为16页,页大小为16K(2分)

3.数据库配置

(1) 设置达梦数据库的数据缓冲区大小为500M

(2) 设置数据库兼容为ORACLE模式

(3) 创建表空间TEST;

a)表空间数据文件存储在/dm/data

b)表空间包含两个数据文件,分别为TEST01.dbf和TEST02.dbf

c)每个数据文件初始大小为128M,打开文件的自动扩展功能,每次扩展2M,每个数据文件最大10G

4.用户和角色管理

(1) 创建角色ROLEDM,角色ROLEDM具有创建表,创建视图,创建索引的权限

(2) 为数据库创建用户DMTEST,密码为Dameng123,默认表空间为TEST

(3) 将角色ROLEDM授予给DMTEST用户

5.表管理

在DMTEST用户下创建EMP表和DEPT表。EMP表用户存放所有员工的信息,DEPT用于存放所有部门的信息。两个表结构如下:

EMP表结构:

行号 NAME TYPES NULLABLE

1 EMP_ID INTEGER N

2 EMP_NAME VARCHAR(20) Y

3 EMAIL VARCHAR(50) Y

4 PHONE_NUM VARCHAR(20) Y

5 BIRTHDAY DATE Y

6 HIRE_DATE DATE Y

7 JOB_ID VARCHAR(10) Y

8 SALARY INTEGER Y

9 DEPT_ID INTEGER Y

DEPT表结构:

行号 NAME TYPES NULLABLE

1 DEPT_ID INTEGER N

2 DEPT_NAME VARCHAR(30) Y

3 LOCATION_ID INTEGER Y

4 LOCATION_ADDR VARCHAR(30) Y

其中

(1) EMP_ID为EMP的主键,DEPT_ID为DEPT表的主键,DEPT_ID为表的外键,参照列为DEPT表的DEPT_ID列。

(2) 为EMP表建立check约束,要求该约束设置后,EMP表中出生日期(BIRTHDAY)这一列的值早于"2003-01-01"。

6.数据导入

(1) 执行脚本存放在/opt/script1.sql,将数据导入到EMP表和DEPT表

7.数据库备份及作业管理

(1)开启数据库归档,归档文件存放至/dm8/arch目录,归档文件大为64M

(2) 对当前数据库做一次联机完全备份,备份名为"FULL_BAK",备份集文件存放在/dm8/backup/FULL_BAK目录中,备份

集文件存放在其他路径下

(3)对数据库进行整库逻辑导出,逻辑备份文件存放在/dm8/backup中,备份文件命名为"db_full.dmp",日志文件命名为"db_full.log"。逻辑备份存放在其他路径下。

(4)创建JOB1,每周日22:00对数据库做完全备份

(5)创建JOB2,每周一到周六22:00对数据库做增量备份

8.数据库日常管理

(1)将TEMP表空间大小调整为100M

(2)在DMTEST用户下创建视图VIEW_EMP,用于查询部门平均工资大于9000元的部门,视图显示信息为:部门编号,部门名称,部门平均工资

(3)为了提升查询效率,需要在列EMP.EMP_NAME添加索引IND_EMP_NAME

9数据库安装环境配置

(1)安装ODBC驱动,安装包在/opt下,将ODBC安装在/usr/local路径

(2)配置ODBC连接DM8数据库,连接名为dm8,ODBC模板配置文件在/opt路径

10.在CSDN,ITPUB及个人公众号等发布一篇关于达构数据库使用的博文链接给”达梦培训中心“ QQ号,根据博文质量判分,未提交者,该题不得分。

数据库软件安装

图形化使用方法如下:

第一步:查询端口号。使用root帐号登录考试机器,执行echo $DISPLAY

echo $DISPLAY

查询结查示例

第二步:root帐号执行命令xhost+

xhost+

access control disabled,clients can connect from any host

第三步:由root帐号切换为dmdba

su - dmdba

第四步:设置端口号为第一步查询出来的端口号,即可使用图形化界面

export DISPLAY=:2.0

(1)数据库安装目录:在/dm8目录下

(2)以dmdba用户身份进行安装,dmdba用户密码设置为Dameng123

2.创建数据库实例

(1)实例的数据文件存放目录:在/dm8/data目录下

(2)数据库名设置为DAMENG,实例名设置为DMSERVER,端口设置为5238

(3)数据库管理员密码设置为Dameng123

(4)创建3个日志文件,每个日志文件大小为128M

(5)实例的簇大小为16页,页大小为16k

3.数据库配置

(1)设置达梦数据库的数据缓冲区大小为500M

(2)设置数据库兼容为Oracle模式

(3)创建表空间TEST;

a)表空间数据文件存储在/dm8/data/

b)表空间包含两个数据文件,分别为TEST01.dbf和TEST02.dbf

c)每个数据文件初始大小为128M,打开文件的自动扩展功能,每次扩展2M,每个数据文件最大10G

4.用户和角色管理

(1)创建角色ROLEDM,角色ROLEDM具有创建表,创建视图、创建索引的权限

(2)为数据库创建用户DMTEST,密码为Dameng123,默认表空间为TEST

(3)将角色ROLEDM授予给DMTEST用户

5.表管理

在DMTEST用户下创建EMP表和DEPT表。EMP表用户存放所有员工的信息,DEPT用于存放所有部门的信息,两个表的结构如下:

EMP表结构

行号 NAME TYPE$ NULLABLE

1 EMP_ID INTEGER N

2 EMP_NAME VARCHAR(20) Y

3 EMAIL VARCHAR(50) Y

4 PHONE_NUM VARCHAR(20) Y

5 BIRTHDAY DATE Y

6 HIRE_DATE DATE Y

7 JOB_ID VARCHAR(10) Y

8 SALARY INTEGER Y

9 DEPT_ID INTEGER Y

DEPT表结构:

行号 NAME TYPES NULLABLE

1 DEPT_ID INTEGER N

2 DEPT_NAME VARCHAR(30) Y

3 LOCATION_ID INTEGER Y

4 LOCATION_ADDR VARCHAR(30) Y

其中

##########这部分可以不做###########################

# 调整内核参数

tee /etc/sysctl.d/dm.conf<<-"EOF"

fs.file-max = 6815744

fs.aio-max-nr = 1048576

# 控制共享内存页数,Linux页为4K,取值= (9/16物理内存大小)/4K

kernel.shmall = 2097152

#大于memory_target最大可设置成物理内存,这里是2G

kernel.shmmax = 2147483648

#最大共享内存段数量,通常不需要修改

kernel.shmmni = 4096

# 信号灯的相关配置,cat proc/sys/kernel/sem

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

vm.overcommit_memory = 1

# 关闭swap

vm.swappiness = 0

vm.dirty_background_ratio = 3

vm.dirty_ratio = 80

vm.dirty_expire_centisecs = 500

vm.dirty_writeback_centisecs = 100

EOF

sysctl -p

sysctl -p /etc/sysctl.conf

sysctl -q vm.swappiness

# 关闭swap

swapoff -a

sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

# 调整limits.conf

ulimit -n65536

tee /etc/security/limits.d/dmdba.conf <<-'EOF'

* soft nice 0

* hard nice 0

* soft as unlimited

* hard as unlimited

* soft fsize unlimited

* hard fsize unlimited

* soft nproc 65536

* hard nproc 65536

* soft nofile 65536

* hard nofile 65536

* soft core unlimited

* hard core unlimited

* soft data unlimited

* hard data unlimited

EOF

sysctl -p

tee /etc/profile.d/dm.sh<<-"EOF"

ulimit -SHn 65536

IP=$(hostname -I|awk '{ print $1}')

PS1="\[\e[1;32m\]\u\[\e[m\]\[\e[1;33m\]@$(hostname) $IP\[\e[m\]\[\e[1;35m\] \t \[\e[m\][pwd:\w]\\$ "

EOF

source /etc/profile

# 调整login

sed -i '/pam_limits.so/d' /etc/pam.d/login

tee >>/etc/pam.d/login<<-"EOF"

session required /lib64/security/pam_limits.so

session required pam_limits.so

EOF

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)

sudo setenforce 0

sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

##############以上部分可以不做#######################

# 1. 数据库安装

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

# 1)创建用户

groupadd dinstall

useradd -g dinstall dmdba

echo "Dameng123" |passwd --stdin dmdba

id dmdba

# 2)创建目录

mkdir /dm8

chown dmdba:dinstall /dm8 -R

cd /opt

mount dm8_20211111_x86_rh6_64_ent_8.1.2.18_pack16.iso /mnt

su - dmdba

cd /opt

# 3)安装软件

./DMInstall.bin -i

# 切到root执行

exit

/dm8/script/root/root_installer.sh

su - dmdba

# 修改环境变量

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin:/dm8/tool"

export DM_HOME="/dm8"

export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

source ~/.bash_profile

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

# 2. 建库

dminit PATH=/dm8/data DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5238 SYSDBA_PWD=Dameng123 LOG_PATH=/dm8/data/DAMENG/DMSERVER01.log LOG_PATH=/dm8/data/DAMENG/DMSERVER02.log LOG_PATH=/dm8/data/DAMENG/DMSERVER03.log LOG_SIZE=128 EXTENT_SIZE=16 PAGE_SIZE=16

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

# 3. 数据库配置

cd /dm8/data/DAMENG

vi dm.ini

# 1) 修改数据缓冲区

BUFFER = 500

SELECT T.NAME,T.FILE_VALUE FROM V$PARAMETER T WHERE T.NAME LIKE 'BUFFER';

ALTER SYSTEM SET 'BUFFER'= 500 SPFILE; --修改BUFFER值为1000。

# 2) 修改兼容性

COMPATIBLE_MODE = 2

select name, type, value, sys_value, file_value, description

from v$parameter where name like '%COMPA%MODE%';

firewall-cmd --add-port=5236/tcp --permanent --zone=public

firewall-cmd --reload

firewall-cmd --list-ports

DM 数据库启动顺序:读取配置参数文件 dm.ini,找到控制文件 dm.ctl,启动后台进程和线

程,启动数据库实例,启动到 mount 状态,根据控制文件中的数据文件路径和练级日志文件

路径,找到并打开数据文件和联机日志,启动到 OPEN 状态。

Oracle 启动顺序:nomount->mount->open

Shutdown:关闭状态

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

此时数据库不能对外正常提供服务。

Open:打开状态,此时数据库提供正常的服务。可以读写数据文件。正常访问表,读取数据。

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

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

但 MOUNT 和 SUSPEND 之间不能相互转换。

SQL 分类

DML(Data Mannipulation Language)数据操纵语言:

查询、操纵数据表资料行,包含 SELECT、INSERT、UPDATE、DELETE,MERGE。

默认情况下,DML 不自动提交,需要手工提交(commit)和回滚(rollback);对数据的操作

会产生 REDO 和 UNDO;

alter system set 'COMPATIBLE_MODE'=2 spfile;

# 注册服务,启动数据库

exit

sh dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/data/DAMENG/dm.ini

su - dmdba

DmServiceDMSERVER start

# 3) 创建表空间TEST

disql SYSDBA/Dameng123:5238

create tablespace TEST datafile '/dm8/data/TEST01.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240,'/dm8/data/TEST02.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;

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

# 4. 用户和角色管理

create role ROLEDM;

GRANT CREATE TABLE,CREATE VIEW,CREATE INDEX TO roledm;

create user DMTEST IDENTIFIED BY "Dameng123" default tablespace TEST;

grant ROLEDM to DMTEST;

# 检查权限

select * from dba_role_privs t where t.GRANTEE= 'DMTEST';

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

# 5. 表管理

CREATE TABLE "DMTEST"."DEPT"

(

"DEPT_ID" INTEGER NOT NULL,

"DEPT_NAME" VARCHAR(30),

"LOCATION_ID" INTEGER,

"LOCATION_ADDR" VARCHAR(30),

NOT CLUSTER PRIMARY KEY("DEPT_ID")) STORAGE(ON "TEST", CLUSTERBTR) ;

CREATE TABLE "DMTEST"."EMP"

(

"EMP_ID" INTEGER NOT NULL,

"EMP_NAME" VARCHAR(20),

"EMAIL" VARCHAR(50),

"PHONE_NUM" VARCHAR(20),

"BIRTHDAY" DATE,

"HIRE_DATE" DATE,

"JOB_ID" VARCHAR(10),

"SALARY" INTEGER,

"DEPT_ID" INTEGER,

FOREIGN KEY("DEPT_ID") REFERENCES "DMTEST"."DEPT"("DEPT_ID"),

NOT CLUSTER PRIMARY KEY("EMP_ID"),

CHECK(birthday < to_date('2003-01-01', 'yyyy-mm-dd'))) STORAGE(ON "TEST", CLUSTERBTR) ;

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

# 6. 数据导入

start /opt/script1.sql

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

# 7. 备份和作业管理

# 1) 开归档

alter database mount;

alter database add archivelog 'dest=/dm8/arch,type=local,file_size=64';

alter database archivelog;

alter database open;

# 2)联机完全备份

SQL下执行

backup database to FULL_BAK backupset '/dm8/backup/FULL_BAK';

select arch_mode from v$database;

# 3)逻辑备份

./dexp SYSDBA/Dameng123:5238 FILE=/dm8/backup/db_full.dmp LOG=/dm8/backup/db_full.log full=y

# 4)job 自己用考试机上的manager做一遍,这个跟考试系统上有一点不一样

call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,'full_bak1');

call SP_JOB_CONFIG_START('JOB1');

call SP_ALTER_JOB_STEP('JOB1', '全备', 6, '00000000/dm8/backup', 0, 0, 0, 0, NULL, 0);

call SP_JOB_CONFIG_COMMIT('JOB1');

# 5) 增备

call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'每周一到周六22:00对数据库做增量备份');

call SP_JOB_CONFIG_START('JOB2');

call SP_ADD_JOB_STEP('JOB2', 'inc_bak', 6, '10000000/dm8/backup|/dm8/backup', 0, 0, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB2', 'inc_bak_schedule', 1, 2, 1, 126, 0, '22:00:00', NULL, '2022-06-08 18:35:26', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB2');

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

# 8. 数据库日常管理

# 1) 扩展表空间

alter tablespace temp resize datafile '/SJ/data/PROD/TEMP.DBF' to 1000;

# 2)视图

create view dmtest.view_emp as select d.dept_id as 部门编号,d.dept_name as 部门名称, avg(e.salary) as 平均工资 from dmtest.emp e,dmtest.dept d where e.dept_id=d.dept_id group by d.dept_name,d.dept_id having avg(e.salary)>9000 ;

# 3)添加索引

create index dmtest.IND_EMP_NAME on dmtest.emp(emp_name);

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

# 9. ODBC 安装软件/usr/local下

tar xvf unixODBC-2.3.2.tar.gz

cd unixODBC-2.3.2

./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes

make && make install

odbcinst -j

cat >/usr/local/etc/odbc.ini <<-EOF

[dm8]

Driver=DM8 ODBC DRIVER

DESCRIPTION=DM8 ODBC DRIVER

SERVER=localhost:5238

UID=sysdba

PWD=Dameng123

EOF

cat >/usr/local/etc/odbcinst.ini <<-EOF

[DM8 ODBC DRIVER]

Driver=/dm8/bin/libdodbc.so

UsageCount=1

EOF

su - dmdba

isql dm8 -v

select * from dba_users;

、sys -----达梦数据库内置管理用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图sys。

2、Sysdba -----数据库管理员用户

3、Sysauditor ----审计用户

4、Syssso —安全用户

5、Sysdbo ----数据操作员

#############################################################################

达梦redo日志管理

select * from v$rlogfile;

select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

#增加redo日志大小

alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 150;

#############################################################################

https://wenku.baidu.com/view/a01d0e966adc5022aaea998fcc22bcd127ff425f.html

create tablespace china datafile '/SJ/data/china01.DBF' SIZE 128 AUTOEXTEND ON NEXT 2 MAXSIZE 10240;

alter TABLESPACE china add DATAFILE 'china01.DBF' size 128 AUTOEXTEND on NEXT 2 MAXSIZE 20480;

alter tablespace china offline;

alter TABLESPACE china RENAME DATAFILE 'china01.DBF' TO '/SJ/china01.DBF';

select * from v$rlogfile;

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

修改联机日志文件大小

alter database RESIZE LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO 500;

alter DATABASE ADD LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' SIZE 500;

alter tablespace china online;

alter tablespace jacky RENAME TO dmtbs;

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

alter database mount;

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER01.log' TO '/SJ/redo/DM01.log';

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER02.log' TO '/SJ/redo/DM02.log';

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER03.log' TO '/SJ/redo/DM03.log';

alter database RENAME LOGFILE '/dm8/data/DAMENG/DMSERVER04.log' TO '/SJ/redo/DM04.log';

alter database open;

开启归档的方法:

查看归档配置:

select arch_mode from v$database;

select * from v$dm_arch_ini;

归档开启:

alter database mount;

alter database ARCHIVELOG;

alter database ADD ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,

space_limit=10240';

alter database open;

SQL 关闭归档

SQL> alter database mount;

SQL> alter database noarchivelog;

SQL> alter database delete archivelog 'type=local,dest=/dm8/arch';

SQL> alter database open;

SQL> select arch_mode from v$database;

DM 支持手工切换归档;

alter SYSTEM ARCHIVE LOG CURRENT;

alter SYSTEM SWITCH LOGFILE;

alter DATABASE ARCHIVELOG CURRENT;

归档文件的删除:

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

PWD_POLICY 是隐含参数,PWD_POLICY,只能通过函数或 SQL 语句修改。

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

create user hr IDENTIFIED by dameng123;

修改系统口令策略:

alter SYSTEM set 'PWD_POLICY' = 15 BOTH;

用户锁定和解锁:

alter user hr ACCOUNT LOCK;

alter user hr ACCOUNT UNLOCK;

alter user hr DEFAULT TABLESPACE TEST;

用户资源限制

用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):

alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;

grant RESOURCE to HR;

权限的回收:

SQL> revoke select on dmhr.employee from hrtest;

SQL> revoke create table from hrtest;

SQL> grant select (employee_id, employee_name) on dmhr.employee to hrtest;

select * from dba_sys_privs t where t.GRANTEE= 'HR';

select * from dba_role_privs t where t.GRANTEE= 'HR';

select * from dba_tab_privs t where t.GRANTEE= 'HR';

create schema hrtest01 AUTHORIZATION HR;

select sys_context('USERENV','CURRENT_SCHEMA');

select sys_context('USERENV','CURRENT_USER'); 或 select user;

backup database '/SJ/data/PROD/dm.ini' to FULLBAK01 backupset '/backup/bak';

restore database '/SJ/data/PROD/dm.ini' from backupset '/SJ/data/PROD/bak/DB_PROD_FULL_20220731_122440_470479';

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

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

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

按用户导出:

dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=HRTEST.dmp

log=HRTEST.log owner=HRTEST

按模式导出:

dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=DMHR.dmp

log=DMHR.log schemas=DMHR

按表导出:

dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=EMPLOYEE.dmp

log=EMPLOYEE.log tables=DMHR.EMPLOYEE

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

dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=DMHR.dmp

log=impDMHR.log REMAP_SCHEMA=DMHR:DMTEST

dimp userid=sysdba/SYSDBA:5238 directory=/dm8/backup/dexp

file=t_dept.dmp log=t_dept.log tables=SYSDBA.t_dept remap_schema=SYSDBA:DMHR

dimp V8

./configure

注:configure 时可以使用--prefix 参数指定安装路径,不指定使用默认安装路径/usr/local

make

make install

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

cd /usr/local/etc/

drwxr-xr-x 2 root root 6 12 月 22 16:56 ODBCDataSources

-rw-r--r-- 1 root root 0 12 月 22 16:56 odbc.ini

-rw-r--r-- 1 root root 0 12 月 22 16:56 odbcinst.ini

vi odbcinst.ini

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

Driver = /dm8/bin/libdodbc.so

vi odbc.ini

[DM8]

Description = DM ODBC DSN

Driver = DM8 ODBC DRIVER

SERVER = localhost

UID = SYSDBA

PWD = Dameng123

TCP_PORT = 5236

select * from dmhr.employee;

explain select * from dmhr.employee t where T.EMPLOYEE_NAME = '马学铭';

create index ix_emp01_employeename ON dmhr.employee(EMPLOYEE_NAME);

create table dmhr.t_emp like DMHR.EMPLOYEE;

create index ix_emp_employeename ON dmhr.t_emp(employee_name);

dbms_stats.gather_table_stats('dmhr','t_emp');

dbms_stats.table_stats_show('dmhr','t_emp');

dbms_stats.index_stats_show('dmhr','ix_emp01_employeename');

alter index dmhr.ix_emp_employeename MONITORING USAGE; --开启索引监控

alter index dmhr.ix_emp_employeename NOMONITORING USAGE; --关闭索引监控

select * from v$object_usage; --查看索引的监控信息

SQL> alter index dmhr.ix_emp_employeename MONITORING USAGE;--开启索引监控

操作已执行

已用时间: 1.482(毫秒). 执行号:51914.

SQL> alter index dmhr.ix_emp_employeename NOMONITORING USAGE;--关闭索引监控

操作已执行

已用时间: 7.694(毫秒). 执行号:51915.

SQL> select * from v$object_usage;--查看索引的监控信息

行号 INDEX_NAME SCH_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING

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

1 ix_emp_employeename DMHR t_EMP NO NO 2022-07-31 22:08:42 2022-07-31 22:09:50

已用时间: 2.081(毫秒). 执行号:51916.

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

alter index dmhr.ix_emp_employeename rebuild ONLINE;

索引的数据字典:

select * from dba_indexes t where t.OWNER ='XXX';

select * from dba_ind_columns t where t.index_OWNER ='XXX';

删除索引:

drop index dmhr.ix_emp_employeename;

create view dmhr.v_emp

as

select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.EMAIL, a.PHONE_NUM

from dmhr.employee a

where a.DEPARTMENT_ID = 1001;

SQL> select * from dmhr.v_emp;

行号 EMPLOYEE_ID EMPLOYEE_NAME EMAIL PHONE_NUM

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

1 10001 龚顺超 gongshunchao@dameng.com 18812370452

2 10100 陈伟婷 chenweiting@dameng.com 13612350355

3 10101 何杭菊 hehangju@dameng.com 18412363124

4 10102 欧锋利 oufengli@dameng.com 15712377535

5 10103 薛辉明 xuehuiming@dameng.com 18412349538

已用时间: 3.291(毫秒). 执行号:51924.

\\

创建复杂视图:

create or REPLACE view dmhr.v_emp_salary

as

select a.DEPARTMENT_ID, sum(A.SALARY) SUM_SALARY

from dmhr.employee a

group by a.DEPARTMENT_ID

having sum(A.SALARY) > 100000;

SQL> select * from dmhr.v_emp_salary;

行号 DEPARTMENT_ID SUM_SALARY

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

1 103 129443

2 105 194399

3 301 112344

4 303 497685

5 304 103007

6 305 220802

7 306 188212

8 404 142321

9 701 134447

10 703 2425858

11 704 323230

行号 DEPARTMENT_ID SUM_SALARY

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

12 705 564024

13 706 463811

14 905 128917

15 1004 101528

16 1005 135444

17 1104 110625

18 1105 142443

18 rows got

create or REPLACE view v_empnum

as select t.DEPARTMENT_ID, count(*) empnum

from t_emp01 t

group by t.DEPARTMENT_ID

having count(*) > 25;

--排行榜视图:

create view dmhr.v_salarytop as

select emp.employee_name,

dept.department_name,

emp.salary,

91 / 117

rank() over(order by salary desc) rank,

dense_rank() over(order by salary desc) dense_rank,

row_number() over(order by salary desc) rownumber

from dmhr.employee emp, dmhr.department dept

where emp.department_id = dept.department_id(+);

系统中所有对象的信息

SELECT * FROM SYSOBJECTS;

系统中所有索引定义信息

SELECT * FROM SYSINDEXES;

系统中所有列定义的信息

SELECT * FROM SYSCOLUMNS;

动态性能视图是从内存中或控制文件中读取的数据

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;

查询事务等待:

select * from sys."v$trxwait";

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

select a.sess_id, a.sql_text, a.state, b.* from v$sessions a, v$trxwait b

where a.trx_id = b.id;\

\\\

insert into dmhr.t_dept select * from dmhr.department;

select arch_mode from v$database;

alter database mount;

alter database ARCHIVELOG;

alter database ADD ARCHIVELOG 'type=local, dest=/oaarch, file_size=64,space_limit=0';

alter database open;

checkpoint(100);

create table dmhr.t_dept as select * from dmhr.department;

backup database '/SJ/data/OA/dm.ini' to FULLBAK01 backupset '/backup/oa/';

SF_BAKSET_BACKUP_DIR_ADD('DISK','/backup/oa/');

表空间备份与恢复

全库备份

SQL>backup tablespace DMHR full to DMTBSFULLBAK01 backupset '/backup/oa/dmtbsfullbak01';

还原表空间

restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';

恢复表空间到最新

recover database '/SJ/data/OA/dm.ini' tablespace DMHR;

全库备份

SQL>backup tablespace DMHR full to DMTBSFULLBAK01 backupset '/backup/oa/dmtbsfullbak01';

还原表空间

RMAN> restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';

restore database '/SJ/data/OA/dm.ini' tablespace DMHR from backupset '/backup/oa';

Database mode = 0, oguid = 0

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

begin redo pwr log collect, last ckpt lsn: 38480 ...

redo pwr log collect finished

EP[0]'s cur_lsn[38480], file_lsn[38480]

restore successfully.

time used: 00:00:02.388

恢复表空间到最新

RMAN> recover database '/SJ/data/OA/dm.ini' tablespace DMHR;

recover database '/SJ/data/OA/dm.ini' tablespace DMHR;

Database mode = 0, oguid = 0

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

begin redo pwr log collect, last ckpt lsn: 38480 ...

redo pwr log collect finished

EP[0]'s cur_lsn[38480], file_lsn[38480]

EP:0 total 2 pkgs applied, percent: 16%

EP:0 total 4 pkgs applied, percent: 33%

EP:0 total 6 pkgs applied, percent: 50%

EP:0 total 8 pkgs applied, percent: 66%

EP:0 total 10 pkgs applied, percent: 83%

EP:0 total 12 pkgs applied, percent: 100%

recover successfully.

time used: 544.255(ms)


社区地址:https://eco.dameng.com

最后修改时间:2022-08-09 06:22:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论