操作系统 银河麒麟 V10 数据库 DM8 企业版 VMware workstation 15 Pro
1.安装前注意检查一下空间,看看/tmp的空间是否大于2G
否则修改/etc/fstab添加:
tmpfs /tmp tmpfs defaults,size=2G 0 0
2.新建操作系统和数据库用户的时候尽量不要使用特殊字符@,不然在登录的时候很麻烦;
3.新建数据库步骤:
查看内存
[root@KylinDCA03 opt]# free -m
查看磁盘空间
[root@KylinDCA03 opt]# df -h
查看/tmp 空间,/tmp 建议至少 1.5G 以上
[root@KylinDCA03 opt]# df -h /tmp
1、规划安装用户和用户组:
[root@KylinDCA03 opt]# groupadd dinstall
[root@KylinDCA03 opt]# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@KylinDCA03 opt]# passwd dmdba
更改用户 dmdba 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
1. 创建安装用户组 dinstall。
groupadd -g 12349 dinstall
2. 创建安装用户 dmdba。
useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
3. 初始化用户密码。
passwd dmdba
4. 之后通过系统提示进行密码设置。
2、规划安装目录:
创建安装目录/dm8,并修改安装目录的所属组给 dmdba 用户和该用户所属组
[root@KylinDCA03 opt]# mkdir /dm8
[root@KylinDCA03 opt]# ls -ld /dm8
drwxr-xr-x 2 root root 6 12 月 20 18:50 /dm8
[root@KylinDCA03 opt]# chown dmdba:dinstall /dm8
[root@KylinDCA03 opt]# ls -ld /dm8
drwxr-xr-x 2 dmdba dinstall 6 12 月 20 18:50 /dm8
3、挂载 iso 镜像文件:
[root@KylinDCA03 opt]# mkdir /mnt/dm
[root@KylinDCA03 opt]# mount /opt/dm8_20210818_x86_rh6_64_ent_8.4.2.18_pack14.iso /mnt/dm
mount: /mnt/dm: WARNING: source write-protected, mounted read-only.
[root@KylinDCA03 opt]# su - dmdba
[dmdba@KylinDCA03 ~]$ cd /mnt/dm
[dmdba@KylinDCA03 dm]$ l
1、设置图形化界面:
(1)第一次启动虚拟机,执行下 xhost +
[root@KylinDCA03 桌面]# xhost +
(2)查看 root 用户的 DISPLAY 变量值
[root@KylinDCA03 桌面]# echo $DISPLAY
:0.0
(3)切换 dmdba 用户
[root@KylinDCA03 桌面]# su - dmdba
(4)设置 dmdba 用户的 DISPLAY 变量值为步骤(1)中的值(仅对当前会话生效)
[dmdba@KylinDCA03 ~]$ export DISPLAY=:0.0
[dmdba@KylinDCA03 ~]$ cd /mnt/dm
[dmdba@KylinDCA03 dm]$ ll
总用量 739440
-r-xr-xr-x 1 root root 2784248 8 月 23 14:36 'DM8 Install.pdf'
-r-xr-xr-x 1 root root 754402133 8 月 23 14:40 DMInstall.bin
2、图形化界面方式安装 DM 数据库
[dmdba@KylinDCA03 dm]$ ./DMInstall.bin
修改参数:vim /etc/security/limits.conf
dmdba soft nofile 102400
dmdba hard nofile 204800
root soft nofile 102400
root hard nofile 204800
3、图形化界面安装全部按照默认安装即可,注意最后root用户执行3个脚本;
4、启动关闭数据库:
systemctl start|status|stop|enable|disable DmServiceDMSERVER --注意使用root用户
[dmdba@localhost bin]$ ./dmserver /dm8/data/DAMENG/dm.ini --注意使用的是dadba用户
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop --注意使用的是dadba用户
4、备份还原:
使用/dm8/tool/console打开DM控制台工具,这个图形化界面备份还原应该是需要在脱机状态下。
使用dm8脱机还原数据库时需要更新dm_magic,不然会报错:
Instance DMSERVER startup failed, execute 'recover database ... update db_magic' in dmrman
解决方法:
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> recover database ‘/opt/dmdbms/data/DAMENG1/dm.ini’ update db_magic^[[D^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^C
[dmdba@localhost bin]$ ./dmrman
dmrman V8
RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
file dm.key not found, use default license!
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[30861], file_lsn[30861]
recover successfully!
time used: 00:00:01.703
RMAN> exit
time used: 1.400(ms)
[dmdba@localhost bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
[dmdba@localhost bin]$ ./DmServiceDMSERVER status
DmServiceDMSERVER (pid 26538) is running.
----------------------------------
select的相关使用:
内连接案例:
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum
from dmhr.employee a, dmhr.DEPARTMENT b
where a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
having count(*) >=30
order by empnum desc;
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum
from dmhr.employee a join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
having count(*) >=30
order by empnum desc;
DM 支持执行计划的清理和绑定:
select * from v$ifun t where name like '%PLN%';
select t.name, b.* from v$ifun t, SYS."V$IFUN_ARG" B
where t.name like '%SP_CLEAR_PLAN_CACHE%'
and t.id = b.id;
SP_CLEAR_PLAN_CACHE(PLAN_ID); --清理执行计划
--SP_SET_PLN_BINDED --绑定执行计划
共享内存:
一般情况下,很
多需要内存分配的地方都是从该池分配,如果需要的内存大于配置值(MEMORY_POOL),共享内
存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大
小,参数 MEMORY_TARGET 则指定了共享内存池能扩展到的最大大小.
select * from V$mem_pool;
select name, type, value, sys_value, file_value from v$parameter t
where name like 'MEMORY%';
查看数据库进程:
[dmdba@KylinDCA03 DM]$ ps -ef|grep dmserver
dmdba 1750 1 0 10:33 ? 00:00:03 /dm8/bin/dmserver
/dm8/data/DM/dm.ini -noconsole
dmdba 1756 1 0 10:33 ? 00:00:02 /dm8/bin/dmserver
/dm8/data/DMTEST/dm.ini -noconsole
dmdba 4175 3624 0 11:59 pts/2 00:00:00 grep dmserver
查看数据库对应的线程:
[dmdba@KylinDCA03 DM]$ ps -T -p 1750
PID SPID TTY TIME CMD
1750 1750 ? 00:00:01 dmserver
1750 1877 ? 00:00:00 dm_quit_thd
1750 1882 ? 00:00:00 dm_io_thd
1750 1883 ? 00:00:00 dm_io_thd
1750 1884 ? 00:00:00 dm_io_thd
1750 1885 ? 00:00:00 dm_io_thd
1750 2070 ? 00:00:00 dm_chkpnt_thd
动态视图:
select * from V$process; --进程
select * from v$threads; --线程
工作线程
DM 的核心线程;默认 16 个工作线程。
表空间管理,把公司的那几个语句拿下来试试
DM 中临时表空间由参数 TEMP_SIZE 指定。
select name, value, type from v$parameter t where name like 'TEMP%';
修改临时表空间的初始大小:
alter system set 'TEMP_SIZE'=100 spfile;
收缩 TEMP 表空间的方法:
1、 重启数据库,TEMP 表空间数据文件会重建。
2、 在线收缩临时表空间使用 SP_TRUNC_TS_FILE 函数。
使用 create tablespace 语句创建表空间:
create tablespace tbs DATAFILE 'TBS01.DBF' size 32;--注意dm中size之后跟的是兆,不能跟单位,默认最小应该是16M
DM 数据文件大小,最大值不能低于页大小的 4096 倍(如果页大小是 8K,最小值将不
低于 32M),最大值为页大小的 2 的 31 次方-1(如果页大小是 8K,最大值为 16T-1)。
对应 DDL 语句:
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;
修改表空间
修改表空间添加数据文件:
alter TABLESPACE tbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2
MAXSIZE 20480;
修改表空间数据文件的扩展属性:
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND on NEXT 2 MAXSIZE
20480;
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND off;
修改表空间数据文件的大小:
alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128;
迁移表空间数据文件
alter tablespace tbs offline;
alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO
'/dm8/data/DM/TBS/TBS01.DBF';
53 / 100
alter TABLESPACE tbs RENAME DATAFILE 'TBS02.DBF' TO
'/dm8/data/DM/TBS/TBS02.DBF';
alter tablespace tbs online;
联机日志数据字典:
select * from v$rlogfile;
select * from v$rlog; --cur_file表示正在使用的联机日志
修改联机日志文件大小
alter database RESIZE LOGFILE '/dm8/data/DM/DM01.log' TO 300;
alter database RESIZE LOGFILE '/dm8/data/DM/DM02.log' TO 300;
54 / 100
添加联机日志文件
alter DATABASE ADD LOGFILE '/dm8/data/DM/DM03.log' SIZE 300;
修改联机日志文件路径(迁移联机日志文件)
alter database mount;
alter database RENAME LOGFILE 'DM01.log' TO '/dm8/data/DM/REDO/DM01.log';
alter database RENAME LOGFILE 'DM02.log' TO '/dm8/data/DM/REDO/DM02.log';
alter database RENAME LOGFILE 'DM03.log' TO '/dm8/data/DM/REDO/DM03.log';
alter database open;
SQL 开启归档
SQL> alter database mount;
操作已执行
已用时间: 368.463(毫秒). 执行号:0.
SQL> alter database archivelog;
操作已执行
已用时间: 3.729(毫秒). 执行号:0.
SQL> select arch_mode from v$database;
行号 ARCH_MODE
---------- ---------
1 Y
添加归档日志:
SQL> alter database add archivelog 'type=local,dest=/dm8/arch,file_size=64,space_limit=10240';
操作已执行
已用时间: 0.966(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 324.410(毫秒). 执行号:0.
SQL> select * from v$dm_arch_ini;
SQL 关闭归档
SQL> alter database mount;
操作已执行
已用时间: 438.355(毫秒). 执行号:0.
SQL> alter database noarchivelog;
操作已执行
已用时间: 41.445(毫秒). 执行号:0.
SQL> alter database delete archivelog 'type=local,dest=/dm8/arch';
操作已执行
已用时间: 0.519(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 322.559(毫秒). 执行号:0.
SQL> select arch_mode from v$database;
56 / 100
行号 ARCH_MODE
---------- ---------
1 N
已用时间: 0.654(毫秒). 执行号:714.
归档日志文件的切换和删除
数据库自动完成归档的切换,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
58 / 100
针对业务繁忙期间,出现磁盘 IO 不定时繁忙的情况。
因为配置了归档的空间上限(归档达到此上限),生成新的归档日志前删除旧的归档日志文
件。
配置 JOB 作业,在业务空间期定时清理 N 天之前的归档文件。
系统口令策略
PWD_POLICY 参数指定系统的口令策略,默认为 2;
系统支持的口令策略有:
⚫ 0 无策略
⚫ 1 禁止与用户名相同
⚫ 2 口令长度不小于 9
⚫ 4 至少包含一个大写字母(A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口
令策略为 2+4=6 即可。
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by dameng123;
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 15 BOTH
创建用户
create user hrtest IDENTIFIED by Dameng123 DEFAULT TABLESPACE TBSTEST;
用户锁定和解锁:
alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;
修改用户的默认表空间:
alter user hr DEFAULT TABLESPACE dmtbs;
修改用户密码:
alter user hrtest IDENTIFIED by "Dameng@123";
删除用户:
drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --生成环境慎用
密码带有特殊字符的登录处理
[dmdba@KylinDCA03 ~]$ disql hrtest/'"Dameng@123"'
查看当前用户拥有的权限:
select * from session_privs;
权限的回收:
SQL> revoke select on dmhr.employee from hrtest;
SQL> revoke create table from hrtest;
Oracle 中用户和模式是一对一的关系。
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 hrtest01 AUTHORIZATION HRTEST;
create table hrtest01.t_test(id int, name varchar(20));
--查看当前模式和当前用户
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER');
--切换模式(仅对当前会话生效)
set SCHEMA dmhr;
数据的导入
DM 在 DISQL 下用 start 或`都可以, Oracle 用@:
SQL> start /dm8/backup/dts/t_department.sql
SQL> `/dm8/backup/dts/t_department.sql
可以关闭回显以提高导入效率:
SQL> set TIMING off;
SQL> set FEEDback off;
SQL> set echo off;
SQL 管理索引
explain select * from hrtest.t_emp01 t where T.EMPLOYEE_NAME = '马学铭';
create index ix_emp01_employeename ON HRTEST.T_EMP01(EMPLOYEE_NAME);
统计信息的收集:
dbms_stats.gather_table_stats('HRTEST','T_EMP01');
统计信息的查看:
dbms_stats.table_stats_show('HRTEST','T_EMP01');
dbms_stats.index_stats_show('HRTEST','IX_EMP01_EMPLOYEENAME');
索引的监控:
alter index HRTEST.IX_EMP01_EMPLOYEENAME MONITORING USAGE; --开启索引监控
alter index HRTEST.IX_EMP01_EMPLOYEENAME NOMONITORING USAGE; --关闭索引监控
select * from v$object_usage;
索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):
alter index HRTEST.IX_EMP01_EMPLOYEENAME rebuild ONLINE;
索引的数据字典:
select * from dba_indexes t where t.OWNER ='HRTEST';
select * from dba_ind_columns t where t.index_OWNER ='HRTEST';
删除索引:
drop index HRTEST.ix_emp01_employeename;
备份数据库
backup database; --全量备份
backup database increment; --增量备份
backup database full to ONLINEBAK_01 backupset
'/dm8/backup/full/ONLINEBAK_01';
backup database increment BASE ON BACKUPSET
'/dm8/backup/full/ONLINEBAK_01' to ONLINEBAKINCR_01
backupset '/dm8/backup/incr/ONLINEBAK_01' ;
backup database increment with BACKUPDIR '/dm8/backup/full/' to
ONLINEBAKINCR_02 backupset '/dm8/backup/incr/ONLINEBAK_02' ;
表空间备份
backup tablespace dmtbs;
backup tablespace dmtbs INCREMENT with BACKUPDIR '/dm8/backup/full/' to
DMTBSINCR_01 backupset '/dm8/backup/incr/DMTBSINCR_01' ;
表和归档的备份
backup table dmhr.employee; --表的备份
backup ARCHIVELOG all; --归档备份



