Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1927474
  • 博文数量: 389
  • 博客积分: 7877
  • 博客等级: 少将
  • 技术积分: 4521
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-10 14:02
文章分类

全部博文(389)

文章存档

2024年(1)

2022年(1)

2021年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(4)

2015年(8)

2014年(15)

2013年(31)

2012年(19)

2011年(47)

2010年(33)

2009年(105)

2008年(109)

2007年(4)

分类:

2009-10-15 23:42:46

db2 "create db testdb on /home/db2inst1/testdb using codeset UTF-8 territory US"

对于上面的创建数据库语句,其中codeset和territory这两个选项的值一旦在数据库创建完成后,就无法修改,如果要修改的话

只能通过db2move来操作了,先把数据导出,删除数据库,创建新的数据库再将数据导入即可

导出数据库里面已经存放的数据:
db2move rordb99 export
db2move rordb99 export -sn UATATM         //只导出UATATM用户的表

导出数据库对象的DDL:
db2look -d testdb -e -a -x -o testdb.sql

删除数据库:
db2 drop db testdb

创建新的数据库:
db2 "create db testdb on /home/db2inst1/testdb using codeset GBK territory CN"

手动创建bufferpool和tablespace
以及更改数据库参数

创建数据库对象:
db2 -tvf testdb.sql

导入数据库数据:
db2move testdb load

检查日志,直至没有任何报错

Add 2010.01.27:
在做完上述动作之后,一切都很正常,但是应用程序却有很多问题,这个时候发现有些表的状态不对,处在pending state
这时需要对这些有问题的表做set integrity的动作,因为这个动作只能一个表一个表的做,针对单个表的命令如下:
db2 connect to rordb99 user uatcfg using uatcfg
db2 set integrity for ACTION_MASTER immediate checked
如果要对所有的用户表进行set integrity动作,比较笨的办法是把所有的表都查出来再用UltraEdit等工具来编辑好脚本,然后再执行脚本即可,比较聪明的办法如下:
db2 "select 'db2 set integrity for oatest.'||TABNAME||' immediate checked' from syscat.tables where TABSCHEMA='MYSCHEMA' and STATUS='C'"

执行完脚本后,应用程序即正常了
这里因为表里面有很多constraint, 对表进行load后,需要check constraint 不然没法正常使用,更多信息可以参考下面这篇文章(很详细的数据库迁移方面的文章):
http://macrozeng.itpub.net/post/71/58248

PS:
codeset是什么,territory是什么? 类似date, time, timestamp数据类型在数据库的存放及显示方式都属于territory的范畴
而codeset 则是数据在数据库里面的编码方式,同样的一个汉字当codeset为GBK或UTF-8时,其在数据库里面的存放是不一样的

阅读(2050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~