一、DM8企业版安装
图形化安装
设置图形化:(第一次开机登录,需要执行 xhost +)
[root@localhost ~]# xhost +
[root@localhost ~]# su - dmdba
上一次登录: 三 8 月 24 11:25:37 CST 2022 pts/0 上
[dmdba@localhost ~]$ echo $DISPLAY
[dmdba@localhost ~]$ export DISPLAY=:0.0
[dmdba@localhost ~]$ echo $DISPLAY
:0.0
执行安装命令:
[dmdba@localhost ~]$ cd /mnt/dm
[dmdba@localhost dm]$ ll
总用量 931825
-r-xr-xr-x 1 root root 2802237 5 月 25 15:31 'DM8 Install.pdf'
-r-xr-xr-x 1 root root 951385360 5 月 25 15:37 DMInstall.bin
[dmdba@localhost dm]$ ./DMInstall.bin
二、创建数据库及数据库实例管理
DBCA 数据库配置助手
进入数据库安装目录 tool 下,执行 dbca.sh
[dmdba@localhost dm]$ cd /dm8/tool
[dmdba@localhost tool]$ ./dbca.sh
按照图形化操作教程后
执行命令
[root@localhost tmp]# mv
/dm8/bin/DmServiceDMOASERVER.service
/usr/lib/systemd/system/DmServiceDMOASERVER.service
[root@localhost tmp]# systemctl enable DmServiceDMOASERVER.service
[root@localhost tmp]# systemctl start DmServiceDMOASERVER.service
执行以下命令注册数据库服务
[root@localhost root]# ./dm_service_installer.sh -t dmserver -p DMOASERVER -dm_ini
/dm8/data/DMOA/dm.ini
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMOASERVER.service
→ /usr/lib/systemd/system/DmServiceDMOASERVER.service.
创建服务(DmServiceDMOASERVER)完成
[root@localhost root]# ./dm_service_uninstaller.sh -h
Usage: dm_service_uninstaller.sh [-n service_name]
-n 服务名,删除指定服务
-h 帮助
[root@localhost root]# ./dm_service_uninstaller.sh -n DmServiceDMOASERVER
是否删除服务(DmServiceDMOASERVER)?(Y/y:是 N/n:否): y
Removed /etc/systemd/system/multi-user.target.wants/DmServiceDMOASERVER.service.
删除服务文件(/usr/lib/systemd/system/DmServiceDMOASERVER.service)完成
删除服务(DmServiceDMOASERVER)完成
使用disql 命令行方式连接数据库
[dmdba@localhost bin]$ ./disql sysdba/SYSDBA:5236
[dmdba@localhost bin]$ ./disql sysdba/SYSDBA@192.168.88.4:5236服务器[192.168.88.4:5236]:处于普通打开状态
登录使用时间 : 15.096(ms)
disql V8
SQL> exit
root 用户管理数据库:
(1) linux 服务管理方式(systemctl 命令)
[root@localhost data]# systemctl start DmServiceDMOASERVER.service
[root@localhost data]# systemctl status DmServiceDMOASERVER.service
[root@localhost data]# systemctl restart DmServiceDMOASERVER.service
[root@localhost data]# systemctl stop DmServiceDMOASERVER.service
dmdba 用户管理数据库:
(1) DmServiceDMSERVER(DMSERVER 为实例名)文件启动
(注意:此启动方式不会更新 DM 服务查看器)。
[dmdba@localhost ~]$ ./DmServiceDMSERVER status
DmServiceDMSERVER (pid 42522) is running.[dmdba@localhost ~]$ ./DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
[dmdba@localhost ~]$ ./DmServiceDMSERVER status
DmServiceDMSERVER is stopped
[dmdba@localhost ~]$ ./DmServiceDMSERVER start
可以启动数据库到 mount 状态:
[dmdba@localhost ~]$ ./DmServiceDMSERVER start mount
(
2) dmserver 前台启动方式(不管是否注册 linux 服务都可以使用)
dmserver 不管是否注册 linux 服务都可以使用,其他方式只适用于注册 linux 服务的数据库。
可以将数据库启动到 mount 状态。
[dmdba@localhost ~]$ cd /dm8/bin
[dmdba@localhost bin]$ ./dmserver path=/dm8/data/DMOA/dm.ini mount
表空间管理
管理数据文件
修改数据文件大小:
alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' to 128;
添加数据文件:
alter tablespace tbs ADD DATAFILE 'TBS02.DBF' SIZE 128 AUTOEXTEND ON NEXT 4
MAXSIZE 10240;
修改数据文扩展尺寸:
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND ON NEXT 4 MAXSIZE 10240;
数据文件的迁移:
alter tablespace tbs offline;
alter tablespace tbs RENAME DATAFILE 'TBS01.DBF'
to '/dm8/data/DAMENG/TBS/TBS01.DBF';
alter tablespace tbs RENAME DATAFILE 'TBS02.DBF'
to '/dm8/data/DAMENG/TBS/TBS02.DBF';
alter tablespace tbs online;
管理重做日志文件
What?重做日志文件用于保存 redo 日志。包含联机日志文件和归档日志文件(开归档时才
会产生)。联机日志文件是循环使用,内容不断覆盖。
Why?联机日志文件用于故障重启的数据恢复。归档日志文件主要用于数据库还原与恢复。
When?如果业务数据量大,可以将联机日志设置的更大,或者添加联机日志文件。如果业
务数据量大,而联机日志过小,会造成频繁的日志切换,频繁的日志切换会降低数据库的性
能。达梦联机日志由数据库自动切换。
how?alter database add/resize/rename logfile
数据字典:
select * from "V$RLOGFILE";
select * from v$rlog; --cur_file表示当前正在使用的联机日志文件ID
添加联机日志文件:alter DATABASE add LOGFILE 'DAMENG03.log' size 256;
修改联机日志文件大小:
alter database resize LOGFILE 'DAMENG03.log' to 300;
迁移联机日志文件:
alter database mount;
alter database RENAME LOGFILE 'DAMENG03.log'
to '/dm8/data/DAMENG/REDO/DAMENG03.log';
alter database RENAME LOGFILE 'DAMENG02.log'
to '/dm8/data/DAMENG/REDO/DAMENG02.log';
alter database RENAME LOGFILE 'DAMENG01.log'
to '/dm8/data/DAMENG/REDO/DAMENG01.log';
alter database open;
归档管理
What?归档是什么,归档是对重做日志 redo 信息的归档。数据库默认运行在非归档模式下,
开启归档可以更好的保证数据的安全性。
Why?用于数据库的还原与恢复。
比如,昨天凌晨数据库备份,今天下午 14:00 故障,
利用备份可以还原和恢复到昨天备份的时间点,利用归档可以恢复到故障的前一刻(完全恢
复)或者任意的时间点(不完全恢复)。
When?生产环境不能接受数据丢失都应该开归档。
how?SQL 方式/图形化界面/修改配置文件
(1) SQL 方式
select arch_mode from v$database;
开启归档:
alter database mount;
alter database ARCHIVELOG;
alter database add ARCHIVELOG 'type=local, dest=/dm8/arch,
file_size=64,space_limit=10240';alter database open;
查看归档配置:
select * from "V$DM_ARCH_INI";
关闭归档:
alter database mount;
alter database NOARCHIVELOG;
alter database delete ARCHIVELOG 'type=local, dest=/dm8/arch,
file_size=64,space_limit=10240';
alter database open;
管理模式
模式与用户之间的关系:
当系统建立一个用户时,会自动生成一个对应的模式
用户还可以建立其他模式
[dmdba@localhost DAMENG]$ disql dmtest/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.765(ms)
disql V8
SQL> create table t_test(id int);
操作已执行
已用时间: 7.118(毫秒). 执行号:1100.
SQL> select sys_context('USERENV','CURRENT_SCHEMA');
行号 SYS_CONTEXT('USERENV','CURRENT_SCHEMA')
---------- ---------------------------------------
1 DMTEST
已用时间: 1.218(毫秒). 执行号:1101.
SQL> select user;
行号 USER()
---------- ------
1
DMTEST
create SCHEMA DMTES01 AUTHORIZATION dmtest;
select * from SYS.SYSOBJECTS t where t."TYPE$" ='SCH'; select a.id schid, a.name schname, a."TYPE$", b.id userid, b.name, b."TYPE$"
username
from SYSOBJECTS a, SYSOBJECTS b
where a."TYPE$" ='SCH'
and a.pid = b.id;
SQL> create table dmtes01.t_test01(id int);
操作已执行
已用时间: 4.300(毫秒). 执行号:1103.
SQL> select * from dmtes01.t_test01;
SQL> set schema dmtes01;
操作已执行
已用时间: 0.665(毫秒). 执行号:0.
SQL> create table t_test(id int);
操作已执行
已用时间: 7.915(毫秒). 执行号:919.
SQL> select table_name, owner from all_tables;
用户默认模式不能删除,模式下有对象时不能直接删除(可以增加 cascade 级联删除用户模
式及模式下对象,生产环境慎用 cascade,防治误删)
drop schema DMTES01 CASCADE;
drop SCHEMA dmtest;
管理表
DM 中的表默认是索引组织表。Oracle 默认是堆表。
两者的区别和优势:
(1) 索引组织表数据是有序的,有且仅有一个聚簇索引键,数据按照聚簇索引键排序。
插入有序;创建表时可以指定聚簇索引键,如果不指定,默认 ROWID 为聚簇索引
键,索引组织表 rowid 是逻辑 rowid,占用存储空间,所以索引组织表占用更大空间。
DM 中 老 的 版 本 创 建 表 时 指 定 主 键 , 则 主 键 是 聚 簇 索 引 键 ( 由 参 数
PK_WITH_CLUSTER)
SQL> select name, value, type from v$parameter t where t.name like '%PK_WITH%';行号 NAME VALUE TYPE
---------- --------------- ----- -------
1 PK_WITH_CLUSTER 0 SESSION
(
2)堆表数据是无序的,插入无序,所以堆表的插入效率高,并发插入效率也高。堆表的
rowid 是物理 rowid,rowid 不占用存储空间,所以堆表更节约空间。
索引组织表的聚簇索引键的范围查询效率较高。
创建表的方法:
create table dmtest.t_testpid
(pid int,
pname varchar(30),
sex bit,
email varchar(50)) tablespace tbs;
create table t_emp as select * from dmhr.EMPLOYEE;
create table t_emp01 like dmhr.EMPLOYEE;
create table t_emptab as select * from dmhr.EMPLOYEE where 1=0;
数据导入:oracle 用@,DM 使用 start 或者`
SQL> start /dm8/backup/t_emp.sql
SQL> `/dm8/backup/t_emp.sql
相关数据字典:
select * from dba_tables t where t.OWNER = 'DMTEST';
select * from DBA_tab_COLUMNS t where t.OWNER = 'DMTEST';
管理约束
约束类型:
NOT NULL:非空
UNIQUE:唯一
PRIMARY KEY:一个表只能由一个主键,主键唯一且非空。
FOREIGN KEY:外键引用另一张表的主键或者唯一键。
CHECK:数据检验
alter table dmtest.t_testpid modify pname not null;
alter table dmtest.t_testpid ADD CONSTRAINT pk_testpid_pid PRIMARY KEY(pid);
alter table dmtest.t_testpid ADD CONSTRAINT uk_testpid_email UNIQUE (email);
alter table DMTEST.T_TESTPID add salary int;
alter table dmtest.t_testpid ADD CONSTRAINT ck_testpid_salary
CHECK(salary>3000);
drop table if EXISTS dmtest.t_testchild;
create table dmtest.t_testchild
( childid int, childname varchar(20),pid int) TABLESPACE tbs;
alter table dmtest.t_testchild ADD CONSTRAINT fk_testchild_pid FOREIGN KEY(pid)
REFERENCES dmtest.t_testpid(pid);
select * from DBA_CONSTRAINTS t where T.OWNER='DMTEST';
select * from DBA_CONS_COLUMNS t where T.OWNER='DMTEST';
SQL> desc t_testpid;
行号 NAME TYPE$ NULLABLE
---------- ------ ----------- --------
1 PID INTEGER N
2 PNAME VARCHAR(30) N
3 SEX BIT Y
4 EMAIL VARCHAR(50) Y
5 SALARY INTEGER Y
已用时间: 11.444(毫秒). 执行号:1109.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(1, null, null,null,null);
insert into t_testpid(pid, pname, sex, email, salary) values(1, null, null,null,null);
[-6609]:违反列[PNAME]非空约束.
已用时间: 2.966(毫秒). 执行号:0.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(1, 'aaa', null,null,null);影响行数 1
已用时间: 0.774(毫秒). 执行号:1111.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(1, 'aaa', null,null,null);
insert into t_testpid(pid, pname, sex, email, salary) values(1, 'aaa', null,null,null);
[-6602]:违反表[T_TESTPID]唯一性约束.
已用时间: 0.397(毫秒). 执行号:0.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(2, 'aaa', null,null,null);
影响行数 1
已用时间: 0.755(毫秒). 执行号:1113.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(3, 'bbb', null,'123@qq.com',null);
影响行数 1
已用时间: 0.952(毫秒). 执行号:1114.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(4, 'bbb', null,'123@qq.com',null);
insert into t_testpid(pid, pname, sex, email, salary) values(4, 'bbb', null,'123@qq.com',null);
[-6602]:违反表[T_TESTPID]唯一性约束.
已用时间: 1.029(毫秒). 执行号:0.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(5, 'bbb', null,'123@qq.com',2800);
insert into t_testpid(pid, pname, sex, email, salary) values(5, 'bbb', null,'123@qq.com',2800);
[-6604]:违反 CHECK 约束[CK_TESTPID_SALARY].
已用时间: 0.866(毫秒). 执行号:0.
SQL> insert into t_testpid(pid, pname, sex, email, salary) values(5, 'bbb', null,'1234@qq.com',3800);
影响行数 1
已用时间: 0.767(毫秒). 执行号:1118.
外键约束检验:
SQL> desc t_testchild;
行号 NAME TYPE$ NULLABLE
---------- --------- ----------- --------
1 CHILDID INTEGER Y
2 CHILDNAME VARCHAR(20) Y
3 PID INTEGER Y
已用时间: 10.823(毫秒). 执行号:1119.
SQL> insert into t_testchild(CHILDID, CHILDNAME, PID) values(null, null, 6);
insert into t_testchild(CHILDID, CHILDNAME, PID) values(null, null, 6);
[-6607]:违反引用约束[FK_TESTCHILD_PID].
已用时间: 1.024(毫秒). 执行号:0.
SQL> insert into t_testchild(CHILDID, CHILDNAME, PID) values(null, null, 5);
影响行数 1SQL> select * from t_testpid;
行号 PID PNAME SEX EMAIL SALARY
---------- ----------- ----- ---- ----------- -----------
1 1 aaa NULL NULL NULL
2 2 aaa NULL NULL NULL
3 3 bbb NULL 123@qq.com NULL
4 5 bbb NULL 1234@qq.com 3800
已用时间: 0.741(毫秒). 执行号:1122.
SQL> insert into t_testchild(CHILDID, CHILDNAME, PID) values(null, null, 4);
insert into t_testchild(CHILDID, CHILDNAME, PID) values(null, null, 4);
[-6607]:违反引用约束[FK_TESTCHILD_PID].
已用时间: 0.911(毫秒). 执行号:0.
SQL> commit;
操作已执行
已用时间: 1.071(毫秒). 执行号:1124.
SQL> delete from t_testpid where pid=5;
delete from t_testpid where pid=5;
[-6607]:违反引用约束[FK_TESTCHILD_PID].
已用时间: 0.985(毫秒). 执行号:0.
SQL> delete from t_testpid where pid=1;
影响行数 1
已用时间: 1.089(毫秒). 执行号:1126.
SQL> select * from t_testchild;
行号 CHILDID CHILDNAME PID
---------- ----------- --------- -----------
1 NULL NULL 5
已用时间: 0.773(毫秒). 执行号:1127.