DB2数据库的学习及总结

                                                                                                                                                   db2命令
给db2用赋权的命令
db2 grant dbadm on database to user dsp
#导出数据库结构会生成一个faldb20160224.sql文件
 db2look -d udep -e -a -x -i dsp -w dsp -o dsp20160504.sql

导出所属scheme:dsp的所有表结构的命令如下
db2look -d tyfx -e -z dsp -o udep.ddl
语法: db2look -d DBname [-u Creator] [-s] [-g] [-a] [-t Tname1 Tname2...TnameN]

                          [-p] [-o Fname] [-i userID] [-w password]
        db2look -d DBname [-u Creator] [-a] [-e] [-t Tname1 Tname2...TnameN]
                          [-m] [-c] [-r] [-x] [-l] [-f] [-o Fname] [-i userID] [
-w password]
        db2look [-h]

        -d: 数据库名:这必须指定

        -a: 为所有创建者生成统计信息
        -c: 不要生成模拟的 COMMIT 语句
        -e: 抽取复制数据库所需要的 DDL 文件
        -g: 使用图形来显示索引的页取装对
        -h: 更详细的帮助信息
        -m: 在模拟方式下运行 db2look 实用程序
        -o: 将输出重定向到给定的文件名
        -p: 使用简单文本格式
        -r: 不要生成模拟的 RUNSTATS 语句
        -s: 生成 postscript 文件
        -t: 生成指定表的统计信息
        -x: 生成“权限”语句 DDL
        -l: 生成数据库布局:节点组、缓冲池和表空间
        -f: 抽取配置参数和环境变量
        -u: 创建者 ID:若 -u 和 -a 都未指定,则将使用 $USER
        -i: 注册到数据库驻留的服务器时所使用的用户 ID
        -w: 注册到数据库驻留的服务器时所使用的口令
#生成faldb20160224.sql文件之后要执行这个文件
db2 -tvf faldb20160224.sql  

db2 [option ...] [db2-command | sql-statement |
    [? [phrase | message | sqlstate | class-code]]]
选项:-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
更改选项设置。

 

select 'db2 "export to '||table_name||'.ixf of ixf select * from CUSTRISK.'||table_name||'"' from sysibm.TABLES where TABLE_SCHEMA='CUSTRISK'


select 'db2 "import from  '||table_name||'.ixf  of ixf commitcount 500 messages msg.out insert into CUSTRISK.'||table_name||'"' from sysibm.TABLES where TABLE_SCHEMA='CUSTRISK'


从数据库里在一张表中随机的抽取10条记录的db2SQL 语句是:
select * from moiamds.p_mon_dsm_cdt order by rand() FETCH FIRST 10 ROWS ONLY
启动db2数据库的命令是: db2start
关闭db2数据库的命令是: db2stop

命令提示符里连接db2数据库的命令是: db2 connect to moia user moiamds using moiamds

导出一张表里的数据的命令是:db2 "export to F:\IMP\p_mon_dsm_cdt.txt of del select * from MOIAMDS.P_MON_DSM_CDT"
IMPORT FROM employee.ixf OF IXF REPLACE_CREATE INTO employee_copy;
(REPLACE_CREATE 这个参数表示如果employee_copy数据表已经存在,则先清空数据表中的数据然后将ixf 中的数据导入,如果employee_copy 数据表不存在,则会先建立该表,然后将数据导入。)
导入数据到一张表中的命令式:db2 "import from tg.txt of del insert into MOIAMDS.P_MON_TAB_ONE"


如果对一张表进行操作的时候报因为表不活动,所以不能对表操作,解决方法:reorg table ---表名;


如果报事务日志已满的解决办法
DB2COPY2->命令行处理工具->命令行处理器—> db2 get db cfg for mds
                                         db2 update db cfg for mds using logfilsiz 6000
                                        
db2显示表空间的语句:db2 list tablespaces  show detail  


去基线导出数据的方法:197.3.6.1上去导出数据的方法:
moiase@/home/mds/file/tmp> db2 connect to moia user moiamds using moiamds
moiase@/home/mds/file/tmp> db2 "export to P_DQM_SERVICE_CASE_TAB.ixf of ixf select * from moiamds.P_DQM_SERVICE_CASE_TAB"
导出成功! 把它用在本地用E:JDK API ftp 197.3.6.1
             输入user:moiase pwd:moiase 
连接成功 ; ftp>get P_DQM_SERVICE_CASE_TAB.ixf 回车 现在自己的计算机e:盘JDK API 下就存在了P_DQM_SERVICE_CASE_TAB.ixf文件

