安装, 实例创建、 参数修改、 表空间创建、 用户、 角色权限、 表、 约束、 导入脚本数
据, 索引、 视图、 物理备份、 物理还原与恢复、 逻辑导入导出、 DM 作业, ODBC。
REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
#达梦数据库安装
#关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
groupadd dinstall
useradd -g dinstall dmdba
passwd dmdba
mkdir -p /dm8
chown dmdba:dinstall -R /dm8
vi /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
#临时生效:
limit -n 65536
#问题: /tmp 分区大小不足
mkdir -p /opt/tmp
chown dmdba:dinstall /opt/tmp -R
su - dmdba
vi .bash_profile
export DM_INSTALL_TMPDIR=/opt/tmp
. .bash_profile
cd /mnt
./DMInstall.bin
#软件安装
#挂载安装文件
mount -o loop /opt/dm8_20220701_x86_rh6_64_ent/ dm8_20220701_x86_rh6_64_ent_8.1.2.128.iso /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
#设置图形化界面:
xhost +
access control disabled, clients can connect from any host
echo $DISPLAY
:0.0
su - dmdba
export DISPLAY=:0.0
xhost +
access control disabled, clients can connect from any host
管理重做日志?
Alter database add logfile ‘XXX’ size xx;–添加联机日志
Alter database resize logfile ‘XXX’ to xx; --修改联机日志大小
Alter database rename logfile ‘XXX’ to xx; --迁移联机日志
参数修改方法:
(1) SQL 语句
alter system set ‘参数名’ =参数值 spfile|memory|both;
SQL> select name, value,type from v$parameter t where t.name like
'COMPATIBLE_MODE';
--达梦数据库在 MOUNT 状态下开归档
select arch_mode from SYS."V$DATABASE";
select * from SYS."V$DM_ARCH_INI";
(1) SQL开启归档
alter database mount;
alter database ARCHIVELOG;
alter database add ARCHIVELOG 'type=local, dest=/dm8/arch,
file_size=64,space_limit=10240';
alter database open;
(3) SQL关闭归档
alter database mount;
alter database noARCHIVELOG;
alter database delete ARCHIVELOG 'type=local, dest=/dm8/arch,
file_size=64,space_limit=10240';
alter database open;
#创建用户、授权
创建用户:
用户命名规则: 以字母开头, a-z,0-9,$#_, 长度不超过 128 个字符
存储位置: 表空间, 如果不指定表空间, 默认表空间就是 main
权限: 系统权限、 对象权限、 角色
密码策略:PWD_POLICY
资源限制: 密码过期、 账户锁定等
创建 TEST 用户, 密码为 Dameng123, 默认表空间为 TEST。 用户拥有创建表、 创建视图的权
限。
用户口令最长为 48 字节,创建用户语句中的 PASSWORD POLICY 子句用来指定该用
户的口令策略, 如果没有指定, 则使用系统默认口令策略(由参数 PWD_POLICY 指定), 系
统支持的口令策略有:
⚫ 0 无限制。但总长度不得超过 48 个字节
⚫ 1 禁止与用户名相同
⚫ 2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值
⚫ 4 至少包含一个大写字母(A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置 口
令策略为 2+4=6 即可。
系统口令策略的修改:
select * from SYS."V$PARAMETER" t where name ='PWD_POLICY';
alter system set 'PWD_POLICY' =31 BOTH;
create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size 32
CACHE = NORMAL;
create user "TEST" identified by "Dameng123" password_policy 0
default tablespace "TEST";
grant "PUBLIC","SOI","VTI" to "TEST";
grant CREATE TABLE,CREATE VIEW to "TEST";
查看 test 用户被授予的系统权限
select * from dba_sys_privs where GRANTEE='TEST';
grant select on DMHR.DEPARTMENT to TEST;
grant select on DMHR.EMPLOYEE to TEST;
create table t1 as select depart_name,manager_id from dmhr.departemt;
#7.3 创建角色
角色就是一组权限的集合, 使用角色可以方便权限管理。 角色可以被授予给角色, 也可以被
授予给用户。
create role "R1";
grant "RESOURCE" to "R1";
grant CREATE TABLE,CREATE INDEX to "R1";
grant UPDATE("PHONE_NUM") on "DMHR"."EMPLOYEE" to "R1";grant SELECT on "DMHR"."DEPARTMENT" to "R1";
grant UPDATE("EMAIL") on "DMHR"."EMPLOYEE" to "R1";
grant SELECT on "DMHR"."EMPLOYEE" to "R1";
查询被授予对象权限:
SELECT * FROM SYS.DBA_TAB_PRIVS WHERE
DBA_TAB_PRIVS.GRANTEE='R1';
查询被授予到列级的对象对象权限:
select * from SYS.DBA_COL_PRIVS WHERE
DBA_COL_PRIVS.GRANTEE='R1';
查询被授予的角色:
select * from DBA_ROLE_PRIVS where grantee='R1';
回收 R1 角色创建索引的权限
revoke CREATE INDEX from "R1";
回收 R1 角色查看 DMHR.DEPARTMENT 表的权限; 回收 R1 角色更新 DMHR.EMPLOYEE.EMAIL
表的权限。
7.4 修改用户
修改用户密码
alter user "TEST" identified by "dameng123";
修改用户默认表空间
alter user "TEST" default tablespace "MAIN";
锁定/解锁用户
alter user test account lock;
alter user test account UNLOCK;
修改用户权限
grant "R1" to "TEST";
#创建表空间
创建表空间 TEST, 数据文件/dm8/data/DAMENG/TEST01.DBF,初始文件大小为 50M,开
启自动扩展, 每次扩展 1M,最大可扩展到 1G.
create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size 32 autoextend on next
1 maxsize 1024 ;
创建表空间 TBS,数据文件存放路径/dm8/data/DAMENG,包含两个数据文件,分别为
TBS01.DBF 和 TBS02.DB, 每个数据文件的初始大小为 100M,开启自动扩展, 每次扩展 2M,最
大可扩充到 10G.
create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 100
autoextend on next 2 maxsize 10240, '/dm8/data/DAMENG/TBS02.DBF' size 100
autoextend on next 2 maxsize 10240 CACHE = NORMAL;
打开数据文件的自动扩展:
alter tablespace tbs datafile | '/dm8/data/TBS/TBS01.DBF' AUTOEXTEND on NEXT 4 |
数据文件的迁移:
alter tablespace tbs offline;
alter tablespace tbs RENAME DATAFILE 'TBS01.DBF' TO '/dm8/data/TBS/TBS01.DBF';
alter tablespace tbs RENAME DATAFILE 'TBS02.DBF' TO '/dm8/data/TBS/TBS02.DBF';
alter tablespace tbs online;
#创建约束
获取表结构信息
select SYS.DBMS_METADATA.get_ddl('TABLE','TEST1','TEST')
from dual;
---唯一约束
创建唯一约束, 会自动创建唯一索引, 唯一约束会忽视 null, null 什么都不是。
create table "TEST"."TEST2"
(
"ID" INT,
"NAME" VARCHAR(30)
) s
torage(initial 1, next 1, minextents 1, fillfactor 0)
; a
lter table "TEST"."TEST2" add unique("NAME");
---主键约束
主键约束=非空+唯一约束, 一个表只能有 1 个主键。
create table "TEST"."TEST3"
(
"ID" INT,
"NAME" VARCHAR(50)
) s
torage(initial 1, next 1, minextents 1, fillfactor 0, on
"TEST")
;alter table "TEST"."TEST3" add constraint primary key("NAME");
---外键约束
create table "TEST"."TEST4"
(
"ID" INT not null ,
"NAME" VARCHAR(50),
primary key("ID")
) s
torage(initial 1, next 1, minextents 1, fillfactor 0)
; alter table "TEST"."TEST4" add constraint foreign key("NAME") references
"TEST"."TEST3"("NAME");
---检查约束
create table "TEST"."TEST5"
(
"ID" NUMBER(10, 3)
) s
torage(initial 1, next 1, minextents 1, fillfactor 0)
; a
lter table "TEST"."TEST5" add check(id > 8);
#修改表
(2) 修改表
增加列
alter table "TEST"."TEST1" add column("NAME" VARCHAR(50));
删除列
alter table "TEST"."TEST1" drop column "NAME";
对表进行重命名
alter table test.TEST8 rename to test1;
对列进行重命名
alter table test.test1 RENAME COLUMN name to name2;
修改列的数据类型
alter table "TEST"."TEST1" modify "NAME2" VARCHAR2(50);
(3) 删除表
drop table "TEST"."TEST5" restrict;
DM 视图: 简单视图、 复杂视图、 物化视图
视图就是查询语句, 一个虚拟表, 没有真实数据。
创建视图的语法:
Create view **** as select ****;
Create or replace view **** as select ****;
创建视图create view test.view_data as
select
a.employee_name,a.salary,a.department_id,b.department_name
from dmhr.employee a ,dmhr.DEPARTMENT b
where a.DEPARTMENT_ID=B.DEPARTMENT_ID
and a.DEPARTMENT_ID=101;
删除视图
drop view "TEST"."VIEW_DATA" restrict;
1) 表空间不足
---添加数据文件
alter tablespace "TEST" add datafile '/dm8/data/DAMENG/TEST02.DBF' size
32 autoextend on next 1 maxsize 1024;
---resize 数据文件大小
alter tablespace "TEST" resize datafile 'TEST01.DBF' to 100;
2)表空间迁移
alter tablespace "TEST" offline;
修改数据文件的路径
alter tablespace "TEST" rename datafile
'/dm8/data/DAMENG/TEST01.DBF' to '/dm8/TEST01.DBF';
修改 TEST 表空间状态为联机
alter tablespace "TEST" online;
( 3) 修改 TEMP 表空间大小
将 TEMP 表空间的大小修改为 100M.
sp_set_para_value(2,'TEMP_SIZE',100);
( 4) 表空间删除
drop tablespace "TEST";
#创建表、索引、触发器
8.4.1 创建索引
create index "DMHR"."IND_EMP_NAME" on
"DMHR"."EMPLOYEE"("EMPLOYEE_NAME") ;8.4.2 维护索引
重建索引:
ALTER INDEX DMHR.IND_EMP_NAME REBUILD;
删除索引:
drop index "DMHR"."IND_EMP_NAME";
注意: 在业务高峰期, 不要新建、 重建、 删除索引。
#创建约束
#修改参数
alter system set 'COMPATIBLE_MODE'=2 spfile;
#修改数据库密码策略
设置系统默认口令策略。
0: 无策略;
1: 禁止与用户名相同;
2: 口令长度不小于 9;
4: 至少包含一个大写字母(
A-Z) ;
8 : 至少包含 一个数字(0-9) ;
16: 至少包含一个标点符 号(英文输入法状态下, 除―和空格外的所有符 号; 若为其他数字, 则表示配
置值的和, 如 3 =1+2,表示同时启用第 1 项和第 2 项策略。 当 COMPATIBLE_MODE=1 时,
PWD_POLICY 的实 际值均为 0
修改数据库密码策略为禁止与用户名相同并且口令长度不小于 9
修改方法一:
sp_set_para_value(1,'PWD_POLICY',3);
修改方法二:
alter system set 'PWD_POLICY'=3 both;
#添加重做日志
添加重做日志文件:
alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 300;
修改重做日志文件大小:
alter database RESIZE logfile '/dm8/data/DAMENG/DAMENG01.log' to 300;
alter database RESIZE logfile '/dm8/data/DAMENG/DAMENG02.log' to 300;
注意: 重做日志文件可以增加, 但是不能删除; 重做日志文件可以扩大, 但是不能缩小
#导入数据
通过脚本文件将数据批量导入到数据库的表中
Start /home/dmdba/test2.sql
或者
`/home/dmdba/test2.sql
创建视图
create or REPLACE view v_empnum
as
select b.DEPARTMENT_NAME, a.department_id, count(*) empnum
from t_emp a, t_dept b
61
where a.department_id = b.DEPARTMENT_ID
group by b.DEPARTMENT_NAME, a.department_id
having count(*) >=25;
#备份还原
脱机备份
脱机备份可以使用 dmrman(命令行)、 console DM 控制台工具(图形化)
RMAN> backup database '/dm8/data/DAMENG/dm.ini' to DMFULLBAK03
backupset '/dm8/backup/full/DMFULLBAK03';
backup database '/dm8/data/DAMENG/dm.ini' to DMFULLBAK03 backupset
'/dm8/backup/full/DMFULLBAK03';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
64
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[6245573], file_lsn[6245573]
Processing backupset /dm8/backup/full/DMFULLBAK03
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
backup successfully!
联机备份需要数据库开启归档。
backup database;
backup database INCREMENT;
backup database to DMFULLBAK01 BACKUPSET '/dm8/backup/full/DMFULLBAK01';
select * from SYS."V$BACKUPSET";
select * from SYS."V$IFUN" t where t.name like '%BAKSET%';
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/full/');
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/incr/');
65
backup tablespace dmtbs;
backup tablespace dmtbs INCREMENT to DMTBSINCR01 BACKUPSET
'/dm8/backup/incr/DMTBSINCR01';
backup table dmtest.T_EMP;
backup ARCHIVE LOG all;
逻辑备份
全库导出:
dexp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=full.dmp log=full.log
full=y
按用户导出:
按模式导出:
dexp | userid=sysdba/Dameng123:5238 | directory=/dm8/backup/dexp | file=dmtest.dmp |
log=dmtest.log schemas=DMTEST | |||
按表导出: | dexp]$ | dexp | |
userid=sysdba/Dameng123:5238 |
directory=/dm8/backup/dexp file=dmtest_emp.dmp log=dmtest_emp.log tables=DMTEST.T_EMP
全库导入:
dimp userid=sysdba/Dameng123 directory=/dm8/backup/dexp file=full.dmp log=impfull.log
full=y
将 DMTEST 模式下 T_EMP 表导入到 HRTEST 用户下:
[dmdba@KylinDCA04 dexp]$ dimp userid=hrtest/Dameng123@127.0.0.1:5238
directory=/dm8/backup/dexp file=dmtest_emp.dmp log=dmtest_emp.log tables=DMTEST.T_EMP
remap_schema=DMTEST:HRTEST
insert into DMTEST.V_DEPT(V_DEPT.DEPARTMENT_ID,
V_DEPT.DEPARTMENT_NAME)
values( 888888, 'aaaa');