如何在db2命令行运行sql必知必会例子

如何在db2命令行运行sql必知必会例子,第1张

db2 => connect to dbName user xxx using password

db2 => sql语句

如果要执行一个sql脚本文件:

db2 => quit

c:\> db2 -tvf sql文件名

db2 -td@ -f filename

@是语句结束符。

E:\>db2 options

db2 [option ] [db2-command | sql-statement |

[ [phrase | message | sqlstate | class-code]]]

option:-a、-c、-e{c|s}、-finfile、-lhistfile、-n、-o、-p、-rreport、-s、-t、

-td;、-v、-w、-x 和 -zoutputfile。

选项 描述 缺省设置

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

-a 显示 SQLCA OFF

-c 自动落实 ON

-e 显示 SQLCODE/SQLSTATE OFF

-f 读取输入文件 OFF

-l 将命令记录到历史文件中 OFF

-n 除去换行字符 OFF

-o 显示输出 ON

-p 显示 db2 交互式提示符 ON

-r 将输出报告保存到文件 OFF

-s 在命令出错时停止执行 OFF

-t 设置语句终止字符 OFF

-v 回送当前命令 OFF

-w 显示 FETCH/SELECT 警告消息 ON

-x 不打印列标题 OFF

-z 将所有输出保存到输出文件 OFF

注意:

使用 DB2OPTIONS 环境变量定制选项缺省值。

紧跟选项字母后的减号(-)使该选项关闭。

使用 UPDATE COMMAND OPTIONS 更改选项设置(以交互式或

文件输入方式)。

只能提供nt环境下编写脚本的例子给你以供参考:

脚本样例:

db2 connect to yourdb user yourname using yourpassword

db2 insert into newuser(username,password,email) values('Amy','1234','Amy@sscom')

db2 insert into newuser(username,password,email) values('Judy','1234','Judy@sscom')

db2 commit

db2 disconnect yourdb

运行脚本: 运行db2cmd X:\XXXbat

以下摘自本论坛的FAQ可参考:

"

在命令窗口中运行DB2脚本,可用 db2 -svtf 脚本文件名 来实现。

例如,脚本文件名为samplesql,运行:db2 -svtf samplesql

参数中:

s 代表遇到错误时中止运行脚本

v 代表输出结果到屏幕

t 指以;号作为每行的分隔符

f 指后面需跟脚本文件名 "---此摘录版权归斑竹非本人所有

具体在AS400如何编写脚本非常遗憾

db2 -x select SERIALNO from tabname where clause

C:>db2 attach to db2164 user ccp

输入 ccp 的当前密码:

实例连接信息

实例服务器 = DB2/NT 820

授权标识 = CCP

本地实例别名 = DB2164

C:>db2 connect to dw164 user ccp

输入 ccp 的当前密码:

数据库连接信息

数据库服务器 = DB2/NT 820

SQL 授权标识 = CCP

本地数据库别名 = DW164

C:>db2 select from CCP_STS1 fetch first 2 rows only with ur

CUST_ID NOW_PRED_S LOAD_TIME

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

3094736 ZFS 2008-05-07-100200453000

3145886 ZFS 2008-05-07-100200453000

2 条记录已选择。

C:>db2 list command options

命令行处理器选项设置

后端进程等待时间(秒) (DB2BQTIME) = 1

连接至后端的重试次数 (DB2BQTRY) = 60

请求队列等待时间(秒) (DB2RQTIME) = 5

输入队列等待时间(秒) (DB2IQTIME) = 5

命令选项 (DB2OPTIONS) = +m

选项 描述 当前设置

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

-a 显示 SQLCA OFF

-c 自动落实 ON

-d 检索并显示 XML 声明 OFF

-e 显示 SQLCODE/SQLSTATE OFF

-f 读取输入文件 OFF

-i 显示 XML 数据并带有缩进 OFF

-l 将命令记录到历史记录文件中 OFF