查看db2的所有的连接:db2 list applications   断开所有的连接:db2 force applications all


db2 去执行配置文件的方法:
如:在D:盘建一个myscript.txt文件输入:
!db2start;
connect to moia user moiamds using moiamds;
select * from emp;
terminate;
就可以在命令提示符里输入db2cmd 然后输入:db2 -tf D:\myscript.txt

查看db2的数据库分区方法:
db2 list node directory                            //查询编目录(节点)
db2 list db directory                              //查询编目录下边具体有哪些库
db2 connnect to mds user mdsuser using mdsuser     //连接数据库

 

 

创建备份表的sql语句:
create table new_table as (select * from old_table) definition only;

备份数据:insert into new_table select * from old_table;

excel 数据导入到DB2数据库的方法1(先把excel文件另存为.csv文件,放到d盘,然后执行下面的sql)
import from  "d:/test.csv" of del messages "d:/msg.out" insert into  M_CM_PROD_PRODUCT_ATTRIBUTE;
---------------------------------------------------------------------------------------------------------------------------------------------------------
查看db2数据库最大连接数的命令:
查看当前活动的实例的命令:          db2ilist
查看当前活动的实例下的数据库的命令:db2 list db directory
创建一个新的实例下创建数据库的命令:db2icrt newinstance(实例);
删除实例的命令:                    db2idrop instancename;
                                    set db2instance = 实例;
                                    db2start;
                                    db2 create database 数据库名
连接到数据库后,用db2 get db cfg for database查看一下maxappls和avg_appls的数值。
用db2 update db cfg for database using maxappls number试试把maxappls设置得更大些。
-----------------------------------------------------------------
db2给数据库更改表名的命令:rename table rep_data_04 to rep_data_04_20130528
------------------------------------------------------------------------------
linux系统下重启db2数据库的命令
db2 force applications all
db2stop
db2start
db2 backup db sample on all dbpartitionnums
重启成功---------------------------------------
---------db2只能增加字段的长度(varchar和另外两个)不能dorp掉字段,只能drop掉表,新建表导入数据
修改字段的命令:alter table log_data_11 ALTER nm_rep SET DATA TYPE varchar(200);
-----------------统计字段的出现相同值的行数的sql---------------
select  count(formula) as sum, formula  from code_formula group by formula


1. 从命令窗口创建一个名为newinst 新实例
     db2icrt newinst
2. 在这个新实例newinst 中,使用默认值创建一个名为newdb 的数据库
     set db2instance=newinst
     db2start
     db2 create database newdb
3. 列出服务器上所有的实例
     db2ilist
4. 转换到DB2 实例,并确认转换成功
     set db2instance=db2
     db2 get instance
5. 把dbm cfg 的FEDERATED 参数值由NO 改为YES 并验证修改的结果。
     db2 update dbm cfg using FEDERATED YES
     db2 force applications all
     db2 terminate
     db2stop
     db2start
     db2 get dbm cfg
6. 使用登录操作系统的用户名和密码连接SAMPLE 数据库
     db2 connect to sample user <userID> using <psw>
7. 查看当前实例上有多少应用程序在运行
     db2 list applications show detail
8. 打开另一个DB2 命令窗口,不指明用户名和密码连接到SAMPLE 数据库。然后查看当前有
多少应用连接到该实例上。
     db2 connect to sample
     db2 list applications
9. 强制关闭一个DB2 命令窗口
     db2 force <application> (<application> 填入程序“b2bp.exe”的句柄,该值由db2 list     applications命令获得)
10. 删除实例newins
     db2idrop newinst
11. 删除并重新创建DAS,然后启动DAS。
     db2admin stop
     db2admin drop
     db2admin create
     db2admin start
12. 在您的实例中设置DB2 注册变量DB2COMM,使其值为tcpip,npipe。
     db2set db2comm=tcpip,npipe
     db2stop
     db2start
13. 置空DB2COMM 注册变量
     db2set db2comm=
     db2stop
     db2start
14. 检查当前db cfg 的LOGSECOND 参数,然后将其值设置成5 并验证新值
     db2 connect to sample
     db2 get db cfg
     db2 update db cfg using LOGSECOND 5
     db2 get db cf
