文章目录
培训及考试总结
一、考试结果
二、培训内容
1.DM8安装
2.数据库实例创建
3.实例管理
4.DMSQL
5.DM8体系结构
6.存储结构
7.表空间管理
8.用户权限角色管理
9.模式对象管理
10.备份还原
11.作业管理
12.ODBC配置
总结
培训及考试总结
本次培训共分三天,培训内容不单单是DCA的单机安装、实例创建、库表操作等,培训内容是把关系型数据库的理论及DM8的产品结合起来讲,很实用。具体的考试则是需要个人大量的线下练习,考试总体而言都是培训讲过的内容,只要用心听,好好练习,哪怕是没有计算机基础的童鞋也能考过。
一、考试结果
考试时间:120 分钟
考试形式:上机实操
考试合格:满分 100 分,外部:70 分合格,内部 70 分合格,90 分拿证。
考试内容:数据库软件安装,数据库实例创建,参数修改,表空间创建,用户管理,创建表,数据导入,创建视图,创建索引,物理备份还原,逻辑备份,作业管理,ODBC 配置。
考试环境:麒麟10+vnc操作远程环境
考试提示:考试比较人性化,在试卷中描述如何在考试环境调用图形化界面,并设置好DISPLAY的环境变量。
图形化调用:
root下
xhost +
echo $DISPLAY
结果是:2.0
su - dmdba
export DISPLAY=:2.0
二、培训内容
1.DM8安装
命令行安装
本文章侧重考试描述,故与生产实际环境有些不同,生产环境需要查看网络、系统、内存、cpu等信息,符合条件才能安装。考试环境中环境的DM8安装包、数据库脚本等都已经在考试环境中搭建好,故在做详细描述。
考试中仅让创建DM8的操作用户,而没有要求用户组,故一开始就要注意。
1.创建用户
[root@localhost 桌面]# useradd dmdba
[root@localhost 桌面]# passwd dmdba
2.创建安装路径
[root@localhost 桌面]# mkdir -p /dm
[root@localhost 桌面]# chown dmdba -R /dm
[root@localhost 桌面]# ls -ld /dm8
drwxr-xr-x 2 dmdba dinstall 6 10 月 11 10:46 /dm8
chmod -R 755 /dm
3.设置环境变量
[dmdba@localhost ~]$ mkdir -p /home/dmdba/tmp
[dmdba@localhost ~]$ vi .bash_profile
加入:
export DM_INSTALL_TMPDIR=/home/dmdba/tmp
让配置文件生效:
[dmdba@localhost ~]$ source .bash_profile
4.挂载iso文件
[root@localhost opt]# mount -o loop /opt/dm8_20230104_x86_rh6_64.iso /mnt
5.设置最大文件打开数
root的根目录下
vi /etc/security/limits.conf
在最后添加四条语句,需添加的语句如下
dmdba hard nofile 65536
dmdba soft nofile 65536
dmdba hard stack 32768
dmdba soft stack 16384
#查看是否生效
su - dmdba
ulimit -a
6.DM8安装
此处有命令行和图形化两种方式,个人更倾向命令行,因为在安装完后还需要root下输入指令才可继续安装。
su - dmdba
执行安装
cd /mnt
[root@localhost 桌面]# /dm8/script/root/root_installer.sh
个人电脑的vm中会出现临时空间报错的情况,可如下解决
#报错
安装程序临时目录(/tmp)可用空间为476M. 安装程序需要至少800M的临时空间, 请调整临时目录的空间或设置环境变量DM_INSTALL_TMPDIR来指定安装程序的临时目录.以下解决
mkdir /home/dmdba/tmp
export DM_INSTALL_TMPDIR=/home/dmdba/tmp
7.安装结束
请以 root 系统用户执行命令:
/dm8/script/root/root_installer.sh
----卸载
[dmdba@racdb1 ~]$ cd /dm8
[dmdba@racdb1 dm8]$ export DISPLAY=192.168.31.227:0
[dmdba@racdb1 dm8]$ ./uninstall.sh
[root@racdb1 ~]# /dm8/root_uninstaller.sh
删除DmAPService服务
Removed symlink /etc/systemd/system/multi-user.target.wants/DmAPService.service.
删除DmServiceDMSERVER服务
Removed symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service.
[root@racdb1 ~]#
[root@racdb1 dm8]# pwd
/dm8
[root@racdb1 dm8]# rm -rf *
[root@racdb1 dm8]# pwd
---安装
[dmdba@racdb1 mnt]$ ls
DM8 Install.pdf DMInstall.bin
[dmdba@racdb1 mnt]$ ./DMI*
解压安装程序.........
2024-04-06 18:19:22
[INFO] 安装达梦数据库...
[root@racdb1 ~]# /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服务
2.数据库实例创建
图形化实例创建
[dmdba@localhost ~]$ cd /dm8/tool/
[dmdba@localhost tool]$ ./dbca.sh
此处安装考试要求设置数据库目录、实例名、端口名、簇大小等,SYSDBA的密码尤其注意,设置错误0分。
图形化操作下一步即可,最后:
使用 root 账号执行三个脚本文件
[root@localhost 桌 面 ]# mv /dm8/bin/DmServiceDMSERVER.service
/usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost 桌面]# systemctl enable DmServiceDMSERVER.service
[root@localhost 桌面]# systemctl start DmServiceDMSERVER.service
3.实例管理
1
可以在./manager的图形化进行实例的操作
manager
/dm8/tool
[dmdba@localhost tool]$ ./manager
通过后台进程方式启动和关闭数据库
/dm8/bin
查看数据库进程的状态:
[dmdba@localhost bin]$ ./DmServiceDMSERVER status
DmServiceDMSERVER (pid 3305) is running. 关闭数据库:
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
启动数据库:
[dmdba@localhost bin]$ ./DmServiceDMSERVER start
重启数据库:
[dmdba@localhost bin]$ ./DmServiceDMSERVER restart
考试时,一定要注意,数据库的重启要么命令行要么图形化./console操作
4.DMSQL
1
此处有表的创建、查询等操作,需要多家练习,考试以视图方式考,但sql操作一个以单表查询和两表连接查询,考点就sql的技巧而言不是很难,但需要个人线下多家操作,熟悉sql语法。
1
5.DM8体系结构
此处没有具体的考点,但作为科普是非常有必要了解的。
DM 数据库是单进程多线程的架构。
DM 数据库由:client+server 两部分构成
DM server=数据库(狭义上)+实例
数据库:磁盘上一堆的数据库文件,包含:配置文件、控制文件、重
做日志文件、数据文件、归档日志文件、备份文件、日志文件、事件
日志文件等。
实例:一组后台进程/线程+共享内存
一个实例管理一个数据库叫单实例,也叫单机环境;多个实例管理一
个数据库叫 DMDSC,DM8 目前最多支持 8 个节点 DSC。
6.存储结构
此处的考点是修改动静参数。动态参数即改即生效,静态参数修改需要重启数据库生效。
查看参数:
select para_name,para_value,para_type from v$dm_ini;
参数类型:
SESSION:动态会话级参数
SYS:动态系统级全局参数,即改即生效
IN FILE:静态参数,修改完参数后,需要重启数据库实例生效
READ ONLY:只读参数,只能通过 vi 的方式修改参数
修改动态参数:
sp_set_para_value(1,'MAL_LEAK_CHECK',1);
修改静态参数:
COMPATIBLE_MODE 是否兼容其他数据库模式。
0:不兼容,
1:兼 容 SQL92 标准,
2:部分兼容 ORACLE,
3:部 分兼容 MS SQL SERVER,
4:部分兼容 MYSQL,
5:兼容 DM6,
6:部分兼容 TERADATA
修改数据库的兼容模式为兼容 ORACLE 数据库
sp_set_para_value(2,'COMPATIBLE_MODE',2);
重做日志、添加日志文件是考试内容
具体可manager图形化操作,数据库右键-管理数据库-重做日志即可。
逻辑存储结构
7.表空间管理
./manager图形化操作
创建表空间
例 2,创建表空间 TEST,数据文件为/dm8/data/DAMENG/TEST01.DBF, 数据文件初始大小为 50M,数据文件开启自动扩展,每次扩展 1M,最大可扩展至 1G.
例 3 , 创 建 表 空 间 TBS , 有 两 个 数 据 文 件 , 分 别 为/dm8/data/DAMENG/TBS01.DBF 和 /dm8/data/DAMENG/TBS02.DBF, 每个数据文件初始大小为 100M,都开启自动扩展,每次自动扩展 2M,最
大可扩展至 10G
具体图形化操作可参考其他博文
维护 TEMP 表空间
修改 TEMP 表空间大小为 50M
sp_set_para_value(2,'TEMP_SIZE',50);
8.用户权限角色管理
图形化操作
新建用户、用户拥有角色、权限均为考点
例 1:创建用户 TEST,密码是 Dameng123,默认表空间为 TEST,该用户拥有创建表、视图、索引的权限
例 2:创建用户 DMEMP,密码是 Dameng123,失败登录 5 次后锁定
账号 3 分钟,密码在 180 天后自动过期,该用户有创建表、创建视图
的权限。
例 3:创建角色 ROLE1,拥有创建表、视图、索引的权限,可以查看
dmhr.employee.hire_date 、 dmhr.employee.email , 可 以 修 改dmhr.employee.phone_num,可以查看 dmhr.department 表。
create role "ROLE1";此处的表为DMHR的示例表
修改用户、角色、权限等均可图形化操作
图形化界面新建好表后,可图形化操作新建查询右边的打开导入数据库脚本。
9.模式对象管理
图形化操作
根据考题要求,在新建的表中互相添加外键、索引等操作。
创建视图是核心
创建视图的语法:
Create view .... as select ....;
Create or replace view ... as select ...;
create view test.view_emp as
select employee_name,salary,hire_date,department_id from dmhr.EMPLOYEE where department_id=101;
删除视图:
drop view "TEST"."VIEW_EMP" ;
10.备份还原
此处内容较多,真正掌握需要花大量的时间和深入的研究。
整个模块的整体流程为数据库先备份-归档-还原三部。
备份
分冷备和热备,无论哪种都需要DmAPservice运行中
生产实际中热备较多,冷备作为辅助。热备即生产过程中数据不中断的情况下进行,冷备是数据中断后进行。--冷备份需要关库,Oracle 8都不如
冷备
建立冷备的路径(dmdba用户新建)mkdir -p/dm8/backup
需要关闭数据库bin下./DmServiceDMSERVER stop
./console执行
备份还原-新建备份-指定新建路径
---增量备份还要不同的目录
热备(整库备份,表空间备份)
需要启动数据库
需要开启数据库归档模式
归档
启动数据库bin下 ./DmServiceDMSERVER start
查询数据库归档模式,图形化管理服务器,归档模式查看
图形化操作./manager-系统管理+归档配置,归档路径是要求空
select arch_mode from v$database;查看是否归档
还原
--物理还原
库/表还原时
1需要关闭数据库
2数据库还原
具体操作:./console-备份还原-还原-恢复(恢复类型选择指定归档恢复)-更新magic-数据库启动
3应用归档日志恢复中的恢复
4更新数据库魔数(表还原不需要操作4)
--逻辑还原
备份数据库对象
full:整库
owner用户
schemas模式
tables表
逻辑备份:/dexp /dimp
整库:
./manager图形化-右键导出
导出文件和导出日志小写,文件名要正确
数据行取消勾选,即不导数据
用户: ----好像不行,要新建用户,再导入才行,主要是导入模式
用户-右键导出
模式:
模式右键-导出
表导出:
11.作业管理
例:新建作业 JOB1,每周日 22:00 对数据库做完全备份。
作业名注意大写
例:新建作业 JOB2,每周一、二、三、四、五、六 22:00 对数据库做增
量备份。
12.ODBC配置
命令行操作
连接不成功,考试0分
注意配置项的端口等详细信息
[root@localhost opt]# tar -xvfz unixODBC-2.3.0.tar.gz
[root@localhost opt]# cd unixODBC-2.3.0/
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make && make install
[root@localhost unixODBC-2.3.0]# cd /usr/local/etc/
[dmdba@racdb1 ~]$ cd /dm8/bin
[dmdba@racdb1 bin]$ ./disql sysdba/SYSDBA
SQL> alter user sysdba identified by Dameng123;
[dmdba@racdb1 bin]$ isql dm8 -v
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
--配置
[root@racdb1 etc]# cat odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5236
[root@racdb1 etc]# cat odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
[root@racdb1 etc]#
[01000][unixODBC][Driver Manager]Can't open lib '/dm8/bin/libdodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
root 执行会报错,是因为 root 没有配置 LD_LIBRARY_PATH 环境变量:
[root@racdb1 etc]# su - dmdba
上一次登录:六 3月 30 11:09:01 CST 2024pts/0 上
[dmdba@racdb1 ~]$ isql dm8 -v
SQL> drop table test.c;
SQLRowCount returns -1
SQL> select *from test.c;
[ISQL]ERROR: Could not SQLPrepare
SQL> create table test.c ( a number, b number);
SQLRowCount returns -1
SQL> insert into test.c values (1,1);
SQLRowCount returns 1
SQL> select *from test.c;
+-------------------------------------------------------+-------------------------------------------------------+
| A | B |
+-------------------------------------------------------+-------------------------------------------------------+
| 1 | 1 |
+-------------------------------------------------------+-------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL>
--------------------------
lscpu
cat /proc/cpuinfo
free -m
cat /proc/meminfo
dfdf fdf asfd
df -h
df -h /tmp
rpm -qa|grep glibc
vim /etc/security/limits.conf
./dminit path=/dm8/data db_name=DMTEST instance_NAME=DMTESTSVR sysdba_pwd=Dameng123 port_num=5238 PAGE_SIZE=16
mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
systemctl enable DmServiceDMSERVER.service
systemctl start DmServiceDMSERVER.service
systemctl restart DmServiceDMSERVER.service
/dm8/bin/disql sysdba/Dameng123:5238
/dm8/bin/disql sysdba/SYSDBA:5236
select distinct para_type from v$dm_ini;
DmServiceDMSERVER
14 cd /dm8
15 sh ./uni*sh
16 export DISPLAY=:0.0
17 sh ./uni*sh
19 cd /mnt
24 ulimit -a
28 cd bin
33 ./dminit path=/dm8/data db_name=DMTEST instance_NAME=DMTESTSVR sysdba_pwd=Dameng123 port_num=5238 PAGE_SIZE=16
cd /dm8/tools
./dbca.sh
./nca.sh
43 ./disql sysdba/Dameng123:5238
49 vi /etc/dm_svc.conf
cd /dm8/bin
./disql sysdba/Dameng123@DM
ps -ef|grep dmserver
cd /dm8/bin
./DmServiceDMSERVER status
./DmServiceDMSERVER stop
./DmServiceDMSERVER start
./DmServiceDMSERVER status
top
top -Hp 27465
select *from v$mem_pool;
select * from V$process; --进程
select * from v$threads; --线程
select * from v$sessions;
alter tablespace system DATAFILE 'SYSTEM.DBF' AUTOEXTEND off;
alter system set 'UNDO_RETENTION'= 300 both;
select * from v$parameter t where name like 'UNDO_RETENTION';
select name, value, type from v$parameter t where name like 'TEMP%';
alter system set 'TEMP_SIZE'=1200 spfile;
alter tablespace tbs offline;
alter TABLESPACE tbs RENAME DATAFILE 'BS01.DBF' TO 'TTBS01.DBF';
alter tablespace tbs online;
create tablespace tbs DATAFILE 'TBS01.DBF' size 32;
select * from dba_tablespaces;
select * from DBA_DATA_FILES;
select * from v$tablespace;
select * from v$datafile;
select * from DBA_FREE_SPACE; --数据文件剩余空间
alter tablespace tbs DATAFILE 'TTBS01.DBF' AUTOEXTEND on;
alter tablespace tbs resize 64
drop table t_test
create table t_test(id int, name VARCHAR(20)) TABLESPACE tbs;
insert into t_test(id, name) values(1, 'aaa');
insert into t_test(id, name) values(2, 'aaa');
insert into t_test(id, name) values(3, 'aaa');
insert into t_test(id, name) values(4, 'aaa');
insert into t_test(id, name) values(5, 'aaa');
commit;
select *from t_test;
alter tablespace tbs offline;
select * from t_test;
alter tablespace tbs online;
alter tablespace tbs RENAME TO dmtbs
create tablespace tbs DATAFILE 'TBS01.DBF' size 32;
drop tablespace TBSTEST;
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;
修改表空间
select * from DBA_DATA_FILES;
修改表空间添加数据文件:
alter TABLESPACE dmtbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2
MAXSIZE 20480;
修改表空间数据文件的扩展属性(SYSTEM、TEMP 表空间不允许关闭自动扩展,且不允许
限制空间大小):
alter tablespace dmtbs DATAFILE 'TTBS01.DBF' AUTOEXTEND on NEXT 2 MAXSIZE
20480;
alter tablespace dmtbs DATAFILE 'TTBS01.DBF' AUTOEXTEND off;
修改表空间数据文件的大小:
alter tablespace dmtbs RESIZE DATAFILE 'TTBS01.DBF' TO 64
数据字典:
select * from v$rlogfile;
select * from v$rlog; --cur_file表示正在使用的联机日志
修改联机日志文件大小
alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG01.log' TO 300;
alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG02.log' TO 300;
添加联机日志文件
alter DATABASE ADD LOGFILE '/dm8/data/DAMENG/DAMENG03.log' SIZE 300;
修改联机日志文件路径(迁移联机日志文件)
alter database mount;
alter database RENAME LOGFILE 'DAMENG01.log' TO '/dm8/data/DAMENG/DM01.log';
alter database RENAME LOGFILE 'DAMENG02.log' TO '/dm8/data/DAMENG/DM02.log';
alter database RENAME LOGFILE 'DAMENG03.log' TO '/dm8/data/DAMENG/DM03.log';
alter database open;
select arch_mode from v$database; --是否开启归档
select * from SYS."V$DM_ARCH_INI"; 查看归档配置
开启归档的方法:
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;
查看归档配置:
select arch_mode from v$database;
select * from v$dm_arch_ini;
alter database modify archivelog 'type=local, dest=/dm8/arch, SPACE_LIMIT=20480';
SQL 关闭归档
SQL> alter database mount;
SQL> alter database noarchivelog;
SQL> alter database delete archivelog 'type=local,dest=/dm8/arch';
SQL> alter database open;
归档日志文件的切换和删除
数据库自动完成归档的切换,DM 支持手工切换归档;
alter SYSTEM ARCHIVE LOG CURRENT;
alter SYSTEM SWITCH LOGFILE;
alter DATABASE ARCHIVELOG CURRENT;
归档文件的删除:
select * from v$ifun t where name like 'SF_ARCHIVELOG_%';
SF_ARCHIVELOG_DELETE_BEFORE_LSN
SF_ARCHIVELOG_DELETE_BEFORE_TIME
Select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-10); --删除10天前的归档日志。
针对业务繁忙期间,出现磁盘 IO 不定时繁忙的情况,因为配置了归档的空间上限(归档达
到此上限),生成新的归档日志前删除旧的归档日志文件造成了 IO 的不定时繁忙。
解决方案:配置 JOB 作业,在业务空闲期定时清理 N 天之前的归档文件。
查看归档日志文件:
select * from v$arch_file;
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by dameng123;
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 1 BOTH;
create user hrtest IDENTIFIED by dameng123;
select * from dba_users;
select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID;
创建用户
create user rick IDENTIFIED by Dameng123 DEFAULT TABLESPACE TBSTEST;
用户锁定和解锁:
alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;
修改用户的默认表空间:
alter user rick DEFAULT TABLESPACE dmtbs;
修改用户密码:
alter user hr identified by "Dameng@123";
删除用户:
drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --级联删除用户及用户下的对象信息,生产环境慎用
SYSDBA 的密码忘记了,有办法登录重置吗?两种前提(满足之一就可重置)。
1、用 ALTER USER 权限的其他用户登录数据库,重置 SYSDBA 的密码:
alter user sysdba identified by XXX;
2、数据库开启了操作系统认证(提前打开)
ENABLE_LOCAL_OSAUTH 参数(静态参数(隐含参数,不在 dm.ini 中),需要 DBA 权限
的用户修改,改后需重启数据库生效。)
用户资源限制
用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
DM 支持使用 profile 管理用户资源限制(新版本支持,2021 年 10 月以后的版本)
select * from DBA_PROFILES;
create profile profile1 limit FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3,
PASSWORD_LIFE_TIME 180;
alter user hrtest PROFILE profile1;
--查询用户使用的profile资源限制文件
select a.pid profileid, b.name profile_name, a.uid userid, c.name user_name
from SYSUSERPROFILES a, SYSOBJECTS b, SYSOBJECTS c
where a.PID = b.id
and a.UID = c.ID;
用户的资源限制也可以查询如下数据字典:
select * from sysusers;
[dmdba@KylinDCA03 ~]$ disql hrtest/'"Dameng@123"'
SQL> conn hrtest/"Dameng@123"
也可以使用右斜杠\转义
[dmdba@localhost ~]$ disql dmoa/\"Dameng@123\"
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.162(ms)
disql V8
SQL> alter user hrtest identified by "Dameng@123";
[dmdba@localhost ~]$ disql dmoa/\"Dameng123@#\'\"
权限分为系统权限(数据库权限)和对象权限。
系统权限:CREATE TABLE、SELECTTABLE 等对某一类对象的对象操作,对象定义权限。
对象权限:精确到某一个具体对象的查询/插入/更新/删除(表)、执行(函数或过程)等权限。
赋予数据库权限(系统权限):
SQL> grant create table to rick;
SQL> grant select on dmhr.employee to hrtest;
操作已执行
已用时间: 0.535(毫秒). 执行号:1703.
查看当前用户拥有的权限:
select * from session_privs;
权限的回收:
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= 'HRTEST';
select * from dba_role_privs t where t.GRANTEE= 'HRTEST';
select * from dba_tab_privs t where t.GRANTEE= 'HRTEST';
DM 默 认 不 能 授 予 用 户 在 其 他 模 式 下 数 据 定 义 ( DDL ) 的 权 限 , 由 参 数
ENABLE_DDL_ANY_PRIV 指定,默认为 0。
grant select any table to hrtest;
select * from v$parameter t where name like '%ENABLE_DDL_ANY_PRIV%';
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --开启后可正常赋予权限
grant create any table to hrtest;
DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。
PUBLIC:具有对当前模式下对象的 DML 数据操作权限。
RESOURCE:具有在当前模式下对象定义权限(创建表、索引、视图等);
SOI:具有查询 sys 开头系统表的权限;
VTI:具有查询 v$开头的动态视图权限(动态视图记录在 v$dynamic_tables,如果没有此权
限,DM 管理工具上会报没有查询 v$视图权限)
DB_AUDIT_开头的角色是审计相关角色,具有审计相关权限,默认赋给 SYSAUDITOR。
DB_POLICY_开头的角色是安全相关角色,具有强制访问控制等权限,默认赋给 SYSSSO。
select * from dba_roles;
create role r1;
grant create table to r1;
grant select on dmhr.department to r1;
grant r1 to hrtest;
sp_set_role('R1',1) --角色禁用和启用,禁用后角色权限将不在生效。
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 rick1 AUTHORIZATION rick;
grant resource to rick
grant create session to rick
grant select dictionary to rick
revoke select any table from rick;
create table hrtest01.t_test(id int, name varchar(20));
--查看当前模式和当前用户
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER'); 或 select user;
--切换模式(仅对当前会话生效)
set SCHEMA dmhr;
set SCHEMA hrtest;
create table b ( a int);
select *from b;
DM 默认创建的索引组织表,由参数 LIST_TABLE 指定。
select * from v$parameter t where name ='LIST_TABLE';
select * from v$parameter t where name ='PK_WITH_CLUSTER';
SQL 管理表
创建表:
create table hrtest.t_testpid(
pid int,
pname varchar(20),
sex bit,
logtime datetime)
TABLESPACE dmtbs;
CTAS方式创建表:
create table t_emp01 as select * from dmhr.employee;
create table t_emp02 like dmhr.employee;
create table t_emp03 as select * from dmhr.employee where 1=0;
--使用CREATE table as创建表时,默认不会复制表的约束信息,由参数
CTAB_SEL_WITH_CONS指定:
select * from SYS."V$PARAMETER" t where t.name like 'CTAB_SEL_WITH_CONS%';
添加字段:
alter table hrtest.t_testpid add column email varchar(20);
修改字段类型:
alter table hrtest.t_testpid modify email varchar(50);
删除字段:
alter table hrtest.t_testpid drop logtime;
对字段添加默认值(大表不建议添加字段时给默认值,耗时很长):
alter table hrtest.t_testpid add column logtime datetime default sysdate;
重命名表或字段:
alter table t_test rename to t_testoa;
alter table t_testoa rename column id to pid;
数据字典:
select * from dba_tables t where t.owner='HRTEST';
select * from dba_tab_columns t where t.owner='HRTEST';
select t.TABLE_NAME, t.TABLESPACE_NAME from user_tables t;
select t.TABLE_NAME, t.COLUMN_NAME, t.NULLABLE from USER_TAB_COLS t;
对表和字段添加注释:
comment on column t_testpid.sex is 'sex. 0:female 1: male';
comment on table t_testpid is 'this is a test table';
98 / 137
select * from user_tab_comments;
select * from user_col_comments;
修改表的表空间(DM 会自动重建该表上的索引)
alter table hrtest.T_TESTPID move tablespace main;
select * from dba_tables t where t.TABLE_NAME like 'T_TEST%';
数据的导入
DM 在 DISQL 下用 start 或`都可以, Oracle 用@:
SQL> start /dm8/backup/dts/t_department.sql
SQL> `/dm8/backup/dts/t_department.sql
或者 disql 可以直接调用脚本:
[dmdba@KylinDCA04 backup]$ disql hr/'"Dameng@123"' '`city.sql'
可以关闭回显以提高导入效率:
SQL> set TIMING off;
SQL> set feedback off;
SQL> set echo off;
DM 管理工具只能使用`, `后面的文件路径不能有空格,导入后需要手工 commit;
`/dm8/backup/dts/t_department.sql
SQL 管理约束
非空约束
alter table hrtest.t_testpid modify pname not null;
唯一约束
alter table hrtest.t_testpid add CONSTRAINT uk_testpid_email unique (email);
100 / 137
主键约束
alter table hrtest.t_testpid ADD CONSTRAINT pk_testpid_pid PRIMARY KEY(pid);
检验约束
alter table hrtest.t_testpid add salary number(10,2);
alter table hrtest.t_testpid ADD CONSTRAINT ck_testpid_salary CHECK
(salary>=2100);
外键约束(外键引用两一张表的主键或者唯一键)
alter table hrtest.t_test add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES
hrtest.t_testpid(pid);
--重命名约束
alter table T_EMP RENAME CONSTRAINT pk_emp_deptid to ffk_emp_deptid;
--设置列的默认值
alter table "OA"."T_EMP" alter column "HIRE_DATE" set default (sysdate);
alter table "OA"."T_EMP" modify "HIRE_DATE" default (sysdate);
--约束的禁用和启用、删除
alter table hrtest.t_test disable CONSTRAINT fk_test_id;
alter table hrtest.t_test enable CONSTRAINT fk_test_id;
alter table hrtest.t_test drop CONSTRAINT fk_test_id;
相关数据字典:
select * from dba_constraints t where t.owner='HRTEST';
select * from DBA_CONS_COLUMNS t where t.owner='HRTEST';
102 / 137
批量禁用外键约束:
select 'alter table '||owner||'.'||table_name||' disable constraint '|| t.CONSTRAINT_NAME ||';'
from DBA_CONSTRAINTS t
where t.OWNER ='DMTEST' and t.CONSTRAINT_TYPE = 'R';
select * from v$parameter t where name in ('BAK_PATH', 'BAK_USE_AP');
RMAN> backup database '/dm8/data/DAMENG/dm.ini';
backup database '/dm8/data/DAMENG/dm.ini';
[-137]:服务器正在运行或者存在其他进程正在操作同一个库
RMAN> backup database '/dm8/data/DAMENG/dm.ini';
backup database '/dm8/data/DAMENG/dm.ini';
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: 558997 ...
redo pwr log collect finished
EP[0]'s cur_lsn[559004], file_lsn[559004]
Processing backupset /dm8/data/DAMENG/bak/DB_DAMENG_FULL_20240329_124053_881303
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
backup successfully!
time used: 00:00:03.302
RMAN> restore database;
[-8301]:SQL[restore database;]第[1]行,第[16]列[;]附近出现错误[-2007]:语法分析出 错
RMAN> restore database '/dm8/data/DAMENG/dm.ini';
[-8301]:SQL[restore database '/dm8/data/DAMENG/dm.ini';]第[1]行,第[42]列[;]附近 出现错误[-2007]:语法分析出错
RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_20240329_124053_881303';
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/arch';
Database mode = 2, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[558997], file_lsn[558997]
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]
recover successfully!
time used: 402.991(ms)
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
systemctl start DmServiceDMSERVER.service
ps -ef|grep dmserver