09-DM数据库学习之路(九)DM8盲猜并模拟DCA常用操作实验

  1. 基础部分(盲猜)

#  代表root用户

$  代表dmdba用户

    1. DM8版本

DM8 一共分为 4 个版本:开发版、标准版、企业版、安全版

开发版:不能作为商用,一年时间(从产品发布之日起)有效,开发版与企业版功能相同,平时工作使用开发版即可,授权期限为一年

标准版:满足中小企业使用,不支持集群特性

企业版:满足中大型企业使用,支持集群(数据守护、读写分离、mpp、dmdsc)特性,是生产环境中用到最多的版本。支持集群特性,需要购买授权码

安全版:是在企业版基础上,四权分立,安全性有进一步的增强,增加了强访问控制和环境标记等。增加了访问控制等安全特性,用于SM机上

    1. DM8数据库模板
  • 一般用途(Common)
  • 联机分析处理(OLAP)
  • 联机事务处理(OLTP)
    1. 安装类型
  •  典型安装(Typical)
  • 服务器(Server)
  • 客户端(Client)
  • 自定义(Custom)
    1. 实例状态
  • 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;

    1. 获取CPU信息

# lscpu

# cat /proc/cpuinfo

    1. 查看内存信息

# free -m

# cat /proc/meminfo

    1. 查看硬盘和分区

# fdisk -l

# df -h

# df -Th 查看硬盘类型及大小

至少需要20G,推荐给25G以上

    1. tmp扩容

/tmp分区≥600M,建议2G

如果tmp容量小于1G,使用以下命令扩容

# 使用root用户执行

mount -o remount,size=2G /tmp

    1. 查看网络

# ethool

100/1000/10000网卡,支持TCP/IP协议

    1. 查看防火墙

#  systemctl status firewalld  #查看防火墙状态

#  systemctl stop firewalld    #关闭防火墙

#  systemctl disable firewalld  #开启不启动防火墙

#  setenforce 0    #临时关闭防火墙

#  sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久关闭防火墙

    1. 查看操作系统信息

# uname -ar  #安装 DM8,系统内核要在 2.6 及以上,否则在安装过程中会报错

# uname -a

# uname -r

# cat /proc/version

    1. 查看glibc版本

glibc需要在2.3以上(含2.3),否则在安装过程中会报错

# ldd –version

ldd (GNU libc) 2.28

# rpm -qa|grep glibc

    1. 查看gcc版本

安装odbc的时候,需要gcc包依赖,没有安装的话需要进行安装

# gcc –version

gcc (GCC) 7.3.0

# rpm -qa|grep gcc

    1. 建用户及组

组: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

    1. 配置环境变量

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  #让其生效

    1. 创建安装目录

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

    1. 设置ulimit打开文件数

# 查看最大可打开文件数

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(无限制)

    1.  挂载镜像文件

# 考试的时候,可能已经挂载,直接安装即可,df -h查看

mount -o loop /soft/dm8_20231116_x86_rh6_64.iso /mnt

    1. 设置图形化

# 登陆到服务器上后,打开命令行(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

    1. DM管理工具
      1. manager DM管理工具

$export DISPLAY=84.0.191.1:0.0

$/dm8/dmdbms/tool/manager

通过 DM 管理工具日常维护管理数据库,包括:表空间管理、用户管

理、模式对象管理、配置归档、热备、逻辑备份、作业管理。

      1. console DM控制台工具

$export DISPLAY=84.0.191.1:0.0

$/dm8/dmdbms/tool/console

DM 控制台工具可以查找和修改参数,整库冷备、归档备份、整库还

原、表空间还原。

      1. dbca DM数据库配置助手

$cd /dm8/dmdbms/tool/

$export DISPLAY=84.0.191.1:0.0

$./dbca.sh

      1. dts DM数据迁移工具

$cd /dm8/dmdbms/tool/

$export DISPLAY=84.0.191.1:0.0

$./dts

      1. moinitor DM性能监视工具

$cd /dm8/dmdbms/tool/

$export DISPLAY=84.0.191.1:0.0

