# 代表root用户
$ 代表dmdba用户
DM8 一共分为 4 个版本:开发版、标准版、企业版、安全版
开发版:不能作为商用,一年时间(从产品发布之日起)有效,开发版与企业版功能相同,平时工作使用开发版即可,授权期限为一年
标准版:满足中小企业使用,不支持集群特性
企业版:满足中大型企业使用,支持集群(数据守护、读写分离、mpp、dmdsc)特性,是生产环境中用到最多的版本。支持集群特性,需要购买授权码
安全版:是在企业版基础上,四权分立,安全性有进一步的增强,增加了强访问控制和环境标记等。增加了访问控制等安全特性,用于SM机上
- 一般用途(Common)
- 联机分析处理(OLAP)
- 联机事务处理(OLTP)
- 典型安装(Typical)
- 服务器(Server)
- 客户端(Client)
- 自定义(Custom)
- Shutdown 数据库处于关闭状态
- Mount 数据库的配置状态,配置归档、集群
- OPEN 数据库打开状态,数据库可读写访问
- Suspend 数据库挂起状态,只读
数据库实例状态相互转换
Shutdown-mount
Shutdown-open
Mount-open
Open-mount
Suspend-open
Open-suspend
alter database mount;
alter database open;
alter database suspend;
# lscpu
# cat /proc/cpuinfo
# free -m
# cat /proc/meminfo
# fdisk -l
# df -h
# df -Th 查看硬盘类型及大小
至少需要20G,推荐给25G以上
/tmp分区≥600M,建议2G
如果tmp容量小于1G,使用以下命令扩容
# 使用root用户执行
mount -o remount,size=2G /tmp
# ethool
100/1000/10000网卡,支持TCP/IP协议
# systemctl status firewalld #查看防火墙状态
# systemctl stop firewalld #关闭防火墙
# systemctl disable firewalld #开启不启动防火墙
# setenforce 0 #临时关闭防火墙
# sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭防火墙
# uname -ar #安装 DM8,系统内核要在 2.6 及以上,否则在安装过程中会报错
# uname -a
# uname -r
# cat /proc/version
glibc需要在2.3以上(含2.3),否则在安装过程中会报错
# ldd –version
ldd (GNU libc) 2.28
# rpm -qa|grep glibc
安装odbc的时候,需要gcc包依赖,没有安装的话需要进行安装
# gcc –version
gcc (GCC) 7.3.0
# rpm -qa|grep gcc
组:dinstall
用户:dmdba
groupadd dinstall
useradd -g dinstall -d /home/dmdba -s /bin/bash -m dmdba
passwd dmdba
# 例
groupadd -g 10021 dinstall
useradd -u 10021 -g dinstall -d /home/dmdba -s /bin/bash -m dmdba
passwd dmdba
(例:DM@dba2023)
# 删除用户
userdel -f dmdba
# 删除组
groupdel dinstall
# 删除文件
rm -rf /var/spool/mail/dmdba
rm -rf /home/dmdba
su – dmdba
vi .bash_profile
export DM_HOME=/dm8/dmdbms
export PATH=$DM_HOME/bin:$PATH:$DM_HOME/tool:$PATH:HOME/bin:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
source .bash_profile #让其生效
mkdir -p /dm8/dmdbms
chown -R dmdba:dinstall /dm8
chmod -R 775 /dm8
mkdir -p /dm8/dmdbms
mkdir -p /dm8/data/arch
mkdir -p /dm8/data/log
mkdir -p /dm8/data/backup
chown -R dmdba:dinstall /dm8
chmod 755 -R /dm8
# 查看最大可打开文件数
ulimit -a
# 临时设置(当前会话生效)
ulimit -n 20480
# 永久设置,需要用root用户操作
vi /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
root soft nofile 102400
root hard nofile 102400
其它:
* soft nproc 10240
* hard nproc 10240
dmdba soft nproc 10240
dmdba hard nproc 10240
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba hard data unlimited
dmdba soft data unlimited
dmdba hard fsize unlimited
dmdba soft fsize unlimited
dmdba soft core unlimited
dmdba hard core unlimited
ulimit -a ## 确认是否生效
fsize #(blocks) # unlimited(无限制)
open file # 65536以上或者unlimited(无限制)
virtual memory(kbytes) #1048576(即1GB)以上或者unlimited(无限制)
data seg size(kbytes) #1048576(即1GB)以上或者unlimited(无限制)
# 考试的时候,可能已经挂载,直接安装即可,df -h查看
mount -o loop /soft/dm8_20231116_x86_rh6_64.iso /mnt
# 登陆到服务器上后,打开命令行(root用户)
xhost +
# 查看DISPLAY值
echo $DISPLAY
# 切换到dmdba用户
su - dmdba
# 查看DISPLAY值
echo $DISPLAY
# 设置DISPLAY值(具体以考试环境查询出来的值为准)
export DISPLAY=:0.0
环境测试:
# echo $DISPLAY
:1
# xhost +
access control disabled, clients can connect from any host
# su - dmdba
Last login: Tue Jan 16 15:45:10 CST 2024 on pts/2
dm8dw02>$echo $DISPLAY
$export DISPLAY=:1
$echo $DISPLAY
:1
$xhost +
access control disabled, clients can connect from any host
-
- DM管理工具
- manager DM管理工具
- DM管理工具
$export DISPLAY=84.0.191.1:0.0
$/dm8/dmdbms/tool/manager
通过 DM 管理工具日常维护管理数据库,包括:表空间管理、用户管
理、模式对象管理、配置归档、热备、逻辑备份、作业管理。
-
-
- console DM控制台工具
-
$export DISPLAY=84.0.191.1:0.0
$/dm8/dmdbms/tool/console
DM 控制台工具可以查找和修改参数,整库冷备、归档备份、整库还
原、表空间还原。
-
-
- dbca DM数据库配置助手
-
$cd /dm8/dmdbms/tool/
$export DISPLAY=84.0.191.1:0.0
$./dbca.sh
-
-
- dts DM数据迁移工具
-
$cd /dm8/dmdbms/tool/
$export DISPLAY=84.0.191.1:0.0
$./dts
-
-
- moinitor DM性能监视工具
-
$cd /dm8/dmdbms/tool/
$export DISPLAY=84.0.191.1:0.0
$./monitor
-
-
- dbca DM数据库配置助手
-
$cd /dm8/dmdbms/tool/
$export DISPLAY=84.0.191.1:0.0
$./dbca.sh
$dbca.sh
root用户
开机自启
$ /dm8/tool/dbca.sh
注:图形化安装时,已经注册了开机自动启动
# rm -rf /dm8/*
# su - dmdba
$/mnt/DMInstall.bin -i
# su - dmdba
$ cd /dm8/dmdbms/bin
##默认(SYSDBA密码默认)##
$/dm8/dmdbms/bin/dminit path=/dm8/data db_name=DAMENG instance_name=DMSERVER port_num=5236
-简版(SYSDBA密码默认)
$/dm8/dmdbms/bin/dminit PATH=/dm8/data DB_NAME=DMTEST INSTANCE_NAME=DMTEST PORT_NUM=5236 charset=1 log_size=2048 case_sensitive=0 page_size=32
--复杂(指定SYSDBA密码)
/dm8/dmdbms/bin/dminit path=/dm8/data EXTENT_SIZE=16 PAGE_SIZE=32 case_sensitive=1 charset=1 log_size=2048 db_name=CUGDB instance_name=CUGDB PORT_NUM=5236 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA2023" SYSAUDITOR_PWD="SYSDBA2023" ELOG_PATH=/dm8/data/log
注意
实际环境中,簇大小建议选择 16,页大小选择 32K,日志大小选择 2048,字符集和大小写敏感需要和应用厂商对接后,再进行选择。
参数说明:
PATH #初始数据库存放的路径
EXTENT_SIZE #数据文件使用的簇大小(16)
PAGE_SIZE #数据页大小(8)
case_sensitive #大小敏感(Y)
charset #
log_size #
db_name #
instance_name #
PORT_NUM #
LENGTH_IN_CHAR #
BLANK_PAD_MODE #
SYSDBA_PWD #
SYSAUDITOR_PWD #
ELOG_PATH #
root用户:
# cd /dm8/dmdbms/script/root
--默认实例
# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DAMENG/dm.ini -p DMSERVER
--CUGDB实例
#./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/CUGDB/dm.ini -p CUGDB
# systemctl enable DmServiceCUGDB.service
说明:
# 执行注册数据库服务
./dm_service_installer.sh -t dmserver -p 服务名后缀(前缀是定死的,后缀为数据库实例名称) -dm_ini /dm8/data/DMTEST/dm.ini
./dm_service_installer.sh -t dmserver -p DMTEST -dm_ini /dm8/data/DMTEST/dm.ini
# 取消注册服务
./dm_service_uninstaller.sh -n 服务名称
./dm_service_uninstaller.sh -n DmServiceDMTEST
$ /dm8/dmdbms/uninstall.sh -i
$ rm -rf /dm8/log
$ cd $DM_HOME
./disql SYSDBA/SYSDBA:5236
$ cd $DM_HOME
./disql SYSDBA/SYSDBA@84.0.191.252:5236
SQL> select sysdate;
行号 SYSDATE
---------- -------------------
1 2024-01-16 16:58:36
-
-
- 使用conn连接
-
如果已经登陆到数据库中,可以直接使用conn命令进行连接到其他数据库
# 连接本机,ip可省略
SQL> conn omp/"omp123123!":5238
SQL> conn omp/"omp123123!"@84.0.191.252:5238
-
-
- 使用图形化连接(开启语法提示)
-
$ export DISPLAY=84.0.191.1:0.0
$ cd /dm8/dmdbms/tool/
$ ./manager
$/dm8/dmdbms/bin/DmServiceCUGDB status
DmServiceCUGDB (pid 1312) is running.
$/dm8/dmdbms/bin/DmServiceDMSERVER stop
$/dm8/dmdbms/bin/DmServiceDMSERVER start
DM 数据库启动顺序为:
Shutdown(关闭状态)–> Mount(配置状态)–> Open(打开状态)
MOUNT 和 OPEN 可以相互转换(与 Oracle 不同);
SUSPEND 和 OPEN 也可以相互转换。
但 MOUNT 和 SUSPEND 之间不能相互转换。
$/dm8/dmdbms/bin/DmServiceDMSERVER restart
修改参数的几种方法:
1) 通过 vi dm.ini 的方法修改,无论是动态参数还是静态参数,只读参数,都要重启数据库实例生效。
2) 通过函数修改,sp_set_para_value
SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)该过程用于修改整型静态配置参数和动态配置参数。
参数类型为 1, 动态参数, 会同时修改内存和参数中的值。
参数类型为 2, 静态参数, 只会修改参数中的值, 需要重启数据库实例。
3)通过console工具修改参数, 无论是动态还是静态参数,都需要重启数据服务
4) alter system 兼容 oracle 的修改方法
-
-
-
- vi修改dm.ini(兼容oracle)
-
-
# 通过 vi dm.ini 的方法修改, 无论是动态参数还是静态参数, 只读参数, 都要重启数据库实例生效
vi /dm8/data/服务名称/dm.ini
$ vi /dm8/data/CUGDB/dm.ini
COMPATIBLE_MODE = 2
重启数据库才生效
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
Stopping DmServiceCUGDB: [ OK ]
Starting DmServiceCUGDB: [ OK ]
-
-
-
- console图形化修改(兼容oracle)
-
-
修改静态参数:COMPATIBLE_MODE
通过console工具修改参数, 无论是动态还是静态参数, 都需要重启数据服务$ /dm8/dmdbms/tool/console
修改COMPATIBLE_MODE参数值
重启数据库才生效
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
Stopping DmServiceCUGDB: [ OK ]
Starting DmServiceCUGDB: [ OK ]
修改静态参数:COMPATIBLE_MODE
- 查询COMPATIBLE_MODE的值
SQL> select para_name,para_value,para_type from v$dm_ini where para_name='COMPATIBLE_MODE';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------------- ---------- ---------
1 COMPATIBLE_MODE 0 IN FILE
- 用SP_SET_PARA_VALUE 进行修改
SQL> sp_set_para_value(2,'COMPATIBLE_MODE',2);
- 再次查询确认(因为是静态参数,需要重启才生效。
SQL> select para_name,para_value,para_type from v$dm_ini where para_name='COMPATIBLE_MODE';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------------- ---------- ---------
1 COMPATIBLE_MODE 0 IN FILE
- 静态参数需重启生效
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
Stopping DmServiceCUGDB: [ OK ]
Starting DmServiceCUGDB: [ OK ]
- 再次查询确认
SQL> select para_name,para_value,para_type from v$dm_ini where para_name='COMPATIBLE_MODE';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------------- ---------- ---------
1 COMPATIBLE_MODE 2 IN FILE
SQL> select distinct type from v$parameter;
行号 TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
both:既修改内存中的值,也修改配置文件中的值,重启不重启都一样生效
spfile:只修改配置文件中的值,重启数据库生效
memory:只修改内存中的值,重启数据库后恢复设置前的样子
达梦根据参数类型可分为,静态参数和动态参数两种,这两种均支持通过系统函数、SQL命令进行修改
静态参数:只能修改配置文件中的值,对内存中的值不进行修改,所以静态参数修改后使其生效的话,需要对数据库进行重启
动态参数:既能修改内存中的值,也能修改配置文件中的值,所以动态参数修改后是立即生效的
- READ ONLY
只读参数,不能通过系统函数、SQL命令达到修改参数的目的,只能从dm.ini配置文件中进行修改
- SYS
静态参数,可以通过系统函数、SQL命令达到修改参数的目的
- IN FILE
动态参数(系统级),可以通过系统函数、SQL命令达到修改参数的目的
- SESSION
动态参数(会话级),可以通过系统函数、SQL命令达到修改参数的目的,可针对某个会话进行修改,便于调试(不然要应用到整个线上系统,一旦出错,影响面就广了)
-
-
-
- 修改COMPATIBLE_MODE(兼容oracle)
-
-
- 语法
alter system set '参数名'='参数值' both | spfile | memory;
- 查询兼容参数类型
SQL> select name,value,sys_value,file_value,type,description from v$parameter where name = 'COMPATIBLE_MODE';
行号 name VALUE sys_value file_value TYPE description
--------------------------------------------------------------
1 COMPATIBLE_MODE 0 0 0 IN FILE Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG
- # 修改兼容参数类型
alter system set 'COMPATIBLE_MODE'=2 spfile;
- 静态参数需重启生效
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
Stopping DmServiceCUGDB: [ OK ]
Starting DmServiceCUGDB: [ OK ]
- 确认修改是否生效
SQL> select name,value,sys_value,file_value,type from v$parameter where name = 'COMPATIBLE_MODE';
行号 name VALUE sys_value file_value TYPE
---------- --------------- ----- --------- ---------- -------
1 COMPATIBLE_MODE 2 2 2 IN FILE
- 查询当前参数
SQL> select name, value, sys_value, file_value, type from v$parameter where name='UNDO_RETENTION';
行号 NAME VALUE SYS_VALUE FILE_VALUE TYPE
---------- -------------- --------- --------- ---------- ----
1 UNDO_RETENTION 90.000000 90.000000 90.000000 SYS
- 修改UNDO_RETENTION参数
SQL> alter system set 'UNDO_RETENTION'=180 both;
- 确认当前参数(修改成功)
SQL> select name, value, sys_value, file_value, type from v$parameter where name='UNDO_RETENTION';
行号 NAME VALUE SYS_VALUE FILE_VALUE TYPE
---------- -------------- ---------- ---------- ---------- ----
- UNDO_RETENTION 180.000000 180.000000 180.000000 SYS
- 查询LIST_TABLE当前状态
SQL> select name,value,sys_value,file_value,type from v$parameter where name='LIST_TABLE';
行号 NAME VALUE SYS_VALUE FILE_VALUE TYPE
---------- ---------- ----- --------- ---------- -------
1 LIST_TABLE 0 0 0 SESSION
- 查询LIST_TABLE值
SQL> alter session set 'LIST_TABLE'=1;
- 确认修改是否成功
SQL> select name,value,sys_value,file_value,type from v$parameter where name='LIST_TABLE';
行号 NAME VALUE SYS_VALUE FILE_VALUE TYPE
---------- ---------- ----- --------- ---------- -------
1 LIST_TABLE 1 0 0 SESSION
SQL> select name,id from v$ifun t where name like '%SP_SET%_PARA%';
行号 NAME ID
---------- ------------------------ -----------
1 SP_SET_PARA_DOUBLE_VALUE 2902
2 SP_SET_PARA_DOUBLE_VALUE 586
3 SP_SET_PARAM_IN_SESSION 1760
4 SP_SET_PARA_STRING_VALUE 2901
5 SP_SET_PARA_STRING_VALUE 585
6 SP_SET_PARA_VALUE 2900
7 SP_SET_PARA_VALUE 584
注:
DOUBLE_VALUE #DOUBLE结尾的是修改double类型参数值
STRING_VALUE #STRING结尾的是修改string类型参数值
PARA_VALUE #PARA结尾的是修改int类型参数值
SQL> select * from v$ifun_arg t where id=2902;
行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$
---------- ----------- -------- ----------- ---------------- -----------
1 2902 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
2 2902 BRO_FLAG 0 INTEGER 4 0 IN NULL
3 2902 SCOPE 1 INTEGER 4 0 IN NULL
4 2902 PARANAME 2 VARCHAR2 256 0 IN NULL
5 2902 VALUE 3 DOUBL 8 0 IN NULL
注:
- #代表只修改内存
- #代表内存+配置文件
- 只修改配置文件
SQL> SP_SET_PARA_DOUBLE_VALUE(1,'UNDO_RETENTION',90);
SQL> SP_SET_PARA_DOUBLE_VALUE(1,'UNDO_RETENTION',180);
确认修改成功
SQL> select name,VALUE,SYS_VALUE,FILE_VALUE,DEFAULT_VALUE from v$parameter where name='UNDO_RETENTION';
行号 NAME VALUE SYS_VALUE FILE_VALUE DEFAULT_VALUE
---------- -------------- ---------- ---------- ---------- -------------
- UNDO_RETENTION 180.000000 180.000000 180.000000 90.000000
1.可以通过console图形化修改buffer大小(默认1000)
2. vi /dm8/data/CUGDB/dm.ini
3.命令行
Normal对应参数BUFFER
Fast对应参数为FAST_POOL_PAGES
Recycle对应参数为RECYCLE
Keep对应参数为KEEP
参数默认值:
BUFFER = 1000---对应normal
BUFFER_POOLS = 19
FAST_POOL_PAGES = 3000---对应Fast
FAST_ROLL_PAGES = 1000
RECYCLE = 300---对应Recycle
KEEP = 8---对应Keep
-
-
-
- BUFFER修改
-
-
考试的时候可能会让你修改数据缓冲区大小,没有特殊指明的话就是修改Normal缓冲区的大小,参数对应的是BUFFER
方法一:vi /dm8/data/CUGDB/dm.ini
方法二:console图形化界面修改
方法三:SQL语句修改
- 查询buffer大小
$ cat dm.ini | grep BUFFER
SQL> select para_name,default_value,para_type from v$dm_ini where PARA_NAME='BUFFER';
行号 PARA_NAME DEFAULT_VALUE PARA_TYPE
---------- --------- ------------- ---------
1 BUFFER 1000 IN FILE
- 修改buffer大小
SQL> alter system set 'BUFFER'=2000 spfile;
- 重启数据库
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
- 确认buffer大小
SQL> select PARA_NAME,PARA_VALUE from v$dm_ini where PARA_NAME='BUFFER';
行号 PARA_NAME PARA_VALUE
---------- --------- ----------
1 BUFFER 2000
$ cat dm.ini | grep BUFFER
BUFFER = 2000
修改共享内存MEMORY_POOL 决定了以M为单位的公共内存池的大小
- 查询MEMORY_POOL大小
SQL> select para_name,default_value from v$dm_ini where PARA_NAME='MEMORY_POOL';
行号 PARA_NAME DEFAULT_VALUE
---------- ----------- -------------
- MEMORY_POOL 500
SQL> call sp_set_para_value(2,'MEMORY_POOL',800);
- 重启数据库
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
- 确认MEMORY_POOL大小
SQL> SELECT PARA_NAME,PARA_VALUE FROM v$dm_ini where PARA_NAME='MEMORY_POOL';
行号 PARA_NAME PARA_VALUE
---------- ----------- ----------
- MEMORY_POOL 800
$ cat dm.ini | grep MEMORY_POOL
MEMORY_POOL = 800
后面继续完善……
-
- DM8权限管理
dm数据库权限相关视图与oracle视图兼容,常用的有以下几个视图:
select * from DBA_SYS_PRIVS;
显示系统中所有传授给 用户或者角色的权限。
传授给当前用户的系统权限。
SQL> select * from USER_SYS_PRIVS;
显示系统中的授予用户的所有角色。
SQL> SELECT * FROM DBA_ROLE_PRIVS;
显示传授给当前用户的角色。
SQL> select * from USER_ROLE_PRIVS;
显示系统中所有的角色
显示系统中所有用户的数据库对象权限信息
SQL> select * from DBA_TAB_PRIVS;
显示当前用户作为对象拥有者、授权者或被授权者的数据库对象权限。结构同DBA_TAB_PRIVS。
SQL> select * from USER_TAB_PRIVS;
SQL> grant create user to fms;
SQL> grant select on omp.year_2001 to fms with grant option;
SQL> grant select on omp.year_2001 to fms;
# 设置用户名为fms的用户,最大连接数为3,多出3个连接会报错
alter user fms limit SESSION_PER_USER 3;
select * from v$parameter where name = 'ENABLE_DDL_ANY_PRIV';
# 开启参数
alter system set 'ENABLE_DDL_ANY_PRIV'=1 both;
# 进行授权
grant create any table to fms;
grant select on 模式名.表名 to 用户名;
grant select on dmhr.department to hrtest;
不能只授予修改、删除权限,还要授予查询权限
grant select on 模式名.表名 to 用户名;
grant update on 模式名.表名 to 用户名;
grant delete on 模式名.表名 to 用户名;
grant select on omp.year_2001 to fms with grant option;
如果回收的角色,带有转授权限,那么需要加关键字,对其转授出去的角色一并级联回收
SQL> revoke select on omp.year_2001 from fms cascade;
revoke 角色名 from 用户名;
revoke 具体权限 from 用户名;
revoke dm1 from omp;
revoke create table from fms;
SYSTEM:系统表空间,存放的是数据字典信息,包含表定义、视图定义、用户权限等
ROLL:回滚表空间,存放undo信息。INSERT、UPDATE、DELETE都会产生undo信息
MAIN:用户默认表空间,创建用户时,没有指定表空间,则使用MAIN表空间
TEMP:临时表空间,用于存放临时表数据、索引、大量数据排序等产生的数据
HMAN:HUGE表(列存储表)的默认表空间
- 查看表空间
SQL> select * from dba_tablespaces;
SQL> select * from dba_data_files;
- 创建大表空间
SQL> create huge tablespace "TS_BIGDATA" path '/dm8/data/CUGDB/bigdata01.dbf';
- 查看大表空间
select * from v$huge_tablespace;
- 添加HUGE数据文件路径
ALTER TABLESPACE "TS_BIGDATA" ADD HUGE path '/dm8/data/CUGDB/bigdata02.dbf';
- 建表空间
SQL> create tablespace 表空间名 datafile '数据文件路径' SIZE 数据文件大小(单位为mb);
- 简单创建
SQL> create tablespace "OMP_TS" datafile '/dm8/data/DWCUGDB/omp01.dbf' SIZE 32;
- 创建表空间(开启自动增长)
SQL> create tablespace "OMP_TS" datafile '/dm8/data/DWCUGDB/omp01.dbf' size 200 autoextend on/off;
SQL> create tablespace omp_ts datafile '/dm8/data/DWCUGDB/omp01.dbf' size 100 autoextend off;
- #修改为不自动扩展
SQL> alter TABLESPACE TEST_SP DATAFILE '/dm8/data/DWCUGDB/omp01.dbf' AUTOEXTEND off;
- 开启自动扩展,指定范围(每次扩展1M,每个数据文件最大1024M。
alter TABLESPACE TEST_SP DATAFILE '/dm8/data/DWCUGDB/omp01.dbf' AUTOEXTEND on NEXT 1 maxsize 1024;
- 创建表空间(缓冲区类型为 NORMAL)
SQL> create tablespace "OMP_TS" datafile '/dm8/data/CUGDB/OMPTS01.DBF' size 128 autoextend on next 1 maxsize 1024 CACHE = NORMAL;
- 扩表空间(缓冲区类型为 NORMAL)
SQL> alter tablespace OMP_TS add datafile '/dm8/data/CUGDB/OMPTS02.DBF' size 128 autoextend on next 1 maxsize 1024;
- 脱机状态
alter tablespace TEST offline;
-
-
- 表空间增加datafile
-
alter tablespace OMP_TS add datafile '/dm8/data/CUGDB/OMPTS02.DBF' size 1024 autoextend on;
alter tablespace OMP_TS resize datafile '/dm8/data/CUGDB/OMPTS01.DBF' to 50;
alter tablespace OMP_TS datafile '/dm8/data/CUGDB/OMPTS01.DBF' autoextend on next 2 maxsize 10240;
alter tablespace OMP_TS rename to OMP_TS01;
- 查看表空间的数据文件
select FILE_NAME,TABLESPACE_NAME from DBA_DATA_FILES;
- 查看存在的表空间
select name,TOTAL_SIZE from v$tablespace;
用户自定义的表空间可以删除和脱机,系统定义的表空间不能脱机和删除
删除后表空间下的数据文件也会级联删除
drop tablespace OMP_TS;
迁移时注意:新的表空间路径,必须是由安装数据库的用户进行创建,或者把这个文件夹授予数据库安装用户读写权限,否则会因权限问题报数据库文件路径错误
- 先将表空间离线
alter tablespace OMP_TS offline;
- 重命名数据文件名,并迁移
SQL> select path from v$datafile;
行号 PATH
---------- ---------------------------
4 /dm8/data/DWCUGDB/omp01.dbf
SQL> alter tablespace OMP_TS rename datafile '/dm8/data/DWCUGDB/omp01.dbf' to '/dm8/data/tempdatafile/omp88.dbf';
SQL> select path from v$datafile;
5 /dm8/data/tempdatafile/omp88.dbf
- 将表空间上线
alter tablespace OMP_TS online;
查询页大小的4096倍,并换算成MB
SQL> select page*4096/1024/1024;
行号 PAGE*4096/1024/1024
---------- -------------------
1 128
注:数据文件的大小必须是,最小:页大小的4096倍
-
-
- 修改temp表空间
-
SQL> select name,value,type from v$parameter where name like 'TEMP%';
行号 NAME VALUE TYPE
---------- ---------------- --------------- ---------
1 TEMP_PATH /dm8/data/CUGDB READ ONLY
2 TEMP_SIZE 10 IN FILE
3 TEMP_SPACE_LIMIT 0 SYS
TEMP_PATH:temp表空间的路径
TEMP_SIZE:temp表空间的初始值,单位为MB
TEMP_SPACE_LIMIT:temp表空间的空间限制,0表示不限制
修改TEMP表空间大小,重启后依旧生效
- 修改temp表空间,需要修改temp_size
$ cat dm.ini | grep TEMP_SIZE
TEMP_SIZE = 10
SQL> alter system set 'TEMP_SIZE'=64 spfile;
或者
SQL> sp_set_para_value(2,'TEMP_SIZE',128);
- 重启数据库
$ /dm8/dmdbms/bin/DmServiceCUGDB restart
- 查看TEMP_SIZE是否生效
SQL> select para_name,PARA_VALUE from v$dm_ini where PARA_NAME='TEMP_SIZE';
行号 PARA_NAME PARA_VALUE
---------- --------- ----------
- TEMP_SIZE 64
SQL> select PARA_NAME, PARA_VALUE from v$dm_ini where para_name like 'TEMP_SIZE%';
行号 PARA_NAME PARA_VALUE
---------- --------- ----------
1 TEMP_SIZE 64
$ cat dm.ini | grep TEMP_SIZE
TEMP_SIZE = 64
SQL> alter tablespace FMS_TS online;
SQL> alter tablespace FMS_TS offline;
SQL> select tablespace_name,status from dba_tablespaces;
行号 TABLESPACE_NAME STATUS
---------- --------------- -----------
1 SYSTEM 0
2 ROLL 0
3 TEMP 0
4 MAIN 0
5 OMP_TS 0
6 TS_BIGDATA 0
7 FMS_TS 1
8 MAIN NULL
9 TS_BIGDATA NULL
status 为 0 代表连接,为 1 代表脱机
select * from DBA_USERS;
SYS:内置用户,不能直接登陆
SYSDBA:系统管理员,拥有DBA角色(除了安全、审计其他都管)
SYSAUDITOR:系统审计管理员
SYSSSO:系统安全管理员
SYSDBO:系统安全操作员(达梦安全版才有)
SQL> select NAME,TYPE,VALUE from v$parameter where name='PWD_POLICY';
行号 NAME TYPE VALUE
---------- ---------- ---- -----
1 PWD_POLICY SYS 2
alter system set 'PWD_POLICY' = 下图策略相加 both;
- 设置密码为无策略
SQL> alter system set 'PWD_POLICY'=0 both;
-
-
- 创建schema
-
CREATE SCHEMA myshcema AUTHORIZATION SYSDBA;
/
切记第二行有/
create user 用户名 identified by 密码 default tablespace 表空间名;
CREATE USER omp IDENTIFIED BY "omp123123!" DEFAULT TABLESPACE OMP_TS;
grant resource to omp;
例:创建用户 omp,密码是 omp123123!,默认表空间为 OMP_TS,该用户拥有创建表、视图、索引的权限。
create user "omp" identified by "omp123123!" default tablespace OMP_TS;
grant CREATE TABLE,CREATE VIEW,CREATE INDEX to "omp";
创建用户 dwd,密码是 dwddwd123,失败登录 5 次后锁定账号 3 分钟,密码在 180 天后自动过期,该用户有创建表、创建视图的权限。
SQL> create user "dwd" identified by "dwddwd123" limit FAILED_LOGIN_ATTEMPS 5 PASSWORD_LIFE_TIME 180 PASSWORD_LOCK_TIME 3;
SQL> grant CREATE TABLE,CREATE VIEW to "dwd";
create tablespace "FMS_TS" datafile '/dm8/data/CUGDB/fms01.dbf' size 128 autoextend on next 1 maxsize 1024;
CREATE USER fms IDENTIFIED BY "fms123123!" QUOTA 200M ON FMS_TS;
修改fms用户表空间配额增大300
ALTER USER fms QUOTA 300M ON FMS_TS;
#为数据库设置一个用户test,可创建自己表,有属于自己的独立存储空间,用户的密码要求每60天变更一次。
SQL> create tablespace test datafile '/dm8/data/CUGDB/OMPTS01.DBF' size 128;
SQL> create user test identified by dameng123 limit password_life_time 60 default tablespace test;
#规划用户test1,账户30天变更一次密码,密码尝试连接2次,连接失败,锁定5分锁,该用户可以查询omp.year_2001。
SQL> create user test1 identified by dameng123 limit password_life_time 30,failed_login_attemps 2,password_lock_time 5;
SQL> grant select on omp.year_2001 to test1;
SQL> alter user omp identified by "omp123456!";
select username,default_tablespace,password_versions,sess_per_user from dba_users a,sysusers b where a.user_id = b.id;
行号 USERNAME DEFAULT_TABLESPACE PASSWORD_VERSIONS SESS_PER_USER
---------- ---------- ------------------ ----------------- -------------
1 SYS SYSTEM 0 0
2 OMP OMP_TS 2 0
3 SYSDBA MAIN 0 0
4 SYSAUDITOR SYSTEM 0 0
5 SYSSSO SYSTEM 0 0
alter user "omp" limit password_lock_time unlimited;
- 用户密码要求每60天变更一次
alter user "omp" limit password_life_time 60;
- 密码错误次数参数,默认输错3次后锁定账号,并且1分钟后自动解锁
alter user "omp" limit FAILED_LOGIN_ATTEMPS 3,PASSWORD_LOCK_TIME 1;
- 将密码输错锁定次数改为5次,锁定时间为3分钟
alter user "omp" limit FAILED_LOGIN_ATTEMPS 5,PASSWORD_LOCK_TIME 3;
- 手工锁账户
SQL> alter user omp account lock;
- 解锁账户
SQL> alter user omp account unlock;
- 删除用户
drop user omp;
drop user omp cascade;
- 删除角色
drop role ompr1;
SELECT GRANTEE,PRIVILEGE,TABLE_NAME FROM DBA_TAB_PRIVS WHERE GRANTEE='omp';
REVOKE CREATE TABLE FROM TEST; revoke VTI FROM aaa; 撤销权限
select * from DBA_SYS_PRIVS where grantee = 'OMP';
select * from dba_tab_privs where grantee = 'OMP';
select * from dba_role_privs where grantee = 'OMP';
select * from dba_col_privs where grantee = 'OMP';
select username,account_status,default_tablespace from dba_users;
行号 USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE
---------- ---------- -------------- ------------------
1 SYS OPEN SYSTEM
2 OMP OPEN OMP_TS
3 FMS OPEN MAIN
4 SYSDBA OPEN MAIN
5 SYSAUDITOR OPEN SYSTEM
6 SYSSSO OPEN SYSTEM
DBA:系统管理员角色,拥有除审核、安全外的所有权限
RESOURCE:具有在当前用户模式下定义对象的权限,例如create table等
PUBLIC:具有在当前用户模式下数据操作的权限,例如insert table等
SOI:系统表(SYS为前缀)的访问权限
SVI:系统视图(VSYS为前缀)的视图权限
VTI:动态视图(V为 前 缀 , 存 在 于 V 为前缀,存在于V为前缀,存在于Vdynamic_tables中的视图)的访问权限
角色:一类权限的集合,把一类用户具有的权限,集中到某个特定的角色上面,再把角色分为用户,方便管理。
create role 角色名;
grant 权限 to 角色名;
SQL> create role dm1;
SQL> grant dba to dm1;
-
-
- 创建角色dm2,拥有创建表、视图、索引的权限
-
创建角色 dm2,拥有创建表、视图、索引的权限,可以查看dmhr.employee.hire_date 、 dmhr.employee.email,可以修改dmhr.employee.phone_num,可以查看 dmhr.department 表。
SQL> create role "dm2";
grant CREATE TABLE,CREATE VIEW,CREATE INDEX to "DM2";
grant SELECT("HIRE_DATE") on "DMHR"."EMPLOYEE" to "DM2";
grant SELECT("EMAIL") on "DMHR"."EMPLOYEE" to "DM2";
grant UPDATE("PHONE_NUM") on "DMHR"."EMPLOYEE" to "DM2";
grant SELECT on "DMHR"."DEPARTMENT" to "DM2";
例:
CREATE TABLE omp.tt1
(
student_id NUMBER(30) NOT NULL COMMENT '学号',
name VARCHAR(50) NOT NULL COMMENT '姓名',
sex VARCHAR(2) NOT NULL COMMENT '性别0女1男',
age NUMBER(3) NOT NULL COMMENT '年龄',
PRIMARY KEY (student_id)
);
-
-
- 创建角色 dm3,拥有创建表、视图、索引的权限
-
创建角色 dm3,拥有创建表、视图、索引的权限,可以查看omp.tt1.student_id、 omp.tt1.name , 可以修改omp.tt1.age,可以查看 omp.tt2表,角色赋予fms用户。
# 创建角色 dm3
create role "dm3";
# 拥有创建表、视图、索引的权限
grant CREATE TABLE,CREATE VIEW,CREATE INDEX to "dm3";
# 可以查看omp.tt1.student_id、 omp.tt1.name
grant select(STUDENT_ID) on OMP.tt1 to "dm3";
grant select(NAME) on OMP.tt1 to "dm3";
# 可以修改omp.tt1.age
grant UPDATE(AGE) on OMP.tt1 to "dm3";
# 可以查看 omp.tt2表
grant SELECT on OMP.tt1 to "dm3";
# 角色赋予fms用户
SQL> grant "dm3" to fms;
grant 角色名 to 用户名;
grant dm1 to omp;
#查询omp权限
什么是模式:
模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集
什么是模式对象:
表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域模式与用户的关系
当系统建立一个用户时,会自动生成一个对应的模式,用户和模式是一对多的关系(Oracle是一对一)
grant create schema to 用户名;
grant create schema to fms;
注意:如果在disql中执行此语句,空行后需要加上/再回车
# 创建模式前需要授予用户创建模式的权限
# 创建模式
create schema 模式名 authorization 用户名;
/
create schema dm8t1 authorization omp;
/
select * from SYSOBJECTS a where a."TYPE$" = 'SCH'
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;
行号 SCHEID SCHENAME USERID USERNAME
---------- ----------- ---------- ----------- ----------
1 150994944 SYS 50331648 SYS
2 150994948 CTISYS 50331648 SYS
3 150994945 SYSDBA 50331649 SYSDBA
4 150995945 CUG 50331649 SYSDBA
5 150994946 SYSAUDITOR 50331650 SYSAUDITOR
6 150994947 SYSSSO 50331651 SYSSSO
7 150995944 OMP 50331748 OMP
8 150995948 DM8T1 50331748 OMP
9 150995946 FMS 50331749 FMS
注:
SCHENAME 代表模式名
USERNAME 模式所属用户
select sys_context('USERENV','CURRENT_SCHEMA');
查询当前用户,两种都可以
select user;
select sys_context('USERENV','CURRENT_USER');
注意:这个切换只对当前会话生效,目前没有方法可以设置永久生效
set schema 模式名;
-
- DM8日志管理
重做日志:用于记录redo信息,重做日志默认为256M,数据库中的增、删、改操作都会记录redo和undo信息
redo信息写入联机日志文件,undo写入roll表空间对应的数据文件中
达梦的联机日志只支持系统自动切换,不支持手动切换(oracle支持)
## 当前正在使用的联机日志
SQL> select status$ from v$instance;
SQL> select * from v$rlog;
SQL> select group_id,file_id,path,rlog_size/1024/1024 from v$rlogfile;
行号 GROUP_ID FILE_ID PATH RLOG_SIZE/1024/1024
---------- ----------- ----------- ---------------------------
1 2 0 /dm8/data/CUGDB/CUGDB01.log 2048
2 2 1 /dm8/data/CUGDB/CUGDB02.log 2048
alter database resize logfile '/dm8/data/CUGDB/CUGDB01.log' to 3096;
alter database add logfile '/dm8/data/CUGDB/CUGDB03.log' size 1024;
在 MOUNT 状态下,支持对日志文件的重命名操作
SQL> alter database mount;
SQL> alter database rename logfile '/dm8/data/CUGDB/CUGDB03.log' to '/dm8/data/CUGDB/CUGDB08.log';
SQL> alter database open;
-
- DM8归档管理
归档是对REDO的归档,备份归档是为了防止数据丢失,利用归档文件可以恢复数据库里的数据
开启归档
# 将数据库状态设置为mount
alter database mount;
# 归档文件大小(超过就新建一个文件),归档文件总的大小(超过限制,就会删除老的)
SQL> alter database add archivelog 'type=local,dest=/dm8/data/arch,file_size=1024,space_limit=10240';
# 该参数设置为0表示不受限制。
SQL> alter database add ARCHIVELOG 'type=local,dest=/dm8/data/arch,file_size=1024,space_limit=0';
# 打开归档
alter database archivelog;
# 将数据库状态设置为open
alter database open;
# 查询归档状态
SQL> select arch_mode from v$database;
行号 ARCH_MODE
---------- ---------
1 Y
# 查看归档文件
select * from SYS."V$ARCH_FILE";
# 查询归档配置
select * from v$dm_arch_ini;
# 查看归档状态是否开启,0关闭、1开启
cat dm.ini|grep ARCH_INI
ARCH_INI = 0
# 修改归档配置
ARCH_INI = 1
alter database mount;
# 关闭归档
alter database noarchivelog;
# 删除归档文件
alter database delete archivelog 'type=local,dest=/dm8/data/arch';
# 将数据库状态设置为open
alter database open;
# 查询归档状态
select arch_mode from v$database;
SQL>alter database add archivelog 'type=local,dest=/dm8/data/DAMENG/arch,file_size=64,space_limit=1024';
如果归档文件总大小超过这个值,则在生成新归档文件前会删除最老的一个归档文件。
SF_ARCHIVELOG_DELETE_BEFORE_TIME
可以通过系统函数SF_ARCHIVELOG_DELETE_BEFORE_TIME删除指定时间之前的归档文件,该函数返回删除的归档日志文件个数。如下命令为删除系统当前时间10天前的归档日志文件:
SQL>select sf_archivelog_delete_before_time(sysdate - 10);
SF_ARCHIVELOG_DELETE_BEFORE_LSN
系统函数SF_ARCHIVELOG_DELETE_BEFORE_LSN可以删除指定LSN之前的归档文件,该函数返回删除的归档日志文件个数。归档日志的有效LSN范围可以通过V$ARCH_FILE查看。如下命令为删除LSN号为71206之前的归档日志信息。
SQL>select sf_archivelog_delete_before_lsn(71206);
归档日志支持联机备份(热备)和脱机备份(冷备),两者都提供备份后删除归档的功能,在备份时指定delete input参数即可备份后删除归档,联机归档备份命令参考如下:
SQL>backup archivelog all delete input;
执行完成后,查询V$ARCH_FILE视图无数据,同时操作系统下归档日志文件也被删除。
表名是区分大小写的
CREATE TABLE OMP.T1(A INT);
INSERT INTO OMP.T1 VALUES(1);
INSERT INTO OMP.T1 VALUES(2);
INSERT INTO OMP.T1 VALUES(3);
create table omp.year_2001(
ID int primary key not null,
name varchar(30),
port VARCHAR(255),
speed VARCHAR(255),
type VARCHAR(255),
create_time date
);
CREATE TABLE omp.student
(
student_id NUMBER(30) NOT NULL COMMENT '学号',
name VARCHAR(50) NOT NULL COMMENT '姓名',
sex VARCHAR(2) NOT NULL COMMENT '性别0女1男',
age NUMBER(3) NOT NULL COMMENT '年龄',
PRIMARY KEY (student_id)
);
添加表注释:
COMMENT ON TABLE student is '学生表';
CREATE TABLE omp.score (
student_id int NOT NULL COMMENT '学号',
chinese_score NUMBER(11) NOT NULL COMMENT '语文',
math_core NUMBER(11) NOT NULL COMMENT '数学',
engline_score NUMBER(11) NOT NULL COMMENT '英语',
class_id NUMBER(30) NOT NULL COMMENT '班级ID',
PRIMARY KEY (student_id)
);
DM 临时表支持以下功能:
1. 在临时表中,会话可以像普通永久表一样更新、插入和删除数据;
2. 临时表的 DML 操作产生较少的 REDO 日志;
3. 临时表支持建索引,以提高查询性能;
4. 在一个会话或事务结束后,数据将自动从临时表中删除;
5. 不同用户可以访问相同的临时表,每个用户只能看到自己的数据;
6. 临时表的数据量很少,意味着更高效的查询效率;
7. 临时表的表结构在数据删除后仍然存在,便于以后的使用;
8. 临时表的权限管理跟普通表一致。
临时表 ON COMMIT 关键词指定表中的数据是事务级还是会话级的,默认情况下是事
务级的。
1. ON COMMIT DELETE ROWS:指定临时表是事务级的,每次事务提交或回滚之后,
表中所有数据都被删除;
2. ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时才清空表,
并释放临时 B 树。
CREATE GLOBAL TEMPORARY TABLE omp.tmp_student
(
student_id NUMBER(30) NOT NULL COMMENT '学号',
name VARCHAR(50) NOT NULL COMMENT '姓名',
sex VARCHAR(2) NOT NULL COMMENT '性别0女1男',
age NUMBER(3) NOT NULL COMMENT '年龄',
PRIMARY KEY (student_id)
);
-
-
- 创建的 ttt1表有并发分支2个非并发分支4个
-
CREATE TABLE ttt1 (C1 INT) STORAGE(BRANCH (2,4));
create table omp.t_year_2001 as select * from omp.year_2001 where 1=0;
-
-
- 复制表结构+表数据
-
create table omp.t_year_2002 as select * from omp.year_2001;
create table omp.t_year_2003 like omp.year_2001;
select * from all_tab_columns where Table_Name='YEAR_2001' AND OWNER='OMP';
select OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE from all_tab_columns where Table_Name='YEAR_2002' AND OWNER='OMP';
行号 OWNER TABLE_NAME COLUMN_NAME DATA_TYPE
---------- ----- ---------- ----------- ---------
1 OMP YEAR_2002 ID INT
2 OMP YEAR_2002 NAME VARCHAR2
3 OMP YEAR_2002 PORT VARCHAR
4 OMP YEAR_2002 SPEED VARCHAR
5 OMP YEAR_2002 TYPE VARCHAR
6 OMP YEAR_2002 CREATE_ TIME DATE
SQL> desc omp.year_2002;
行号 NAME TYPE$ NULLABLE
---------- ----------- ------------ --------
1 ID INTEGER N
2 NAME VARCHAR(30) Y
3 PORT VARCHAR(255) Y
4 SPEED VARCHAR(255) Y
5 TYPE VARCHAR(255) Y
6 CREATE_TIME DATE Y
alter table omp.year_2002 add email varchar(20);
alter table omp.year_2002 add column(age int);
alter table omp.year_2002 add column(sex varchar(4));
alter table omp.year_2002 modify email varchar(50);
alter table omp.year_2002 drop email;
create table omp.year_2023 (
ID number(30) primary key not null,
name varchar2(30),
port VARCHAR2(20),
speed VARCHAR2(20),
type VARCHAR2(50),
create_time date)
partition by range(create_time)(
partition p1 values less than ('2023-3-1'),
partition p2 values less than ('2023-6-1'),
partition p3 values less than ('2023-9-1'),
partition p4 values less than (maxvalue));
SQL> SELECT TABLE_OWNER,TABLE_NAME from dba_tab_partitions;
行号 TABLE_OWNER TABLE_NAME
---------- ----------- ----------
1 OMP YEAR_2023
2 OMP YEAR_2023
3 OMP YEAR_2023
4 OMP YEAR_2023
- 查询分区
select * from omp.year_2023 partition(p1);
select * from omp.year_2023 partition(p2);
select * from omp.year_2023 partition(p3);
select * from omp.year_2023 partition(p4);
create table omp.year_2022 (
ID number primary key not null,
name varchar2(30),
port VARCHAR2(20),
speed VARCHAR2(20),
type VARCHAR2(50),
create_time date)
partition by hash(create_time)(
partition p1,
partition p2,
partition p3,
partition p4
);
- 查询分区
select * from omp.year_2022 partition(p1);
select * from omp.year_2022 partition(p2);
select * from omp.year_2022 partition(p3);
select * from omp.year_2022 partition(p4);
$disql omp/'omp123123!'@127.0.0.1:5236
create index idx_表名_字段名 ON 表名 (字段名,字段名);
SQL> create index omp.idx_year2001_id on omp.year_2001(id);
SQL> create index omp.idx_year2001_idtime on omp.year_2001(id,CREATE_TIME);
alter table omp.year_2001 add constraint pk_year_2001_id primary key (id);
insert into omp.year_2001 values(21, 'cisco-51','3306','10000','router-51',to_date('2021-06-20 18:31:34','YYYY-MM-DD HH24:MI:SS'));
#删除where条件的数据
SQL> delete from omp.year_2001 where id >=18;
#清除整个表的数据
SQL> truncate table omp.year_2001;
SQL> delete from omp.year_2002;
SQL> update omp.year_2001 set name='cisco-555' where id=17;
SQL> select count(*) from omp.year_2001;
NOT NULL:非空约束
UNIQUE:唯一约束,可以为空,简写为UK_表名_字段名
PRIMARY KEY:主键约束(唯一约束+非空约束),简写为PK_表名_字段名
FOREIGN KEY:外键引用约束,引用的是另一张表(父表)的主键或唯一键。简写为FK_表名_字段名
CHECK:检验约束,用户校验数据的准确性,简写为CK_表名_字段名
主键约束和唯一约束的区别:一张表只能有一个主键,但是可以有多个唯一约束。
注意:字段如果为小写需要小写并且加上双引号,字段为大写不需要加双引号
alter table omp.student add CONSTRAINT pk_student_id PRIMARY key("student_id");
alter table omp.student add CONSTRAINT pk_student_id PRIMARY key(STUDENT_ID);
注意omp.student表里的字段必须是主键或者是添加了唯一索引的字段
alter table omp.score add CONSTRAINT pk_score_id FOREIGN key(STUDENT_ID) REFERENCES omp.student(STUDENT_ID);
alter table omp.score add CONSTRAINT ck_score_id CHECK (CHINESE_SCORE>=80);
alter table 模式名.表名 disable constraint "约束名"
alter table omp.student disable constraint pk_student_id;
alter table 模式名.表名 enable constraint "约束名"
alter table omp.student disable constraint pk_student_id;
create index idx_表名_字段名 ON 表名 (字段名,字段名);
SQL> create index omp.idx_student_student_id on omp.student(STUDENT_ID);
SQL> create index omp.idx_student1_student_id on omp.student(STUDENT_ID) STORAGE (INITIAL 50,NEXT 50,ON OMP_TS); #该索引使用表空间OMP_TS
例:
CREATE TABLE omp.student1
(
student_id NUMBER(30) NOT NULL COMMENT '学号',
name VARCHAR(50) NOT NULL COMMENT '姓名',
sex VARCHAR(2) NOT NULL COMMENT '性别0女1男',
age NUMBER(3) NOT NULL COMMENT '年龄'
);
-- 插入学生表数据
INSERT INTO omp.student1 (student_id,name,sex,age) VALUES
(20231501001,'小明',1,6),
(20231501002,'小红',0,7),
(20231501003,'小刚',1,6),
(20231501004,'小丽',0,8),
(20231501005,'小花',0,6),
(20231501006,'小张',0,9),
(20231501007,'小刘',1,6),
(20231501008,'小马',1,7),
(20231501009,'小王',0,7),
(20231501010,'小李',0,8);
commit;
select * from omp.student1;
explain select * from omp.student1 t where t.NAME='小刚';
1 #NSET2: [1, 1, 168]
2 #PRJT2: [1, 1, 168]; exp_num(5), is_atom(FALSE)
3 #SLCT2: [1, 1, 168]; T.NAME = '小刚' SLCT_PUSHDOWN(TRUE)
4 #CSCN2: [1, 10, 168]; INDEX33555549(STUDENT1 as T) NEED_SLCT(TRUE)
已用时间: 31.569(毫秒). 执行号:526.
create index omp.idx_student1_name on omp.student1(name);
explain select * from omp.student1 t where t.NAME='小刚';
1 #NSET2: [1, 1, 168]
2 #PRJT2: [1, 1, 168]; exp_num(5), is_atom(FALSE)
3 #BLKUP2: [1, 1, 168]; IDX_STUDENT1_NAME(T)
4 #SSEK2: [1, 1, 168]; scan_type(ASC), IDX_STUDENT1_NAME(STUDENT1 as T), scan_range['小刚','小刚']
已用时间: 1.860(毫秒). 执行号:0.
--删除索引
drop index omp.idx_student1;
新建聚集索引会重建这个表以及其所有索引,包括二级索引、函数索引,是一个代价非常大的操作。因此,最好在建表时就确定聚集索引键,或在表中数据比较少时新建聚集索引,而尽量不要对数据量非常大的表建立聚集索引。
CREATE CLUSTER INDEX idx_year_2023_id ON omp.year_2023(ID);
重建索引:
SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);
SCHEAM_NAME 为索引所在的模式名,INDEX_ID 为索引 ID。
或者
alter index "DMHR"."IND_NAME" rebuild;
使用说明:
1. 水平分区子表,临时表和系统表上建的索引不支持重建
2. 虚索引和聚集索引不支持重建
SQL> SELECT TABLE_OWNER as "模式名",TABLE_NAME as "表名",COLUMN_NAME as "列名",INDEX_NAME as "索引名" from DBA_IND_COLUMNS where TABLE_OWNER='OMP';
行号 模式名 表名 列名 索引名
---------- --------- ----------- ----------- -------------------
1 OMP YEAR_2001 ID INDEX33555480
2 OMP TMP_STUDENT STUDENT_ID INDEX33555527
SQL> drop index omp.idx_student_student_id;
--索引的监控
alter INDEX omp.idx_student1_name MONITORING USAGE; --开启索引监控
alter INDEX omp.idx_student1_name NOMONITORING USAGE;--关闭索引监控
alter index omp.idx_student1_name rebuild online; --索引的 重建
select * from v$object_usage;
--查询模式下的索引
select * from dba_indexes t where t.owner='OMP';
select * from DBA_IND_COLUMNS t where t.index_owner='OMP';
create or replace view 视图名称 as
select * from aaa where age > 10
SQL> create view view_year_2023 as select id,name,create_time from omp.year_2023;
SQL> DROP VIEW view_year_2023;
SQL> select * from view_year_2023;
SQL> alter view view_year_2023 compile;
可以使用系统函数 USER_USED_SPACE 得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目
SQL> select user_used_space('omp');
行号 USER_USED_SPACE('omp')
---------- ----------------------
1 32
可以使用系统函数 TABLE_USED_SPACE 得到表对象占用空间的大小,函数参数为模式
名和表名,返回值为占用的页的数目。
SQL> SELECT TABLE_USED_SPACE('OMP','YEAR_2001');
行号 TABLE_USED_SPACE('OMP','YEAR_2001')
---------- -----------------------------------
1 32
可以使用系统函数 INDEX_USED_SPACE 得到索引占用空间的大小,函数参数为索引ID,返回值为占用的页的数目。
SELECT INDEX_USED_SPACE(33555463);
-
- 开启SQL日志
SP_SET_PARA_VALUE(1, 'SVC_LOG',1);---开启日志记录
SP_SET_PARA_VALUE(1, 'SVC_LOG',0);---关闭日志记录
-
- 导入SQL脚本
SQL> start /home/dmdba/aa.sql
或者找到文件所在路径
SQL> `/home/dmdba/aa.sql
导入后需要手工commit;
call SP_CREATE_JOB('JOB01',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('JOB01');
call SP_ADD_JOB_STEP('JOB01', 'FULLBAK', 6, '00000000F:\dmdbms\backup\fullbak', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB01', 'FULLBAK', 1, 2, 1, 1, 0, '22:00:00', NULL, '2022-01-25 19:54:42', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB01');
select * from sysjob.sysjobs;
dbms_job.run(1643111736);
--查看运行JOB日志
select * from sysjob.SYSJOBHISTORIES2;
--开启归档后需要执行检查点
checkpoint(100);
dbms_stats.gather_table_stats('OMP','YEAR_2001');
dbms_stats.gather_table_stats('OMP','STUDENT1');
dbms_stats.table_stats_show('OMP','YEAR_2001');
dbms_stats.index_stats_show('OMP','IDX_STUDENT_STUDENT_ID');
dbms_stats.table_stats_show('OMP','STUDENT1');
dbms_stats.index_stats_show('OMP','IDX_STUDENT1_NAME');
-
- ODBC源码包编译安装
全部在root用户下操作
# tar -zxvf unixODBC-2.3.0.tar.gz
# cd unixODBC-2.3.0/
# ./configure
# make && make install
-
-
- 配置 odbc.ini
-
配置 odbc.ini 数据源信息和 odbcinst.ini 驱动信息,内容参考如下
# vi /usr/local/etc/odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA2023
TCP_PORT = 5236
-
-
- 配置 odbcinst.ini
-
# vi /usr/local/etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/dmdbms/bin/libdodbc.so
注:这里根据实际安装路径填写,要不然找不到libdodbc.so
使用dmdba用户执行命令
# su – dmdba
$ isql dm8 -v