oracle中如何将表空间进行统一以及规划表空间的方法!

根据现我所从事的工作流项目中的应用采取如下方式:

方案一:
1.需要生成比较大的表空间(约1G的空间)。

2.使用命令将表空间进行统一。
revoke unlimited tablespace from workflow;--将workflow表空间无限制配额先废除.
alter user workflow quota 0 on users;--此语句是将用户workflow在users表空间下的配额设置为0.让其无法写入
alter user workflow quota unlimited on workflow;--此语句是将用户workflow在workflow表空间下的配额设置成无限制.

3:利用导入工具命令行来生成以及log日志文件即可.(首先得先将数据给导出---EXP)
IMP user/password@database file=D:/file_name.dmp log=D:/file_name_imp.log fromuser=exp_username touser=imp_username;

通过以上操作即可完成将表空间进行统一,

方案二:
另外如果你已经在没有运行以上命令时就已将数据给导入后还可通过alter方式来对表以及索引进行表空间规划.

1:先通过:SELECT 'ALTER INDEX '||INDEX_NAME||' REBUILD TABLESPACE tablespace_name;' FROM USER_INDEXES;语句来得到一个SQL脚本文件.

2:然后在pl/sql developer工具中执行操作即可.

3:当在执行过程中可能会遇到一些不能重新编译的情况,这时可以将这些暂不能编译的放在最后面执行即可.

更改表的所属表空间:
alter table a move tablespace tbsname;
补充:移动完毕后需重建索引.
alte index idx_name rebuild tablespace tablespace_name

补:在实际应用中遇到了另一种情况就是当按上面第一种方案进行数据导入以后所有的信息全在一个表空间下,这样对于表空间规划不太合理,为了进一步对表空间的规划,又在第一种方案下采用方案二对表空间进行规划,当执行方案二中得到的SQL语句执行时会报出:ORA-01950 no privileges on tablespace 'workindex'这样错误提示,这只要是由于方案一中的alter命令所造成的,可能通过:alter user workflow quota unlimited on workinedx;语句来使workflow用户在workindex表空间上也具有无限制配额即可.然后再执行方案二中得到的alter的SQL脚本!

你可能感兴趣的:(Oracle随笔)