$./monitor

      1. dbca DM数据库配置助手

  1. 操作部分(盲猜)
    1. DM8数据库安装
      1. 图形化方式安装

$cd /dm8/dmdbms/tool/

$export DISPLAY=84.0.191.1:0.0

$./dbca.sh

      1. 图形化创建实例

$dbca.sh

 

root用户

开机自启

$ /dm8/tool/dbca.sh

注:图形化安装时,已经注册了开机自动启动

 

# rm -rf /dm8/*

      1. 命令行方式安装

# su - dmdba

$/mnt/DMInstall.bin -i

      1. 命令行方式创建实例

# 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              #

      1. 命令行注册数据库服务

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

      1. 命令行卸载

$ /dm8/dmdbms/uninstall.sh -i

$ rm -rf /dm8/log

    1. DM8数据库连接
      1. 本地连接

$ cd $DM_HOME

./disql SYSDBA/SYSDBA:5236

      1. 远程连接

$ cd $DM_HOME

./disql SYSDBA/SYSDBA@84.0.191.252:5236

SQL> select sysdate;

行号     SYSDATE           

---------- -------------------

1          2024-01-16 16:58:36

      1. 使用conn连接

如果已经登陆到数据库中,可以直接使用conn命令进行连接到其他数据库

# 连接本机,ip可省略

SQL> conn omp/"omp123123!":5238

SQL> conn omp/"omp123123!"@84.0.191.252:5238

      1. 使用图形化连接(开启语法提示)

$ export DISPLAY=84.0.191.1:0.0

$ cd /dm8/dmdbms/tool/

$ ./manager

 

$/dm8/dmdbms/bin/DmServiceCUGDB status

DmServiceCUGDB (pid 1312) is running.

      1. 关闭数据库

$/dm8/dmdbms/bin/DmServiceDMSERVER stop

      1. 启动数据库

$/dm8/dmdbms/bin/DmServiceDMSERVER start

DM 数据库启动顺序为:

Shutdown(关闭状态)–> Mount(配置状态)–> Open(打开状态)

MOUNT 和 OPEN 可以相互转换(与 Oracle 不同);

SUSPEND 和 OPEN 也可以相互转换。

但 MOUNT 和 SUSPEND 之间不能相互转换。

      1. 重启数据库

$/dm8/dmdbms/bin/DmServiceDMSERVER restart

    1. DM8参数配置
      1. 参数修改

修改参数的几种方法:

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 的修改方法

        1. 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 ]

        1. console图形化修改(兼容oracle)

修改静态参数:COMPATIBLE_MODE

通过console工具修改参数, 无论是动态还是静态参数, 都需要重启数据服务$ /dm8/dmdbms/tool/console

修改COMPATIBLE_MODE参数值

 

重启数据库才生效

$ /dm8/dmdbms/bin/DmServiceCUGDB restart

Stopping DmServiceCUGDB:                                   [ OK ]

Starting DmServiceCUGDB:                                   [ OK ]

        1. 通过函数命令修改 (兼容oracle)

修改静态参数:COMPATIBLE_MODE

  1. 查询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

  1. 用SP_SET_PARA_VALUE 进行修改

