注册
关于达梦数据库培训学习内容整理
培训园地/ 文章详情 /

关于达梦数据库培训学习内容整理

心有白驹 2022/11/17 2077 0 0

一、安装数据库

  1. 查cpu:
    lscpu
    “架构”要和数据库版本号一样

  2. 解压zip,拿到iso

  3. 创建数据库目录

# mkdir /dm8
  1. 创建挂载iso文件目录
# mkdir /mnt/dm
  1. 创建安装临时目录
# mkdir -p /mount_point/dir_name
  1. 创建达梦用户组 和 用户
# groupadd dinstall
# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
# passwd dmdba
  1. 将数据库安装目录权限赋给dmdba
# chown -R dmdba:dinstall /dm8
  1. 将安装临时目录权限赋给dmdba
# chmod 777 /mount_point/dir_name

将iso挂载到 /mnt/dm

# mount /usr/dmtmp/dm8_20221026_x86_kylin10_64_ent/dm8_20221026_x86_kylin10_64.iso /mnt/dm
  1. 图形化安装配置
# xhost +
# echo $DISPLAY
# export DISPLAY=:0.0
  1. 切换到dmdba
# su - dmdba
  1. 检查DISPLAY参数
$ echo $DISPLAY
$ export DISPLAY=:0.0
  1. 配置安装临时目录
$ export DM_INSTALL_TMPDIR=/mount_point/dir_name

[安装时报错:Server VM warning: Insufficient space for shared memory file: 86016
是因为tmp目录空间不足,修改tmp挂载,或者按此方式配置]

[修改tmp空间可以用这个命令:mount -t tmpfs -o size 2048M tmpfs /tmp ]

  1. 配置可打开文件数量
$ ulimit -n 102400
  1. 图形化安装:
$ ./DMInstall.bin

或命令行安装:

$ ./DMInstall.bin -i

[注意:若出现“… xxx/DMInstall/source/jdk/bin/java:无法执行二进制文件…”的报错,可能是系统CPU和dm数据库版本不一样,判断是否同是32为或64位的,可去麒麟官网下载服务器版本ISO,到达梦官网下载对应麒麟的数据库安装包(注意飞腾和XX是需要完全对应的CPU版本)]

  1. 使用root执行命令(完成即可启动数据库服务):
$ su
# /dm8/script/root/root_installer.sh

二、创建数据库实例

1.【图形化安装】

  1. 使用 dmdba 创建数据库实例:
$ ./dm8/tool/dbca.sh

[注意:簇大小、页大小、字符集、大小写敏感、VARCHAR 类型以字符为单位等一旦指定,创建完成数据库后将无法更改]

[注意2: varchar 类型 字节 长度默认不能 大于 页大小的一半]

  1. 使用 root 用户执行以下命令:
# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
# systemctl enable DmServiceDMSERVER.service
# systemctl start DmServiceDMSERVER.service
  1. 检查DM实例服务是否启动:
# systemctl status DmServiceDMSERVER.service

或使用达梦图形化工具

# cd /dm8/tool
# ./dmservice.sh
  1. 配置环境变量 + 配置图形化参数配置(每次切换 dmdba 都需要配置DISPLAY参数)
# vim ~/.bash_profile

添加以下内容:

export PATH="$PATH:$DM_HOME/bin:$DM_HOME/tool"
export DISPLAY=:0.0

生效配置:

# source ~/.bash_profile
  1. 使用 dmdba 登录数据库测试:
$ disql

用户名/密码 SYSDBA/SYSDBA

SQL> select 'hello world' from dual;

[注意必须添加分号,不然不执行]

三、删除数据库

  1. 停止数据库服务(用root)
$ su
# cd /dm8/tool
# ./dmservice.sh 

选择数据库服务DmServiceDMSERVER,停止服务

  1. 删除数据库(用dmdba)
# su - dmdba 
$ cd /dm8/tool
$ ./dbca.sh 
  1. 使用root执行脚本
$ su
# systemctl disable DmServiceDMSERVER.service
# rm -f /usr/lib/systemd/system/DmServiceDMSERVER.service

四、连接数据库

1. DM管理工具(图形化)

