一:安装 二:表空间管理 三:重做日志管理 四:用户、模式管理 五:对象管理 六:归档管理 七:备份管理 八:参数管理 九:作业管理 十:ODBC 十一:卸载
一:安装
https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.html
https://eco.dameng.com/document/dm/zh-cn/ops/before-installation.html
1.1 安装前配置
安装前环境检查
1.1.1 操作系统内核需要在2.6 以上
cat /etc/os-release
cat /proc/version
uname -a
uname -r
1.1.2 glibc 需要在 2.3 以上
ldd --version
rpm -qa|grep glibc
1.1.3 检查 gcc 是否安装
安装odbc 的时候,需要 gcc 包依赖,没有安装的话需要进行安装
gcc --version
rpm -qa|grep gcc
1.1.4 检查 磁盘容量
至少需要20G ,推荐给 25G 以上
1.1.5 检查 /tmp 空间
如果tmp 容量小于 1G ,使用以下命令扩容
# 使用 root 用户执行
mount -o remount,size=2G /tmp
1.1.6 检查 并关闭 防火墙
systemctl status firewalld.service
systemctl list-unit-files |grep -i firewall
##systemctl stop firewalld.service
##systemctl disable firewalld.service
1.1.7 检查 并关闭 selinux
cat /etc/selinux/config
###getenforce
###setenforce 0
1.1.6 创建达梦数据库Linux 组和用户
groupadd dinstall
useradd -g dinstall dmdba
### 指定组号和用户号 ###
###grouadd -g 组号 dinstall
###useradd -g 组号 -d /home/dm -u 用户号 dmdba
### useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
配置用户密码
passwd dmdba
1.1.7 创建达梦数据库软件安装根目录, 并授权
mkdir -p /dm8
chown -R dmdba.dinstall /dm8
1.1.8 设置最大可打开文件数
# 查看最大可打开文件数
ulimit -a
临时设置(当前会话生效)
ulimit -n 65536
永久设置
在/etc/security/ 目录下的 limits.conf 文件下添加如下内容 :
cp /etc/security/limits.conf /etc/security/limits.conf_20221017bak
vi /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
1.1.9 配置用户环境变量
编辑.bash_profile ,在原文件尾部,添加以下条目
root 用户执行,检查当前 DISPLAY 值,并将结果写入到 dmdba 用户 .bash_profile 文件。
echo $DISPLAY
su - dmdba
vi /home/dmdba/.bash_profile
export DISPLAY=:1 0 .0
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export DM_HOME="/dm8"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
生效dmdba 用户登陆配置文件
source .bash_profile
1.1.10 装载安装介质
cd /soft/dm/
ls -lrth *.iso
### 安装包名称可能不同 ###
在mnt 下创建 dm 目录
mkdir /mnt/dm
挂载镜像 mount / 镜像地址 / 挂载的目标路径
#mount /opt/dm8_20210818_x86_rh6_64_ent_8.4.2.18_pack14.iso /mnt/dm
mount -t iso9660 -o loop dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso /mnt
1.2 图形化安装
1.2.1 配置图形启动
登录 root 用户,启用图形化界面
echo $DISPLAY
xhost +
su - dmdba
[dmdba@host02 ~]$ cat .bash_profile |grep DIS
export DISPLAY=:10.0
调用安装 GUI 界面
cd /mnt
./DMInstall.bin
注意:可能会碰到以下问题,提示说 tmp 文件过小,安装前需要检查 /tmp 空间
如果之前安装的没有卸载干净,会出现下面提示
也有可能是因为 /etc/dm_svc.conf 文件没有删除导致的
[root@host02 ~]# cat /etc/dm_svc.conf
TIME_ZONE=(480)
[root@host02 ~]# rm -rf /etc/dm_svc.conf
默认安装界面是英文的
[dmdba@host02 dm]$ echo $LANG
en_US.UTF-8
[dmdba@host02 dm]$ ./DMInstall.bin
时区可以调整,但是语言无法调整
自动将安装文件解压到 /tmp 下,需要保证 /tmp 磁盘剩余空间大于 1.1GB
[root@host02 ~]# du -sh /tmp/DMInstall
1.1G /tmp/DMInstall
1.2.2 安装数据库软件
如果需要中文安装界面,需要先配置 LANG 环境变量
[dmdba@host02 dm]$ echo $LANG
en_US.UTF-8
[dmdba@host02 dm]$ export.UTF-8
[dmdba@host02 dm]$ ./DMInstall.bin
解压安装程序 ...
[root@host02 ~]# cat /dm8/script/root/root_installer.sh
#!/bin/sh
#run by root
RUID=`/usr/bin/id|awk -F\( '{print $1}'|awk -F\= '{print $2}'`
if [ ${RUID} != "0" ]
then
echo " 必须以 root 身份执行此脚本 !"
exit 1
fi
echo " 移动 /dm8/bin/dm_svc.conf 到 /etc 目录 "
mv "/dm8/bin/dm_svc.conf" /etc/dm_svc.conf
echo " 修改服务器权限 "
chmod 6755 "/dm8/bin/dminit"
chmod 6755 "/dm8/bin/dmserver"
chown 0:0 "/dm8/bin/dmcss"
chmod 6755 "/dm8/bin/dmcss"
echo " 创建 DmAPService 服务 "
"/dm8/script/root/dm_service_installer.sh" -s "/dm8/bin/DmAPService"
echo " 启动 DmAPService 服务 "
systemctl start DmAPService.service
[root@host02 ~]# sh /dm8/script/root/root_installer.sh
移动 /dm8/bin/dm_svc.conf 到 /etc 目录
修改服务器权限
创建 DmAPService 服务
Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service.
创建服务 (DmAPService) 完成
启动 DmAPService 服务
1.2.3 初始数据库
1.2.4 执行脚本,启动数据库
根据提示执行脚本
mv /dm8/bin/DmServiceCHEN.service /usr/lib/systemd/system/DmServiceCHEN.service systemctl enable DmServiceCHEN.service systemctl start DmServiceCHEN.service
1.3 命令行安装
1.3.1 安装数据库软件
cd /mnt
./DMInstall.bin -i
手动输入部分如下:
登录root 用户执行脚本
/dm8/script/root/root_installer.sh
1.3.2 初始化 数据库
su - dmdba
dminit help
安装目录、实例名、数据名、端口号、密码、字符集、数据文件等路径、簇大小、页大小、日志文件大小、
dminit path=/dm8/data DB_NAME=CHEN instance_name=CJC port_num=5238 SYSDBA_PWD=Dameng123
1.3.3 注册服务
su - root cd /dm8/script/root/ ./dm_service_installer.sh help ./dm_service_installer.sh -t dmserver -p CJC -dm_ini /dm8/data/CHEN/dm.ini
# 取消注册服务
#./dm_service_uninstaller.sh -n 服务名称
#./dm_service_uninstaller.sh -n DmServiceCJC
1.3.4 启动服务
systemctl list-unit-files |grep DmServiceCJC.service systemctl status DmServiceCJC.service systemctl start DmServiceCJC.service
登录数据库
disql SYSDBA/Dameng123:5238
disql SYSDBA/Dameng123@127.0.0.1:5238
验证数据库创建成功
查看Linux 后台进程:
ps -ef|grep -i dmserver|grep -v grep
1.3.5 配置连接字符串
cp /etc/dm_svc.conf /etc/dm_svc.conf_20221023bak vi /etc/dm_svc.conf TIME_ZONE=(480) LANGUAGE=(cn) CJCDB=(192.168.80.133:5238) ###新增部分
连接测试:
[dmdba@host02 ~]$ disql SYSDBA/Dameng123@CJCDB
服务器[192.168.80.133:5238]: 处于普通打开状态
登录使用时间 : 4.046(ms)
disql V8
SQL>
二:表空间管理
SYSTEM :系统表空间,存放的是数据字典信息,包含表定义、视图定义、用户权限等
ROLL :回滚表空间,存放 undo 信息。 INSERT 、 UPDATE 、 DELETE 都会产生 undo 信息
MAIN :用户默认表空间,创建用户时,没有指定表空间,则使用 MAIN 表空间
TEMP :临时表空间,用于存放临时表数据、索引、大量数据排序等产生的数据
HMAN : HUGE 表(列存储表)的默认表空间
2.1 表空间管理 - 图形化操作
2.1.1 打开 manager 管理工具
[dmdba@host02 tool]$ ./manager
2.1.2 查看表空间
2.1.3 创建表空间
对应 DDL 语句
create tablespace "CJCTBS" datafile '/dm8/data/CJC/CJC_TBS_01.dbf' size 32 CACHE = NORMAL;
2.1.4 新增数据文件
添加
对应 DDL
alter tablespace "CJCTBS" add datafile '/dm8/data/CJC/CJC_TBS_02.dbf' size 35 autoextend on next 10 maxsize 1024;
2.1.5 修改表空间名称
2.1.6 修改数据文件属性
修改数据文件大小,关闭自动扩展
查看对应的 DDL 语句。
alter tablespace "CJCTBS" resize datafile 'CJC_TBS_01.dbf' to 50; alter tablespace "CJCTBS" datafile 'CJC_TBS_01.dbf' autoextend off;
2.1.7修改数据文件名称、路径
对应 DDL 语句
alter tablespace "CJCTBS" offline; alter tablespace "CJCTBS" rename datafile 'CJC_TBS_01a.dbf' to '/dm8/CJC_TBS_01AAA.dbf'; alter tablespace "CJCTBS" online;
2.1.8 TEMP表空间调整
检查 TEMP 信息
对应 DDL 语句
create tablespace "TEMP" datafile '/dm8/data/CJC/TEMP.DBF' size 10 autoextend on maxsize 16777215 CACHE = RECYCLE;
图形工具不支持修改等操作
alter tablespace TEMP add datafile '/dm8/data/CJC/TEMP_02.dbf' size 50 autoextend on next 1 maxsize 100; create tablespace "TEMP2" datafile '/dm8/data/CJC/TEMP.2DBF' size 10 autoextend on maxsize 100 CACHE = RECYCLE;
第1 行附近出现错误 [-3438]:RECYCLE 为临时表空间专用 CACHE.
已用时间: 75.849( 毫秒 ). 执行号 :0.
2.2 表空间管理 - 命令行操作
命令行 登录 :
disql SYSDBA/Dameng123:5238
2.2.1 查看表空间名称
select tablespace_name from dba_tablespaces;
查看数据文件路径
SELECT TABLESPACE_NAME,FILE_NAME FROM DBA_DATA_FILES;
2.2.2 创建表空间
单位MB
数据文件大小 最小 页的4096 倍 (32MB) ,最大 ( 页大小 *2^31)-1
create tablespace CJC datafile '/dm8/data/CHEN/CJC_01.dbf' size 32;
# 创建表空间时必须指定 datafile , size 最小值是 page_size 的 4096 倍, autoextend 指定自增长, maxsize 指定最大值
create tablespace tbs1 datafile '/dm8/data/CHEN/tbs1_01.dbf' size 32 autoextend on next 1 maxsize 100;
# 创建表空间,非自动扩展
create tablespace tbs2 datafile '/dm8/data/CHEN/tbs1_02.dbf' size 32 autoextend off;
查看数据文件信息
select tablespace_name,file_name,bytes,AUTOEXTENSIBLE,MAXBYTES from dba_data_files;
2.2.3 增加数据文件
alter tablespace CJC add datafile '/dm8/data/CHEN/CJC_02.dbf' size 50 autoextend on next 1 maxsize 100;
2.2.4 修改数据文件路径
alter tablespace cjc offline; alter tablespace cjc rename datafile '/dm8/data/CHEN/CJC_02.dbf' to '/dm8/CJC_02.dbf'; alter tablespace cjc online; select tablespace_name,file_name,bytes,AUTOEXTENSIBLE,MAXBYTES from dba_data_files where tablespace_name='CJC';
2.2.5 修改数据文件大小
alter tablespace 表空间名称 resize datafile ' 数据文件路径 ' to 数据文件大小 ;
修改表空间开启自动增长,增长步长,最大表空间
alter tablespace 表空间名 datafile ' 数据文件路径 ' autoextend on next 增长步长 maxsize 文件最大值
2.2.6 修改表空间名称
alter tablespace 修改前表空间名 rename to 修改后表空间名 ;
alter tablespace CJCTBSA rename to CJCTBS;
2.2.7 删除表空间
drop tablespace CJC;
2.2.8 temp 表空间
查询temp 表空间参数,达梦数据库启动的时候会根据这几个参数来创建或重建 temp 表空间
select name,value,type from v$parameter where name like 'TEMP%';
TEMP_PATH : temp 表空间的路径
TEMP_SIZE : temp 表空间的初始值,单位为 MB
TEMP_SPACE_LIMIT : temp 表空间的空间限制, 0 表示不限制
修改temp_size
# 设置 temp 表空间初始值
alter system set 'TEMP_SIZE'=64 spfile;
# 查看更改是否生效
cat /dm8/data/DAMENG/dm.ini |grep TEMP_SIZE
三:重做日志管理
3.1 重做日志管理 - 图形化操作
3.1.1 打开 manager 管理工具
[dmdba@host02 tool]$ ./manager
管理服务器
3.1.2 查看日志文件信息
3.1.2 调整大小
只能改大不能改小
对应 DDL 语句
alter database resize logfile 'CJC01.log' to 300;
3.1.3 修改路径及名称
对应 DDL 语句
alter database rename logfile 'CJC02.log' to '/dm8/CJC02a.log';
修改成 mount
再次修改路径
启动数据库
3.1.4 新增
3.2 重做日志管理 - 命令行操作
3.2.1 查看日志文件信息
select group_id,file_id,path,rlog_size from v$rlogfile;
3.2.2 调整大小
由256M 调整都 300M 成功
alter database resize logfile '/dm8/data/CHEN/CHEN01.log' to 300;
### 不支持调小
3.2.3 新增
alter database add logfile '/dm8/data/CHEN/CHEN03.log' size 256;
3.2.4 更改路径 、重命名
alter database mount; alter database rename logfile '/dm8/data/CHEN/CHEN03.log' to '/dm8/CHEN003.log'; alter database open;
### 删除 ( 不支持删除 )
###alter database drop logfile '/dm8/data/CHEN/CHEN02.log';
###alter database delete logfile '/dm8/data/CHEN/CHEN02.log';
四:用户、模式管理
4.1 用户、模式管理 - 图形化操作
4.1.1 打开 manager 管理工具
[dmdba@host02 tool]$ ./manager
4.1.2 查看用户
4.1.3 创建用户
管理用户 --- 新建用户
4.1.4 添加角色权限
4.1.5 添加系统权限
4.1.6 添加对象权限
4.1.7 资源限制
4.1.8 连接限制
查看对应 DDL 语句
create user "CJC" identified by "Dameng123" limit session_per_user 10, connect_idle_time 3, failed_login_attemps 5, password_life_time 180, password_reuse_max 100, password_lock_time 2, password_grace_time 10, connect_time 100, cpu_per_session 360000, cpu_per_call 8600, read_per_session 300000 allow_ip "192.168.80.131" allow_datetime "2022-10-22" "00:22:49" to "2023-12-23" "00:22:49" default tablespace "CJCTBS" default index tablespace "CJCTBS"; grant "PUBLIC","VTI" to "CJC"; grant CREATE SCHEMA,CREATE TABLE,CREATE VIEW to "CJC"; grant CREATE ROLE to "CJC" with admin option; grant SELECT,INSERT,DELETE,UPDATE,REFERENCES on "DMHR"."CITY" to "CJC";
4.2.9 角色管理
查看角色
创建角色
查看 DDL 语句
create role "CJCR"; grant "RESOURCE" to "CJCR"; grant CREATE USER,ALTER USER,CREATE SCHEMA,CREATE TABLE to "CJCR";
注意:
角色名不能和用户名相同否则会报如下错误。
4.2.10 模式管理
查看模式
创建模式
对应 DDL 语句
CREATE SCHEMA "CHEN" AUTHORIZATION "CJC";
4.2 用户、模式管理 -命令行操作
创建用户, 授权(系统,对象,角色)
创建用户:create user... identified by ... default tablespace ... limit ( 口令管理选项 )
修改用户口令 : alter user ... identified by
删除:drop user
授权: grant create table, create index to ... ; grant select on dmhr.employee to ...
权限回收: revoke ... from ...
查看已登录会话所有权限: select * from session_privs;
用户类型:
SYS :内置用户,不能直接登陆
SYSDBA :系统管理员,拥有 DBA 角色(除了安全、审计其他都管)
SYSAUDITOR :系统审计管理员
SYSSSO :系统安全管理员
SYSDBO :系统安全操作员(达梦安全版才有)
4.2.1 查看用户
select user_id,username,default_tablespace,TEMPORARY_TABLESPACE from dba_users;
4.2.2 创建用户
create user CJC identified by Dameng123 default tablespace CJC; ###create user CJC identified by Dameng123 limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10 default tablespace "CJC" default index tablespace "CJC";
4.2.3用户密码策略
设置密码的时候,需要查询下密码策略是什么
select * from v$parameter where name = 'PWD_POLICY';
如果想调整密码策略
用户口令策略
select * from v$dm_ini where para_name='PWD_POLICY';
修改用户口令策略
alter system set 'PWD_POLICY'= 15 BOTH;
PWD_POLICY 参数意义:
设置系统默认口令策略。
0 : 无策略;
1 : 禁止与用户名相同;
2 : 口令长度不小于 9 ;
4 : 至少包含一个大写字母( A-Z );
8 :至少包含一个数字( 0 - 9 );
16 :至少包含一个标点符号(英文输入法状态下,除 “ 和空格外的所有符号);
若为其他数字,则表示配置值的和,如 3 = 1+2, 表示 同时启用第 1 项和第 2 项策略。
调整密码错误次数参数,默认输错3 次后锁定账号,并且 1 分钟后自动解锁
select username,account_status,locak_date from dba_users;
# 将密码输错锁定次数改为 5 次,锁定时间为 3 分钟
alter user 用户名 limit FAILED_LOGIN_ATTEMPS 5,PASSWORD_LOCK_TIME 3;
手动锁定或解锁账号
# 手动解锁
alter user 用户名 account unlock;
# 手动锁定
alter user 用户名 account lock;
# 查看用户资源限制,例如最大并发数
select * from dba_users a,sysusers b where a.user_id = b.id;
达梦里创建用户或表空间 数据文件等,加双引号 指大小写 敏感,不加双引号,大小写不敏感。
4.2.4 用户 授权
新增用户不授权,默认具有登陆权限
查看角色名称
select role from dba_roles;
查看用户拥有角色
select GRANTEE,GRANTED_ROLE,DEFAULT_ROLE from dba_role_privs where GRANTEE='CJC';
查看用户有哪些系统权限
select GRANTEE,PRIVILEGE FROM dba_sys_privs where GRANTEE='CJC';
查看用户有哪些对象权限
select GRANTEE,PRIVILEGE FROM dba_tab_privs where GRANTEE='CJC';
列权限
select * from dba_col_privs where grantee = '用户名';
授权
grant "PUBLIC","VTI" to "CJC";
角色和权限对应关系
select PRIVILEGE from dba_sys_privs where GRANTEE='RESOURCE'; select PRIVILEGE from dba_sys_privs where GRANTEE='PUBLIC';
登录用户
disql CJC/Dameng123:5238
修改密码
alter user chen identified by "A12345678";
4.2.5 创建角色
角色类型
DBA :系统管理员角色,拥有除审核、安全外的所有权限
RESOURCE :具有在当前用户模式下定义对象的权限,例如 create table 等
PUBLIC :具有在当前用户模式下数据操作的权限,例如 insert table 等
SOI :系统表( SYS 为前缀)的访问权限
SVI :系统视图( VSYS 为前缀)的视图权限
VTI :动态视图( V 为 前 缀 , 存 在 于 V 为前缀,存在于 V 为前缀,存在于 Vdynamic_tables 中的视图)的访问权限
角色创建
create role r1;
给角色授权
grant select any table to r1;
将角色授权给用户
grant r1 to cjc;
系统权限授权
select distinct PRIVILEGE from dba_sys_privs order by 1; CREAE TABLE/CREATE TABLESPACE/ALTER DATABASE/ALTER TABLESPACE/CREATE USER/CREATE VIEW/CREATE PROCEDURE/CREATE ROLE/CREATE SCHEMA GRANT CREATE TABLESPACE TO CJC;
对象权限授权
select distinct PRIVILEGE from dba_tab_privs order by 1; ALTER/INSERT/DELETE/UPDATE/EXECUTE/SELECT/REFERENCES/ GRANT DELETE ON SYSDBA.T1 TO CJC; grant select on 模式名.表名 to 用户名; grant update on 模式名.表名 to 用户名; grant delete on 模式名.表名 to 用户名;
级联授权
GRANT UPDATE ON SYSDBA.T1 TO CJC WITH GRANT OPTION;
revoke create table from dmuser; # 回收
grant create view to dmuser with grant option; # 允许 dmuser 有授权权限,回收时需加上 cascade
4.2.6 回收权限
REVOKE CREATE TABLESPACE FROM CJC; REVOKE DELETE ON SYSDBA.T1 FROM CJC; REVOKE UPDATE ON SYSDBA.T1 FROM CJC CASCADE;
4.2.7 删除角色
DROP ROLE R1;
4.2.8 模式管理
用户和模式
用户(USER ):用户是用来连接数据库并进行相关操作的。
模式(SCHEMA ):模式是数据库对象的集合,模式是数据库的逻辑结构。
创建模式
CREATE SCHEMA CHEN AUTHORIZATION CJC; /
切换模式
set schema CHEN;
查看用户和模式
select a.name as username, b.name as schenma from sysobjects a inner join sysobjects b on a.id = b.pid where b.subtype$ is null order by username desc;
conn cjc/Dameng123:5238
查看模式名称
select distinct object_name table_schema from all_objects where object_type='SCH';
删除模式
drop schema CHEN;
查询当前用户
select user;
查询当前模式
select sys_context('USERENV','CURRENT_USER');
动态性能视图
v$dynamic_tables
数据字典
Sysobjects
五:对象管理
5.1 对象管理 - 图形化操作
5.1.1 创建表
CJC 模式下新建表
主键约束
存储
对应 DDL 如下:
create table "CJC"."T1" ( "NAME" VARCHAR2(50) not null , "AGE" INT not null , "SAL" CHAR(10) not null ) storage(initial 10, next 2, minextents 1, fillfactor 0, on "CJCTBS") ; comment on table "CJC"."T1" is 'TEST TABLE T1'; alter table "CJC"."T1" add constraint "PK_T1_NAME" primary key("NAME");
查看
SQL> conn cjc/123456789@192.168.80.131:5238
服务器[192.168.80.131:5238]: 处于普通打开状态
登录使用时间 : 6.387(ms)
SQL> desc t1;
行号 NAME TYPE$ NULLABLE
---------- ---- ----------- --------
1 NAME VARCHAR(50) N
2 AGE INTEGER N
3 SAL CHAR(10) N
已用时间: 656.920( 毫秒 ). 执行号 :54100.
5.1.2 增加列
对应 DDL 语句
alter table "CJC"."T1" add column("C1" DATE not null ); comment on column "CJC"."T1"."C1" is 'XXX';
5.1.3 约束管理
对应 DDL 语句
alter table "CJC"."T1" modify constraint "C_T1_AGE" to check(AGE = 30 );
5.1.4 视图管理
新建视图
对应 DDL 语句
CREATE VIEW "CJC"."V_T1" /*视图的列名, 格式为(<列名>{, <列名>}),此处为可选*/ (v_col1, v_col2) AS /*<查询说明>*/ SELECT NAME, AGE FROM CJC.T1 /*插入或删除行是否必须满足<查询说明>所指定的条件, 此处为可选*/ WITH CHECK OPTION; comment on view "CJC"."V_T1" is 'TEST ...';
5.1.5 索引管理
新增索引
对应 DDL 语句
create unique index "I_T1_NAME" on "CJC"."T1"("NAME") storage(initial 5,next 2,minextents 2,on "CJCTBS");
5.2 对象管理 -命令行操作
5.2.1 创建表
CREATE TABLE CJC.TEST(ID INT,NAME CHAR(10)); create table dmtest.t_testpid( pid int, pname varchar(10), logtime datetime DEFAULT sysdate, sex bit ) tablespace HRTBS;
从别的表复制
# 只复制表结构(不带约束信息)
create table t_emp03 as select * from dmhr.employee where 1=0;
# 复制表结构 + 表数据
create table t_emp01 as select * from dmhr.employee;
create table t_emp02 like dmhr.employee;
5.2.2 增加列
ALTER TABLE CJC.TEST ADD COLUMN(AGE INT);
5.2.3 修改列
ALTER TABLE CJC.TEST MODIFY NAME CHAR(20);
5.2.4 删除列
ALTER TABLE CJC.TEST DROP COLUMN AGE;
#ALTER TABLE CJC.TEST DROP AGE;
约束类型
NOT NULL :非空约束
UNIQUE :唯一约束,可以为空,简写为 UK_ 表名 _ 字段名
PRIMARY KEY :主键约束(唯一约束 + 非空约束),简写为 PK_ 表名 _ 字段名
FOREIGN KEY :外键引用约束,引用的是另一张表(父表)的主键或唯一键。简写为 FK_ 表名 _ 字段名
CHECK :检验约束,用户校验数据的准确性,简写为 CK_ 表名 _ 字段名
5.2.5 添加约束
ALTER TABLE CJC.TEST ADD CONSTRAINT TEST_UNI UNIQUE(ID);
# 添加主键约束
alter table dmtest.t_testpid add CONSTRAINT pk_testpid_pid PRIMARY key("pid");
# 添加外键约束,注意 REFERENCES 表里的字段必须是主键或者是添加了唯一索引的字段
alter table dmtest.t_testchild add CONSTRAINT fk_testchild_pid FOREIGN key("pid") REFERENCES dmtest.t_testpid("pid");
# 添加校验约束
alter table dmtest.t_testchild add CONSTRAINT ck_testchild_salary CHECK ("salary">=3000);
5.2.6 禁用约束
ALTER TABLE CJC.TEST DISABLE CONSTRAINT TEST_UNI;
5.2.7 启用约束
ALTER TABLE CJC.TEST ENABLE CONSTRAINT TEST_UNI;
删除约束
ALTER TABLE CJC.TEST DROP CONSTRAINT TEST_UNI;
5.2.8 视图管理
创建视图
CREATE VIEW CJC.V1 AS SELECT * FROM CJC.T1;
修改视图
CREATE OR REPLACE VIEW CJC.V1
AS
SELECT ID FROM CJC.T1;
删除视图
DROP VIEW CJC.V1;
5.2.9 索引管理
创建索引
CREATE INDEX T1_IND ON CJC.T1(ID) TABLESPACE CJC;
重建索引
ALTER INDEX CJC.T1_IND REBUILD;
删除索引
DROP INDEX CJC.T1_IND;
删除表
DROP TABLE CJC.TEST;
执行脚本,创建DMHR 用户数据
https://eco.dameng.com/document/dm/zh-cn/sql-dev/index
GBK 字符集请下载 CREATE_DMHR(GBK).sh ,脚本如下所示:
#!/bin/bash eg_dir=$DM_HOME/samples/instance_script/dmhr/GBK disql sysdba/SYSDBA:10236 <UTF-8 字符集请下载 CREATE_DMHR(UTF-8).sh ,脚本如下所示:
#!/bin/bash eg_dir=$DM_HOME/samples/instance_script/dmhr/UTF-8 disql sysdba/SYSDBA:5236 <六:归档管理
6.1 归档管理 - 图形化操作
管理服务器
6.1.1 数据库改成 配置
6.1.2 配置归档
归档路径,确定
[dmdba@host02 ~]$ mkdir /dm8/arch
对应 DDL 语句
alter database archivelog; alter database add archivelog 'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=30720';6.1.3 数据库改成 打开
6.2 归档管理 - 命令行操作
https://mp.weixin.qq.com/s/6j3-1FBJslwUaWnCwRmGVw
命令行方式
开启归档
https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup.html
6.2.1 创建归档路径
mkdir /dm8/arch
6.2.2 修改数据库为 Mount 状态
alter DATABASE MOUNT;
6.2.3 配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 20480';6.2.4开启归档模式
ALTER DATABASE ARCHIVELOG;
6.2.5 修改数据库为 Open 状态
ALTER DATABASE OPEN;
检查,自动生成了 dmarch.ini 文件
[dmdba@host02 DAMENG]$ pwd /dm8/data/DAMENG [dmdba@host02 DAMENG]$ ls -l dmarch.ini -rw-r--r-- 1 dmdba dinstall 269 Sep 23 23:14 dmarch.ini cat dmarch.ini配置项 配置含义
[ARCH_NAME] REDO 日志归档名 ARCH_TYPE REDO 日志归档类型,LOCAL 表示本地归档,REMOTE 表示远程 ARCH_DEST REDO 日志归档目标,LOCAL 对应归档文件存放路径;REMOTE 对应远程目标节点实例名 ARCH_FILE_SIZE 单个 REDO 日志归档文件大小,取值范围(64 MB~2048 MB),缺省 1024 MB,即 1 GB ARCH_SPACE_LIMIT REDO 日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件。0 表示无空间限制,取值范围(1024 MB~4294967294 MB),缺省为 0 ARCH_INCOMING_PATH仅 REMOTE 归档有效,对应远程归档存放在本节点的实际路径# 查询归档状态
select arch_mode from v$database;
# 查看归档文件
select * from SYS."V$ARCH_FILE";
# 查询归档配置
select * from v$dm_arch_ini;
6.2.6 关闭归档
alter database mount;
# 关闭归档
alter database noarchivelog;
# 删除归档文件
alter database delete archivelog 'type=local,dest=/dm8/arch';
# 将数据库状态设置为 open
alter database open;
# 查询归档状态
select arch_mode from v$database;
七:备份恢复
7.1 备份恢复 - 图形化操作
https://eco.dameng.com/document/dm/zh-cn/pm/backup-restore-combat.html
manager
7.1.1 数据库联机备份
对应 DDL
backup database full to "DB_CJC_FULL_2022_10_22_19_40_34" backupset 'DB_CJC_FULL_2022_10_22_19_40_34' maxsize 200;
[dmdba@host02 DB_CJC_FULL_2022_10_22_19_40_34]$ pwd /dm8/data/CJC/bak/DB_CJC_FULL_2022_10_22_19_40_34 [dmdba@host02 DB_CJC_FULL_2022_10_22_19_40_34]$ ll -rth total 17M -rw-r--r-- 1 dmdba dinstall 17M Oct 22 19:43 DB_CJC_FULL_2022_10_22_19_40_34.bak -rw-r--r-- 1 dmdba dinstall 6.5K Oct 22 19:43 DB_CJC_FULL_2022_10_22_19_40_34_1.bak -rw-r--r-- 1 dmdba dinstall 97K Oct 22 19:43 DB_CJC_FULL_2022_10_22_19_40_34.meta7.1.2 表联机备份
DDL 语句
backup table "CJC"."T1" to "TAB_CJC_T1_2022_10_22_19_46_41" backupset 'TAB_CJC_T1_2022_10_22_19_46_41' backupinfo 'CJC_T1_BAK_TEST' maxsize 100;7.1.3 表空间备份
对应 DDL 语句:
backup tablespace "CJCTBS" full to "TS_CJCTBS_FULL_2022_10_22_20_01_40" backupset 'TS_CJCTBS_FULL_2022_10_22_20_01_40';
7.1.4 归档联机备份
对应 DDL
backup archivelog all to "ARCH_2022_10_22_20_13_25" backupset 'ARCH_2022_10_22_20_13_25';
对应 DDL
backup archivelog time between '2022-10-22 20:03:17' and '2022-10-23 20:03:17' to "ARCH_2022_10_22_20_03_17" backupset 'ARCH_2022_10_22_20_03_17';7.1.5 备份管理
选择其中一个备份,右键属性
7.1.6 备份校验
7.1.7 表联机还原
数据还原
库备份和表空间备份不支持联机还原,只有表备份支持联机还原。表还原过程中表空间中其他的表还可以正常操作。
点击表备份集节点右键菜单-> 备份还原,可以打开表备份还原对话框,首页显示的是常规选项页面,如图 3.11 所示:
查看当前数据:
SQL> select * from cjc.t1;
行号 NAME AGE SAL C1
---------- ---- ----------- ---------- ----------
1 a 35 20000 2022-10-22
已用时间: 3.623( 毫秒 ). 执行号 :1000.
删除数据
SQL> truncate table cjc.t1;
操作已执行
已用时间: 46.228( 毫秒 ). 执行号 :1003.
表还原
DDL 语句:
restore table "CJC"."T1" struct with index with constraint from backupset '/dm8/data/CJC/bak/TAB_CJC_T1_2022_10_22_19_46_41' device type disk; restore table "CJC"."T1" with index with constraint from backupset '/dm8/data/CJC/bak/TAB_CJC_T1_2022_10_22_19_46_41' device type disk;检查数据:
SQL> select * from cjc.t1;
行号 NAME AGE SAL C1
---------- ---- ----------- ---------- ----------
1 a 35 20000 2022-10-22
已用时间: 3.346( 毫秒 ). 执行号 :1300.
7.1.8 数据库脱机还原
通过联机备份,进行脱机还原
console
SQL> truncate table cjc.t1;
操作已执行
已用时间 : 198.234( 毫秒 ). 执行号 :401.
全库脱机还原
先停库
SQL> shutdown immediate;
操作已执行
已用时间: 1.412( 毫秒 ). 执行号 :0.
启动数据库
[root@host02 ~]# systemctl start DmServiceCHEN.service
Job for DmServiceCHEN.service failed because the control process exited with error code. See "systemctl status DmServiceCHEN.service" and "journalctl -xe" for details.
查看错误日志
[dmdba@host02 log]$ vi DmServiceCHEN.log
file dm.key not found, use default license! version info: develop Use normal os_malloc instead of HugeTLB Use normal os_malloc instead of HugeTLB DM Database Server x64 V8 1-1-144-20.11.06-129436-ENT startup... Database mode = 0, oguid = 0 License will expire on 2022-11-06 Instance CHEN startup failed, execute 'recover database ... update db_magic' in dmrman. ^[]0;DMSERVER /dm8/data/CJC/dm.ini : 5238 ^G
恢复
更新 DB_Magic
启动数据库
[root@host02 ~]# systemctl start DmServiceCHEN.service
验证数据
[dmdba@host02 log]$ disql SYSDBA/Dameng123:5238
服务器[LOCALHOST:5238]: 处于普通打开状态
登录使用时间 : 6.138(ms)
disql V8
SQL> select * from cjc.t1;
行号 NAME AGE SAL C1
---------- ---- ----------- ---------- ----------
1 a 35 20000 2022-10-22
已用时间: 5.034( 毫秒 ). 执行号 :400.
7.1.9 数据库脱机备份
打开 console 工具
新建备份
停库
SQL> shutdown immediate;
操作已执行
已用时间: 0.747( 毫秒 ). 执行号 :0.
备份
7.1.10 脱机还原
通过脱机备份进行脱机还原
恢复
更新
启库验证
[root@host02 ~]# systemctl start DmServiceCHEN.service
[dmdba@host02 ~]$ disql SYSDBA/Dameng123:5238
服务器[LOCALHOST:5238]: 处于普通打开状态
登录使用时间 : 4.430(ms)
disql V8
SQL> select * from cjc.t1;
行号 NAME AGE SAL C1
---------- ---- ----------- ---------- ----------
1 a 35 20000 2022-10-22
已用时间: 5.949( 毫秒 ). 执行号 :400.
7.2 备份恢复 - 命令行操作
7.2.1 启用 DMAP 服务
如果选择使用 DMAP 辅助进程,执行备份还原之前就必须启动 DMAP 服务。安装 DM 数据库以后, DMAP 服务会自动启动。
启动 DMAP ,手动启动 DMAP ,有两种途径
一是启动 DM 服务查看器中的 DmAPService 。
二是手动启动 DMAP 执行码, DMAP 执行码位于 DM 安装目录的 bin 子目录下。
除此之外,Linux 下,还可以调用 bin 目录下的 DmAPService 脚本。
find /dm8 -name DmAPService /dm8/bin/service_template/DmAPService cd /dm8/bin/service_template/ ./DmAPService start ./DmAPService status7.2.2 脱机备份
启动 DMRMAN
DMRMAN (DM RECOVERY MANEGER) 是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度。
备份数据库
在 DMRMAN 下执行以下命令:
BACKUP DATABASE '' [[[FULL][DDL_CLONE]] |INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份集目录>']] [TO <备份名>] [BACKUPSET '<备份集目录>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>'] [BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] [IDENTIFIED BY <加密密码>[WITH ENCRYPTION ][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][TASK THREAD <线程数>] [PARALLEL [<并行数>][READ SIZE <拆分块大小>]]; 7.2.2.1 全库备份
在 DMRMAN 下执行以下命令:
停库
SQL> shutdown immediate;
备份
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL BACKUPSET '/dm8/bak/db_full_bak_01';7.2.2.2 增量备份
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm8/bak' BACKUPSET '/dm8/bak/rman_db_increment_bak_02';校验特定的备份集,在 DMRMAN 下执行以下命令:
RMAN> CHECK BACKUPSET '/dm8/bak/rman_db_full_bak_01';7.2.2.3 备份集删除
RMAN> REMOVE BACKUPSET '/dm8/bak/db_bak_for_remove_01';7.2.3 脱机还原
RESTORE DATABASE[WITH CHECK] FROM BACKUPSET '<备份集目录>' [DEVICE TYPE DISK|TAPE[PARMS '<介质参数>']] [IDENTIFIED BY <密码> [ENCRYPT WITH <加密算法>]] [WITH BACKUPDIR '<基备份集搜索目录>'{,'<基备份集搜索目录>'}] [MAPPED FILE '<映射文件>'][TASK THREAD <任务线程数>] [RENAME TO '<数据库名>']; ::= | ::=' '[REUSE DMINI][OVERWRITE] ::= TO ' ' [OVERWRITE] 联机备份,脱机还原
RESTORE DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dm8/bak/db_full_bak_for_restore'恢复数据库
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dm8/bak/db_full_bak_for_restore';恢复 db_magic
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;恢复完成后,注册服务
/dm8/scripts/root/dm_service_installer.sh -t dmserver -p CJC -dm_ini /dm8/data/DAMENG_FOR_RESTORE/dm.ini7.2.4 在线备份
7.2.4.1 备份整个数据库
BACKUP DATABASE FULL BACKUPSET '/dm8/bak/db_full_bak_01';指定备份集路径为 /dm8/bak/db_bak_3_01,执行以下命令: BACKUP DATABASE BACKUPSET '/dm8/bak/db_bak_3_01'; 创建备份集,备份名设置为 WEEKLY_FULL_BAK,执行以下命令: BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/dm8/bak/db_bak_3_02'; 创建备份为备份集添加描述信息为 完全备份,执行以下命令: BACKUP DATABASE BACKUPSET '/dm8/bak/db_bak_3_04' BACKUPINFO '完全备份'; 创建备份限制备份片大小为 300 MB,执行以下命令: BACKUP DATABASE BACKUPSET '/dm8/bak/db_bak_3_05' MAXPIECESIZE 300; 执行备份压缩,压缩级别设置为 5,执行以下命令: BACKUP DATABASE BACKUPSET '/dm8/bak/db_bak_3_06' COMPRESSED LEVEL 5; 创建并行备份,指定并行数为 8,执行以下命令: BACKUP DATABASE BACKUPSET '/dm8/bak/db_bak_3_07' PARALLEL 8; 基于 /dm8/bak 全量备份的 增量备份,执行以下命令: BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm8/bak' BACKUPSET '/dm8/bak/db_increment_bak_02';7.2.4.2 表空间备份
BACKUP TABLESPACE <表空间名> [FULL | INCREMENT [CUMULATIVE] [WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}] | [BASE ON BACKUPSET '<基备份集目录>']][TO <备份名>] BACKUPSET ['<备份集路径>'][DEVICE TYPE <介质类型> [PARMS '<介质参数>']][BACKUPINFO '<备份集描述>'] [MAXPIECESIZE <备份片限制大小>][IDENTIFIED BY < 加 密 密 码 > [WITH ENCRYPTION][ENCRYPT WITH < 加 密 算 法 >]] [COMPRESSED[LEVEL <压缩级别>]][TRACE FILE ' '] [TRACE LEVEL ][TASK THREAD <线程数>] [PARALLEL [<并行数>][READ SIZE <拆分块大小>]]; 完全备份单个表空间,执行以下命令: BACKUP TABLESPACE MAIN FULL BACKUPSET '/dm8/bak/ts_full_bak_01'; 增量备份指定备份目录,以备份 MAIN 表空间为例,指定 BASE_ON 参数执行增量备份,执行以下命令: BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm8/bak'BACKUPSET '/dm8/bak/ts_increment_bak_02';7.2.4.3 表备份
BACKUP TABLE <表名> [TO <备份名>] BACKUPSET ['<备份集路径>'] [DEVICE TYPE <介质类型> [PARMS '<介质参数>']] [BACKUPINFO '<备份集描述>'] [MAXPIECESIZE <备份片限制大小>] [IDENTIFIED BY <加密密码>[WITH ENCRYPTION][ENCRYPT WITH <加密算法>]] [COMPRESSED [LEVEL <压缩级别>]] [TRACE FILE ' '] [TRACE LEVEL ] 以备份 TAB_01 为例,执行以下命令:
BACKUP TABLE CJC.T1 BACKUPSET '/dm8/bak/tab_bak_01';7.2.5 在线还原
还原表结构 restore table struct from backupset '/dm8/bak/tab_bak_for_res_02'; 还原表数据 RESTORE TABLE FROM BACKUPSET '/dm8/bak/tab_bak_for_res_02'; 还原时不创建索引 RESTORE TABLE WITHOUT INDEX FROM BACKUPSET '/dm8/bak/tab_bak_for_res_03'; 还原时不创建约束 RESTORE WITHOUT CONSTRAINT FROM BACKUPSET '/dm8/bak/tab_bak_for_res_01';
7.2.6 将生产库还原到另一个实例
联机备份数据库,保证数据库运行在归档模式及 Open 状态。执行以下命令:
BACKUP DATABASE BACKUPSET '/dm8/bak/db_full_bak_for_restore';准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。执行以下命令:
dminit path=/dm8/data db_name=DAMENG_FOR_RESTORE启动 RMAN ,校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
CHECK BACKUPSET '/dm8/bak/db_full_bak_for_restore';还原数据库。启动 DMRMAN ,执行以下命令:
RESTORE DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dm8/bak/db_full_bak_for_restore'恢复数据库。启动 DMRMAN ,执行以下命令:
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dm8/bak/db_full_bak_for_restore'恢复 db_magic ,执行以下命令:
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;恢复完成后,注册服务
/dm8/scripts/root/dm_service_installer.sh -t dmserver -p CJC -dm_ini /dm8/data/DAMENG_FOR_RESTORE/dm.ini
修改 dm.ini 里端口, 5236 改成 5238
su - root /dm8/script/root/dm_service_installer.sh -t dmserver -p CJC -dm_ini /dm8/data/DAMENG_FOR_RESTORE/dm.ini启动新实例
systemctl start DmServiceCJC.service
7.2.7 还原表空间
需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。启动 DMRMAN ,执行以下命令:
RESTORE DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/dm8/bak/db_full_bak_for_restore';恢复表空间。启动 DMRMAN ,执行以下命令:
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE TS1;https://eco.dameng.com/document/dm/zh-cn/ops/restore-specified-time.html
7.2.8 恢复到指定时间点
备份数据库,执行以下命令:
BACKUP DATABASE BACKUPSET '/dm8/bak/db_full_bak_for_time_lsn';操作步骤同步骤 3 ,此时的时间和 LSN 分别为: 2018-11-16 10:57:20.977265 、 50861 。
关闭数据库,打开 RMAN 还原数据库,执行以下语句:(步骤 4 为误操作,因此我们需要将数据库恢复到步骤 3 的状态)
RESTORE DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dm8/bak/db_full_bak_for_time_lsn';使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的时间,打开 RMAN ,执行以下命令:
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' UNTIL TIME'2018-11-16 10:56:40.624931';或者使用 RECOVER DATABASE...UNTIL LSN 命令恢复到指定的时间,执行以下命令:
RECOVER DATABASE '/dm8/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' UNTIL LSN 50857;恢复 db_magic ,执行以下命令:
RECOVER DATABASE 'D:\dmdbms\data\DAMENG\dm.ini' UPDATE DB_MAGIC;7.2.9 逻辑备份
https://eco.dameng.com/document/dm/zh-cn/pm/dexp-dimp-function-introduction.html
逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
数据库级(FULL):导出或导入整个数据库中的所有对象。 用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。 模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。 表级(TABLES):导出或导入一个或多个指定的表或表分区。dexp 逻辑导出
dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。
dexp 工具名称有两种写法 dexp 和 dexpdp 。两者语法完全相同。唯一的区别在于, dexp 导出的文件必须存放在客户端, dexpdp 导出的文件必须存放在服务器端。
使用 dexp 工具
dexp 工具需要从命令行启动。在 cmd 命令行工具中找到 dexp 所在安装目录 /dmdbms/bin ,输入 dexp 和参数后回车。参数在下一节详细介绍。
例如,将用户名和密码均为 SYSDBA ,
IP 地址为 192.168.0.248 ,
端口号为 8888 的数据库采用 FULL 方式完全导出。
/user/data 为数字证书路径。
导出文件名为 db_str.dmp ,
导出的日志文件名为 db_str.log ,
导出文件的路径为/mnt/dexp/data 。
./dexp USERID=SYSDBA/SYSDBA@192.168.0.248:8888##/user/data FILE=db_str.dmp DIRECTORY=/mnt/dexp/data LOG=db_str.log FULL=Y四种级别的导出方式
针对数据库对象,有FULL 、 OWNER 、 SCHEMAS 、 TABLES 四种导出方式可供选择。一次导出只能指定一种方式。可选参数,缺省为 SCHEMAS 。
FULL
导出数据库的所有对象。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
OWNER
OWNER 方式导出一个或多个用户拥有的所有对象
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01DIRECTORY=/mnt/data/dexpSCHEMAS
SCHEMAS 方式的导出一个或多个模式下的所有对象
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
注意
一般情况下,OWNER 与 SCHEMAS 导入导出是相同的。
但是用户可以包含多个模式,在这种情况下SCHEMAS 的导入导出是 OWNER 导入导出的一个子集。
TABLES
TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
和TABLES 导出有关的参数还有 QUERY 、 EXCLUDE 和 INCLUDE ,都是用来设置过滤条件的。
表名为小写tabname ,语句中应该写为 "\"tabname\"" 。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES="\"tabname\""
例如,表名为小写tabname" ,语句中应该写为 "\"tabname\"\"\"" 。
./dexp USERID=SYSDBA/SYSDBA\@192.168.0.248:8888 FILE=db_str.dmp LOG=db_str.log TABLES="\"tabname\"\"\""FUZZY_MATCH
FUZZY_MATCH 用于指定 TABLES 选项是否支持模糊匹配。可选参数,缺省为 N 。
语法如下:
FUZZY_MATCH=N/Y
N : TABLES 选项不支持模糊匹配,指定的表名与数据库中的表名必须精确匹配;
Y : TABLES 选项支持模糊匹配,指定的表名与数据库中的表名采用 LIKE 模糊查询匹配。
导出OTHER 模式下以 "R" 开头的表
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=OTHER.R% FUZZY_MATCH=Y
QUERY
QUERY 用于指定过滤条件来对表数据进行导出。可选参数。
导出 OTHER.READER 表中满足 "WHERE AGE=19" 条件的数据。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=OTHER.READER QUERY="WHERE AGE=19"
PARALLEL
PARALLEL 用于指定导出的过程中所使用的线程数目。可选参数,缺省为单线程。
如果 CPU 核心数为 N 的话,那一般来说 PARALLEL 为 N 或者 N+1 最合适。
设置PARALLEL=2 时则线程数为 2 。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp PARALLEL=2
TABLE_PARALLEL
TABLE_PARALLEL 用于指定导出每张表所使用的线程数。可选参数,缺省为单线程。如果 CPU 核数为 N 的话,那一般来说 TABLE_PARALLEL 为 N 或者 N+1 最合适。在 MPP 模式下会转换成单线程。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp TABLE_PARALLEL=3
EXCLUDE
EXCLUDE 用来批量设置导出时忽略的对象种类。可选参数。
设置 EXCLUDE=(CONSTRAINTS) ,将当前用户下的 table1 、 table2 的对象信息导出时不导出约束
./dexp SYSDBA/SYSDBA FILE=/mnt/data/db_str.dmp LOG=db_str.log TABLES=table1,table2 EXCLUDE=/(CONSTRAINTS/)
INCLUDE
INCLUDE 用来批量设置导出时包含的对象种类。可选参数。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1 DIRECTORY=/mnt/data/dexp INCLUDE=/(CONSTRAINTS,INDEXES/)CONSTRAINTS 、 TABLESPACE 、 GRANTS 、 INDEXES 、 TRIGGERS 、 ROWS
这些参数用来指定某类对象是否被导出。类别分别为约束、表空间、权限、索引、触发器和数据。
CONTRAINTS=N :设置不导出约束。可选参数。缺省该参数为 Y ,导出约束。
TABLESPACE=Y :设置导出的对象定义中包含表空间。可选参数。缺省该参数为 N ,不包含表空间。
GRANTS=N :设置不导出权限。可选参数。缺省该参数为 Y ,导出权限。
INDEXES=N :设置不导出索引。可选参数。缺省该参数为 Y ,导出索引。
TRIGGERS=N :设置不导出触发器。可选参数。缺省该参数为 Y ,导出触发器。
ROWS=N :设置不导出数据。可选参数。缺省该参数为 Y ,导出数据。
例如,设置ROWS=N 不导出表中的数据。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp NOLOGFILE=Y FULL=Y DIRECTORY=/mnt/data/dexp ROWS=N注意
此处,对象(CONSTRAINTS 、 GRANTS 、 INDEXES 、 TRIGGERS 、 ROWS )分别单独设置,和 EXCLUDE/INCLUDE 中批量设置功能一样。设置一个即可。 如果单独设置和批量设置同时出现时,那么以最后出现的那个为准。
NOLOGFILE
NOLOGFILE 用于设置是否使用日志文件。可选参数。
一旦设置NOLOGFILE=Y 不使用日志文件。此时即使存在 LOG 参数, LOG 参数也为无效。
例如,设置 NOLOGFILE=Y ,不使用日志文件。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp NOLOGFILE=Y FULL=Y DIRECTORY=/mnt/data/dexp
NOLOG
NOLOG 设置屏幕上是否显示日志信息。可选参数。
例如,设置NOLOG=Y 屏幕不显示日志信息。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp NOLOG=Y FULL=Y DIRECTORY=/mnt/data/dexp
PARFILE
PARFILE 用于将常用的参数设置保存到文件中,然后使用参数文件 PARFILE 进行导出、导入操作。可选参数。
例如,设置PARFILE=/mnt/data/dexp/para.txt 。
./dexp USERID=SYSDBA/SYSDBA PARFILE=/mnt/data/dexp/para.txt
其中,参数文件/mnt/data/dexp/para.txt 的内容如下:
FILE=db_str.dmp LOG=db_str.log TABLES=table1 DIRECTORY=/mnt/data/dexpFEEDBACK
FEEDBACK 用来指明在导出数据的过程中每间隔多少行打印一次进度信息。可选参数。
当参数缺省时,默认为0 ,只打印导出表的总行数。
例如,将整个数据库导出到文件dexp.dmp 中,并且在导出的过程中每隔 100 行打印一次进度信息。
./dexp SYSDBA/SYSDBA FULL=Y FILE=dexp.dmp DIRECTORY=/mnt/data/dexp FEEDBACK=100
COMPRESS
COMPRESS 指定是否压缩导出文件。可选参数。缺省为不压缩。
COMPRESS=Y/N
ENCRYPT 、 ENCRYPT_PASSWORD 、 ENCRYPT_NAME
这三个参数用来设置导出文件加密。可选参数。
例如,设置导出文件加密,密钥 abcdefg ,加密算法为 DES_CBC 。
./dexp SYSDBA/SYSDBA DIRECTORY=/mnt/data/dexp FILE=dk15.dmp LOG=db_str15.log ENCRYPT=Y ENCRYPT_PASSWORD=abcdefg ENCRYPT_NAME=DES_CBC FULL=YFILESIZE
FILESIZE 用于指定单个导出文件( FILE )大小或日志文件( LOG )大小的上限。可以按字节 [B] 、 K[B] 、 M[B] 、 G[B] 的方式指定大小。可选参数。
使用 FILESIZE 参数时, FILE (或 LOG )必须使用 %U 对名称进行自动扩展,否则报错。如果不指定 FILE (或 LOG ),那么即使设置了 FILESIZE 也不起作用。 FILE 和 LOG 同时使用 %U 时, FILESIZE 参数只需指定一次。
以下示例表示以FULL 方式导出实例,每个导出文件大小为 128m ,文件名以 data01.dmp 自动扩展,存储位置为 /mnt/data/dexp 目录。
./dexp USERID=SYSDBA/SYSDBA DIRECTORY=/mnt/data/dexp FILE=data%u.dmp LOG=data%u.log FILESIZE=128m FULL=YFILENUM
FILENUM 用于指定一个模板导出文件的个数。范围为 1~99 ,默认 99 。可选参数。 FILENUM 需要和 FILESIZE 搭配使用, FILENUM*FILESIZE 要大于等于导出的文件总大小,否则会报错空间不足。
DROP
DROP 用于设置导出后是否删除原表。可选参数。
DROP=Y/N
Y: 导出后删除原表,但不级联删除。
N 或缺省参数 : 导出后不删除原表。
DESCRIBE
DESCRIBE 用于设置导出数据文件的描述信息,记录在数据文件中。可选参数。
语法如下:
DESCRIBE=' 字符串 '
字符串:设置导出数据文件的描述信息,记录在数据文件中。缺省时,导出的数据文件中没有描述信息
HELP
输入dexp HELP 即可查看帮助信息。
例如,使用HELP 查看帮助信息。
./dexp HELP
7.2.10 逻辑还原
https://eco.dameng.com/document/dm/zh-cn/pm/dimp-logical%20import.html
dimp 工具名称有两种写法 dimp 和 dimpdp 。两者语法完全相同。唯一的区别在于, dimp 导入的文件必须存放在客户端, dexpdp 导入的文件必须存放在服务器端。
dimp 参数一览表
...
dimp 导入
导入 SYSDBA 、 OTHER 、 PERSON 模式中的数据( SCHEMAS=SYSDBA,OTHER,PERSON ),导入文件就是上一步导出的文件 dexp01.dmp ,导入日志 dimp02.log 放入 /emc_2/data/dimp 目录中。
./dimp SYSDBA/SYSDBA\@192.168.0.248:8888 FILE=/emc_2/data/dexp/dexp01.dmp LOG=dimp02.log DIRECTORY=/emc_2/data/dimp SCHEMAS=SYSDBA,OTHER,PERSON
八:参数管理
8.1 参数管理 - 图形化操作
使用图形化修改
不修改内存中的值,修改的是配置文件中的值,需要重启后生效
使用图形化修改
cd /dm8/tool
./console
SQL> select name,value,sys_value,file_value,type,description from v$parameter where name like '%SESSIONS%'; 行号 NAME VALUE SYS_VALUE FILE_VALUE TYPE DESCRIPTION ---------- ------------ ----- --------- ---------- ------- ------------------------------------- 1 MAX_SESSIONS 100 100 150 IN FILE Maximum number of concurrent sessions 已用时间: 5.997(毫秒). 执行号:410.8.2 参数管理 -命令行操作
8.2.1 参数类型
SELECT distinct type from v$parameter;
行号 TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
已用时间 : 152.622( 毫秒 ). 执行号 :401.
对应到 Oracle 的 Scope
both :既修改内存中的值,也修改配置文件中的值,重启不重启都一样生效
spfile :只修改配置文件中的值,重启数据库生效
memory :只修改内存中的值,重启数据库后恢复设置前的样子
达梦根据参数类型可分为,静态参数和动态参数两种,这两种均支持通过系统函数、 SQL 命令进行修改
静态参数:只能修改配置文件中的值,对内存中的值不进行修改,所以静态参数修改后使其生效的话,需要对数据库进行重启
动态参数:既能修改内存中的值,也能修改配置文件中的值,所以动态参数修改后是立即生效的
READ ONLY 只读参数,不能通过系统函数、SQL命令达到修改参数的目的,只能从dm.ini配置文件中进行修改 SYS 静态参数,可以通过系统函数、SQL命令达到修改参数的目的 IN FILE 动态参数(系统级),可以通过系统函数、SQL命令达到修改参数的目的 SESSION 动态参数(会话级),可以通过系统函数、SQL命令达到修改参数的目的,可针对某个会话进行修改,便于调试(不然要应用到整个线上系统,一旦出错,影响面就广了)8.2.2参数修改方式
使用 dm.ini 修改
# 直接编辑文件修改即可
vim /dm8/data/ 服务名称 dm.ini
SQL 语句修改
# 后面跟的是参数范围
alter system set ' 参数名 '=' 参数值 ' both | spfile | memory;
# 查询兼容参数类型
select name,value,sys_value,file_value,type,description from v$parameter where name = 'COMPATIBLE_MODE';# 修改兼容参数类型
alter system set 'COMPATIBLE_MODE'=2 spfile;
系统函数修改
查看可以使用的系统函数
select name,id from v$ifun t where name like '%SP_SET%_PARA%';
查看系统函数的参数类型
select * from v$ifun_arg t where id=584;
例子
修改 double 类型的参数值, UNDO_RETENTION 参数
SP_SET_PARA_DOUBLE_VALUE(1,'UNDO_RETENTION',90);
数据缓冲区
修改数据缓冲区大小,没有特殊指明的话就是修改 Normal 缓冲区的大小,参数对应的是 BUFFER
Normal 对应参数 BUFFER 、 Fast 对应参数为 FAST_POOL_PAGES 、 Recycle 对应参数为 RECYCLE 、 Keep 对应参数为 KEEP
alter system set 'BUFFER'=2000 spfile;
九:作业管理
9.1 作业管理 - 图形化操作
9.1.1 启动 MANAGER 管理工具
[dmdba@cjc-db-01 ~]$ manager
连接数据库
9.1.2 创建代理环境
SQL> select OWNER,TABLE_NAME from dba_tables where table_name in ('SYSJOBS');
LINEID OWNER TABLE_NAME
---------- ------ ----------
1 SYSJOB SYSJOBS
操作员
SQL> select username from dba_users;
LINEID USERNAME
---------- ----------
1 SYSAUDITOR
2 SYSSSO
3 DMHR
4 CJC
5 SYSDBA
6 SYS
6 rows got
创建、修改和删除操作员可以通过以下两种方式来实现。一是通过系统过程来实现;二是通过图形化客户端MANAGER管理工具实现。用户选择其中的一种即可。
9.1.3 新建操作员
显示 创建的语句
可以对操作员进行修改和删除
9.1.4 新建作业
作业步骤
Add 添加
步骤类型
先测试脚本执行的作业
STEP NAME 不能有特殊字符?否则最后提交时报错:
可以用类似这样的 NAME
SQL> select * from cjc.t1;
LINEID ID
---------- -----------
1 1
used time: 2.444(ms). Execute id is 901.
作业调度
每天 15:50 开始执行
查看自动生成的 DDL 语句
call SP_CREATE_JOB('CJC_JOB',1,0,'',0,0,'',0,'TEST 20221019 ...'); call SP_JOB_CONFIG_START('CJC_JOB'); call SP_ADD_JOB_STEP('CJC_JOB', 'insert into script ...', 0, 'insert into cjc.t1 values(100);', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('CJC_JOB', 'CJC_SCH', 1, 1, 1, 0, 0, '15:50:00', NULL, '2022-10-19 15:37:25', NULL, ''); call SP_JOB_CONFIG_COMMIT('CJC_JOB');
保存脚本
OK
警报
达梦数据库还提供了警报的功能,允许用户定义一些自己想要捕获的动作,如果这些动作发生时,系统就会将对应信息存储到指定的表中,将想要得到的信息存储起来,以便做到实时的监控。
创建、修改和删除警报可以通过以下两种方式来实现。一是通过系统过程来实现;二是通过图形化客户端 MANAGER 管理工具实现。用户选择其中的一种即可。
新增警告
创建警告
通知警告
DDL
call SP_CREATE_ALERT('SCRIPT_ALERT',1,0,6,-1,10,''); call SP_ALERT_ADD_OPERATOR('SCRIPT_ALERT','TOM',1,1);
监控作业
监控作业是指把作业的运行情况通过电子邮件发送给作业操作员。邮件成功发送的前提有两个:一是为监控服务配置管理员;二是开启监控服务。
https://eco.dameng.com/document/dm/zh-cn/pm/monitoring-job.html
查看数据
SQL> select * from cjc.t1;
LINEID ID
---------- -----------
1 1
2 100
used time: 2.045(ms). Execute id is 905.
作业执行历史
9.2 作业管理 - 命令行操作
https://eco.dameng.com/document/dm/zh-cn/pm/typical-example.html
定时备份 示例
https://eco.dameng.com/document/dm/zh-cn/ops/scheduled-backup.html
创建作业环境
SP_INIT_JOB_SYS(1);脚本备份
Linux 定时备份脚本
1. 每周六晚上 23 : 30 定时全库备份
call SP_CREATE_JOB('back_full',1,0,'',0,0,'',0,'back_full'); call SP_JOB_CONFIG_START('back_full'); call SP_ADD_JOB_STEP('back_full', 'back_full', 6, '01000000/opt/dmdbms/data/BAK', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('back_full', 'back_full', 1, 2, 1, 64, 0, '23:30:00', NULL, '2020-03-27 16:35:56', NULL, ''); call SP_JOB_CONFIG_COMMIT('back_full');2. 每周一、周二、周三、周四、周五、周日晚上 23 :30 定时增量备份
call SP_CREATE_JOB('backup_inc',1,0,'',0,0,'',0,'backup_inc'); call SP_JOB_CONFIG_START('backup_inc'); call SP_ADD_JOB_STEP('backup_inc', 'backup_inc', 6, '11000000/opt/dmdbms/data/BAK|/opt/dmdbms/data/BAK', 1, 2, 0, 0, NULL, 0); --call SP_ADD_JOB_STEP('backup_inc', 'backup_inc', 6, '11000000/opt/dmdbms/data/BAK|/opt/dmdbms/data/BAK', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('backup_inc', 'backup_inc', 1, 2, 1, 63, 0, '23:33:00', NULL, '2020-03-27 22:03:58', NULL, ''); call SP_JOB_CONFIG_COMMIT('backup_inc');3. 每天 00 :00 删除 15 天以前的数据。删除前请先提前将备份文件转移到单独的备份服务器
call SP_CREATE_JOB('JOB_DEL_BAK_TIMELY',1,0,'',0,0,'',0,'JOB_DEL_BAK_TIMELY'); call SP_JOB_CONFIG_START('JOB_DEL_BAK_TIMELY'); call SP_ADD_JOB_STEP('JOB_DEL_BAK_TIMELY', 'JOB_DEL_BAK_TIMELY', 0, 'call SF_BAKSET_BACKUP_DIR_ADD(''DISK'', ''/data/dmdbms/data/BAK''); CALL SP_DB_BAKSET_REMOVE_BATCH(''DISK'', NOW()-15);', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('JOB_DEL_BAK_TIMELY', 'JOB_DEL_BAK_TIMELY', 1, 1, 1, 0, 0, '00:00:00', NULL, '2020-03-27 22:06:13', NULL, ''); call SP_JOB_CONFIG_COMMIT('JOB_DEL_BAK_TIMELY');十: ODBC
10.2 查看 ODBC 配置文件
odbcinst -j10.2配置 odbc.ini 文件
cp /etc/odbc.ini /etc/odbc.ini_20221017bak vi /etc/odbc.ini [dm8] Description = DM ODBC DSN Driver = DM8 ODBC DRIVER SERVER = cjc-db-01 UID = SYSDBA PWD = Dameng123 TCP_PORT = 523810.3配置 odbcinst.ini
cp /etc/odbcinst.ini /etc/odbcinst.ini_20221017bak vi /etc/odbcinst.ini [DM8 ODBC DRIVER] Description = ODBC DRIVER FOR DM8 DRIVER = /dm8/bin/libdodbc.so10.4测试 odbc连接数据库
su - dmdba isql dm810.5 ODBC环境准备
如果没有对应命令,需要提前安装
rpm -qa|grep unixODBC配置本地 YUM
vi /etc/yum.repos.d/oracle-linux-ol7.repo [Oracle_Linux_7] name=Oracle Linux 7 baseurl=file:///iso gpgcheck=0 enabled=1挂载操作系统镜像
mount OracleLinux-R7-U9-Server-x86_64-dvd.iso /iso -o loop yum -y install unixODBC.x86_64### 拷贝离线包
###cp /iso/Packages/unixODBC-devel-2.3.1-14.0.1.el7.x86_64.rpm /soft/dm/ ###cp /iso/Packages/unixODBC-2.3.1-14.0.1.el7.x86_64.rpm /soft/dm/安装 ODBC
解压 ODBC ,没有这个 tar 包的话需要上传到这个目录下
tar -zxvf /opt/unixODBC-2.3.0.tar.gz
进入到 odbc 目录进行源码安装
cd unixODBC-2.3.0
./configure
make
make install
十一:卸载
11.1 卸载 - 图形化操作
https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.html
[root@host02 ~]# echo $DISPLAY
localhost:10.0
[root@host02 ~]# xhost +
[dmdba@host02 ~]$ cd /dm8/
[dmdba@host02 dm8]$ sh uninstall.sh
[root@host02 ~]# cd /dm8/
[root@host02 dm8]# sh uninstall.sh
删除文件,用户,组等
11.2 卸载 - 命令行操作
卸载 数据库实例 + 软件
11.2.1 停服务
systemctl stop DmServiceCJC.service systemctl stop DmServiceDMSERVER.service11.2.2卸载
su - dmdba /dm8/uninstall.sh -i Whether to uninstall DM database(/dm8/)? (y/Y:Yes n/N:No):Y Whether to deletet the dm_svc.conf file? (y/Y:Yes n/N:No):Y11.2.3执行脚本
su - root /dm8/root_uninstaller.sh
[dmdba@cjc-db-01 ~]$ cat /dm8/root_uninstaller.sh #!/bin/sh #run by root RUID=`/usr/bin/id|awk -F\( '{print $1}'|awk -F\= '{print $2}'` if [ ${RUID} != "0" ] then echo "Must run the script by root!" exit 1 fi echo "Delete DmServiceCJC service" systemctl disable DmServiceCJC.service rm -f /usr/lib/systemd/system/DmServiceCJC.service rm -f "/dm8/bin/DmServiceCJC" rm -f "/dm8/bin/DmServicedameng" echo "Delete /etc/dm_svc.conf" rm -f /etc/dm_svc.conf11.2.4 删除用户、组
userdel -r -f dmdba groupdel dinstall11.2.5删除文件
rm -rf /dm8/*清理残留的服务
systemctl list-unit-files |grep -i dms DmServicedameng.service disabled find / -name DmService* /usr/lib/systemd/system/DmServicedameng.service rm -f /usr/lib/systemd/system/DmServicedameng.service
###chenjuchao 20221023 20:30###