SQL> sp_set_para_value(2,'COMPATIBLE_MODE',2);

  1. 再次查询确认(因为是静态参数,需要重启才生效。

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           IN FILE

  1. 静态参数需重启生效

$ /dm8/dmdbms/bin/DmServiceCUGDB restart

Stopping DmServiceCUGDB:                                   [ OK ]

Starting DmServiceCUGDB:                                   [ OK ]

  1. 再次查询确认

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           IN FILE

      1. SQL语句修改参数
        1. 参数类型

SQL> select distinct type from v$parameter;

行号     TYPE    

---------- ---------

1          READ ONLY

2          SYS

3          IN FILE

4          SESSION

both既修改内存中的值,也修改配置文件中的值,重启不重启都一样生效

spfile只修改配置文件中的值,重启数据库生效

memory只修改内存中的值,重启数据库后恢复设置前的样子

达梦根据参数类型可分为,静态参数动态参数两种,这两种均支持通过系统函数、SQL命令进行修改

静态参数:只能修改配置文件中的值,对内存中的值不进行修改,所以静态参数修改后使其生效的话,需要对数据库进行重启

动态参数:既能修改内存中的值,也能修改配置文件中的值,所以动态参数修改后是立即生效的

  1. READ ONLY

只读参数,不能通过系统函数、SQL命令达到修改参数的目的,只能从dm.ini配置文件中进行修改

  1. SYS

静态参数,可以通过系统函数、SQL命令达到修改参数的目的

  1. IN FILE

动态参数(系统级),可以通过系统函数、SQL命令达到修改参数的目的

  1. SESSION

动态参数(会话级),可以通过系统函数、SQL命令达到修改参数的目的,可针对某个会话进行修改,便于调试(不然要应用到整个线上系统,一旦出错,影响面就广了)

        1. 修改COMPATIBLE_MODE(兼容oracle)
  1. 语法

alter system set '参数名'='参数值' both | spfile | memory;

  1. 查询兼容参数类型

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

  1. # 修改兼容参数类型

alter system set 'COMPATIBLE_MODE'=2 spfile;

  1. 静态参数需重启生效

$ /dm8/dmdbms/bin/DmServiceCUGDB restart

Stopping DmServiceCUGDB:                                   [ OK ]

Starting DmServiceCUGDB:                                   [ OK ]

  1. 确认修改是否生效

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

        1. 修改UNDO_RETENTION
  1. 查询当前参数

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

  1. 修改UNDO_RETENTION参数

SQL> alter system set 'UNDO_RETENTION'=180 both;

  1. 确认当前参数(修改成功)

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 180.000000 180.000000 180.000000 SYS

        1. 修改LIST_TABLE
  1. 查询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

  1. 查询LIST_TABLE值

SQL> alter session set 'LIST_TABLE'=1;

  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

      1. 系统函数修改
        1. 查看可以使用的系统函数

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类型参数值

        1. 查看系统函数的参数类型

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

注:

  1. #代表只修改内存
  2. #代表内存+配置文件
  3. 只修改配置文件
        1. 修改double类型的参数值,UNDO_RETENTION参数

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

---------- -------------- ---------- ---------- ---------- -------------

  1. UNDO_RETENTION 180.000000 180.000000 180.000000 90.000000

      1. 数据缓冲区参数修改

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

        1. BUFFER修改

考试的时候可能会让你修改数据缓冲区大小,没有特殊指明的话就是修改Normal缓冲区的大小,参数对应的是BUFFER

方法一:vi /dm8/data/CUGDB/dm.ini

方法二:console图形化界面修改

方法三:SQL语句修改

  1. 查询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

  1. 修改buffer大小

SQL> alter system set 'BUFFER'=2000 spfile;

  1. 重启数据库

$ /dm8/dmdbms/bin/DmServiceCUGDB  restart

  1. 确认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

        1. MEMORY_POOL修改

修改共享内存MEMORY_POOL 决定了以M为单位的公共内存池的大小

  1. 查询MEMORY_POOL大小

SQL> select para_name,default_value from v$dm_ini where PARA_NAME='MEMORY_POOL';

行号     PARA_NAME   DEFAULT_VALUE

---------- ----------- -------------

  1.      MEMORY_POOL    500

SQL> call sp_set_para_value(2,'MEMORY_POOL',800);

  1. 重启数据库

$ /dm8/dmdbms/bin/DmServiceCUGDB  restart

  1. 确认MEMORY_POOL大小

SQL> SELECT PARA_NAME,PARA_VALUE FROM v$dm_ini where PARA_NAME='MEMORY_POOL';

行号     PARA_NAME   PARA_VALUE

---------- ----------- ----------

  1.     MEMORY_POOL     800

$ cat dm.ini | grep MEMORY_POOL

MEMORY_POOL       = 800

后面继续完善……

    1. DM8权限管理

dm数据库权限相关视图与oracle视图兼容,常用的有以下几个视图:

      1. 系统权限

      1. 对象权限

      1. DBA_SYS_PRIVS

select * from DBA_SYS_PRIVS;

显示系统中所有传授给 用户或者角色的权限。

      1. USER_SYS_PRIVS

传授给当前用户的系统权限。

SQL> select * from USER_SYS_PRIVS;

      1. DBA_ROLE_PRIVS

显示系统中的授予用户的所有角色。

SQL> SELECT * FROM DBA_ROLE_PRIVS;

      1. USER_ROLE_PRIVS

显示传授给当前用户的角色。

SQL> select * from USER_ROLE_PRIVS;

      1. DBA_ROLES

显示系统中所有的角色

      1. DBA_TAB_PRIVS

显示系统中所有用户的数据库对象权限信息

SQL> select * from DBA_TAB_PRIVS;

      1. USER_TAB_PRIVS

显示当前用户作为对象拥有者、授权者或被授权者的数据库对象权限。结构同DBA_TAB_PRIVS。

SQL> select * from USER_TAB_PRIVS;

      1. 赋予fms建用户权限

SQL> grant create user to fms;

      1. omp用户将表omp.year_2001查询权限赋予fms

SQL> grant select on omp.year_2001 to fms with grant option;

SQL> grant select on omp.year_2001 to fms;

      1. 设置指定用户最大并发量(用户最大连接限制)

# 设置用户名为fms的用户,最大连接数为3,多出3个连接会报错

alter user fms limit SESSION_PER_USER 3;

      1. 设置可以赋予其他用户在非当前用户模式下创建对象权限

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;

      1. 添加查询权限

grant select on 模式名.表名 to 用户名;

grant select on dmhr.department to hrtest;

      1. 添加修改、删除权限

不能只授予修改、删除权限,还要授予查询权限

grant select on 模式名.表名 to 用户名;

grant update on 模式名.表名 to 用户名;

grant delete on 模式名.表名 to 用户名;

      1. 对象权限转授

grant select on omp.year_2001 to fms with grant option;

      1. 权限回收

如果回收的角色,带有转授权限,那么需要加关键字,对其转授出去的角色一并级联回收

SQL> revoke select on omp.year_2001 from fms cascade;

revoke 角色名 from 用户名;

revoke 具体权限 from 用户名;

revoke dm1 from omp;

revoke create table from fms;

    1. DM8表空间管理
      1. 表空间类型

SYSTEM:系统表空间,存放的是数据字典信息,包含表定义、视图定义、用户权限等

ROLL:回滚表空间,存放undo信息。INSERT、UPDATE、DELETE都会产生undo信息

MAIN:户默认表空间,创建用户时,没有指定表空间,则使用MAIN表空间

TEMP:临时表空间,用于存放临时表数据、索引、大量数据排序等产生的数据

HMAN:HUGE表(列存储表)的默认表空间

      1. 创建表空间
  1. 查看表空间

SQL> select * from dba_tablespaces;

SQL> select * from dba_data_files;

  1. 创建大表空间

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';

  1. 建表空间

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;

      1. 表空间增加datafile

alter tablespace OMP_TS add  datafile '/dm8/data/CUGDB/OMPTS02.DBF' size 1024 autoextend on;

      1. 修改表空间大小

alter tablespace OMP_TS resize datafile '/dm8/data/CUGDB/OMPTS01.DBF' to 50;

      1. 修改表空间开启自动增长,增长步长,最大表空间

alter tablespace OMP_TS datafile '/dm8/data/CUGDB/OMPTS01.DBF' autoextend on next 2 maxsize 10240;

      1. 修改表空间名称

alter tablespace OMP_TS rename to OMP_TS01;

  • 查看表空间的数据文件

select FILE_NAME,TABLESPACE_NAME from DBA_DATA_FILES;     

  • 查看存在的表空间

select name,TOTAL_SIZE from v$tablespace;

      1. 删除表空间

用户自定义的表空间可以删除和脱机,系统定义的表空间不能脱机和删除

删除后表空间下的数据文件也会级联删除

drop tablespace OMP_TS;

      1. 表空间迁移

迁移时注意:新的表空间路径,必须是由安装数据库的用户进行创建,或者把这个文件夹授予数据库安装用户读写权限,否则会因权限问题报数据库文件路径错误

  1. 先将表空间离线

alter tablespace OMP_TS offline;

  1. 重命名数据文件名,并迁移

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

  1. 将表空间上线

alter tablespace OMP_TS online;

      1. 查询页大小

查询页大小的4096倍,并换算成MB

SQL> select page*4096/1024/1024;

行号     PAGE*4096/1024/1024

---------- -------------------

1          128

注:数据文件的大小必须是,最小:页大小的4096倍

      1. 修改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表空间大小,重启后依旧生效

  1. 修改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);

  1. 重启数据库