[注意:只要用一次root用户打开图形化界面以后,就无法使用dmdba打开界面了。需要返回root用户,重新执行一次 xhost + 命令,打开图形化界面权限。]

[注意:当使用root用户创建完数据库实例后,数据库权限是不属于 dmdba 的,查看$DM_HOME/data/数据库 目录的权限是否已经被改为属于root用户,如是,则改成 dmdba]

# cd /dm8/data
# ll

若属于root,则把权限改为 dmdba 用户即可解决问题

# chown -R dmdba:dinstall /dm8/data/DAMENG
  1. 打开图形化管理工具(dmdba)
$ cd /dm8/tool
$ ./manager
  1. 打开另一个命令行终端,查询本机ip
$ ifconfig

查看自己网卡对应的ipv4地址
3. (如果是本地运行manager的话,可以先不执行试一下)设置 DISPLAY 信息,注意是 IP 地址 加 :0.0

$ export DISPLAY=自己的IP:0.0

2. disql(命令行)

  1. 用 dmdba 到命令行里,进入bin目录(要是配置了环境变量就不用进)
$ cd /dm8/bin
  1. 执行命令连接(这种方式和直接 disql 的方式比,不用输密码)
$  ./disql sysdba/Dameng:5236
### 上面的命令不好使,用下面这个
$ disql

[注意:当报错以下内容时:]

disql: error while loading shared libraries: libdisql_dll.so: cannot open shared object file: No such file or directory

是因为当前用户的 .bash_profile 中缺少环境变量配置(换乘dmdba用户即可)
在 .bash_profile 添加以下内容即可:
LD_LIBRARY_PATH 部分

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

export PATH="$PATH:$DM_HOME/bin:$DM_HOME/tool"
export DISPLAY=:0.0
  1. 测试命令(注意一定带分号)
## 查看数据库名
SQL> select name from V$database;

## 查看实例名
SQL> select instance_name from v$instance;

3. 配置网络——网络配置助手配置连接串

a. 图形化

$ ./nca.sh

b. 配置文件

$ vim /etc/dm_svc.conf

添加如下配置内容并保存:

TIME_ZONE=(480)
LANGUAGE=(cn)
DM=(127.0.0.1:5236)
DMTEST=(127.0.0.1:5238)
#备注:DM和DMTEST是两个服务名,上面是两个服务的配置

4. 启动和关闭

4.1 配置状态

  1. 检查数据库当前状态
SQL> select status$ from v$instance;
  1. 从OPEN状态修改成MOUNT
SQL> alter database mount;

[注意:MOUNT状态不能提供读写服务,但可以读动态性能视图中的数据,因为动态视图数据来源于控制文件或内存中的,比如 v$datafile、v$database 等]

测试:

-- 以下命令执行将报错
SQL> select * from dual;

-- 以下命令可以正常执行
SQL> select path from v$datafile;
  1. 从MOUNT状态修改成OPEN
SQL> alter database open;
  1. 从OPEN状态修改成SUSPEND
SQL> alter database suspend;

4.2 启动与关闭的管理

a. root启动与关闭

【方法1】

# systemctl start|status|stop|enable|disable DmServiceDMSERVER

【方法2】

# ./dmservice.sh
## 图形化界面启动/关闭
b. dmdba启动与关闭

【方法1】前台启动方式(./dmserver)

如果没有注册数据库服务,只能使用此方式启动。其他的启动方式都需要注册数据库服务。

$ cd /dm8/bin
$ ./dmserver /dm8/data/数据库名/dm.ini

启动以后只能开着窗口才能运行,想退出按 ctrl+C 或输入 exit

【方法2】后台启动与关闭方式(DmServiceDMSERVER)

$ cd /dm8/bin
## 查看哪个是达梦数据库服务的文件
$ ll Dm*
## 运行文件
$ ./DmServiceDMSERVER start

停止

$ ./DmServiceDMSERVER stop

以mount状态启动

$ ./DmServiceDMSERVER start mount

查看数据库状态

$ ./DmServiceDMSERVER status

5. 注意

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

【数据库状态说明】:
Mount:配置状态,此时可以修改数据库归档配置、主备等模式,不能进行数据文件的读写。此时数据库不能对外正常提供服务。
Open:打开状态,此时数据库提供正常的服务。可以读写数据文件。正常访问表,读取数据。
Suspend:只读状态,只能读,不能写(DML 操作一旦 commit,数据库即会被挂起)。

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

