linux达梦数据库操作
一,可以通过这种方式进行启动,和停止
步骤1:停止数据库服务
bash
停止数据库
cd /home/dmdba/dm/bin
./DmServiceDMSERVER stop
确认已停止
./DmServiceDMSERVER status
步骤2:以维护模式启动数据库
bash
以维护模式启动(允许修改系统数据)
./dmserver /dm8/data/DAMENG/dm.ini mount
二,登录数据库,进行创建用户账号和密码,达梦一般有默认的密码Dameng@123(命令行安装时,没让输入密码)
1,使用 DISQL 命令行工具创建用户
连接数据库
# 切换到 dmdba 用户
su - dmdba# 使用 DISQL 连接
cd /home/dmdba/dm/bin
./disql SYSDBA/你的密码@localhost:5236 ##如果是本地,也可以改为./disql SYSDBA/你的密码
创建用户并设置密码
-- 创建用户的基本语法
CREATE USER 用户名 IDENTIFIED BY 密码;-- 示例:创建用户 test_user,密码为 Test123456
CREATE USER test_user IDENTIFIED BY "Test123456";-- 创建用户并指定默认表空间
CREATE USER sales_user IDENTIFIED BY "Sales123456"
DEFAULT TABLESPACE MAIN;-- 创建带密码复杂度要求的用户
CREATE USER secure_user IDENTIFIED BY "Secure@123456"
DEFAULT TABLESPACE MAIN
PASSWORD POLICY 1;
完整的用户创建和权限配置,
创建用户并赋予权限
-- 1. 创建用户
CREATE USER knowledge_user IDENTIFIED BY "Knowledge@123456";-- 2. 授予基本权限
GRANT CREATE SESSION TO knowledge_user; -- 连接权限
GRANT CREATE TABLE TO knowledge_user; -- 创建表权限
GRANT CREATE VIEW TO knowledge_user; -- 创建视图权限
GRANT CREATE PROCEDURE TO knowledge_user; -- 创建存储过程权限-- 3. 授予资源权限(允许使用表空间)
GRANT RESOURCE TO myuser;-- 4. 授予特定表空间的配额
ALTER USER myuser QUOTA UNLIMITED ON MAIN; -- 在MAIN表空间无限制
ALTER USER myuser QUOTA 100M ON "TEMP"; -- 在TEMP表空间100M限额-- 5. 授予对象权限(如果需要访问其他用户的表)
GRANT SELECT ON SYSDBA.其他表名 TO myuser;
GRANT INSERT, UPDATE, DELETE ON SYSDBA.其他表名 TO myuser;
修改用户密码
-- 修改用户密码
ALTER USER test_user IDENTIFIED BY "NewPassword123";
删除用户
-- 删除用户(如果用户没有对象)
DROP USER test_user;-- 删除用户及其所有对象
DROP USER test_user CASCADE;
验证用户是否创建成功
# 使用新创建的用户连接测试
./disql test_user/Test123456@localhost:5236
三、导入数据
1,创建数据文件目录
# 创建数据导入目录
sudo mkdir -p /home/dmdba/dm/data/
sudo chown dmdba:dinstall /home/dmdba/dm/data/
sudo chmod 755 /home/dmdba/dm/data/# 将你的数据文件(SQL, DMP等)放到这个目录
2,导入数据库数据
方法1:使用disql导入SQL文件
sql文件例子:
-- 设置当前用户
ALTER SESSION SET CURRENT_USER = KNOWLEDGE_USER;-- 创建表
CREATE TABLE users (id NUMBER PRIMARY KEY,username VARCHAR2(50),email VARCHAR2(100),created_date DATE DEFAULT SYSDATE
);CREATE TABLE documents (doc_id NUMBER PRIMARY KEY,title VARCHAR2(200),content CLOB,user_id NUMBER,created_time TIMESTAMP DEFAULT SYSTIMESTAMP
);-- 插入数据
INSERT INTO users VALUES (1, 'admin', 'admin@example.com', SYSDATE);
INSERT INTO users VALUES (2, 'user1', 'user1@example.com', SYSDATE);INSERT INTO documents VALUES (1, '文档标题1', '文档内容1', 1, SYSTIMESTAMP);
INSERT INTO documents VALUES (2, '文档标题2', '文档内容2', 2, SYSTIMESTAMP);-- 提交事务
COMMIT;
# 使用disql执行SQL文件
./disql KNOWLEDGE_USER/Knowledge@123456@localhost:5236 \`/home/dmdba/dm/data/import.sql
方法2:使用dexp和dimp工具(达梦专用)(推荐)
导入数据(在目标数据库执行):
# 切换到dmdba用户
su - dmdba
cd /home/dmdba/dm/bin# 导入整个数据库
./dimp KNOWLEDGE_USER/Knowledge@123456@localhost:5236 FILE=/home/dmdba/import_data/knowledge_export.dmp LOG=import.log FROMUSER=KNOWLEDGE_USER TOUSER=KNOWLEDGE_USER# 或者导入特定表
./dimp KNOWLEDGE_USER/Knowledge@123456@localhost:5236 FILE=/home/dmdba/import_data/knowledge_export.dmp LOG=import.log TABLES=users,documents
方法3:使用达梦图型化管理工具(如果服务器允许)
# 启动管理工具(如果有图形界面)
cd /home/dmdba/dm/tool
./manager
3,验证导入的数据
-- 连接验证
./disql KNOWLEDGE_USER/Knowledge@123456@localhost:5236-- 查看导入的表
SELECT table_name FROM user_tables;-- 查看数据
SELECT * FROM users;
SELECT * FROM documents;-- 查看表空间使用情况
SELECT tablespace_name, bytes/1024/1024 AS size_mb
FROM user_segments
GROUP BY tablespace_name;-- 退出
exit;
下面是一个项目的流程,创建新的数据库,并导入数据(此项目使用)
1、使用dminit创建数据库
# 切换到dmdba用户
su - dmdba# 创建新的数据库实例
cd /dm8/bin
./dminit path=/home/dmdba/dm/data/knowledge_data db_name=KNOWLEDGE instance_name=KNOWLEDGE_SERVER port_num=5237 page_size=16 case_sensitive=n charset=1
参数说明:
path:数据文件存放路径
db_name:数据库名
instance_name:实例名
port_num:端口号(不能与现有实例冲突)
page_size:页大小(16K)
case_sensitive:大小写敏感(n-不敏感)
charset:字符集(1-UTF-8)
2、配置新数据库服务
创建新的服务脚本
# 复制服务模板
sudo cp /home/dmdba/dm/bin/DmServiceTemplate home/dmdba/dm/bin/DmServiceKNOWLEDGE# 编辑服务脚本
sudo vi /home/dmdba/dm/bin/DmServiceKNOWLEDGE
修改关键参数:
# 修改数据库实例路径
DISTRIBUTED_PATH=/home/dmdba/dm/data/knowledge_data/dm.ini
注册系统服务
# 给服务脚本执行权限
sudo chmod +x /home/dmdba/dm/bin/DmServiceKNOWLEDGE# 创建systemd服务文件
sudo vi /etc/systemd/system/DmServiceKNOWLEDGE.service
添加如下内容
[Unit]
Description=DM Knowledge Database Service
After=network.target[Service]
Type=forking
User=dmdba
Group=dinstall
Environment=LD_LIBRARY_PATH=/home/dmdba/dm/bin:/home/dmdba/dm/lib
ExecStart=/home/dmdba/dm/bin/DmServiceKNOWLEDGE start
ExecStop=/home/dmdba/dm/bin/DmServiceKNOWLEDGE stop
ExecReload=/home/dmdba/dm/bin/DmServiceKNOWLEDGE restart[Install]
WantedBy=multi-user.target
启动数据库
# 重新加载systemd
sudo systemctl daemon-reload# 启动新数据库服务
sudo systemctl start DmServiceKNOWLEDGE# 设置开机自启
sudo systemctl enable DmServiceKNOWLEDGE# 检查状态
sudo systemctl status DmServiceKNOWLEDGE
3,准备DMP数据文件
# 创建数据导入目录
sudo mkdir -p /home/dmdba/dm/import_dmp
sudo chown dmdba:dinstall /home/dmdba/dm/import_dmp
sudo chmod 755 /home/dmdba/dm/import_dmp# 将DMP文件上传到该目录
# 假设你的DMP文件名为: knowledge_data.dmp
检查DMP文件信息
# 查看DMP文件信息(在源数据库执行)
./dimp SYSDBA/密码@源数据库 PARAMETER_ONLY=Y FILE=/path/to/knowledge_data.dmp
导入数据到新数据库
使用dimp工具全量导入
#切换到dmdba用户
su - dmdba进入bin目录
cd /dm8/bin#全库导入(如果DMP是全库导出)
./dimp KNOWLEDGE/Know123456@localhost:5237 FILE=/home/dmdba/dm/import_dmp/knowledge_data.dmp LOG=/home/dmdba/dm/import.log FULL=Y#按用户导入(如果DMP是按用户导出)
./dimp KNOWLEDGE/Know123456@localhost:5237 FILE=/home/dmdba/dm/import_dmp/knowledge_data.dmp LOG=/home/dmdba/dm/import_dmp/import.log FROMUSER=原用户 TOUSER=新用户#按表导入
./dimp KNOWLEDGE/Know123456@localhost:5237 FILE=/home/dmdba/dm/import_dmp/knowledge_data.dmp LOG=/home/dmdba/dm/import_dmp/import.log TABLES=表1,表2,表3```
参数:
FULL=Y:导入整个数据库
FROMUSER:源数据库用户
TOUSER:目标数据库用户
TABLES:指定要导入的表
ROWS=Y:导入数据行(默认Y)
CONSTRAINTS=Y:导入约束(默认Y)
INDEXES=Y:导入索引(默认Y)
TRIGGERS=Y:导入触发器(默认Y)
GRANTS=Y:导入权限(默认Y)
COMMIT=Y:每次提交的行数
FEEDBACK=1000:每1000行显示进度
BUFFER=10240000:缓冲区大小
4,验证导入结果
# 连接新创建的数据库
cd /home/dmdba/dm/bin
./disql KNOWLEDGE/Know123456@localhost:5237
在DISQL中执行验证命令:
-- 查看数据库信息
SELECT name, status$ FROM v$database;-- 查看所有表
SELECT table_name FROM dba_tables;-- 查看表数据量
SELECT table_name, num_rows FROM dba_tables WHERE owner = 'SYSDBA';-- 查看表空间使用情况
SELECT tablespace_name, sum(bytes)/1024/1024 as size_mb
FROM dba_segments
GROUP BY tablespace_name;-- 查看导入日志表中的数据(如果有)
SELECT COUNT(*) FROM 你的主要表名;-- 退出
exit;
修改表
SELECT TABLE_NAME FROM USER_TABLES;UPDATE T_SOFTWARE SET LINK = REPLACE(LINK, '/media/jing/HDD/dd/', '/date/zsk/');UPDATE T_SOFTWARE SET ICON = REPLACE(ICON, '192.168.1.111', '10.10.0.16');