- 安装
- 安装用户和用户组:
说明:#:为root账户,$:为普通账号,不推荐使用 root 安装。
#:groupadd dinstall --添加组
#:useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba --添加用户
#:passwd dmdba --更改用户 dmdba 的密码
-
- 安装目录
#:mkdir /dm8 --新建目录
#:ls -ld /dm8
#:chown dmdba:dinstall /dm8 --转为普通用户权限
#:ls -ld /dm8
-
- 挂载 iso 镜像
#:mkdir /mnt/dm
#:mount /opt/dm8_20210818_x86_rh6_64_ent_8.4.2.18_pack14.iso /mnt/dm
#:su - dmdba
$:cd /mnt/dm
安装时报 tmp 不足的解决方法
#:mkdir tmp
#:chown dmdba:dinstall /opt/tmp
$:export DM_INSTALL_TMPDIR=/opt/tmp
-
- 安装 DM 数据库
$:./DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:
是否输入 Key 文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:
请选择设置时区 [21]:
请选择安装类型的数字序号 [1 典型安装]:
请选择安装目录 [/home/dmdba/dmdbms]:/dm8
是否确认安装路径(/dm8)? (Y/y:是 N/n:否) [Y/y]:y
是否确认安装? (Y/y:是 N/n:否):y
转为root账号:/dm8/script/root/root_installer.sh
- 注册数据库
$:cd /dm8/tool
$:./dbca.sh
如果报如下错误,原因是图形化界面没有设置好,需要设置图形化。
$:export DISPLAY=:0.0
$:./dbca.sh
界面提示使用 root 用户执行脚本:
#:mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
#:systemctl enable DmServiceDMSERVER.service
#:systemctl start DmServiceDMSERVER.service
-
- DM 管理工具图形化界面连接数据库
$:cd /dm8/tool
$:./manager
-
- DM 数据库启动方式:
- dmdba 用户启动
- DM 数据库启动方式:
前台启动方式
#:cd /dm8/tool
#:./dmservice.sh
后台启动方式(DmServiceDMSERVER)
$:cd /dm8/bin
$:./DmServiceDMSERVER start
-
-
- Root 启动:
-
#:systemctl start|status|stop|enable|disable DmServiceDMSERVER
- DM 的客户端工具
- 改变数据库的状态
mount状态
SQL>alter database mount;
查看状态
SQL>select status$ from v$instance;
-
- DM 管理工具(manager)
$:cd /dm8/tool
$:./manager
在窗口—查询分析器—编辑器上面勾选对应选项(如启用SQL语法查询)。
-
- DM 控制台工具(console)
$:./console
-
- DM 数据迁移工具(dts)
$:./dts
-
- DM 性能监视工具(monitor):
$:./monitor
- DMSQL
$:cd /dm8/bin
$:./disql
输入账号:SYSDBA
密码:SYSDBA
设置数据库兼容性,数据迁移之前修改。(只改内存中的值,数据库重启之后以参数文件的值为准)
SQL:alter system set 'COMPATIBLE_MODE'=4 spfile;
修改动态参数
SQL:alter system set 'UNDO_RETENTION'=180 both;
修改会话参数,测试中应用。
SQL:alter session set 'LIST_TABLE'=1;
参数化修改
SQL:SP_SET_PARA_VALUE(0,'LIST_TABLE',1);
0表示内存,1表示修改后的值。
转换控制文件为文本文件
$:/dm8/bin
$:./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl dest=/dm8/data/DAMENG/dmctl.tx
配置环境变量
$:cd /home/dmdba
$:vi .bash_profile
输入:export PATH="$PATH:$DM_HOME/bin:$DM_HOME/tool"
$:source .bash_profile
-
- 防火墙
开启防火墙
#:systemctl start firewalld.service
查看开启的端口
#:firewall-cmd --list-all
开放端口
#:firewall-cmd --add-port=5238/tcp --permanent
生效需要
#:firewall-cmd --reload
- DM 的体系结构
登录sysdba
$:cd /dm8/bin
$:./disql sysdba/SYSDBA
exit;如果输入错误,可以退出,还是sql状态
查看启动数据库:ps -ef | grep dmserver
Sql上面连接另个数据库:conn sysdba/damemg@123:5236
连接服务:
$:cd /dm8/bin
$:./disql sysdba/SYSDBA@192.168.88.8:5238
网络配置助手:
$:cd /dm8/tool
$:./nca.sh
$:cd /dm8/bin
$:./disql sysdba/SYSDBA@DMOA
-
- 数据缓冲区
查看数据缓冲区大小
SQL>select name,value,type,description from v$parameter t where t.name ='BUFFER';
SQL>select name,value,sys_value,file_value,type,description from v$parameter t where t.name in('BUFFER','FAST_POOL_PAGES','RECYCLE','KEEP');
修改数据缓冲区大小
SQL>alter system set 'BUFFER'=1000 spfile;
关闭数据库
SQL>shutdown immediate;
SQL>exit;
重启数据库
$:DmServiceDMSERVER
达梦是单进程多线程
查进程
$:ps -ef | grep dmserver
查线程
$:ps -T -p 1582
查看占用内存和CPU情况
$:top -H -p 1582
- 表空间
创建空间表数据文件
create tablespace dmtbs DATAFILE 'DMTBS01.DBF' SIZE 32;
创建指定大小文件
create tablespace dmtest datafile '/dm8/data/TBS/DMTEST04.DBF'
SIZE 64 AUTOEXTEND ON NEXT 4 MAXSIZE 10240,'/dm8/data/TBS/DMTEST03.DBF'
SIZE 64 AUTOEXTEND ON NEXT 4 MAXSIZE 10240;
查看空间表
select * from dba_tablespaces;
查看数据文件
select * from dba_data_files;
在表空间dmtest中新建t_test01
create table t_test01 (id int,name varchar2(20)) tablespace dmtest;
查看t_test01
select t.TABLESPACE_NAME,t.TABLE_NAME from user_tables t;
插入信息
insert into t_test01(id,name) values(1,'111');
insert into t_test01(id,name) values(1,'111');
insert into t_test01(id,name) values(1,'111');
关闭表空间
alter tablespace dmtest offline;
打开表空间
alter tablespace dmtest online;
修改数据文件大小
alter tablespace dmtest resize DATAFILE '/dm8/data/TBS/DMTEST01.DBF' TO 128;
关闭自动扩展
alter tablespace dmtest DATAFILE '/dm8/data/TBS/DMTEST01.DBF' AUTOEXTEND OFF;
查看文件是否关闭自动扩展
select * from DBA_DATA_FILES;
表空间剩余内存
select * from DBA_FREE_SPACE;
添加数据文件
alter TABLESPACE DMTBS ADD DATAFILE 'DMTBS02.DBF' SIZE 32;
-
- 数据文件迁移
先脱机表空间,然后联机
alter TABLESPACE DMTBS OFFLINE;
alter TABLESPACE DMTBS RENAME DATAFILE 'DMTBS01.DBF' TO '/dm8/data/TBS/DMTBS01.DBF';
alter TABLESPACE DMTBS RENAME DATAFILE 'DMTBS02.DBF' TO '/dm8/data/TBS/DMTBS02.DBF';
alter TABLESPACE DMTBS online;
-
- 查询记录过旧的错误
alter system set 'UNDO_RETENTION'= 300 both;
-
- 修改TEMP空间为100M
alter system SET 'TEMP_SIZE'=100 spfile;
查看是否改为100M
select * from v$parameter t where name like 'TEMP%';
-
- 重做日志
查看联机日志
select * from v$rlogfile;
增加联机日志
alter database ADD LOGFILE 'DAMENG03.log' SIZE 256;
修改联机日志大小(只能增大)
alter DATABASE resize LOGFILE 'DAMENG03.log' to 300;
联机日志的迁移
alter DATABASE MOUNT;
alter DATABASE RENAME LOGFILE 'DAMENG03.log' to '/dm8/data/DAMENG/REDO/DAMENG03.log';
alter DATABASE RENAME LOGFILE 'DAMENG02.log' to '/dm8/data/DAMENG/REDO/DAMENG02.log';
alter DATABASE RENAME LOGFILE 'DAMENG01.log' to '/dm8/data/DAMENG/REDO/DAMENG01.log';
alter DATABASE OPEN;
查看是否开启归档
select arch_mode FROM SYS."V$DATABASE";
Mount状态开始归档
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 * FROM sys."V$DM_ARCH_INI";
切换归档,三种命令都行
alter SYSTEM SWITCH LOGFILE;
alter SYSTEM ARCHIVE LOG CURRENT;
alter DATABASE ARCHIVELOG CURRENT;
查看归档
select * FROM sys."V$ARCH_FILE";
删除归档
SF_ARCHIVELOG_DELETE_BEFORE_LSN(554341);
- 用户管理
- 设置口令策略
alter SYSTEM SET 'PWD_POLICY'=14 both;
PWD_POLICY(隐含参数,不在 dm.ini 中)参数指定系统的口令策略,默认为 2;
系统支持的口令策略有:
⚫ 0 无策略
⚫ 1 禁止与用户名相同
⚫ 2 口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值
⚫ 4 至少包含一个大写字母(
A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
-
- 创建用户
create user dmtest IDENTIFIED BY Dameng123 DEFAULT TABLESPACE DMTBS;
查看用户
select * from SYS.DBA_USERS;
进入创建用户
SQL> conn dmtest/Dameng123
SQL> select * from session_privs;
修改sysdba口令策略
alter user sysdba PASSWORD_POLICY 15;
查看当前(单个)用户的口令策略
select * from dba_users;
设置用户有有效期
alter user dmtest LIMIT PASSWORD_LIFE_TIME 180;
查看结果
select a.USERname,t.*
from dba_users a, sysusers t where a.USER_ID = t.ID;
创建profile1的资源限制(在左侧的资源限制也可设置)
create PROFILE profile1 LIMIT PASSWORD_LIFE_TIME 180,FAILED_LOGIN_ATTEMPS 5,PASSWORD_LIFE_TIME 3,SESSION_PER_USER 3;
创建hrtest
create user hrtest IDENTIFIED BY "Dameng@123" PASSWORD_POLICY 31
DEFAULT TABLESPACE DMTBS DEFAULT INDEX TABLESPACE DMTBSIDX;
alter user hrtest PROFILE PROFILE1;
解锁账号
alter user HRTEST ACCOUNT UNLOCK;
账号登录
$ disql hrtest/'"Dameng@123"'
-
- 角色权限
grant create table to dmtest;
grant CREATE INDEX to dmtest;
grant SELECT on dmhr.department to dmtest;
执行操作系统命令
host clear
创建表
create table t_test02(id int);
查看表
select * from dmhr.department limit 5;
授予部分权限
grant SELECT(employee_id,employee_name,email) on dmhr.employee TO dmtest;
回收权限
revoke SELECT ON dmhr.employee FROM dmtest;
查看
select employee_id,employee_name,email from dmhr.employee limit 5;
回收创建表权限
revoke CREATE TABLE FROM dmtest;
赋予创建任意表权限,创建完成把ENABLE_DDL_ANY_PRIV为0
select * FROM sys."V$PARAMETER" t WHERE name LIKE '%DDL%';
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV'=1 MEMORY;
grant create any table to dmtest;
revoke create any table from dmtest;
创建角色
create role r1;
grant CREATE table to r1;
grant SELECT on dmhr.employee to r1;
grant r1 to dmtest;
对象权限转售
grant SELECT on dmhr.department to dmtest WITH GRANT OPTION;
系统权限转售
grant create table to dmtest with ADMIN OPTION;
查看用户名称
SQL> select user;
在DMTEST下转售权限
grant create table to hrtest;
查看拥有的权限
SQL> select * from session_privs;
在DMTEST下转售表的权限
SQL>grant select on dmhr.department to hrtest;
转售之前后的权限回收
revoke SELECT ON dmhr.department FROM dmtest CASCADE;
-
- 模式
创建模式
create SCHEMA hr01 AUTHORIZATION hrtest;
模式和用户的对应关系
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;
查看当前模式属于那个用户
SQL> select sys_context('userenv','current_schema');
访问其他模式的表(用户下有同名模式,只有模式名.对象名)
SQL> select * from dmhr.employee limit 3;
切换到dmhr模式(只针对当前会话有效)
SQL> set schema dmhr;
-
- 表和约束
删除表
drop TABLE if EXISTS DMTEST.t_testpid;
创建表
create TABLE if NOT EXISTS DMTEST.t_testpid
(pid int PRIMARY KEY,
pname VARCHAR(20) UNIQUE,
sex bit)
tablespace DMTBS;
创建子表
create TABLE IF NOT EXISTS DMTEST.t_testchild
(childid INT,
childname VARCHAR(30),
salary INT NOT NULL,
createtime DATETIME DEFAULT sysdate
) TABLESPACE DMTBS;
插入数据
insert into dmtest.t_testchild(childid,childname,salary)
values(1,'aaa',100);
查看插入数据
select * from DMTEST.T_TESTCHILD;
增加约束
alter TABLE DMTEST.T_TESTCHILD ADD CONSTRAINT ck_testchild_salary
CHECK(salary>=2000);
修改数值,右键浏览数据,修改数值,然后保存。
插入一列
alter TABLE DMTEST.T_TESTCHILD ADD COLUMN pid int;
创建外键
alter TABLE DMTEST.T_TESTCHILD ADD CONSTRAINT pk_testchild FOREIGN KEY(pid)
references dmtest.T_TESTPID(pid);
插入数据
insert into dmtest.t_testchild(childid,childname,salary,pid)
values(1,'aaa',100000,1);
创建表(只拷贝表结构)
create TABLE DMTEST.t_emp AS SELECT * FROM dmhr.EMPLOYEE;
查看数据的行数
cat t_emp.sql | wc -l
导出数据
select * from DMTEST.T_EMP;
在表格上面右键,选择导出所有
删除表数据
truncate TABLE DMTEST.T_EMP;
导入数据
$:disql dmtest/'"Dameng123"'
SQL>start t_emp.sql
或者用SQL>`/dm8/backup/data/t_emp.sql
如果在管理工具上记得提交√
select * from DMTEST.T_EMP;
查看行数
select count(*) from DMTEST.T_EMP;
关掉回显
SQL>set echo off;
SQL>set feedback off;
SQL>set timing off
赋予查询权限
grant vti to dmtest;
-
- 创建视图
在dmdba上赋予创建视图权限
grant CREATE VIEW to dmtest;
创建视图(dmtest)
create VIEW v_empnum as
select a.department_id,b.department_name,COUNT(*)empnum
from t_emp a, t_dept b
where a.DEPARTMENT_ID = b.department_id
group BY a.DEPARTMENT_ID,b.department_name;
查视图
select * from v_empnum;
查找大于15
create or REPLACE VIEW v_empnum as
select a.department_id,b.department_name,COUNT(*)empnum
from t_emp a, t_dept b
where a.DEPARTMENT_ID = b.department_id
group BY a.DEPARTMENT_ID,b.department_name
Having count(*)>15;
查看索引
explain select * FROM t_emp t WHERE t.EMPLOYEE_ID=1001;
创建索引
create INDEX ix_emp ON t_emp(employee_id);
create INDEX ix_emp ON t_emp(employee_id) TABLESPACE DMTBSIDX;
收集统计信息及展示
dbms_stats.gather_table_stats('DMTEST','T_EMP');
dbms_stats.table_stats_show('DMTEST','T_EMP');
-
- 索引
查看索引
select * from USER_INDEXES;
查看索引字段
select * from USER_IND_COLUMNS;
监控索引
alter INDEX DMTEST.IX_EMP MONITORING USAGE;
alter INDEX ix_emp_name MONITORING USAGE;
查看监控的索引
select * from sys."V$OBJECT_USAGE";
关闭监控
alter INDEX DMTEST.IX_EMP noMONITORING USAGE;
alter INDEX ix_emp_name noMONITORING USAGE;
清除测试数据
SP_DYNAMIC_VIEW_DATA_CLEAR('V$OBJECT_USAGE');