6. DMSQL

  1. distinct

DM中union和distinct只去重,不排序。
Oracle中union和distinct去重且排序。

  1. order by
    DM 中空值排序,默认排在最前面。可以指定排在最后面。
order by 字段 desc NULLS LAST
  1. group by 的 CUBE 与 ROLLUP

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
CUBE(A, B, C):首先会对(A、B、C)进行 GROUP BY,然后依次是(A、B),(A、C),(A),
(B、C),(B),©,最后对全表进行 GROUP BY 操作。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合
ROLLUP(A, B, C): 首先会对(A、B、C)进行 GROUP BY,然后对(A、B)进行 GROUP BY,
然后是(A)进行 GROUP BY,最后对全表进行 GROUP BY 操作。

[注意:如果使用客户端工具连接远端数据库服务器,需要开放数据库服务器防火墙对应端口(开放端口后需 reload):]

# firewall-cmd --add-port=5236/tcp --permanent --zone=public
# firewall-cmd --reload
# firewall-cmd --list-ports

也可以关闭数据库服务器的防火墙

# systemctl status firewalld
# systemctl stop firewalld

五、修改数据库参数

1. 数据缓冲区(BUFFER)

-- 查询
SQL> select * from v$bufferpool;
-- 修改(单位 M)
SQL> alter system set 'BUFFER'= 500 spfile;

2. 密码策略(系统口令策略 PWD_POLICY)

PWD_POLICY(隐含参数,不在 dm.ini 中,只能通过函数或 SQL 语句修改)参数指定系统的口令策略,默认为 2;

0 无策略
1 禁止与用户名相同
2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值
4 至少包含一个大写字母(A-Z)
8 至少包含一个数字(0-9)
16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

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

-- 查
SQL> select * from v$parameter t where t.name = 'PWD_POLICY';
-- 改
SQL> alter SYSTEM set 'PWD_POLICY' = 15 BOTH;

3. 数据兼容性参数(COMPATIBLE_MODE)

是否兼容其他数据库模式:
0:不兼容,
1:兼容 SQL92 标准,
2:部分兼容 ORACLE,
3:部分兼容 MS SQL SERVER,
4:部分兼容 MYSQL,
5:兼容 DM6,
6:部分兼容 TERADATA

SQL> alter system set 'COMPATIBLE_MODE' =2 spfile;

4. 回滚段的保留时长(ROLL表空间参数)

SQL> alter system set 'UNDO_RETENTION'= 300 both;

5. 临时表空间参数

TEMP_SIZE:临时表空间初始大小

SQL> alter system set 'TEMP_SIZE'=100 spfile;

TEMP_PATH: 临时表空间路径

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

6. 可读多页参数(MULTI_PAGE_GET_NUM)

## 通过 console 工具修改

* 说明

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

7. 能否授予用户在其他模式下数据定义(DDL)权限(ENABLE_DDL_ANY_PRIV)

SQL> alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both;

8. CTAS方式创建表是否复制表的约束信息(CTAB_SEL_WITH_CONS)

* 修改方式

a.数据库工具

DM 控制台工具(console)

DM 控制台工具是一个脱机工具,提供脱机备份还原、修改数据库参数(修改后重启数据库才能生效)等功能

$ cd /dm8/tool
$ ./console

服务器配置 -> 实例配置 -> 实例名 -> 查找或直接选择参数 -> 修改

b.配置文件

改 dm.ini 配置文件

修改什么类型参数都需要重启数据库才能生效

c.系统函数

命令修改系统函数

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

d.alter system set

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

SQL> alter system set 'TEMP_SIZE'=100 both | spfile | ;

【注意!】
both:表示对内存中和参数文件都修改;
memory:修改内存中的值;
spfile:修改参数文件中的值。

六、创建表空间