$ /dm8/dmdbms/bin/DmServiceCUGDB  restart

  1. 查看TEMP_SIZE是否生效

SQL> select para_name,PARA_VALUE from v$dm_ini where PARA_NAME='TEMP_SIZE';

行号     PARA_NAME PARA_VALUE

---------- --------- ----------

  1. 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

      1. 表空间联机脱机

SQL> alter tablespace FMS_TS online;

SQL> alter tablespace FMS_TS offline;

      1. 查询表空间的状态

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 代表脱机

    1. DM8用户管理
      1. 用户类型

select * from DBA_USERS;

SYS:内置用户,不能直接登陆

SYSDBA:系统管理员,拥有DBA角色(除了安全、审计其他都管)

SYSAUDITOR:系统审计管理员

SYSSSO:系统安全管理员

SYSDBO:系统安全操作员(达梦安全版才有)

      1. 查询密码策略

SQL> select NAME,TYPE,VALUE from v$parameter where name='PWD_POLICY';

行号     NAME       TYPE VALUE

---------- ---------- ---- -----

1          PWD_POLICY SYS  2

      1. 设置密码策略

alter system set 'PWD_POLICY' = 下图策略相加 both;

  1. 设置密码为无策略

SQL> alter system set 'PWD_POLICY'=0 both;

      1. 创建schema

