db2笔记

  DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法

这个错误是:表处于"装入暂挂"状态。
经多次尝试 总结方法:
1:reorg table <表>; 假如不好使 则下面方法
2,先前尝试装入(LOAD)此表失败。表的状态应该是load pending;
你可以执行一下db2 "load query table "命令来查看你的表状态。
然后用db2 "load from /dev/null of del terminate into "这个命令来解挂。
 然后 reorg table <表>
3,恢复时候 没有指定过roll forward选项
是数据库的原因,因LOAD异常中断引起,可以用LOAD… TERMINATE 或者RESTART来解决.
先在C:建一个空文件test.txt,
然后db2 load from c:/test.txt of del terminate into tablename
然后 reorg table <表>
然后就可以了!
 这几种方法尝试后OK。
4、db2如果表正在使用的过程中对变得字段进行修改需要执行reorg  table tablename


  2、231的was停止与启动:
      /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/stopManager.sh
      /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopNode.sh
      
      用户:wasadmin/wasadmin
      /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/startManager.sh
      /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/startNode.sh

    /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps

db2 force application all //强行终止所有连接 
db2 terminate //清除所有db2的后台进程


rm -rf !(export*|import*)

db2 -tvf cleartables.txt -z cleartables.txt.log
sed -n '/^alter table/p'  cleartables.txt.log > cleartables.sql

db2 -tvf exports.sql -z exports.log
sed -n '/^export/p' exports.log > export.sql
db2 -tvf export.sql -z export.log
--清空所有表
select  'alter table '||lower(name)||' activate not logged initially with empty table;' from sysibm.systables where creator like '%LIN3%'  and type='T' order by name;
--导出表数据
select  'export to '||lower(name)||'.del of del modified by codepage=1208 select * from '||lower(name)||';' from sysibm.systables where creator like '%LIN3%'  and type='T' order by name;
--导入表数据
select  'import from '||lower(name)||'.del of del modified by codepage=1208 insert into '||lower(name)||';' from sysibm.systables where creator like '%LIN3%'  and type='T' order by name;



前提:

1、导出数据库建表语句:
   db2look -d feelview -e -a -x -i db2inst1 -w db2inst1 -o  ddl_feelview.sql
2、导出数据:
   mkdir data
   cd data
   db2move feelview export -u db2inst1 -p db2inst1
3、ftp到本地
4、ftp到建数据库的服务器
 
5、执行sql文件
db2 -tvf back_from_feelview.sql -z back_form_feelview.log
back_from_feelview.sql
    connect to databasename;
    import from system_data.del of del modified by codepage=1386 insert into system_data

6、数据导出
export  to system_data.del of del modified by codepage=1386 select * from system_data;--codepage是编码 1208是utf-8
select 'export  to '||lower(name)||'del of del modified by codepage=1208 select * from '||lower(name)|';' from sysibm.systables where creator like '%LIN%' order by name;
7、数据导入
import from system_data.del of del modified by codepage=1386 insert into system_data--codepage是编码 1208是utf-8

db2start  启动命令
删除数据库:

   1、db2  CONNECT RESET
   db2 force application all
   drop database feelview
   
   删除成功之后,开始新建数据库,如下:
   


1、创建数据库
db2 CREATE DATABASE feelview ALIAS feelview USING CODESET UTF-8 TERRITORY CN PAGESIZE 16384
 db2 drop db feelview #删除数据库


2、创建缓冲池
db2 
connect to feelview user db2inst1 using db2inst1
select bpname from syscat.bufferpools #查看缓冲池
CREATE BUFFERPOOL FEELVIEWTMP IMMEDIATE  SIZE 10000 AUTOMATIC PAGESIZE 16K

drop BUFFERPOOL bufferpoolname#删除缓冲池
3、创建表空间:
list  tablespaces #查看表空间

CREATE  LARGE  TABLESPACE FEELVIEWDB  PAGESIZE 16K  MANAGED BY DATABASE  USING ( FILE 'FEELVIEWTBS1' 32000,FILE 'FEELVIEWTBS2' 32000) EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 AUTORESIZE YES INCREASESIZE 50M BUFFERPOOL  FEELVIEWTMP NO FILE SYSTEM CACHING

DROP TABLESPACE  #删除表空间

4、创建临时表空间:
CREATE  USER TEMPORARY  TABLESPACE TEMPSPACE2 PAGESIZE 16K  MANAGED BY DATABASE  USING ( FILE 'FEELVIEWTEMP1' 32000) EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 AUTORESIZE YES INCREASESIZE 10M  BUFFERPOOL  FEELVIEWTMP

DROP TABLESPACE  #删除表空间
5、创建模式:
CREATE SCHEMA DB2INST1 AUTHORIZATION DB2INST1
DB2 drop指定schema的所有表 .
db2 -x "select 'drop table '||trim(tabschema)||'.'||tabname||';'from syscat.tables where tabschema ='schemaname'" > droptable.sql
db2 -tf droptable.sql