DM默认预定义SYSTEM、ROLL、MAIN、TEMP、HMAIN五个表空间
SYSTEM:系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、用户角色权限信息等,部分隐含参数写入SYSTEM表空间),SYSTEM表空间自动扩展不允许关闭。
ROLL:回滚表空间,存放回滚页,数据库中的DML操作对应都会生成redo和undo,undo信息放入ROLL表空间对应的数据文件中,redo信息写入联机日志文件,用于保证数据的一致性。 ROLL 回滚段数据包含Active、unexpired、expired三种状态。
MAIN:用户默认表空间,当创建用户时,如果为指定用户的默认表空间,则MAIN为用户的默认表空间。相当于Oracle的USERS表空间。
TEMP:临时表空间,存放临时表数据、临时结果集等,当大量的数据排序或创建索引等占用临时表空间。DM中临时表空间由参数TEMP_SIZE指定。
HMAIN:HUGE表的默认表空间(HTS表空间)。

1. 创建表空间

-- size单位:M;最小:32
SQL> create tablespace 表空间名称 DATAFILE '表空间数据文件名.DBF' size 32;

表空间可以对应多个数据文件:

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

2. 修改表空间数据文件位置(迁移)

-- 1 要求dmdba对该文件以及新路径有权限;
-- 2 新路径父级目录必须存在;
-- 3 要求表空间处于脱机状态(在manager中选择脱机)

-- 先脱机
SQL> alter tablespace tbs offline;
-- 再迁移
SQL> alter TABLESPACE 表空间名 RENAME DATAFILE 'TBS01.DBF' TO '/dm8/data/DAMENG/TBS/TBS01.DBF';
-- 再联机
SQL> alter tablespace tbs online;

3. 表空间脱机

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

如果表空间上有事务未提交,则表空间不能脱机(报错:-6407: 锁超时)。

SQL> alter tablespace 表空间名称 offline;

4. 表空间重命名

DM预定义表空间不支持重命名,自定义表空间支持重命名。

SQL> alter tablespace 表空间名称 RENAME TO 新表空间名称;

5. 删除表空间

系统预定义的表空间不能删除;DM只能删除空的表空间:

SQL> drop tablespace 表空间名称;

6. 修改表空间

  1. 修改表空间添加数据文件:
SQL> alter TABLESPACE 表空间名称 add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2 MAXSIZE 20480;
  1. 修改表空间数据文件的扩展属性(SYSTEM、TEMP表空间不允许关闭自动扩展,且不允许限制空间大小):
SQL> alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND on NEXT 2 MAXSIZE 20480;
  1. 修改表空间数据文件的大小:
SQL> alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128;

7. 管理重做日志文件

重做日志包含联机日志和归档日志(数据库在归档模式下才会产生归档日志文件)。

7.1 联机日志

7.1.1 数据字典
SQL> select * from v$rlogfile;
SQL> select * from v$rlog; --cur_file表示正在使用的联机日志
7.1.2 修改联机日志文件大小
SQL> salter database RESIZE LOGFILE '/dm8/data/DM/DM01.log' TO 300;
SQL> salter database RESIZE LOGFILE '/dm8/data/DM/DM02.log' TO 300;
7.1.3 添加联机日志文件
SQL> alter DATABASE ADD LOGFILE '/dm8/data/DM/DM03.log' SIZE 300;
7.1.4 修改联机日志文件路径(迁移联机日志文件)
SQL> alter database mount;
SQL> alter database RENAME LOGFILE 'DM01.log' TO '/dm8/data/DM/REDO/DM01.log';
SQL> alter database RENAME LOGFILE 'DM02.log' TO '/dm8/data/DM/REDO/DM02.log';
SQL> alter database RENAME LOGFILE 'DM03.log' TO '/dm8/data/DM/REDO/DM03.log';
SQL> alter database open;

7.2 归档管理

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

7.2.1 开启归档
  1. 归档开启:
-- 切换为 配置状态
SQL> alter database mount;
-- 开启归档
SQL> alter database ARCHIVELOG;
-- 添加归档日志
SQL> alter database ADD ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64, space_limit=10240';
-- 切换为 运行状态
SQL> alter database open;
-- 查询归档状态
SQL> select arch_mode from v$database;
-- 查询归档日志配置
SQL> select * from v$dm_arch_ini;
  1. 查看归档配置:
SQL> select arch_mode from v$database;
SQL> select * from v$dm_arch_ini;
  1. 修改归档的配置(修改归档空间上限):