CREATE SCHEMA myshcema AUTHORIZATION SYSDBA;

/

切记第二行有/

      1. 创建用户

create user 用户名 identified by 密码 default tablespace 表空间名;

        1. 创建用户及授权

CREATE USER omp IDENTIFIED BY "omp123123!" DEFAULT TABLESPACE OMP_TS;

grant resource to omp;

        1. 创建用户默认表空间及拥有相应的权限

例:创建用户 omp,密码是 omp123123!,默认表空间为 OMP_TS,该用户拥有创建表、视图、索引的权限。

create user "omp" identified by "omp123123!" default tablespace OMP_TS;

grant CREATE TABLE,CREATE VIEW,CREATE INDEX to "omp";

        1. 创建用户失败登录 5 次后锁定账号 3 分钟, 密码在 180 天后自动过期

创建用户 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";

        1. 建用户只允许使用默认表空间200M(表空间配额)

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;

        1. 默认表空间60天变更一次

#为数据库设置一个用户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;

        1. 密码30天变更一次尝试连接2次,连接失败,锁定5分锁

#规划用户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;

        1. 修改密码

SQL> alter user omp identified by "omp123456!";

        1. 查看用户资源限制,例如最大并发数

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

        1. 密码时效不做限制

alter user "omp" limit  password_lock_time unlimited;

  1. 用户密码要求每60天变更一次

alter user "omp" limit  password_life_time 60;

  1. 密码错误次数参数,默认输错3次后锁定账号,并且1分钟后自动解锁

alter user "omp" limit FAILED_LOGIN_ATTEMPS 3,PASSWORD_LOCK_TIME 1;

  1. 将密码输错锁定次数改为5次,锁定时间为3分钟

alter user "omp" limit FAILED_LOGIN_ATTEMPS 5,PASSWORD_LOCK_TIME 3;

  1. 手工锁账户

SQL> alter user omp account lock;

  1. 解锁账户

SQL> alter user omp account unlock;

  1. 删除用户

drop user omp;

