从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。
分类: Sybase
2013-01-15 10:23:59
从IQ 15开始,IQ_SYSTEM_MAIN dbspace做为系统保留使用,SAP Sybase建议用户不要在这个dbsapce上创建用户数据库对象(表、索引等)。有时用户虽然知道这个建议,但是在实践中由于疏忽原因忘记进行相关设置导致应用表创建在IQ_SYSTEM_MAIN上,在后续运行时发现IQ_SYSTEM_MAIN空间使用率较高时才发现。
本文将向大家介绍建立在IQ_SYSTEM_MAIN dbspace上的用户表迁移到其它dbspace的方法。
1. 迁移方法介绍
可以使用如下语句进行表的迁移:
ALTER TABLE username.tablename MOVE TO new_dbspacename;
注意:在执行这样的语句时会占用较大的机器资源(比如I/O和CPUs)并且对移动的表加表锁,最好在系统不忙的时
候进行。
2. 如果表较多是,可以生成脚本
如果在IQ_SYSTEM_MAIN有比较多的用户表,那么使用手工输入命令的方式很繁琐。下面介绍一种方法可以生成相应的sql脚本完成这一工作:
(1) 编写生成alter table move语句的shell脚本
#gen_tab_move.sh
echo "select 'alter table ' || creator||'.'||tname || ' move to $1 ' || ';' from syscatalog where dbspacename='IQ_SYSTEM_MAIN' and
tabletype in ('TABLE');" > work.sql
echo "output to table_move_$1.sql format ascii delimited by '\t' quote '';" >>work.sql
dbisql -c "uid=DBA;pwd=sql" -nogui work.sql
(2) 执行执行上面的gen_tab_move.sh
执行gen_tab_move.sh,成功后将生成包含多个表alter table move语句的sql脚本,脚本的名称为table_move_destdbspacename.sql 。例如:
sh gen_tab_move.sh IQ_USER_MAIN #IQ_USER_MAN为目标dbspace名称
(3) 执行生成的sql脚本