SQL> alter database modify archivelog 'type=local, dest=/dm8/arch, SPACE_LIMIT=20480';
7.2.2 关闭归档
  • 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;
-- 查询归档日志配置
SQL> select * from v$dm_arch_ini;
7.2.3 归档日志文件的切换和删除
  1. 切换

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

-- 
SQL> alter SYSTEM ARCHIVE LOG CURRENT;
-- 
SQL> alter SYSTEM SWITCH LOGFILE;
-- 
SQL> alter DATABASE ARCHIVELOG CURRENT;
  1. 删除
-- 查询删除归档日志的规则函数
SQL> select * from v$ifun t where name like 'SF_ARCHIVELOG_%';
-- 查询结果:根据序号删除 参数序号之前的归档日志
SF_ARCHIVELOG_DELETE_BEFORE_LSN
-- 查询结果:根据日期删除 参数日期之前的归档日志
SF_ARCHIVELOG_DELETE_BEFORE_TIME
--删除10天前的归档日志。
SQL> select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-10); 

七、操作用户

1. 创建

创建用户的密码需要符合系统口令策略

SQL> create user 用户名 IDENTIFIED by 密码;

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

2. 用户锁定和解锁:

SQL> alter user 用户名 ACCOUNT UNLOCK;
SQL> alter user 用户名 ACCOUNT LOCK;

3. 修改用户的默认表空间:

SQL> alter user 用户名 DEFAULT TABLESPACE 表空间名;

4. 修改密码(达梦中密码带有特殊字符需要双引号括起来)

SQL> alter user 用户名 IDENTIFIED by "密码";

5. 删除用户

SQL> drop user if EXISTS 用户名;
SQL> drop user if EXISTS 用户名 CASCADE; --级联删除 生产环境慎用

八、创建角色

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

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

1. 查询角色

SQL> select * from dba_roles;

2. 创建角色

SQL> create role r1;

3. 给角色授权

SQL> grant create table to 角色名;
SQL> grant select on 模式名.表名 to 角色名;

4. 将角色赋给用户

SQL> grant 角色名 to 用户名;

5. 启用、禁用角色

-- 启用
SQL> sp_set_role('R1',1);

-- 禁用
SQL> sp_set_role('R1',0);

* DM 管理工具选择表,查看表信息报错(缺少 v$ciphers 视图的查询权限,可以使用 SYSDBA 给登录用户(如 dmtest)赋予 VTI 角色,或者单独给用户 v$ciphers 对象的查询权限):

九、权限管理

1. 赋予数据库权限(系统权限):

SQL> grant create table to 用户名;

SQL> grant create any table to 用户名;

SQL> grant create any index to 用户名;

2. 赋予对象权限

赋予表更新或删除权限,同时要赋予查询权限,否则报错

SQL> grant select on 模式名.表名 to 用户名;

SQL> grant update on 模式名.表名 to 用户名;

SQL> grant delete on 模式名.表名 to 用户名;

3. 赋予查询对象权限,精确到列

SQL> grant select (列名1, 列名2) on 表空间.表名 to 用户名;

4. 查看当前用户拥有的权限

SQL> select * from session_privs;

包含 CREATE SESSION、DBA、RESOURCE、PUBLIC、SYS_ADMIN、SOI、EXECUTE、DBMS_XMLGEN

5. 权限的回收

SQL> revoke select on 模式名.表名 from 用户名;

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

十、操作表

1. 切换模式

SQL> set SCHEMA 模式名;

2. 创建

  1. 普通创建
SQL> create table 模式名.表名(
pid int,
pname varchar(20),
sex bit,
logtime datetime
)
TABLESPACE 表空间名;
  1. CTAS方式创建表:
SQL> create table t_emp01 as select * from dmhr.employee;
SQL> create table t_emp02 like dmhr.employee;
SQL> create table t_emp03 as select * from dmhr.employee where 1=0;
--使用CREATE table as创建表时,默认不会复制表的约束信息,由参数 CTAB_SEL_WITH_CONS 指定:
SQL> select * from SYS."V$PARAMETER" t where t.name like 'CTAB_SEL_WITH_CONS%'

3. 修改表

  1. 添加字段:
SQL> alter table 模式名.表名 add column 字段名 varchar(20);
  1. 修改字段类型:
