文章内容主要为一些之前经常接触的零碎操作,正好最近DCA考试也需要考验此项技能,借由这个时机在此一并讲出。
#查看CPU信息,以下均可
[dmdba@DW-M1 ~]$ lscpu
[dmdba@DW-M1 ~]$ cat /proc/cpuinfo
[dmdba@DW-M1 ~]cat /proc/version #查看操作系统版本
[dmdba@DW-M1 ~]ldd --version #查看ldd版本
[dmdba@DW-M1 ~]gcc --version #查看gcc版本,安装DM前建议预先安装UnixODBC 组件 gcc 包
[dmdba@DW-M1 ~]$ free -m #查看内存,虚拟机环境推荐1G以上,银河麒麟推荐3G
[dmdba@DW-M1 ~]$ cat /proc/meminfo
[dmdba@DW-M1 ~]$ df -h #虚拟机大致分配25G以上
如果要查看临时目录,只要在后面加上/tmp,对于DM数据库安装,如果 tmp 目录不足,安装会失败,可以指定 DM_INSTALL_TMP 参数指定到其他目录下,详见《安装手册》:
#如果有远程访问数据库的要求,需要设置防火墙和 selinux 策略。
[dmdba@DW-M1 ~]$ systemctl status firewalld #查看防火墙信息
[dmdba@DW-M1 ~]$ systemctl stop firewalld #关闭防火墙
[dmdba@DW-M1 ~]$ firewall-cmd --add-port=5236/tcp --permanent #先开放端口
[dmdba@DW-M1 ~]$ firewall-cmd --reload #再重新加载
[dmdba@DW-M1 ~]$ firewall-cmd --list-ports #查看端口信息
如果想要删除端口:
[dmdba@DW-M1 ~]$ firewall-cmd --zone=public --remove-port=5236/tcp --permanent
[dmdba@DW-M1 ~]$ firewall-cmd --reload
[dmdba@DW-M1 ~]$ firewall-cmd --list-ports
[root@DW-M1 ]# groupadd dinstall #创建用户组
[root@DW-M1 ]# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba #创建用户
[root@DW-M1 ]# passwd dmdba #设置密码
#安装规划:
#安装软件:/dm8
#数据库文件目录:/dm8/data
#归档文件存放目录:/dm8/arch
#备份文件存放目录:/dm8/backup
[root@DW-M1 ]# mkdir /dm8 # 创建达梦安装路径
[root@DW-M1 ]# chown dmdba:dinstall /dm8 # 更改文件夹的所属用户组、所属用户
[root@DW-M1 ]# ll -ld /dm8 # 查看是否更改成功
#将下载的iso镜像文件上传到服务器上后,进行挂载操作
[root@DW-M1 ~]# mkdir /mnt/dm
[root@DW-M1 ~]# mount dm8_20220525_x86_rh6_64.iso /mnt/dm #将当前目录下的镜像文件挂载到上面的目录下
[root@DW-M1 ~]# df -h #可以查看挂载信息
[root@DW-M1 ~]# vim /etc/security/limits.conf
#在最后添加如下语句:
dmdba soft nofile 102400
dmdba hard nofile 102400
root soft nofile 102400
root hard nofile 102400
安装有三种形式,命令行安装、图形化安装与静默安装,这里只介绍前面两种
[root@DW-M1 ~]# xhost +
查看与设置DISPLAY值:
[root@DW-M1 ~]# echo $DISPLAY
[root@DW-M1 ~]# su dmdba
[dmdba@DW-M1 ~]$ echo $DISPLAY #查看DISPLAY的值
[dmdba@DW-M1 ~]$ export DISPLAY=:0.0 #设置DISPLAY值(具体以考试环境查询出来的值为准)
执行安装:
[dmdba@DW-M1 ~]$ cd /mnt/dm
[dmdba@DW-M1 ~]$ mount dm8_20220525_x86_rh6_64_ent /dm/mnt #将文件挂载到目标目录
[dmdba@DW-M1 ~]$ ./DMInstall.bin
普通用户的安装跟随默认即可,需要特殊要求可参考《安装手册》。如果/tmp空间不够,可能会导致报错。
安装到最后,会要求使用root用户执行“/dm8/script/root/root_installer.sh”,按要求执行即可。
[root@DW-M1 dmdba]# /dm8/script/root/root_installer.sh
[root@DW-M1 dmdba]# cd /mnt/dm
[root@DW-M1 dmdba]# ./DMInstall.bin -i
如果没有在安装之后创建数据库实例,则需要在手动注册。同样地,注册数据库实例有图形化安装与命令行安装两种方法。
DM的数据库命令行初始化工具是dminit,存放于/dm/bin下
[dmdba@DW-M1 bin]$ cd /dm/bin
[dmdba@DW-M1 bin]$ ./dminit help
如果需要手动开启数据库服务,可以利用数据库配置助手 dbca.sh,这次选择注册数据库服务:
点击开始,随后指定配置文件dm.ini(如在/dm/data下安装了实例名DAMENG的数据库,则配置文件是/dm/data/DAMENG/dm.ini)与其他可选参数即可。同样,之后会出现三条命令提示在root下执行,照做即可。
使用bin目录下的disql工具,可以在一开始指定用户名、密码、端口号等,随后连接到数据库,格式为:./disql 用户名/密码@ip:端口号,如果ip是localhost,可以省略。
如果已经用disql连接到了数据库,想要连接到其他数据库,可以使用conn命令进行连接。格式同上,输入用户名、密码等即可。
(注:tool目录下也有一个disql,它与bin下的disql区别仅仅在于前者可以直接使用./disql进入该工具而不连接数据库,后者直接使用./disql后会提示输入用户名与密码连接到数据库。)
manager工具是DM的图形化客户端工具,它具有强大的功能,合理使用可以相比命令行而言达到更高的效率。它存放于tool目录下,这里仅介绍如何连接与选项设置,关于具体使用,后面会有详细介绍。
在弹出的窗口输入主机名、端口号、用户名及密码等即可。
INI 参数分为手动、静态和动态三种类型,分别对应 V$PARAMETER 视图中 TYPE 列的 READ ONLY、IN FILE、SYS/SESSION。
READ ONLY:只读参数,数据库运行期间不能修改,只能在ini文件中修改,重启数据库生效。
IN FILE:静态参数。可以通过函数与SQL命令修改,也可以在ini文件修改。但是不能修改内存中的值,只能修改参数文件中的值,修改后需要重启数据库生效
SYS/SESSION:动态参数。可以通过函数与SQL修改,修改的是ini文件与内存中的值,即修改后立即生效。(当然,也可以在ini文件中修改,但是这样一来需要重启数据库生效)。 其中,SYS 为系统级参数,修改后会影响所有的会话;SESSION 为会话级参数,服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。
例如实例为DAMENG的数据库,可以直接编辑 v/dm/data/DAMENG进行修改。如前文所言,修改ini文件的值需要重启数据库生效(不论什么类型)。
vim /dm/data/DAMENG/dm.ini
/dm/tool下的consloe工具可以查看并修改各种参数。与直接修改文件一样,修改的是ini文件的值,需要重启数据库生效。
在该工具中,需要之前注册过数据库服务才能看得到。修改后,记得点击保存。
SQL语句修改系统参数的命令如下:
alter system set 参数名=参数值 both|spfile|memory
其中 both/spfile/memory用来指定参数生效范围。spfile表示仅在文件中修改,而内存不修改。而spfile表示只对内存修改,而文件值不修改。both表示两者都修改。显然,对于动态参数,可以指定spfile/memory/both,对于静态参数,只能指定为spfile。
DM数据库的所有参数存放在v$parameter中:
想要查看内存相关,只要进行模糊查询即可:
然后,使用上述语句进行修改参数。例如,想要修改排序缓冲区大小,参数名为“SORT_BUF_SIZE”,首先查看信息:
可以看到,该参数为SESSION,即会话级动态参数。我们将当前会话值改为15:
alter system set 'SORT_BUF_SIZE'=15 memory;
可以看到,VALUE与SYS_VALUE都改为了15,但是文件中的值仍为10。
与参数有关的系统函数:
sf_get_para_value(scope int,ini_param_name varchar(256));#s获取参数值,scope可取1或2,前者表示从文件获取,后者表示从内存获取。ini_param_name是参数名。
sp_set_para_value(scope int,ini_param_name varchar(256),value int);#修改Int类型值
sp_set_para_double_value(scope int,ini_param_name varchar(256),value double);#修改double类型值
sp_set_para_string_value(scope int,ini_param_name varchar(256),value varchar(8187));#修改string类型值
#上述三个中,scope为0表示修改内存值,为2表示修改文件值,为1表示都修改
再改回10:
select SF_GET_PARA_VALUE(2,'SORT_BUF_SIZE');
再次查看:
DM SERVER包含四种数据缓冲区,NORMAL、KEEP、FAST 和 RECYCLE。
NORMAL:对应参数 BUFFER,主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下, 默认缓冲区为 NORMAL;
KEEP: 对应参数 KEEP,对缓冲区中的数据页很少或几乎不怎么淘汰出去, 主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为 KEEP。
用户可以在创建表空间或修改表空间时,指定表空间属于 NORMAL 或 KEEP 缓冲区。
FAST:对应参数 FAST_POOL_PAGES ,根据用户指定的大小或系统默认大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。
RECYCLE:对应参数RECYCLE,供临时表空间使用。
可以看到,四个参数类型均为IN FILE,即静态参数,使用 ALTER SYSTEM 修改时只能指定为spfile:
修改后,参数在文件中的值变为1200,内存值仍为1000。
DM数据库创建完成后默认创建5个表空间,分别为SYSTEM、ROLL、MAIN、TEMP、HMAIN。
SYSTEM:存放了有关 DM 数据库的字典信息,包含表定义、视图定义、用户权限等,用户不能在SYSTEM 表空间创建表和索引。
ROLL:完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行 DML (Insert、Delete、Update等)操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。
MAIN:用户默认表空间 ,创建用户时,没有指定表空间,则使用MAIN表空间。
TEMP:由 DM 数据库自动维护。用于存放临时表数据、索引、大量数据排序等产生的数据。对应ini文件中的参数名为“TEMP_SIZE”,类型为静态参数。
HMAIN:HUGE表(列存储表)的默认表空间
select * from SYS.DBA_TABLESPACES;
select * from dba_data_files;
select * from DBA_FREE_SPACE;
CREATE TABLESPACE 表空间名 DATAFILE '数据文件路径' SIZE 数据文件大小(单位M );
/*简单格式如上,具体格式可以查看《DM8_SQL语言使用手册》*/
如果不确定页大小,可以使用SQL命令SELECT PAGE查看;如果想直接知道页大小的某一倍数,也可以8PAGE对PAGE进行乘数运算:
如页大小8096(8K),则表空间小于32M会报错:
/*表空间脱机或联机*/
alter tablespace Mytbs offline/online;
/*修改表空间大小*/
alter tablespace 表空间名 resize datafile '数据文件路径' to 数据文件大小(单位为M);
alter tablespace Mytbs resize datafile 'DMTBS01.DBF' to 64;
/*修改表空间开启自动增长,增长步长,最大表空间*/
alter tablespace 表空间名 datafile '数据文件路径' autoextend on next 增长步长 maxsize 文件最大值
alter tablespace Mytbs datafile 'Mytbs.dbf' autoextend on next 4 maxsize 10240;
/*添加数据文件*/
alter tablespace tbs ADD DATAFILE 'TBS02.DBF' SIZE 128 AUTOEXTEND ON NEXT 4
MAXSIZE 10240;
alter tablespace Mytbs offline;/*置为脱机*/
alter tablespace Mytbs RENAME DATAFILE '/dm/data/DAMENG1/TBS01.DBF'
to '/dm8/data/DAMENG1/TOTAL_TBS/TBS01.DBF';/*迁移表空间,逐个迁移*/
alter tablespace Mytbs RENAME DATAFILE '/dm/data/DAMENG1/TBS01.DBF'
to '/dm8/data/DAMENG1/TOTAL_TBS/TBS02.DBF';
alter tablespace tbs online;/*重新置为联机*/
打开manager,在左侧对象导航栏找到表空间,点击可以查看当前的所有表空间。更深入地,可以查看每个表空间下存放的数据,包括文件、表、索引等。
右键点击目标表空间,即可进行新建、修改、脱机、重命名、删除等操作。新建表空间窗口如下,填写表空间名、文件路径等必要信息,按需填写其他可选参数,点击确定即可完成创建。
与TEMP表空间有关的参数有三个:
TEMP_PATH表示了TEMP表空间的存放地址,为只读参数;TEMP_SIZE表示TEMP表空间初始值,为静态参数;TEMP_SPACE_LIMIT为表空间大小限制,0表示不限制,为系统级参数。
与联机日志有关的系统视图主要有V$RLOG、V$RLOGFILE等:
V$RLOG 查看日志的总体信息:
V$RLOGFILE查看日志文件的具体信息:
使用如下命令创建日志文件:
alter database add logfile '日志名称' size 日志大小(单位MB);
alter database add logfile 'DAMENG103.log' size 128;/*示例*/
DM只支持将日志文件改大,但不支持改小,使用如下命令:
alter database resize logfile '日志路径' to 日志大小(单位MB);
alter database resize logfile '/dm/data/DAMENG1/DAMENG103.log' to 256;/*示例*/
重做日志在迁移时,记得先改为mount状态,待迁移完成再重新改为open。
alter database mount;/*先将数据库置为mount状态*/
alter database RENAME LOGFILE 'DAMENG101.log' to '/dm8/data/DAMENG/REDO/DAMENG01.log';
alter database RENAME LOGFILE 'DAMENG102.log' to '/dm8/data/DAMENG/REDO/DAMENG02.log';
alter database RENAME LOGFILE 'DAMENG103.log' to '/dm8/data/DAMENG/REDO/DAMENG03.log';
alter database open;/*数据库重新打开*/
打开manager,在对象导航栏中右键根选项“LOCALHOST”,选择“管理服务器”,弹出相关窗口:
在“系统管理”选择项界面,可以查看改变数据库状态,mount状态就是配置状态。
在“日志文件”选择项界面,可以查看日志文件信息,也可以添加与修改。
在“归档配置”选择项界面,可以查看与归档日志信息,或开启/关闭归档模式(但是要先将数据库转为mount状态)。
在图形化界面以及顺便介绍了归档日志的图形化操作,这里介绍其命令行操作。(关于归档日志与重做日志,之前在备份还原写过相关文章介绍)
开启归档模式前,应当先将数据库状态置为mount,然后使用alter database操作。
alter database mount; /*将数据库状态设置为mount*/
alter database archivelog; /*打开归档*/
/*归档配置,配置归档路径,归档文件大小(超过就新建一个文件),归档文件总的大小(超过限制,就会删除老的归档)*/
alter database add archivelog 'type=local,dest=/dm/data/DAMENG1/arch,file_size=64,space_limit=10240';
alter database open;/*将数据库状态设置为open*/
select arch_mode from v$database;/*查询归档状态*/
select * from SYS."V$ARCH_FILE"; /*查看归档文件*/
select * from v$dm_arch_ini; /*查询归档配置*/
关闭归档的过程与开启类似。
alter database mount;
alter database noarchivelog;/*转为非归档模式,即关闭归档*/
alter database delete archivelog 'type=local,dest=/dm8/arch'; /*删除归档文件*/
alter database open;
系统预定义的用户有:
SYS:内置用户,不能直接登陆
SYSDBA:系统管理员,拥有DBA角色
SYSAUDITOR:系统审计管理员
SYSSSO:系统安全管理员
SYSDBO:系统安全操作员(DM安全版才有的用户)
create user 用户名 identified by 密码 default tablespace 表空间名;
create user tester identified by "Dmeng123" default tablespace Mytbs /*示例*/
在设置用户密码前,应当先知晓当前数据库的口令策略。口令策略,即对密码的限制,如长度要求、大小写要求等,参数名为PWD_POLICY:
PWD_POLICY参数值对应的含义具体如下:
值 | 策略 |
0 | 无限制,但总长度不得超过 48 个字节 |
1 | 禁止与用户名相同 |
2 | 口令长度需大于等于 PWD_MIN_LEN 设置的值 |
4 | 至少包含一个大写字母(A-Z) |
8 | 至少包含一个数字(0-9) |
16 | 至少包含一个标点符号(英文输入法状态下,除―和空格外的所有符号 |
参数值也可以设为其他数,表示上述几个数的组合相加,比如值为7=1+2+4,表示同时应用1、2、4策略。
使用alter user修改用户限制、锁定解锁等。
/*将密码输错锁定次数改为5次,锁定时间为5分钟,最大连接数为3*/
alter user tester limit FAILED_LOGIN_ATTEMPS 5,PASSWORD_LOCK_TIME 5,SESSION_PER_USER 3;
/*手动锁定用户*/
alter user tester account lock;
/*手动解锁用户*/
alter user tester account unlock;
使用dba_users可以查看用户信息。
在manager客户端的“对象导航”栏,点击“用户”,即可查看当前所有的数据库用户,也可以进行用户的创建、修改操作。
在新建用户窗口,可以输入用户名、密码、等信息,(注:DM安全版本才能对某一用户设置口令策略。),也可以指定所属角色,赋予系统权限、对象权限等。
如果想要手动赋予用户权限,则需要使用SQL命令授予:
/*授予创建所有表、创建索引、创建视图的系统权限*/
grant CREATE any table to tester with admin option;/*with admin option表示允许系统权限转授*/
grant create index to tester;
grant create view to tester;
注:如果授予了删除或者修改的权限,却没有授予查询的权限,会报错。
授予对象权限的示例如下:
grant select on sysdba.t_test to role1 with grant option;/*先授予查询权限,with grant option 表示允许转授*/
grant update on sysdba.t_test to role1;/*再授予更新权限*/
回收权限如下,如果赋予了转授的权限,则后面需要加cascade,表示级联回收:
revoke 角色名 from 用户名;
revoke role1 from dmtest;/*示例*/
revoke 具体权限 from 用户名;
revoke create table from dmtest;/*示例*/
/*创建模式前需要授予用户创建模式的权限*/
/*授予用户创建模式权限*/
grant create schema to 用户名;
/*创建模式,注:如果是disql工具下运行,在需要在空行输入/再回车。*/
create schema 模式名 authorization 用户名;
/
1、查看系统中所有模式:
select * from SYS.SYSOBJECTS t where t."TYPE$" ='SCH';
2、查看模式与所属用户:
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;
3、查看当前模式:
select sys_context('USERENV','CURRENT_SCHEMA');
4、查询当前用户也可以用上面的方法:
select sys_context('USERENV','CURRENT_USER');
所有的切换模式只对当前会话生效 ,没有办法可以使得永久生效,也就是说,没有办法设置为默认模式(默认为同名模式)。
/*切换模式*/
set schema 模式名;
用户默认模式不能删除,模式下有对象时不能直接删除(可以增加 cascade 级联删除用户模 式及模式下对象,生产环境慎用 cascade,防治误删)
drop schema DMTES01 CASCADE;
注:DM的表名是区分大小写的,使用的时候要注意。DM 中的表默认是索引组织表。Oracle 默认是堆表。
创建表是最基本的要求,这里就省略了。可以说明一下表的复制,有时候需要将查询的结果创建成表,便于以后使用。
create table T2_cp as select * from T2 where c1=0;
create table T2_cp as select * from T2;
create table T2_cp like T2;
相关的数据字典有dba_tables、DBA_tab_COLUMNS等。
select * from dba_tables t where t.OWNER = 用户名;/*查看用户所有的表*/
select * from DBA_tab_COLUMNS t where t.OWNER = 用户名;/*查看用户的表的所有列*/
NOT NULL:非空
UNIQUE:唯一。可以简写为uk。
PRIMARY KEY:一个表只能由一个主键,主键唯一且非空,一张表只能有一个。可以简写为pk
FOREIGN KEY:外键引用另一张表的主键或者唯一键。可以简写为fk。
CHECK:数据检验。可以简写为ck。
在添加完整性约束的时候,可以将约束名命名为约束简写_表名_字段名。
完整性约束的添加可以在定义表的时候添加,如果需要后面再添加可以使用alter system语句。
/*将pname设置为非空*/
alter table test modify pname not null;
/*将pid设置为主键*/
alter table test ADD CONSTRAINT pk_test_pid PRIMARY KEY(pid);
/*将email设置为unique*/
alter table test ADD CONSTRAINT uk_test_email UNIQUE (email);
/*增加列salary。类型为int*/
alter table DMTEST.T_TESTPID add salary int;
/*添加自定义约束,规定salary不能小于3000*/
alter table dmtest.t_testpid ADD CONSTRAINT ck_testpid_salary
CHECK(salary>3000)
禁用与启用约束语句如下。
alter table 模式名.表名 disable constraint 约束名;/*禁用约束*/
alter table 模式名.表名 enable constraint 约束名;/*启用约束*/
关于索引,之前的文章有较为详细的描述。这里省略建立等过程 。这里仅作补充。
索引的重建:
alter index idx REBUILD ONLINE;
索引的监控:
alter index ind MONITORING USAGE;/*索引的监控*/
alter index ind NOMONITORING USAGE; /*取消索引的监控*/
对启用监控的对象,可以在V$OBJECT_USAGE中查看信息:
select * from SYS."V$OBJECT_USAGE"
与索引相关的数据字典有dba_INDEXES、DBA_IND_COLUMNS。
关于备份还原,在之前关于备份还原的文章也有较为详细的阐述。这里仅作强调与补充。
在manager中,右键“代理”,点击“创建代理环境”,创建成功后,会增加SYSJOB模式。
右键“作业”,选择“新建作业”,弹出新建作业的窗口。
点击“作业步骤”——“添加”,进入添加作业窗口,在这里,可以对添加的作业进行调度。
回到新建作业窗口,点击作业调度,选择新建,即可弹出作业调度窗口。
tar -zxvf unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0
./configure
make
make install
cd /usr/local/etc/
vim odbc.ini
# 按以下要求改:
[DM]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER # 要和下面对应
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
vim odbcinst.ini
#按以下改
[DM8 ODBC DRIVER] # 这块要和上边对应
Drscription = ODBC DRIVER FOR DM8
Driver = /dm/bin/libdodbc.so # 与安装目录对应
odbcinst -j
isql dm8 -v
关于更多DM数据库信息请咨询DM社区文档: 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台