IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 达梦数据库使用shell脚本维护数据库方法概览 -> 正文阅读

[大数据]达梦数据库使用shell脚本维护数据库方法概览

????????通常我们要在LINUX系统,进行DM达梦数据库维护的时候,最常用的方法就是使用disql 连接数据库,查询相关的系统系统和表的信息。

比如:

./disql sysdba/SYSDBA12345@localhost:52380

SQL>SELECT * FROM V$DATABASE;? ?--查询信息

NAME?? ?CREATE_TIME?? ?ARCH_MODE?? ?LAST_CKPT_TIME?? ?STATUS$?? ?ROLE$?? ?MAX_SIZE?? ?TOTAL_SIZE?? ?DSC_NODES?? ?OPEN_COUNT?? ?STARTUP_COUNT?? ?LAST_STARTUP_TIME
DAMENG?? ?2022-02-24 23:56:31?? ?N?? ?2022-05-17 17:57:32?? ?4?? ?0?? ?0?? ?21120?? ?1?? ?20?? ?17?? ?2022-05-16 08:30:53

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

????????但是,通常运维管理员在维护系统时最常用的方法,是在操作系统的命令行提示符下,执行命令或者脚本进行操作。

? ? ? ? 比如正在操作系统命令行下修改某些配置文件内容,需要配置数据库的库名,实例名,端口等,需要连接数据库查看,然后还要再回到操作系统命令行。要么进入disql模式查询,要么再开一个窗口连接数据库后,查询后再另一个窗口继续操作,略显麻烦。

? ? ? ? 把数据库操作脚本化,既符合操作使用习惯,又能为了完成特定的工作,把命令保存为常用脚本也能提高效率,比较方便。

????????达梦数据库进行数据库系统维护时,可以采用命令行、和SHELL脚本的方式,通常可以有几种方式:

(1)在操作系统命令行,类似执行一个命令的操作形式;

dmdba> disql? sysdba/SYSDBA12345@localhost:52380<<!
> SELECT * FROM V\$DATABASE;
> !

dmdba> disql? sysdba/SYSDBA12345@localhost:52380? -e "SELECT * FROM V\$DATABASE;"

????????通常这种命令行的方式,用来在查询的信息不多的情况下,比如管理员只想知道数据库的某个状态,配置等,不适合查询很多数据结果要保存的情况。

????????注意:这个执行的SQL语句,其中有$符号的时候,会被shell 直接默认为一个变量,因此要加反斜杠进行转义,达梦数据库的很多系统视图是使用V$开头的,要查询系统视图的信息,执行这种命令行的方式一定要写成 V\$开头的形式,比如:V\$INSTANCE ,V\$DM_INI 等。

(2)在操作系统命令行,,调用SQL文件的形式;

使用这个命令可以执行sql脚本