------------------db2(标识列)中创建一张表,这张表的一个字段从100开始并且以100增加----------
CREATE TABLE subscriber(subscriberID INTEGER GENERATED ALWAYS AS
IDENTITY (START WITH 100
INCREMENT BY 100),
firstname VARCHAR(50),
lastname VARCHAR(50) )
在这个例子中,列subscriberID 是INTEGER 类型,被定义为标识列并且是常规定义。其值将
从100 开始,按增量100 增加
-------序列对象产生整个数据库的一个唯一值。跟标识列不一样的是,序列独立于数据表。下面提供一个例子:
CREATE TABLE t1 (salary int)
CREATE SEQUENCE myseq
START WITH 10
INCREMENT BY 1
NO CYCLE
INSERT INTO t1 VALUES (nextval for myseq)
INSERT INTO t1 VALUES (nextval for myseq)
INSERT INTO t1 VALUES (nextval for myseq)
SELECT * FROM t1
SALARY
------------------------------------------------------
10
11
12
3 record(s) selected.
SELECT prevval for myseq FROM sysibm.sysdummy1
1
----------------------------------------------------------------------------------------------------------------------------------
db2move 工具
Export,Import 和Load 每次都只对一个表进行操作。但是您若使用它们来写一段脚本,就可对
一个数据库中的所有的表进行操作。另一个工具db2move 可以更方便地完成同样的工作。db2move
工具只兼容IXF 格式的文件,而且IXF 文件的名字由db2move 自动生成。下面的例子展示怎么样使
用db2move 并结合export 和import 选项来对SAMPLE 数据库进行整体操作。
导出
   db2move faldb export -u slsadmin -p slsadmin
导入
   db2move faldb import -u slsadmin -p slsadmin
导出固定schema的语句如下
db2move tyfx(db) export -sn dsp(schema) -u dsp -p dsp
----------------------------------------------------db2load----------------------------------------------------------------
下面的例子将IXF 格式的employee.ixf 文件里面的所有数据导入到表employee_copy。
      REPLACE 是LOAD 工具所提供的众多选项之一。它表示将替换employee_copy 表中的所有数据。
      LOAD FROM employee.ixf OF IXF REPLACE INTO employee_copy
   执行完上面的命令后,该表进入检查暂挂状态。这时您必须运行SET INTEGRITY 命令来检查数据的一致性,下面是执行SET INTEGRITY 的例子:
      SET INTEGRITY FOR employee_copy ALL IMMEDIATE UNCHECKE
----------------------------------------------------给用户赋权的命令--------------------------------------------------------
DBADM(DataBase ADMinistrator)是数据库的超级用户。它不是实例层次的权限,所以它没有在前一节中列出,要想授予DBADM 权限,使用GRANT 语句,如下面的例子所示:
      connect to sample
      grant DBADM on database to user <userid>
--------------如果您想要备份udep 数据库到路径/home/db2inst1/backup,您可以在DB2 Window/Linux 命令行解释器中执行这条命令------
      db2 BACKUP DB sample TO C:\BACKUPS;
      例如: db2 backup db udep to /home/db2inst1/backup/ compress
      备份的文件结构如下
     
备份完成之后,如果要发生重大灾难,如:DB2 DROP DATABASE UDEP
然后数据库就不存在了,进行数据恢复如下:


命令如下:db2 restore db udep incremental from /home/db2inst1/backup taken at 20160525204710
----------查询的db2的版本的命令------------------------------------------------------------
    SELECT service_level, fixpack_num FROM TABLE(sysproc.env_get_inst_info())as INSTANCEINFO
-------------------------------linux上新安装的DB2---------------------------------------------------
db2查看修改端口号
 
db2安装完成后,tcp/ip连接端口默认为50000,可通过下面的方法确认:
 
1、使用命令 db2 get dbm cfg
找到"SVCENAME" 查找到TCP/IP 服务名
   www.2cto.com 
2、到系统配置文件里找到service name 对应的 port number
windows:查看 c:\windows\system32\drivers\etc\services                                               
aix:         查看 /etc/services
如下:
DB2_DB2              60000/tcp
DB2_DB2_1          60001/tcp
DB2_DB2_2          60002/tcp
DB2_DB2_END      60003/tcp
db2c_DB2             50000/tcp
-----------------------------------------------------------
1,先切换到db2inst1用户下,
   su - db2inst1
2,查看当前活动的实例
   db2ilist
3,切换到当前实例下,
   set db2instance = 实例
4,在该实例下创建数据库
      ----DB2 数据库一旦创建就无法再修改字符集的编码方式了。
      ----可以在创建的时候指定字符集,如下指定为GBK:
      ----create db SRCDB using codeset GBK territory CN
   db2 create database custrisk
