达梦数据库.md 11 KB

达梦数据库

1、启动数据库服务

服务注册成功后,启动数据库,如下所示:
systemctl start DmServicedm.service
停止数据库,如下所示:
systemctl stop DmServicedm.service
重启数据库,如下所示:
systemctl restart DmServicedm.service
查看数据库服务状态,如下所示:
systemctl status DmServicedm.service

2、登录达梦数据库

切换目录到大梦数据库的bin目录下

img

登录数据库

[root@localhost bin]# ./disql SYSDBA/SYSDBA@localhost:5236

连接项目

mvn install:install-file -Dfile=F:\DMDb\drivers\jdbc\DmJdbcDriver18.jar -DgroupId=com.dm -DartifactId=DmJdbcDriver -Dversion=1.8.0 -Dpackaging=jar 

3、创建数据库实例

创建服务

./dminit PATH=/home/dm8/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=N CHARSET=1 LENGTH_IN_CHAR=Y DB_NAME=usky_fire BLANK_PAD_MODE=1 LOG_SIZE=2048 INSTANCE_NAME=usky_fire PORT_NUM=5236

注册服务

./dm_service_installer.sh -t dmserver -p DMSERVERusky_fire -dm_ini /home/dm8/data/usky_fire/dm.ini

删除服务

./dm_service_uninstaller.sh -n 实例/服务名(例如:DmServiceSP)

创建表空间

CREATE TABLESPACE alarm_electrical_fire
DATAFILE '/home/dm8/data/usky_fire/alarm_electrical_fire.dbf' SIZE 1M AUTOEXTEND ON NEXT 10M;
create tablespace alarm_spray_water datafile '/home/dm8/data/usky_fire/alarm_spray_water.dbf' size 128 autoextend on next 5 cache=normal;

查看所有表

SELECT TABLE_NAME FROM USER_TABLES;

将表指定给表空间

TABLESPACE alarm_electrical_fire;

查看所有表空间

SELECT TABLESPACE_NAME, TABLESPACE_TYPE, TABLESPACE_SIZE
FROM SYS_ALL_TABLESPACES;

SELECT * FROM V$TABLESPACE;

查看指定表空间内的表名

SELECT TABLE_NAME, COLUMN_COUNT, ROW_COUNT
FROM SYS_TABLES
WHERE TABLESPACE_NAME = 'alarm_hydrant_water';

SELECT * FROM ALL_TABLES WHERE TABLESPACE_NAME = '表空间名称';

SELECT * FROM DBA_TABLES WHERE TABLESPACE_NAME = 'alarm_spray_water';

查看表属于哪个模式

SELECT OWNER AS SCHEMA_NAME  
FROM ALL_TABLES  
WHERE TABLE_NAME = 'bsc_enterprise_screen';

删除表空间(同时删除数据)

DROP TABLESPACE tablespace_name INCLUDING CONTENTS;

只删除表空间而保留其中的数据:

  1. 首先,确保没有任何活动会话或事务正在使用要删除的表空间。
  2. 在达梦数据库中创建一个新的表空间,用于迁移表和数据。可以使用以下语句创建新表空间:
CREATE TABLESPACE new_tablespace_name DATAFILE 'path_to_datafile' SIZE 100M;

在上述语句中,new_tablespace_name是新表空间的名称,path_to_datafile是数据文件的路径和名称,SIZE 100M是指定表空间的大小。

  1. 将要保留的表和数据迁移到新的表空间中。可以使用以下语句将表移动到新表空间:
ALTER TABLE table_name MOVE TABLESPACE new_tablespace_name;

在上述语句中,table_name是要移动的表的名称,new_tablespace_name是目标表空间的名称。

  1. 确保所有表都已成功迁移到新表空间后,可以将旧表空间删除。使用以下语句删除表空间:
DROP TABLESPACE old_tablespace_name INCLUDING CONTENTS;

在上述语句中,old_tablespace_name是要删除的旧表空间的名称。INCLUDING CONTENTS参数可以选择是否删除表空间中的所有对象和数据。

4、执行SQL脚本

两种操作,当然需要登录到数据库中才能操作(导出dexp、dmp文件不需要登录数据库)

1 # start + 脚本的绝对路径
2 SQL> start /home/dm8/data/usky_fire/alarm_hydrant_water(DM).sql

