用户管理
在DM数据库中,用户管理主要涉及用户、权限和角色三方面。
用户是用来连接数据库并进行相关操作的。
模式是一个用户拥有的所有数据对象的集合,每个用户都有自己默认的模式,用户默认的模式名和用户名相同。
权限是指执行特定类型SQL命令或访问其他模式对象的权利,用于限制用户可执行的操作。
角色是将具有相同权限的用户组织在一起,这一组具有相同权限的用户称之为角色。
用户管理
查看所有角色
SQL> select * from dba_roles;
查看所有用户的信息
SQL> select username,user_id,account_status from dba_users;
查看所有用户对应的角色
SQL> select * from dba_role_privs;
创建用户
SQL> create user u_ljk identified by “dameng@123”;
对用户授权
SQL> grant public,resource to u_ljk;
登录用户
SQL> conn u_ljk/”dameng@123”
查看当前用户
SQL> select username from user_users;
或
SQL> select user();
表管理
直接创建
SQL> create table u_ljk.t1_ljk(id int,name varchar2(20));
SQL> insert into u_ljk.t1_ljk values(1,”JOY”);
SQL> commit;
查询创建
SQL> create table u_ljk.t2_ljk as select * from sysobjects;
重命名表
SQL> alter table u_ljk.t1_ljk rename to t_ljk1;
添加列
SQL> alter table u_ljk.t_ljk1 add column(age int);
SQL> desc t_ljk1;
删除列
SQL> alter table u_ljk.t_ljk1 drop column “AGE”;
修改列类型和长度
SQL> alter table u_ljk.t_ljk1 modify “NAME” varchar2(30);
添加主键
SQL> alter table u_ljk.t_ljk1 add primary key(“ID”);
索引管理
达梦支持的索引:二级索引、位图索引、唯一索引、复合索引、函数索引、分区索引等。默认的表是索引组织表。
查看索引
SQL> select table_name,index_name from dba_indexes where table_name=’T_LJK1’;
创建索引
SQL> create table emp as select * from dmhr.employee;
SQL> create tablespace TBS_INDEX datafile ‘/dmdbms/dm8/data/DAMENG/ TBS_INDEX 01.DBF’ size 32 autoextend on next 10 maxsize 128;
SQL> create index idx_emp on emp(employee_id) tablespace TBS_INDEX;
SQL> select table_name,index_name from dba_indexes where table_name=’EMP’;
重建索引
SQL> alter index IDX_EMP rebuild;
删除索引
SQL> drop index idx_emp;
视图管理
视图是从用户的实际需要中抽取出来的虚表。
创建视图
SQL> create view v1_ljk as select * from dmhr.employee where employee_id=10001 ;
查看视图定义
SQL> select view_name,text from dba_view where view_name=” v1_ljk”;
编译视图
SQL> alter view v1_ljk compile;
删除视图
SQL> drop view v1_ljk;
表空间管理
创建表空间
SQL> select * from dba_tablespaces;
SQL> select tablespace_name,file_name,status from dba_data_files order by 1;
SQL> create tablespace test_ljk datafile ‘/dmdbms/dm8/data/DAMENG/TEST_LJK01.DBF’ size 64,’/dmdbms/dm8/data/DAMENG/TEST_LJK02.DBF’ size 64;
扩展表空间
表空间的扩展有两种方式
- 扩展现有的数据文件大小
SQL> alter tablespace test_ljk resize datafile ’/dmdbms/dm8/data/DAMENG/TEST_LJK01.DBF’ size 128; - 增加新的数据文件
SQL> alter tablespace test_ljk add datafile ’/dmdbms/dm8/data/DAMENG/TEST_LJK03.DBF’ size 64;
验证
SQL> select tablespace_name,file_id,bytes/1024/1024 as “size”,file_name from dba_data_files where tablespace_name=’TEST_LJK’;
修改数据文件自动扩展属性
SQL> alter tablespace test_ljk datafile ‘/dmdbms/dm8/data/DAMENG/TEST_LJK01.DBF’ autoextend on next 10 maxsize 200;
修改表空间名
SQL> alter tablespace test_ljk rename to t_ljk;
SQL> select tablespace_name,file_id,bytes/1024/1024 as “size”,file_name from dba_data_files where tablespace_name=’T_LJK’;
移动数据文件
修改数据文件前,将表空间调整为脱机状态。
SQL> alter tablespace T_LJK offline;
SQL> alter tablespace T_LJK rename datafile ’/dmdbms/dm8/data/DAMENG/TEST_LJK01.DBF’ to ’/dmdbms/dm8/T_DATA/DAMENG/TEST_LJK01.DBF’;
SQL> alter tablespace T_LJK online;
SQL> select tablespace_name,file_id,bytes/1024/1024 as “size”,file_name from dba_data_files where tablespace_name=’T_LJK’;
以上移动为物理移动数据文件,也可逻辑修改数据文件名。
SQL> alter tablespace T_LJK rename datafile ’/dmdbms/dm8/data/DAMENG/TEST_LJK01.DBF’ to ’/dmdbms/dm8/data/DAMENG/T_LJK01.DBF’;
删除表空间
SQL> drop tablespace T_LJK;
用户只能删除自己创建的表空间,删除表空间会删除其拥有的所有数据文件且只能删除未使用过的表空间
作业管理
创建系统表
执行系统过程SP_INIT_JOB_SYS()可创建和删除系统表,这些表被建在SYSJOB模式下
SQL> SP_INIT_JOB_SYS(1); —创建SYSJOB模式并创建所需的系统表
SQL> SP_INIT_JOB_SYS(0); —删除SYSJOB模式及所拥有的系统表
或
在DM Manager管理工具中
创建
右击“代理”,选择“创建代理环境”即可。
删除
右击“代理”,选择“清理代理环境”即可。
创建作业
创建作业,使用DM Manager管理工具比较便捷
右击“作业”,选择“新建作业”
常规中,填写作业名和作业描述
选择作业步骤,添加作业步骤。
设置完,可以看到添加的作业步骤
选择作业调度,点击“新建”
设置作业执行的时间和频率
DDL语句:
call SP_CREATE_JOB(‘JOB1_LJK’,1,0,‘’,0,0,‘’,0,‘执行备份操作’);
call SP_JOB_CONFIG_START(‘JOB1_LJK’);
call SP_ADD_JOB_STEP(‘JOB1_LJK’, ‘T1’, 6, ‘00000000D:\dm\bak_ljk’, 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(‘JOB1_LJK’, ‘S1’, 1, 2, 1, 1, 0, ‘17:58:49’, NULL, ‘2022-12-01 17:58:49’, NULL, ‘’);
call SP_JOB_CONFIG_COMMIT(‘JOB1_LJK’);
至此,作业创建完成。
查看作业
SQL> select * from sysjob.sysjobs;
SQL> select * from sysjob.sysjobschedules;
SQL> select * from sysjob.sysjobhistories;
或
右击作业“JOB1_LJK”,选择“查看作业历史信息”可查看作业历史执行记录
备份与还原
数据库备份是 DBA 日常最重要的工作内容。备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。
启动归档
SQL> alter database mount;
SQL> alter database add archivelog ‘DEST=/dmdbms/dm8/arch,TYPE=local,FILE_SIZE=128,SPACE_LIMIT=0;
SQL> alter database archivelog;
SQL> alter database open;
SQL> select arch_mode from v
d
a
t
a
b
a
s
e
;
S
Q
L
>
s
e
l
e
c
t
a
r
c
h
n
a
m
e
,
a
r
c
h
t
y
p
e
,
a
r
c
h
d
e
s
t
,
a
r
c
h
f
i
l
e
s
i
z
e
f
r
o
m
v
database; SQL> select arch_name,arch_type,arch_dest,arch_file_size from v
database;SQL>selectarchname,archtype,archdest,archfilesizefromvdm_arch_ini;
SQL> alter system switch logfile;
逻辑备份与还原
逻辑导出/导入(dexp/dimp)支持如下四种级别的操作
数据库级(FULL):导出或导入整个数据库中的所有对象
用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象
表级(TABLE):导出或导入一个或多个指定的表或表分区
全库导出/导入
$dexp SYSDBA/SYSDBA file=full_ljk.dmp log=exp_full_ljk.log directory=/dmdbms/bak_ljk full=y;
$dimp SYSDBA/SYSDBA file=full_ljk.dmp log=imp_full_ljk.log directory=/dmdbms/bak_ljk full=y table_exists_action=replace;
按用户导出/导入
$dexp SYSDBA/SYSDBA file=u1_ljk.dmp log=exp_u1_ljk.log directory=/dmdbms/bak_ljk owner=u1_ljk;
导入A用户(u1_ljk):A用户(u1_ljk)
$dimp SYSDBA/SYSDBA file= u1_ljk.dmp log=imp_u1_ljk.log directory=/dmdbms/bak_ljk owner=u1_ljk table_exists_action=replace;
导入A用户(u1_ljk):B用户(u2_ljk)
$dimp SYSDBA/SYSDBA file= u1_ljk.dmp log=imp_u1_ljk.log directory=/dmdbms/bak_ljk remap_schema=U1_LJK:U2_LJK table_exists_action=replace;
注:remap_schema中的模式名要用大写,否则将导入原来的模式中。
按模式导出/导入
$dexp SYSDBA/SYSDBA file=s_u1_ljk.dmp log=exp_s_u1_ljk.log directory=/dmdbms/bak_ljk schema=u1_ljk;
$dimp SYSDBA/SYSDBA file= s_u1_ljk.dmp log=imp_ s_u1_ljk.log directory=/dmdbms/bak_ljk remap_schema=U1_LJK:U2_LJK table_exists_action=replace;
注:remap_schema中的模式名要用大写,否则将导入原来的模式中。
按表导出/导入
$dexp u1_ljk/”dameng@123” file=t1_t2_ljk.dmp log=exp_t1_t2_ljk.log directory=/dmdbms/bak_ljk tables=u1_ljk,t2_ljk;
导入原用户(u1_ljk)下
$dexp u1_ljk/”dameng@123” file=t1_t2_ljk.dmp log=imp_t1_t2_ljk.log directory=/dmdbms/bak_ljk tables=u1_ljk,t2_ljk table_exists_action=replace;
;
导入其他用户(u2_ljk)下
$dexp u1_ljk/”dameng@123” file=t1_t2_ljk.dmp log=imp_t1_t2_ljk.log directory=/dmdbms/bak_ljk tables=u1_ljk,t2_ljk table_exists_action=replace remap_schema=U1_LJK:U2_LJK;
注:连接用户必须是对象的原用户,然后加上remap_schema=U1_LJK:U2_LJK导入到新用户
联机备份与还原
联机备份在数据库级别只支持备份操作,不支持还原。
数据库级别的还原必须在脱机状态下进行。
默认的备份路径为dm.ini中BAK_PATH参数配置的路径,若未配置,则使用SYSTEM_PATH下的bak目录。
全备
full参数可以省略,不指定备份类型,默认为完全备份。
SQL> backup database backupset ‘/dmdbms/full_bak’;
增量备份
SQL> backup database increment with backupdir ‘/dmdbms/full_bak’ backupset ‘/dmdbms/inc_bak’;
备份还原表空间
SQL> backup tablespace main backupset ‘/dmdbms/tbs_bak’;
校验表空间备份
SQL> select sf_bak_check(‘DISK’,’ /dmdbms/tbs_bak’);
修改表空间为脱机
SQL> alter tablespace main offline;
SQL> restore tablespace main from backupset ‘/dmdbms/tbs_bak’;
修改表空间联机
SQL> alter tablespace main online;
表级备份还原
执行表还原,数据库必须处于OPEN状态,MOUNT和SUSPEND状态下不允许执行表还原。
备份表
SQL> backup table u1_ljk backupset ‘/dmdbms/t_bak’;
还原表
SQL> restore table u1_ljk from backupset ‘/dmdbms/t_bak’;
还原表时,表必须存在,不支持drop的恢复。(还原的是delete或truncate操作)
如果表上有索引和约束,需先还原表结构,即先执行以下操作,再进行还原
SQL> restore table u1_ljk struct from backupset ‘/dmdbms/t_bak’;
脱机备份与还原
使用RMAN进行完全备份
(数据库必须脱机状态)
RMAN> backup database ‘/dmdbms/dm8/data/DAMENG/dm.ini full backupset ‘/dmdbms/full_bak’;
使用RMAN进行增量备份
RMAN> backup database ‘/dmdbms/dm8/data/DAMENG/dm.ini increment with backupdir ‘/dmdbms/full_bak’ backupset ‘/dmdbms/inc_bak’;
注:脱机增量备份要求两次备份之间数据库必须有操作,否则备份过程中会报错。
还原数据库
数据库恢复有三种方式:更新DM_MAGIC恢复、从备份集恢复和从归档中恢复
1、 更新DB_MAGIC恢复
备份数据库
RMAN> backup database ‘/dmdbms/dm8/data/DAMENG/dm.ini full backupset ‘/dmdbms/full_bak_magic’;
还原数据库
RMAN> restore database ‘/dmdbms/dm8/data/DAMENG/dm.ini from backupset ‘/dmdbms/full_bak_magic’;
恢复数据库
RMAN> recover database ‘/dmdbms/dm8/data/DAMENG/dm.ini update db_magic;
2、 从备份集恢复
如果备份集在备份过程中生成了日志,其这些日志在备份集中有完整的备份(如联机数据库备份),在执行数据库还原后,可以重做备份集中备份的日志,将数据库恢复到备份时的状态,即从备份集恢复
联机备份数据库
SQL> backup database backupset ‘/dmdbms/full_bak_set’;
还原数据库
RMAN> restore database ‘/dmdbms/dm8/data/DAMENG/dm.ini from backupset ‘/dmdbms/full_bak_ set’;
恢复数据库
RMAN> recover database ‘/dmdbms/dm8/data/DAMENG/dm.ini from backupset ‘/dmdbms/full_bak_ set’;
还原归档
RMAN> restore database ‘/dmdbms/dm8/data/DAMENG/dm.ini from backupset ‘/dmdbms/full_bak_ arch’;
更新db_magic
RMAN> recover database ‘/dmdbms/dm8/data/DAMENG/dm.ini update db_magic;
3、 从归档中恢复
SQL> backup database backupset ‘/dmdbms/full_bak_set’;
还原数据库
RMAN> restore database ‘/dmdbms/dm8/data/DAMENG/dm.ini from backupset ‘/dmdbms/full_bak_ set’;
恢复归档
RMAN> recover database ‘/dmdbms/dm8/data/DAMENG/dm.ini with archivedir ‘/dmdbms/full_bak_ arch’ [USE DB_MAGIC XXXXXX];
更新db_magic
RMAN> recover database ‘/dmdbms/dm8/data/DAMENG/dm.ini update db_magic;
达梦社区:https://eco.dameng.com