drop user omp cascade;

  1. 删除角色

drop role ompr1;

      1. 查看用户权限

SELECT GRANTEE,PRIVILEGE,TABLE_NAME FROM DBA_TAB_PRIVS WHERE GRANTEE='omp';

REVOKE CREATE TABLE FROM TEST; revoke VTI FROM aaa; 撤销权限

      1. 查询用户权限

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';

      1. 查看用户

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

    1. DM8角色管理
      1. 角色类型

DBA:系统管理员角色,拥有除审核、安全外的所有权限

RESOURCE:具有在当前用户模式下定义对象的权限,例如create table等

PUBLIC:具有在当前用户模式下数据操作的权限,例如insert table等

SOI:系统表(SYS为前缀)的访问权限

SVI:系统视图(VSYS为前缀)的视图权限

VTI:动态视图(V为 前 缀 , 存 在 于 V 为前缀,存在于V为前缀,存在于Vdynamic_tables中的视图)的访问权限

      1. 创建角色并授予角色权限

角色:一类权限的集合,把一类用户具有的权限,集中到某个特定的角色上面,再把角色分为用户,方便管理。

create role 角色名;

grant 权限 to 角色名;

SQL> create role dm1; 

SQL> grant dba to dm1;

      1. 创建角色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)

);

      1. 创建角色 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;

      1. 赋予用户角色

grant 角色名 to 用户名;

grant dm1 to omp;

#查询omp权限

    1. DM8模式管理
      1. 模式概念

什么是模式:

模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集

什么是模式对象:

表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域模式与用户的关系

当系统建立一个用户时,会自动生成一个对应的模式,用户和模式是一对多的关系(Oracle是一对一)

      1. 授予用户创建模式权限

grant create schema to 用户名;

grant create schema to fms;

      1. 创建模式

注意:如果在disql中执行此语句,空行后需要加上/再回车

# 创建模式前需要授予用户创建模式的权限

# 创建模式

create schema 模式名 authorization 用户名;

/

create schema dm8t1 authorization omp;

/

      1. 查询系统中所有模式

select * from SYSOBJECTS a where a."TYPE$" = 'SCH'

      1. 查询模式和所属用户

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    模式所属用户

      1. 查询当前模式

select sys_context('USERENV','CURRENT_SCHEMA');

查询当前用户,两种都可以

select user;

select sys_context('USERENV','CURRENT_USER');

      1. 切换模式

注意:这个切换只对当前会话生效,目前没有方法可以设置永久生效

set schema 模式名;

    1. DM8日志管理

重做日志:用于记录redo信息,重做日志默认为256M,数据库中的增、删、改操作都会记录redo和undo信息

redo信息写入联机日志文件,undo写入roll表空间对应的数据文件中

达梦的联机日志只支持系统自动切换,不支持手动切换(oracle支持)

      1. 查看联机日志

## 当前正在使用的联机日志

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

      1. 修改连接日志大小(达梦只支持往大了改)

alter database resize logfile '/dm8/data/CUGDB/CUGDB01.log' to 3096;

      1. 增加日志文件

alter database add logfile '/dm8/data/CUGDB/CUGDB03.log' size 1024;

      1. 日志文件重命名

在 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;

      1. 重做日志图像化方式

    1. DM8归档管理

归档是对REDO的归档,备份归档是为了防止数据丢失,利用归档文件可以恢复数据库里的数据

      1. 命令行开启归档

开启归档

# 将数据库状态设置为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;

      1. 修改配置文件

# 查看归档状态是否开启,0关闭、1开启

cat dm.ini|grep ARCH_INI

ARCH_INI          = 0

# 修改归档配置

ARCH_INI          = 1

      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;

      1. 删除归档
        1. 限制归档文件总大小超过自动删除最老的

SQL>alter database add archivelog 'type=local,dest=/dm8/data/DAMENG/arch,file_size=64,space_limit=1024';

如果归档文件总大小超过这个值,则在生成新归档文件前会删除最老的一个归档文件。

        1. 通过系统函数指定时间之前删除