run /path/to/sql/file.sql;
@/path/to/sql/file.sql;
1 # ` + 脚本的绝对路径
2 SQL> `start /home/dm8/data/usky_fire/alarm_hydrant_water(DM).sql

5、导出dmp文件

使用dexp进行导出,切换到达梦的bin目录下,可以看到有一个dexp文件,使用它进行导出的操作

1 ./dexp 用户id/密码@ip:5236 file=导出的文件 directory=导出文件所在的目录 导出的模式

导出模式:FULL、OWNER、SCHEMAS、TABLES ;全部导出、根据用户导出、根据模式导出和表导出。

1 # 全部导出
2 [root@localhost bin]# ./dexp SYSDBA/SYSDBA@localhost:5236 file=imp_exp.dmp directory=/dm7/data FULL=y
3 # 根据模式导出
4 [root@localhost bin]# ./dexp SYSDBA/SYSDBA@localhost:5236 file=imp_exp.dmp directory=/dm7/data SCHEMAS=NINGDATABASE

6、导入dmp文件

使用dimp进行导入,依旧需要切换到达梦的bin目录下,同样也会有一个dimp文件,使用这个文件进行导入操作

1 ./dimp 用户id/密码@ip:5236 file=导入的文件 directory=导入文件所在的目录 导入的模式

和导出一样,导入也是同样的四个模式

1 #根据模式进行导入
2 [root@localhost bin]# ./dimp SYSDBA/SYSDBA@localhost:5236 file=imp_exp.dmp directory=/dm7/data SCHEMAS=NINGDATABASE

7、执行SQL脚本和dmp文件

  • 修改操作较少或者修改的东西比较集中的情况下可以直接使用导出SQL脚本然后登录数据库执行SQL脚本进行同步操作;SQL脚本的执行默认是直接commit(直接执行SQL需要手动进行commit)
  • 其他比较复杂的操作或者数据量大可以使用导出dmp文件,具体的导出导入模式根据自己的需要进行选择
  • dmp文件或者dexp文件进行操作时,导出和导入模式要一致

SQL命令

查询数据库版本

select * from v$version;

查看授权信息

select * from  v$license;

查看达梦数据库库名

select name,create_time from v$database;

查看大小写配置是否敏感

--大小敏感(1为大小写敏感,0为大小写不敏感)

SELECT SF_GET_CASE_SENSITIVE_FLAG();
或
SELECT CASE_SENSITIVE();
SELECT SF_GET_CASE_SENSITIVE_FLAG();

查询数据库最大连接

select SF_GET_PARA_VALUE(2,'MAX_SESSIONS');

查看达梦数据库当前状态

select status$ from v$instance;

查询授权截止有效期

select EXPIRED_DATE  from v$license;

查询数据文件位置

select GROUP_ID , ID ,path,STATUS$ from v$datafile;

查询表空间大小

select FILE_NAME,FILE_ID,TABLESPACE_NAME,BYTES/1024/1024||'M'  from dba_data_files;

查询表空间使用情况

select t1.NAME tablespace_name,

t2.FREE_SIZE*SF_GET_PAGE_SIZE()/1024/1024 ||'M' free_space,

t2.TOTAL_SIZE*SF_GET_PAGE_SIZE()/1024/1024 ||'M' total_space,

t2.FREE_SIZE*100/t2.total_size "% FREE" 

from V$TABLESPACE t1, V$DATAFILE t2 

where t1.ID=t2.GROUP_ID;

查询所有SCHEMA

 select * from dba_objects where object_type='SCH';

查询所有用户

select username from dba_users;

切换SCHEMA

set schema "testSchema";

创建SCHEMA

CREATE SCHEMA "testSchema";

查询模式下全量表名称

select TABLE_NAME from all_tables WHERE OWNER='testSchema';

删除SCHEMA

drop schema "testSchema";

列注释

COMMENT ON COLUMN testSchema.peoples.role_id is '角色Id';

查询列注释

select * from SYSCOLUMNCOMMENTS 

where SCHNAME='testSchema' and TVNAME='peoples' and COLNAME='role_id';

表注释

comment on table testSchema.peoples is '这是一个表注释';

查询表注释

select * from SYSTABLECOMMENTS where SCHNAME='testSchema' and TVNAME='peoples';
SELECT COMMENTS
FROM USER_TAB_COMMENTS
WHERE TABLE_NAME = 'alarm_electrical_fire';

创建表空间

CREATE TABLESPACE MANAGEMENT DATAFILE 'MANAGEMENT.DBF' SIZE 128;

查看表空间

select * from dba_data_files;

select * from dba_tablespaces;

select * from v$tablespace;

创建用户

CREATE USER usky_cloud IDENTIFIED BY "usky666" DEFAULT TABLESPACE MANAGEMENT;

GRANT DBA TO testSchema;
GRANT DBA TO usky_cloud;

查看当前实例的连接数

select clnt_ip,user_name,state,count(*) from v$sessions group by clnt_ip,user_name,state;

查询 dba_segments 需要Dba权限,用户没有Dba权限时查询 all_tables 或 user_tables

某模式下所有表名 需要DBA权限 AND SEGMENTNAME LIKE 'CD%'

select owner,SEGMENT_NAME as tbName from dba_segments  where segment_type='TABLE' and OWNER ='模式名' 

查看模式下所有表 不需要DBA权限 and TABLENAME LIKE 'CD%'

select TABLE_NAME as tbName from all_tables where OWNER ='模式名' 

用户下所有表 where tablename like 'CD%'

select table_name as tbName from user_tables group by TABLE_NAME

1.1 启动数据库

cd /home/dmdba/dmdbms/bin
./dmserver /home/dmdba/dmdbms/DAMENG/dm.ini

1.2 连接数据库

./disql SYSDBA/SYSDBA@localhost:5236

1.3 使用DISQL直接执行命令

cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA -E "select * from t1"

1.4 数据库版本

select *,id_code from v$version;

1.4 数据库信息

select * from v$database;

2 数据库对象

2.1 表

// 查看表结构
SQL > describe table
// 查看表的模式名
select owner from dba_tables where table_name='T1';
// 查看数据库中的表
select * from dba_tables;
// 查看建表语句
sp_tabledef('SYSDBA','T1');   -- 模式名,表名,注意都要大写。
SELECT DBMS_METADATA.GET_DDL('TABLE',表名,模式名);       // 参考 DBMS_METADATA 系统包
SELECT DBMS_METADATA.GET_DDL('TABLE','T1','SYSDBA');    // 例句

2.2 LICENSE

SQL > SELECT * FROM V$LICENSE;

3 数据库操作

3.1 开启归档日志

//修改数据库为MOUNT状态
ALTER DATABASE MOUNT;

//配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/dameng/arch_dsc0, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048, ARCH_FLUSH_BUF_SIZE=16,HANG_FLAG=1';

//配置远程归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = DSC1, TYPE = REMOTE, FILE_SIZE = 1024, SPACE_LIMIT = 2048, ARCH_FLUSH_BUF_SIZE=16, INCOMING_PATH = /dmdata/dameng/arch_dsc1';

//开启归档模式
ALTER DATABASE ARCHIVELOG;

//修改数据库为OPEN状态
ALTER DATABASE OPEN;

脱机完全备份(RMAN)

// 必须开启归档并已生成归档日志
dmdba@else-virtual-machine:~/dmdbms/bin$ ./dmrman
dmrman V8
RMAN> BACKUP DATABASE '/home/dmdba/dmdbms/DAMENG/dm.ini' FULL BACKUPSET '/else/bakup_dm'; 

3.3 联机完全备份(disql)

SQL> BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/backup/dmdb/online';
SQL> BACKUP  DATABASE  FULL  BACKUPSET '/backup/dmdb/online';

数据库表备份

SQL> BACKUP TABLE t1 BACKUPSET '/backup/dmdb/t1_bak_01';

数据库表恢复

// 前提: 表必须存在
SQL> RESTORE TABLE t1 FROM BACKUPSET '/backup/dmdb/t1_bak_01';

4 主从复制

4.1 查看数据库模式

// 数据库状态查看
SQL> select status$ from v$instance;
// 数据库模式查看
SQL> select MODE$ from v$instance;

4.2 查看主备运行情况

 SQL> select * from V$ARCH_STATUS
 SQL> select * from V$RLOG_RAFT_INFO