SQL> alter table 模式名.表名 modify 字段名 varchar(50);
  1. 删除字段:
SQL> alter table 模式名.表名 drop logtime;
  1. 对字段添加默认值(大表不建议添加字段时给默认值,耗时很长)
SQL> alter table 模式名.表名 add column 字段名 datetime default sysdate;
  1. 重命名表或字段:
SQL> alter table 表名 rename to 新表名;
SQL> alter table 表名 rename column 字段名 to 新字段名;
  1. 对表和字段添加注释:
SQL> comment on column 表名.字段名 is 'XXXXX';
SQL> comment on table 表名 is 'XXXXXXXXX';
-- 查询修改结果
SQL> select * from user_tab_comments;
  1. 修改表的表空间(DM 会自动重建该表上的索引)
SQL> alter table 模式名.表名 move tablespace 表空间名;
-- 查看表空间修改结果
SQL> select * from dba_tables t where t.TABLE_NAME like '表名%';

十一、导入脚本数据(数据迁移)

1. DM 数据迁移工具(dts)

DM 数据迁移工具支持其他数据库迁移到达梦,或者达梦迁移到文件等功能

$ cd /dm8/tool
$ ./dts
图形化界面 新建工程,新建迁移,文件迁移到达梦 - SQL==>DM

2. 命令行