dmdba> disql sysdba/SYSDBA12345@localhost:52380? \`test.sql?

结果如下:

SQL> SELECT * FROM V$INSTANCE;

行号 ? ? NAME ? ? INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION ? ? ? ? ? ? ? ?DB_VERSION ? ? ? ? ?START_TIME ? ? ? ? ?STATUS$ MODE$ ?OGUID ? ? ? DSC_SEQNO ? DSC_ROLE
---------- -------- ------------- --------------- --------- -------------------------- ------------------- ------------------- ------- ------ ----------- ----------- --------
1 ? ? ? ? ?DMSERVER DMSERVER ? ? ?1 ? ? ? ? ? ? ? kong ? ? ?DM Database Server x64 V8 ?DB Version: 0x7000c 2022-05-16 09:52:38 OPEN ? ?NORMAL 0 ? ? ? ? ? 0 ? ? ? ? ? NULL

已用时间: 0.324(毫秒). 执行号:4000.
SQL> SELECT * FROM V$DATABASE;

行号 ? ? NAME ? CREATE_TIME ? ? ? ? ARCH_MODE LAST_CKPT_TIME ? ? ?STATUS$ ? ? ROLE$ ? ? ? MAX_SIZE ? ? ? ? ? ? TOTAL_SIZE ? ? ? ? ? DSC_NODES ? OPEN_COUNT ?STARTUP_COUNT ? ? ? ?LAST_STARTUP_TIME ?
---------- ------ ------------------- --------- ------------------- ----------- ----------- -------------------- -------------------- ----------- ----------- -------------------- -------------------
1 ? ? ? ? ?DAMENG 2022-01-10 00:39:28 Y ? ? ? ? 2022-05-17 19:37:18 4 ? ? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?28928 ? ? ? ? ? ? ? ?1 ? ? ? ? ? 50 ? ? ? ? ?46 ? ? ? ? ? ? ? ? ? 2022-05-16 09:52:39

已用时间: 4.002(毫秒). 执行号:4001.
SQL> EXIT;
--------------------------------------------------------------------------------------------------------------------------------

SQL文件的内容示例:

vi? test.sql?

SELECT * FROM V$INSTANCE;
SELECT * FROM V$DATABASE;
EXIT;

2、或者觉得disql 在命令行使用密码和端口等,显示输入密码不安全且输入太多,可以:

disql? /NOLOG? \`test.sql?

dmdba@kong:~> disql /NOLOG ?\`test.sql
disql V8
SQL> CONN sysdba/Dameng123@localhost:5238?

服务器[localhost:5238]:处于普通打开状态
登录使用时间 : 2.402(ms)
SQL> SELECT * FROM V$INSTANCE;

行号 ? ? NAME ? ? INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION ? ? ? ? ? ? ? ?DB_VERSION ? ? ? ? ?START_TIME ? ? ? ? ?STATUS$ MODE$ ?OGUID ? ? ? DSC_SEQNO ? DSC_ROLE
---------- -------- ------------- --------------- --------- -------------------------- ------------------- ------------------- ------- ------ ----------- ----------- --------
1 ? ? ? ? ?DMSERVER DMSERVER ? ? ?1 ? ? ? ? ? ? ? kong ? ? ?DM Database Server x64 V8 ?DB Version: 0x7000c 2022-05-16 09:52:38 OPEN ? ?NORMAL 0 ? ? ? ? ? 0 ? ? ? ? ? NULL

已用时间: 0.324(毫秒). 执行号:4000.
SQL> SELECT * FROM V$DATABASE;

行号 ? ? NAME ? CREATE_TIME ? ? ? ? ARCH_MODE LAST_CKPT_TIME ? ? ?STATUS$ ? ? ROLE$ ? ? ? MAX_SIZE ? ? ? ? ? ? TOTAL_SIZE ? ? ? ? ? DSC_NODES ? OPEN_COUNT ?STARTUP_COUNT ? ? ? ?LAST_STARTUP_TIME ?
---------- ------ ------------------- --------- ------------------- ----------- ----------- -------------------- -------------------- ----------- ----------- -------------------- -------------------
1 ? ? ? ? ?DAMENG 2022-01-10 00:39:28 Y ? ? ? ? 2022-05-17 19:37:18 4 ? ? ? ? ? 0 ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ?28928 ? ? ? ? ? ? ? ?1 ? ? ? ? ? 50 ? ? ? ? ?46 ? ? ? ? ? ? ? ? ? 2022-05-16 09:52:39

已用时间: 4.002(毫秒). 执行号:4001.
SQL> EXIT;

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

SQL文件的内容示例:

vi? test.sql?

CONN sysdba/SYSDBA123@localhost:52380

SELECT * FROM V$INSTANCE;
SELECT * FROM V$DATABASE;
EXIT;

sysdba/SYSDBA12345@localhost:52380

但需注意

1、在命令行执行SQL文件,只能使用“`”,并且前面需要添加转义字符“\”。

2、在sql文件内容的结尾处必须添加:exit;

?否则这个脚本执行完sql语句,会停留在sql执行,加上exit 执行完成返回命令行。