5,为该数据库创建用户和密码(用户名和密码不要超过8个字符,用户名不能大写)
   useradd custrisk
   passwd custrisk  输入密码:custrisk
   创建完成后创建schema,命令如下
       CONNECT TO UDEP USER dsp;
       ------------------------------------------------
       -- DDL Statements for Schemas
       ------------------------------------------------
       CREATE SCHEMA "DSP     " AUTHORIZATION "DSP     ";
       ---------------创建完成之后必须从起server才能够用创建的用户连接该数据库
6,创建缓冲池
   ---先连接db2
    db2 connect to custrisk
    db2 create bufferpool udeptmp32k all nodes size 9060 pagesize 32k    //100*1024%32
7,创建表空间
   db2 "create regular tablespace eastsp pagesize 32k managed by database using(file '/home/db2inst1/east' 5g) bufferpool udeptmp32k"
   @命令创建临时表空间  
   db2 "create USER TEMPORARY TABLESPACE  TEMPSPACE2 pagesize 32k managed by database using(file '/home/db2inst2/faldbtemp' 2g) bufferpool faltmp32k"
   @命令创建系统表空间
db2 "create system TEMPORARY TABLESPACE  TEMPSPACE3 pagesize 32k managed by database using(file '/home/db2inst2/faldbtemp3' 2g) bufferpool faltmp32k"
 
8,把表空间赋给用户
   db2 grant use of tablespace TEMPSPACE3 to user slsadmin
9,没有什么默认的表空间
   创建表的时候必须指定如:
     create table test(userid varchar(5),username varchar(20)) in custrisk
-------------------------------------------------------------------------------------------------------------------

创建缓冲池:create bufferpool dsppool size 1000 pagesize 32k;
            create tablespace newtbs pagesize 32k managed by system using (file '/home/db2' 300M)  bufferpool dsppool
 db2 list tablespaces;
 db2 list tablespaces contraners for 4 {4为上边查出的id}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