-- 注意该语句不要加分号结尾
SQL> `/脚本绝对路径.sql
-- 在DM管理工具中执行时,只能使用`,且 `后面的文件路径不能有空格,导入后需要手工 commit;

十二、约束

约束类型:
NOT NULL:非空约束
UNIQUE:唯一约束
PRIMARY KEY:主键约束 (唯一约束+非空约束)
FOREIGN KEY:外键约束
CHECK:检验约束

DM管理工具——图形化界面中:模式-指定模式-表-指定表-约束 即可操作约束

  1. 约束的禁用和启用、删除
-- 禁用
SQL> alter table 模式名.表名 disable CONSTRAINT 约束名;
-- 启用
SQL> alter table 模式名.表名 enable CONSTRAINT 约束名;
-- 删除
SQL> alter table 模式名.表名 drop CONSTRAINT 约束名;
  1. 查看约束信息
SQL> select * from dba_constraints t where t.owner='用户名';
SQL> select * from DBA_CONS_COLUMNS t where t.owner='用户名';
  1. 批量禁用外键约束:
-- 禁用用户的约束
SQL> select 'alter table '||owner||'.'||table_name||' disable constraint '|| t.CONSTRAINT_NAME ||';'
from DBA_CONSTRAINTS t 
where t.OWNER ='用户名' and t.CONSTRAINT_TYPE = 'R';

十三、索引

索引类型包含:聚簇索引、二级索引、函数索引、位图索引(主要用于 OLAP 系统)、位图连接索引、全文索引、组合索引

DM管理工具——图形化界面中:模式-指定模式-表-指定表-索引 即可操作索引

  1. 索引的监控:
--开启索引监控
SQL> alter index 模式名.表名 MONITORING USAGE;

--关闭索引监控
SQL> alter index 模式名.表名 NOMONITORING USAGE;

--查看索引的监控信息
SQL> select * from v$object_usage;
  1. 索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):
SQL> alter index 模式名.表名 rebuild ONLINE;
  1. 查看当前用户的索引
SQL> select * from dba_indexes t where t.OWNER ='用户名';
SQL> select * from dba_ind_columns t where t.index_OWNER ='用户名';

十四、视图

DM管理工具——图形化界面中:模式-指定模式-视图 即可操作视图

  1. 创建视图
SQL> create view 模式名.视图名 as DQL

十五、物理备份还原

备份参数:
BAK_PATH:DM 默认的备份路径,生成环境不要和源库数据文件放在同一磁盘上。避免磁
盘损坏,数据文件和备份文件同时损坏的情况。
BAK_USE_AP:备份还原策略,默认使用 DMAP 辅助进程。

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

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

备份类别:
完全备份、增量备份;
联机备份(热备)、脱机备份(冷备)

【注意】:
差异增量备份的基础备份集可以是全量备份,也可以是增量备份
累计增量备份的基备份集只能是全量备份

【注意2】:
备份数据库必须保证 AP 服务启动

0. 先开归档

见7.2

1. 脱机备份/还原

1.1 备份库

  1. 先停数据库服务
# systemctl stop DmServiceDMSERVER
  1. 进入 dmrman 工具
# su - dmdba
$ cd /dm8/bin
$ ./dmrman
  1. 备份

3.1 命令行

-- 全量备份
RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup/FULLBACK00004';

3.2 图形化

$ ./console
  1. 还原 + 恢复
    1. 表空间还原 + 恢复

      1. 还原
      >RMAN restore database '/dm8/data/DAMENG/dm.ini' tablespace tbs from backupset '/dm8/backup/FULL0003';
      
      1. 恢复
      >RMAN recover database '/dm8/data/DAMENG/dm.ini' tablespace tbs;
      -- 或指定归档路径
      >RMAN recover database '/dm8/data/DAMENG/dm.ini' tablespace tbs with archivedir '/dm8/dmarch';
      

      注意此处的路径,不是归档备份的路径

    2. 数据库还原 + 恢复

      1. 还原
      >RMAN restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/FULLBAK001';
      
      1. 恢复
      -- 基于备份集恢复
      >RMAN recover database '/dm8/data/DAMENG/dm.ini';
      -- 基于归档恢复
      >RMAN recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/dmarch';
      

      如果不想恢复到最新,可以不执行恢复,但仍然要更新魔数

      1. 更新数据库魔数
      >RMAN recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
      
    3. 图形化

    $ ./console
    

recover database ‘/dm8/data/DAMENG/dm.ini’ update db_magic;

1.2 备份归档

可以使用console图形化备份

2. 联机备份/还原

2.0 开归档

见7.2

2.1 备份数据库

-- 增量备份
SQL> backup database INCREMENT;

-- 备份到其他路径(备份到其他路径时,需要额外添加备份集)
SQL> backup database full to FULLLBAK01 backupset '/dm8/backup/FULLBAK001';

-- 查询备份集相关函数
SQL> select * from v$ifun t where name like '%BAKSET%';

-- 添加新的备份集
SQL> SF_BAKSET_BACKUP_DIR_ADD('DISK', '/dm8/backup');

-- 查询备份集
SQL> select * from SYS."V$BACKUPSET";

[注意:使用 manager 备份时,若没有指定工作目录,备份时会报错 系统错误]

2.2 备份表空间

SQL> backup tablespace tbs to TBSFULLLBAK01 backupset '/dm8/backup/TBSFULLLBAK001';

[注意:若出现归档不连续错,执行 checkpoint 或重启数据库]

2.3 备份表

SQL> backup table 模式名.表名 to TABFULLLBAK01 backupset '/dm8/backup/TABFULLLBAK001';

注意还原时,要先还原表结构,再还原其他对象

2.3 备份归档

SQL> backup ARCHIVE LOG all;
  • 若报错归档不连续:
    1. 查询归档文件
      SQL> select * from SYS."V$ARCH_FILE";
    2. 看ARCH_LSN列和CLSN列,把开始不连续的数据之前的都删掉
      SQL> SF_ARCHIVELOG_DELETE_BEFORE_LSN(ARCH_LSN列值);

* 备份内容

** 控制文件

DM 控制文件 dm.ctl 为二进制文件,无法直接打开,可以用 dmctlcvt 工具转换为文本文件。
控制文件中包含了 OGUID、数据库状态、数据库名称、最后启动时间等、表空间信息、数据
文件信息、联机日志文件信息等。
控制文件的备份路径不要和控制文件本身存放在一个磁盘上,避免磁盘损坏,控制文件和备份文件同时损坏的情况。

** 归档日志文件

如果数据库开启归档,则会生成归档日志文件(用于保存重做日志信息)。
如果做了备份,会生成备份集文件。

十六、逻辑备份还原

1、逻辑备份

-- 导出——注意路径必须存在
$ dexp userid=sysdba/SYSDBA file=/dm8/backup/dexp.dmp log=/dm8/backup/dexp.log full=y
-- 若想指定模式,把 full=y 换成 schemas=模式名

2、逻辑还原

$ dimp userid=sysdba/SYSDBA file=/dm8/backup/dexp.dmp log=/dm8/backup/dexp.log full=y
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服