-m 显示受影响的行数 OFF

-n 除去换行字符 OFF

-o 显示输出 ON

-p 显示交互式输入提示符 ON

-q 保留空格和换行符 OFF

-r 将输出保存到报告文件 OFF

-s 在命令出错时停止执行 OFF

-t 设置语句终止字符 OFF

-v 回传当前命令 OFF

-w 显示 FETCH/SELECT 警告消息 ON

-x 不打印列标题 OFF

-z 将所有输出保存到输出文件 OFF

C:>db2set DB2OPTIONS=-x

C:>db2 select from CCP_STS1 fetch first 2 rows only with ur

4654908 ZFS 2008-05-07-100200453000

3716687 ZFS 2008-05-07-100200453000

一、备份(backup)数据库

1、离线全备份

1)、首先确保没有用户使用DB2:

db2 list applications for db sample

2)、停掉数据库并重新启动,以便断掉所有连接:

db2stop force

db2start

若是不喜欢重启的朋友可以使用[db2 force applications all]命令以结束正在利用的连接,该句执行完以后,继续执行[db2 list applications for db sample],若还有连接残留,则再运行[db2 force applications all]命令,直到没有连接残留

3)、执行备份命令:(使用TSM作为备份的介质)

db2 backup db sample use tsm

备份成功,将会返回一个时间戳。

4)、检查备份成功:

db2 list history backup all for sample 可以看到多了这个备份的纪录。

db2adutl query 命令也可以看到返回值。

5)、备注:

首先对主节点(catalog表空间在的节点)执行备份命令,再对另外的节点也做这个 *** 作。

2、 在线备份:

1)、首先打开一下支持在线备份的数据库配置参数:

db2 update db cfg for sample using userexit on 启用用户出口

db2 update db cfg for sample using logretain on 启用归档日志

db2 update db cfg for sample using trackmod on 启用增量备份功能

(需要各个Node都分别做设置)

开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份。 做一下离线全备份,参考上面的命令。

2)、在线备份命令如下:

db2 backup db sample online use tsm

备份成功,返回一个时间戳。

3)、同样可以用db2adutl 和db2 list history察看备份纪录。

4)、备注:

同样,对每个节点都做这个 *** 作。

3、 在线增量备份

1)、在开启了必须的三个参数的情况下,做增量备份:

db2 backup db sample online incremental use tsm

备份成功,返回一个时间戳。

2)、同样可以用db2adutl 和db2 list history察看备份纪录。

3)、还有一种delta的备份:

db2 backup db sample online incremental delta use tsm

这两种备份的区别,类似Oracle Exports的Incremental和Cumulative方式,db2的incremental对应oracle的cumulative方式,而 db2的delta方式则对应oracle的incremental方式。

4)、备注:

同样,对每个节点都做这个 *** 作。

二、恢复(RESTORE)数据库

1、新建数据库

在一般管理工具, 创建数据库(别名要和原来的数据库别名一致)。

2、恢复数据库

1):断开连接:将网络断开,切断所有的客户连接,如果不行,先重启。(如果有 客户端连接到DB2服务器,恢复不行的,包括控制中心)

2):恢复离线备份:

设:

你的备份那个DB2文件在:C:\Temp

你的数据库名称:DBName

那么对应DB2的备份/恢复文件的格式是这样的:

C:\Temp\DBName0\DB2CTLSV\NODE0000\CATN0000\20090706\HHMMSS001

备 份时你只是指定了一个C:\Temp目录,后面那么目录为DB2备份时生成。

然后是它的文件名,一般格式是:HHMMSS001,即:小时分钟秒数001,也就是说后面那个20020828是 备份日期,文件名是备份时间。

好,清楚后,你就可以写SQL命令进行恢复了

运行: Start->Program->IBM DB2->Command Center

然后:不要登陆,直接输入下列命令:

以下为引用的内容:

RESTORE DATABASE OldDBName FROM C:\\Temp\\ TAKEN AT