3、进入disql交互命令行下,可以使用start调用脚本,但是不是在操作系统命令行下,使用方法较为简单,这里不做介绍;

3、执行SHELL脚本访问数据库;

使用shell脚本查询库信息是比较快捷和效率的方法,编写访问数据库的脚本和普通脚本一样,都是使用#!/bin/sh开头,脚本可以批量执行查询命令和操作系统命令,并保存查询结果和执行日志。

比如脚本的名称是: dm_testshell.sh

使用方法:sh?dm_testshell.sh>dm_testshell.sh.log 2>dm_testshell.err

脚本的内容如下:

cat? ?dm_testshell.sh? 查看:

!/bin/sh

############################################

export V_dmuser="sysdba"

export V_dmpasswd="SYSDBA23"

export V_dmip="127.0.0.1"

export V_dmport="52380"

disql ${V_dmuser}/${V_dmpasswd}@${V_dmip}:${V_dmport} <<InptOver

SET LINESIZE 1000

SET PAGESIZE 1000

SET TIMING OFF

select * from v\$instance;

select * from v\$database;

SELECT * FROM V\$OPTION;

exit;

InptOver

####以下可以使用操作系统命令

date

pwd

whoami

df -h

############################################

总结:

在命令行查询数据库信息的方法:

1、disql命令,直接查询;

2、disql命令,配合SQL文件执行查询;

3、shell脚本,执行查询;

方式:

方法1、适合只进行一次简单查询

disql? sysdba/SYSDBA12345@localhost:52380? -e "SELECT * FROM V\$DATABASE;"

disql? sysdba/SYSDBA12345@localhost:52380<<!
> SELECT * FROM V\$DATABASE;
> !

方法2、利于批量输出DM数据库信息;

disql? /NOLOG? \`test.sql? ??

方法3、脚本利于配合操作系统命令,和DM数据库信息,综合实现复杂维护功能;

sh?dm_testshell.sh >dm_testshell.sh.log

提醒:

如果要想在操作系统命令行下,执行将disql作为一个命令执行,那么就要配置PATH变量,以及LD_LIBRARY_PATH变量; 以下是dm软件安装在/dm 目录下的一个示例。配置完后,就可以像使用其他命令一样使用disql 命令了。

export DM_HOME="/dm8"

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"

export PATH=$PATH:$DM_HOME/bin

以上变量通常保存在?.bash_profile? 文件中。

参考 : disql 命令语法说明:


显示disql版本信息和帮助信息的命令:?disql -h? , 或者? disql help ?

DISQL 用法:??

disql? ? ?[? ? [<option>]? ? ? [{<logon> | /NOLOG}]? ? ? ?[<start>]? ? ? ? ? ?]

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

?<option> 为: [-L]? [-S]?

? -L 只尝试登录一次
? -S 隐藏模式,隐藏<SQL>标识符

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

?/NOLOG , 选项能在未登录DM服务器的情况下,启动disql

?<logon> 为:

{<username> [/<password>]? [*<MPP_TYPE>]? [@<connect_identifier>]} |?

?{/[:<port>] AS <SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO>}


?--<connect_identifier>为

{[<server>][:<port>][?{UDP|TCP|IPC|RDMA|UNIXSOCKET}][#<sslpath>@<sslpwd>]}

-----------?<server>如果是IPv6的地址,需要用[]指明是IPv6地址,例如[fe80::1e6f:65ff:fed1:3724%6]
?-<server>如果是UNIXSOCKET类型,需要指明是unixsocket地址,例:/data/sdb/DAMENG/foo.sock

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

?<start> : `<filename>[<parameter> ...]? ?<direct cmd>? ?<direct sql>? ?,运行disql脚本

?<direct sql>:-e "<SQL语句>[;<SQL语句>]"

?<direct cmd>:-c "<set 命令>"

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:02:54  更:2022-05-21 19:03:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:12:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码