db2 -x "select 'drop view '||trim(tabschema)||'.'||tabname||';'from syscat.tables where tabschema ='schemaname'" > dropview.sql
db2 -tf dropview.sql

DROP SCHEMA ERRORSCHEMA1 RESTRICT    --schema中不能含有任何对象
--RESTRICT 关键字强制实施以下规则:不能在指定的模式中为要从数据库中删除的模式定义对象。RESTRICT 关键字并非可选关键字

6、get db cfg for feelview
7、cd 到有建表语句的目录下,执行以下命令:
db2 -tvf ddl.sql -z create.log
8、cd到有导出数据的目录下,执行以下命令:
  db2move feelview import -u db2inst1 -p db2inst1


--查看连接数
select * from table(snapshot_appl_info('',-2) )as a;
select * from table(snapshot_appl('',-2) )as a;
-- 查看连接参数
db2 get db cfg for feelview

--DB2中两时间相减求之前相差多少月?
SELECT
  timestampdiff (256, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔年",
  timestampdiff (128, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔季度",
  timestampdiff (64, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔月",
  timestampdiff (32, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔周",
  timestampdiff (16, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔日",
  timestampdiff (8, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔时",
  timestampdiff (4, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔分",
  timestampdiff (2, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23'))) AS "间隔秒"
FROM SYSIBM.SYSDUMMY1;

select * from sysibm.systables where type='T' and creator='DB2INST1'  
select * from sysibm.columns where table_name='SYSTEM_DATA' ;  --查看表结构

删除db2 数据库
db2>disconnect current字面意思是“断开当前连接”;
db2 catalog  db dbname.
db2 drop db dbname.
DB2怎么删除表空间所以数据 
DROP TABLESPACE 
db2 表空间常用命令(未完待续)(2013-11-22 19:26:37)转载▼标签: it 分类: DB2  
# 1. 查看所有的表空间
db2 list tablespaces

# 2. 查看某个表空间的容器
db2 list tablespace containers for   [ show detail ]
如: db2 list tablespace containers for 3 show detail

# 3. 查看表空间的配置信息,使用情况及容器信息
db2pd -d -tablespaces
如:db2pd -d zdb -tablespaces

# 4. 通过snapshot 获取表空间信息
db2 get snapshot for tablespaces on


对于DMS( database manage ) 表空间,提供了几个方法更改表空间容器。
    1. Add 用来增加新的容器
    2. Drop 删除容器
    3. Extend 扩展已有容器大小
    4. Reduce 缩减已有容器大小
    5. Resize 重新设定容器大小
Add和Drop操作,表空间容器之间会发生数据重新平衡(rebalance),Reduce和Resize操作,需要确保修改后的表空间容器有足够的空间,否则DB2会拒绝该操作。
日常运维中出现表空间满的情况时,根据对存储空间和对运维的影响,有以下三种方案:
1). 如果表空间对应的存储容器中还有未分配空间,可通过alter tablespace 的 extend 或 resize 选项扩展已有表空间容器的大小。如下面的例子是在每个容器上扩展了50GB:
    db2 "alter tablespace tbs_dat extend ( file '/db2tbsp/dat_1' 50G, file '/db2tbsp/dat_2' 50G) ";

2). 如果表空间容器对应的存储中没有剩下空间时,可以通过alter tablespace 的 add 选项增加新的表空间容器。需要注意的是:通过add增加容器会在容器之间进行数据Reblance,即数据重新平衡。如果数据量很大,reblance的时间会很长,对系统性能会造成很大的影响。下面是增加一个新的容器,表空间的不同容器内会发生reblance:
    db2 "alter tablespace tbs_dat add ( file '/db2tbsp/dat_2' 10G)"

3). 通过alter tablespace begin new stripe set 选项。begin new stripe set 选项是当已有容器使用完后,再使用新增加的容器。与方法2不同,该选项不会在容器之间做reblance,不会对系统造成性能影响,但它会造成数据偏移。如下:
    db2 "alter tablespace tbs_dat begin new stripe set (file '/db2tbsp/dat_2' 10G) "

# 删除表空间tbs_dat的容器dat_2
db2 "alter tablespace tbs_dat drop ( file '/db2tbsp/dat_2' )"


表空间容器的路径变化时,需要建立一个软链接(容器的原路径软链接到容器的新路径),如:
ln -s /db2tbs/zdb/dat_1 /db2tbsp/dat_1


查看、修改、创建、删除缓冲池
查看缓冲池大小:
    SELECT BPNAME,NPAGES,PAGESIZE FROM SYSCAT.BUFFERPOOLS
修改缓冲池大小:
    ALTER BUFFERPOOL  SIZE 
创建缓冲池时指定大小:
    CREATE BUFFERPOOL  SIZE  PAGESIZE 
删除缓冲池:
$ db2 drop BUFFERPOOL PAY_SYS_POOL


db2中断开数据库连接 2010-04-26 15:39:52 
分类: 
db2中connect reset、disconnect current、和quit这三个命令有什么区别?或者说连上db2后哪个能真正断开连接?
connect reset字面意思是“连接重置”;
disconnect current字面意思是“断开当前连接”;
以上两个命令都能断开数据库连接;
quit是退出交互模式,相当于在使用Ctrl+C退出交互模式;使用此命令后只是退出了交互模式,数据库连接并未断开,此时如果输入db2进入交互模式,将可以继续使用以前的连接进行sql操作(前提是没有使用connect reset或者disconnect current命令断开连接)。
而我平时一直使用的是quit命令,现在从试验结果看,这是个误用,是自己以前没弄明白造成的,为此记录一下。正确的方式是:使用connect reset或者disconnect current命令断开连接之后再quit退出。
连接数据库后执行connect reset命令结果:
连接数据库后执行disconnect current命令结果:
连接数据库后执行quit命令结果:
补充:db2 terminate --断开与数据库的连接。
--查找某个存储过程  
 select * from syscat.procedures where procschema='CTLLIN'  
--查找某个函数  
select * from syscat.functions where funcschema='CTLLIN'  


(未经许可,请勿转载)
	最近在执行DB2数据库SQL脚本时报错如下:
	DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0010N The string constant beginning with "'单位:天')" does not have an ending string delimiter. SQLSTATE=42603。
	该脚本在DB2连接工具中执行正常,因此可以确定问题出在中文字符集上面。
	分析研究后,发现DB2数据库存在三种级别的字符集:操作系统级LANG、实例级(客户端级)db2codepage、数据库级Database code page/set。
	操作系统级是用户应用程序使用的代码页。可以使用环境变量LANG=C等来设置。用set命令、或者echo $LANG查看其值。
	实例级DB2应用程序进行客户端到数据库服务端代码页转换时使用的,比如使用SQL脚本时,db2读取脚本时就是按照实例级的字符集db2codepage来识别该脚本的。可用db2set -all来查看其值。可用db2set db2codepage=1208来设置其值。
	数据库级的字符集是在创建数据库时指定的,是后续不可修改的。设置语句类似db2 "CREATE DATABASE dbname USING CODESET UTF-8 TERRITORY CN"。可以在连库后,使用db2 get db cfg for dbname命令,来查看Database code page/set的值。
	本问题中数据库级的字符集是1386,即GBK字符集;终端实例级的字符集也是1386字符集。但是,SQL脚本是UTF-8格式的,db2按照1386字符集去读取UTF-8格式的脚本就会出现不可识别的乱码,最终报错SQL0010N。
	解决办法是临时修改实例级字符集为UTF-8格式,执行完脚本后再恢复为GBK格式。
	db2 connect to dbname
	db2set db2codepage=1208
	db2 terminate
	db2 connect to dbname
	db2 -tvf *.sql  //执行sql脚本
	db2set db2codepage=1386
	db2 terminate


(未经许可,请勿转载)
	最近在执行DB2数据库SQL脚本时报错如下:
	DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0010N The string constant beginning with "'单位:天')" does not have an ending string delimiter. SQLSTATE=42603。
	该脚本在DB2连接工具中执行正常,因此可以确定问题出在中文字符集上面。
	分析研究后,发现DB2数据库存在三种级别的字符集:操作系统级LANG、实例级(客户端级)db2codepage、数据库级Database code page/set。
	操作系统级是用户应用程序使用的代码页。可以使用环境变量LANG=C等来设置。用set命令、或者echo $LANG查看其值。
	实例级DB2应用程序进行客户端到数据库服务端代码页转换时使用的,比如使用SQL脚本时,db2读取脚本时就是按照实例级的字符集db2codepage来识别该脚本的。可用db2set -all来查看其值。可用db2set db2codepage=1208来设置其值。
	数据库级的字符集是在创建数据库时指定的,是后续不可修改的。设置语句类似db2 "CREATE DATABASE dbname USING CODESET UTF-8 TERRITORY CN"。可以在连库后,使用db2 get db cfg for dbname命令,来查看Database code page/set的值。
	本问题中数据库级的字符集是1386,即GBK字符集;终端实例级的字符集也是1386字符集。但是,SQL脚本是UTF-8格式的,db2按照1386字符集去读取UTF-8格式的脚本就会出现不可识别的乱码,最终报错SQL0010N。
	解决办法是临时修改实例级字符集为UTF-8格式,执行完脚本后再恢复为GBK格式。
	db2 connect to dbname
	db2set db2codepage=1208
	db2 terminate
	db2 connect to dbname
	db2 -tvf *.sql  //执行sql脚本
	db2set db2codepage=1386
	db2 terminate

db2 快速清除表中所以的数据
db2 "alter table t1 activate not logged initially with empty table"
快速清除表数据操作, 这个操作是不记录日志的, 最好做过后做一次在线备份
命令为:
alter table tabname activate not logged initially with empty table
这条会删除表中的所有数据


 

你可能感兴趣的:(db2)