=================================================DB2创建触发器的例子===================================================
-- 建表语句
CREATE TABLE WANGZSTABLE (
  ID    INTEGER NOT NULL,
  NAME  VARCHAR(20) NOT NULL,
  AGE   VARCHAR(20) NOT NULL,
  STATUS    VARCHAR(10),
  CREATETIME    TIMESTAMP,
  UPDATETIME    TIMESTAMP,
  SENDTIME  TIMESTAMP

 
select * from wangzsTable;
insert into WANGZSTABLE(id,name,age) values(1,'wangzs1','26');
update WANGZSTABLE set status='4' where id=1;
 
--update 更新特定状态 status=4
DROP TRIGGER "WANGZS_UPDATE";
 
CREATE TRIGGER WANGZS_UPDATE
  AFTER UPDATE OF STATUS ON WANGZSTABLE
  REFERENCING OLD AS OLDROW NEW AS NEWROW
  FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
  IF(NEWROW.STATUS='4')
    THEN
      update wangzsTable set UPDATETIME=CURRENT TIMESTAMP where id=NEWROW.id;
  END IF;
END;
 
--update 更新特定id
DROP TRIGGER "WANGZS_UPDATE";
 
CREATE TRIGGER WANGZS_UPDATE
  AFTER UPDATE OF STATUS ON WANGZSTABLE
  REFERENCING OLD AS OLDROW NEW AS NEWROW
  FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
    update wangzsTable set UPDATETIME=CURRENT TIMESTAMP where id=NEWROW.id;
END;
 
--insert
DROP TRIGGER "WANGZS_INSERT";
 
CREATE TRIGGER WANGZS_INSERT
  AFTER INSERT ON WANGZSTABLE
  REFERENCING  NEW AS NEWROW
  FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
    update wangzsTable set CREATETIME=CURRENT TIMESTAMP where id=NEWROW.id;
END;

=======================================================================================================================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  
  

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
对于PL/SQL这种基本上面向过程的语言来讲,子程序(过程和函数)就是其核心所在了。 整个解决方案可通过组织、调用由过程和函数构成的模块来实现。 在“Divide and conquer”(分而治之)的编程世界中,子程序就是程序员手中的兵器,用的越熟练越好。 --代码 13.1 创建过程示例CREATE OR REPLACE PROCEDURE newdept ( p_deptno dept.deptno%TYPE, --部门编号 p_dname dept.dname%TYPE, --部门名称 p_loc
调试nocopy功能时,为了看到实际效果,设置了一个比较大的循环次数,结果悲剧了: 运行了近1个小时没出结果,电脑死机(任务管理器都打不开);无奈只能强行关机,开机时间又特别长,一度让我以为系统崩溃。 看来,PL/SQL developer下调试这种暴力计算的程序风险很高啊,我在Eclipse下调试Java程序时从来没碰到过这种造成电脑死机的情况。 不过,这章的内容实用性很强,死机也值了(有点心疼电脑了 ) -代码13.11 使用%Type定义形式参数CREATE OR REPLACE PROCEDURE
Less - 54 Challenge-1 Test Sourse Code Solution Less - 55 Challenge-2 Test Sourse Code Solution Less - 56 Challenge-3 Test Sourse Code Solution Less - 57 Challenge-4 Test Sourse Code Solution Less - 58 Challenge-5 Test Sourse Code Solution Less - 59 Chall

CentOS7安装配置hadoop2.7.2 - 2016-07-23 18:07:08

linux 虚拟机配置 系统配置: 虚拟机:一个master(Master.Hadoop),两个slave(Slave1.Hadoop, Slave2.Hadoop) 网络设置:我使用的是桥接的方式 内存:每个虚拟机配置4G内存 分区:手动配置 软件选择:最小安装,注意选择开发工具 用户设置:密码都设置为:hadoophadoop, 不创建任何用户,操作时使用root直接进行 安装完后各个虚拟机的ip配置(参考用) 主机 ip地址 master.hadoop 192.168.200.30 slave1.h
最近写的项目中有用到数据库,写了不少蛋疼的sql语句,每次都是好几行代码,而且每次都是重复的没有一点技术含量的代码,虽然也有不少基于sqlite的封装,不过用起来还是感觉不够面向对象! 为了不再写重复的代码,花了几天时间,基于SQLite3简单封装了下,实现了一行代码解决增删改查等常用的功能!并没有太过高深的知识,主要用了runtime和KVC: 首先我们创建个大家都熟悉的Person类,并声明两个属性,下面将以类此展开分析 @interface Person : NSObject @property (

MySQL原来也有内存数据库 - 2016-07-23 18:07:20

以前只知道MySQL可以做分库分表,支持多种数据库引擎。这次听了来自台湾的MySQL专家Ivan Tu的讲座,有两点印象深刻,一是MySQL具有丰富的高可用方案,二是MySQL也有内存数据库,即MySQL Cluster CGE。Ivan形象的将内存数据库比喻成浅浅的盘子,而传统的MySQL磁盘存储方式比喻成深深的瓶子。 另外,也探讨了MySQL作为开源数据库,和Oracle数据库的关系。MySQL并行发展企业版和社区版,企业版增加了很多企业级的特性,如安全,备份和恢复,监控,以及CGE(电信运营商版)。
CleverCode研究了一下,怎么kill掉慢的sql语句。 1 单个kill mysql show processlist; mysql kill 251; #批量kill 1)查找Lockd语句 mysql -uroot -p123456 -h 192.1.20.101 -e "show processlist" | grep -i 'Locked' locked_log.txt 2)组合kill for line in `cat locked_log.txt | awk '{print $1}'`
前段时间把项目中的JPA从EclipseLink换成Hibernate。这其中遇到了很多问题,也记录了一部分在其他的文章中。这里介绍一个UT中遇到的问题。 当时的测试是忘H2数据库中插入多项数据,然后用Query的方式删除,assert读出来的数据是null。这个测试用例在EclipseLink下面是可以通过的,但换成Hibernate之后发现数据仍然可以读出这个数据。 测试用例如下: @Test public void shouldRemovesAllFmReportFromDb () { FmRepo
实施逻辑复制软件时对在目的端数据库的字符集(排序规则)的要求 1.当目的端数据库是Oracle数据库时,务必保证目的端Oracle数据库的字符集与源头Oracle数据库的字符集保持一致. 2.当目的端数据库是MSSQLServer数据库时,务必保证目的端MSSQLServer 用户数据库的排序规则与源头MSSQLServer 用户数据库的排序规则一致. 3.当目的端数据库是MSSQLServer数据库时,务必保证目的端MSSQLServer master数据库的排序规则与源头MSSQLServer mas
前言 最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug。总而言之,这些都需要使用Hive的开发人员额外注意。本文旨在列举我发现的2个通过查询语句向表中插入数据过程中的问题,希望大家注意。 数据准备 为了验证接下来出现的问题,需要先准备两张表 employees和 staged_employees ,并准备好测试数据。首先使用以下语句创建表 employees: create table employe