SF_ARCHIVELOG_DELETE_BEFORE_TIME

可以通过系统函数SF_ARCHIVELOG_DELETE_BEFORE_TIME删除指定时间之前的归档文件,该函数返回删除的归档日志文件个数。如下命令为删除系统当前时间10天前的归档日志文件:

SQL>select sf_archivelog_delete_before_time(sysdate - 10);

        1. 通过系统函数指定LSN之前删除

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);

        1. 备份归档时加上delete语句删除

归档日志支持联机备份(热备)和脱机备份(冷备),两者都提供备份后删除归档的功能,在备份时指定delete input参数即可备份后删除归档,联机归档备份命令参考如下:

SQL>backup archivelog all delete input;

执行完成后,查询V$ARCH_FILE视图无数据,同时操作系统下归档日志文件也被删除。

    1. DM8表管理
      1. 建普通表

表名是区分大小写的

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)

);

      1. 创建临时表

DM 临时表支持以下功能:

1.  在临时表中,会话可以像普通永久表一样更新、插入和删除数据;

2.  临时表的 DML 操作产生较少的 REDO 日志;

3.  临时表支持建索引,以提高查询性能;

4.  在一个会话或事务结束后,数据将自动从临时表中删除;

5.  不同用户可以访问相同的临时表,每个用户只能看到自己的数据;

6.  临时表的数据量很少,意味着更高效的查询效率;

7.  临时表的表结构在数据删除后仍然存在,便于以后的使用;

8.  临时表的权限管理跟普通表一致。

临时表 ON COMMIT 关键词指定表中的数据是事务级还是会话级的,默认情况下是事

务级的。

1.  ON COMMIT DELETE ROWS:指定临时表是事务级的,每次事务提交或回滚之后,

表中所有数据都被删除;

2.  ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时才清空表,

并释放临时 B 树。

      1. 创建一个事务级的临时表

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)

);

      1. 创建的 ttt1表有并发分支2个非并发分支4

CREATE TABLE ttt1 (C1 INT) STORAGE(BRANCH (2,4));

      1. 只复制表结构(不带约束信息)

create table omp.t_year_2001 as select * from omp.year_2001 where 1=0;

      1. 复制表结构+表数据

create table omp.t_year_2002 as select * from omp.year_2001;

create table omp.t_year_2003 like omp.year_2001;

      1. 查看某个表的字段类型

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

      1. 查看某个表的所有字段

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

      1. 增册改字段
        1. 添加字段

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));

        1. 修改字段

alter table omp.year_2002 modify email varchar(50);

        1. 删除字段

alter table omp.year_2002 drop email;

      1. 建分区表
        1. 范围分区

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

  1. 查询分区

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);

        1. 哈希分区

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

);

  1. 查询分区

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);

      1. 增删改查测试

$disql omp/'omp123123!'@127.0.0.1:5236

        1. 建索引

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);

        1. 建主键

alter table omp.year_2001 add constraint pk_year_2001_id primary key (id);

        1. 增加(insert)

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'));

        1. 删除(delete,truncate)

#删除where条件的数据

SQL> delete from omp.year_2001 where id >=18;

#清除整个表的数据

SQL> truncate table omp.year_2001;

SQL> delete from  omp.year_2002;

        1. 修改(update)

SQL> update omp.year_2001 set name='cisco-555' where id=17;

        1. 查询(select)

SQL> select count(*) from omp.year_2001;

    1. DM8约束管理
      1. 约束类型

NOT NULL:非空约束

UNIQUE:唯一约束,可以为空,简写为UK_表名_字段名

PRIMARY KEY:主键约束(唯一约束+非空约束),简写为PK_表名_字段名

FOREIGN KEY:外键引用约束,引用的是另一张表(父表)的主键或唯一键。简写为FK_表名_字段名

CHECK:检验约束,用户校验数据的准确性,简写为CK_表名_字段名

主键约束和唯一约束的区别:一张表只能有一个主键,但是可以有多个唯一约束

      1. 添加约束

注意:字段如果为小写需要小写并且加上双引号,字段为大写不需要加双引号

        1. 添加主键约束

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);

        1. 添加外键约束

