db2 connect to DB_NAME
for i in `db2 list tables for schema SCHEMA_NAME|grep SCHEMA_NAME|awk '{print $1'}`
do
db2 set current schema SCHEMA_NAME
db2 import from /dev/null/ of del replace into $i
db2 "reorg table $i"
done
exit
做完清空表的动作后需要做一次reorg这样空间才会回收!
完了做一次runstats 然后可以通过Quest工具看看是不是所有的表的row都为01 如何恢复误删的表
使用recover dropped table功能即可
要求是: 误删的表建立且数据注入之后,有该数据库的备份
通过db2 list history dropped table all for dbname找到误删表的Backup ID以及该表的DDL语句
恢复误删表所在表空间 db2 restore db dbname tablespace(tbspname) taken at xxxx
在前滚中指定误删表 backup id,输出表数据
db2 rollforward db dbname to end of logs tablespace(误删表所在表空间名字) recover dropped table backup id to /home/db2inst
在/home/db2inst目录下的node0000目录下有一个data文件,是误删表的数据
通过DDL重建表,并使用LOAD将DATA文件导入表中即可
没有做过备份的话,如果你拷贝的文件夹完整的话(既有元数据,又有数据库数据),可以uncatalog db dbname,然后将拷贝的文件夹拷贝回来,并catalog db dbname就可以了db2中,执行完delete后,只是在数据前加一个“delete”标识,标识该块存储可以被重用,再执行insert语句时,就会扫描整个表然后把数据插入到这样的标识位置。
所以你执行完delete并不会释放空间用DB2的Control Center,在表对象上右击,其中有一个选项Show Related就可以这个对象和其他对象之间的关系,你说的那些函数用到了这个表也能看到。
如果函数同名,用 Specific Name来进行删除, 删除语法如下:
DROP SPECIFIC FUNCTION--specific-name
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)