20020919094932 TO D: INTO NewDBName WITH 2 BUFFERS BUFFER 1024

WITHOUT PROMPTING

你要改

NewDBName ==》你的新建数据库名称

C:\\TEMP\\ ==> 你备份DB2的目录,像上面所说

20020919094932 ==> 一看你DB2的目录和文件组合成这东东

D: ==> 新建的数据库放在哪个盘上

OldDBName ==> 备份前那个数据库叫什么

好了,CTRL+ENTER, 如果不行请检查,如果再不行,请重启,如果再不行,。。。阿门,上帝保佑你

3): 实例

备份文件路径:C:\Temp\ipmdemo0\DB2CTLSV\NODE0000\CATN0000\20090622\164642001

其中,备份日期:20090622 备份文件:164642001

新建数据库名:ipmdemo

数据库文件时间戳:20090622164642

恢复命令为:db2 restore database ipmdemo from C:\Temp taken at20090622164642

3、恢复在线备份

1)、恢复。恢复命令为:db2restoredatabase DBName from C:\Temp taken at20090622164642

2)、前滚。前滚命令为:db2 rollforward db DBName to end of logs(或 者:控制中心->所有数据库->dbname ->右键->前滚)

3)、停止前滚。停止前滚命令为:db2 rollforward db DBName stop(或者:控制中心 ->所有数据库->dbname ->右键->停止前滚)

三、有关说明

1、恢复 *** 作也有online和offline的,区别如同backup的 *** 作。

2、按照表空间的备份和恢复类似,加子句TABLESPACE ( tablespace-name )即可。表空间级别的备份/恢复 *** 作要求数据库处于归档日志和启用增量备份模式下。

3、恢复的例子中只做了版本恢复。若还有更新的全备份和增量备份的image,可以依次做恢复(注意使用db2ckrst的建议恢复次序和次数)后,再做 roll forward。

主要是区分一下数据库database和实例instance

数据库database是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)

实例Instance其实就是指的 *** 作系统中一系列的进程以及为这些进程所分配的内存块。

如果只有数据库,没有instance只能代表数据存储在文件中,无法直接进行 *** 作,如果没有数据库,只有instance虽然可以急性 *** 作,但是也不知道 *** 作那些数据, *** 作后的数据也无法保存。

通过配置本地数据库的tns配置文件实现:

去oracle安装目录下oracle\product\1020\db_2\NETWORK\ADMIN\ 找到tnsnamesora,用记事本打开,里边有远程数据库的tns连接配置串如下

ORCL23 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192168323)(PORT = 1521))

)

(CONNECT_DATA =

(SID = ORCL)

)

)

添加好ip、端口和目标数据库的实例名(SID),然后确保tns名称(ORCL23)在整个文档中唯一,保存后打开数据库连接工具,输入远程数据库上的用户名密码,选择数据库对象为你配置的连接名就可以了

这个只能在命令行上搜索,很难一条命令做到。下面是在一台aix上执行,linux是一样的,希望帮到你。

先su到数据库实例用户

#su - <instName>

设定一个环境变量,这个变量很重要,不设置的话,后面的命令没法做

$export DB2DBDFT=<dbname>

好了,我们连接数据库

$db2 connect to <dbname>

我们用一条循环语句达到你要的效果

$db2 -x list tables for all|egrep -v "SYSCAT|SYSIBM|SYSIBMADM|SYSSTAT"|awk '{print "db2 describe table "$2""$1}'|while read cm

>do<回车>

>echo "start command: "$cm<回车>

>$cm|grep -w test<回车>

>done<回车>

思路就是用describe table循环列出表格的字段结构,然后用grep过滤而已。

以上就是关于如何在db2命令行运行sql必知必会例子全部的内容,包括:如何在db2命令行运行sql必知必会例子、如何查看在磁带中db2备份文件、DB2 instance 概念怎么理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10073894.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存