注意omp.student表里的字段必须是主键或者是添加了唯一索引的字段

alter table omp.score add CONSTRAINT pk_score_id FOREIGN key(STUDENT_ID) REFERENCES omp.student(STUDENT_ID);

        1. 添加校验约束

alter table omp.score add CONSTRAINT ck_score_id CHECK (CHINESE_SCORE>=80);

      1. 禁用和启用约束
        1. 禁用约束

alter table 模式名.表名 disable constraint "约束名"

alter table omp.student disable constraint pk_student_id;

        1. 启用约束

alter table 模式名.表名 enable constraint "约束名"

alter table omp.student disable constraint pk_student_id;

    1. DM8索引管理
      1. 建索引

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;

      1. 创建聚集索引

新建聚集索引会重建这个表以及其所有索引,包括二级索引、函数索引,是一个代价非常大的操作。因此,最好在建表时就确定聚集索引键,或在表中数据比较少时新建聚集索引,而尽量不要对数据量非常大的表建立聚集索引。

CREATE CLUSTER INDEX idx_year_2023_id ON omp.year_2023(ID);

      1. 重建索引

重建索引:

SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);

SCHEAM_NAME 为索引所在的模式名,INDEX_ID 为索引 ID。

或者

alter index "DMHR"."IND_NAME" rebuild;

使用说明:

1. 水平分区子表,临时表和系统表上建的索引不支持重建

2. 虚索引和聚集索引不支持重建

      1. 查询索引

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

      1. 删除索引

SQL> drop index omp.idx_student_student_id;

      1. 索引的监控

--索引的监控

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';

    1. DM8视图管理
      1. 创建视图

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;

      1. 删除视图

SQL> DROP VIEW view_year_2023;

      1. 视图查询

SQL> select * from view_year_2023;

      1. 重新编译视图

SQL> alter view view_year_2023 compile;

    1. 查看模式对像空间使用
      1. 查看用户占用的空间

可以使用系统函数 USER_USED_SPACE 得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目

SQL> select user_used_space('omp');

行号     USER_USED_SPACE('omp')

---------- ----------------------

1                 32

      1. 查看表占用的空间

可以使用系统函数 TABLE_USED_SPACE 得到表对象占用空间的大小,函数参数为模式

名和表名,返回值为占用的页的数目。

SQL> SELECT TABLE_USED_SPACE('OMP','YEAR_2001');

行号     TABLE_USED_SPACE('OMP','YEAR_2001')

---------- -----------------------------------

1          32

      1. 查看索引占用的空间

可以使用系统函数 INDEX_USED_SPACE 得到索引占用空间的大小,函数参数为索引ID,返回值为占用的页的数目。

SELECT INDEX_USED_SPACE(33555463);

    1. 开启SQL日志

SP_SET_PARA_VALUE(1, 'SVC_LOG',1);---开启日志记录

SP_SET_PARA_VALUE(1, 'SVC_LOG',0);---关闭日志记录

    1. 导入SQL脚本

SQL> start /home/dmdba/aa.sql

或者找到文件所在路径

SQL> `/home/dmdba/aa.sql

导入后需要手工commit;

    1. 作业管理

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);

    1. 统计信息管理
      1. 收集统计信息

dbms_stats.gather_table_stats('OMP','YEAR_2001');

dbms_stats.gather_table_stats('OMP','STUDENT1');

      1. 统计信息的查看

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');

    1. ODBC源码包编译安装

全部在root用户下操作

      1. 解压

# tar -zxvf unixODBC-2.3.0.tar.gz

      1. 源码编译安装

# cd unixODBC-2.3.0/

# ./configure

# make && make install

      1. 配置 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

      1. 配置 odbcinst.ini

# vi /usr/local/etc/odbcinst.ini

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

Driver = /dm8/dmdbms/bin/libdodbc.so

注:这里根据实际安装路径填写,要不然找不到libdodbc.so

      1. 验证

使用dmdba用户执行命令

# su – dmdba

$ isql dm8 -v

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值