use*_*625 28 oracle move oracle11g
我跑步oracle 11g
,需要table (tbl1)
从一个移动tablespace (tblspc1)
到另一个(tblspc2)
.最简单的方法是什么?
Rah*_*thi 52
试试这个:-
ALTER TABLE <TABLE NAME to be moved> MOVE TABLESPACE <destination TABLESPACE NAME>
Run Code Online (Sandbox Code Playgroud)
IVAN在评论中提出了非常好的建议,因此我想在我的回答中加入
注意:这将使所有表的索引无效.所以这个命令通常紧随其后
alter index <owner>."<index_name>" rebuild;
Run Code Online (Sandbox Code Playgroud)
小智 11
使用sql
来自sql
:
假脱机输出到文件:
select 'alter index '||owner||'.'||index_name||' rebuild tablespace TO_TABLESPACE_NAME;' from all_indexes where owner='OWNERNAME';
Run Code Online (Sandbox Code Playgroud)
spoolfile将具有以下内容:
alter index OWNER.PK_INDEX rebuild tablespace CORRECT_TS_NAME;
Run Code Online (Sandbox Code Playgroud)
移动表:
第一次运行:
SELECT 'ALTER TABLE <schema_name>.' || OBJECT_NAME ||' MOVE TABLESPACE '||' <tablespace_name>; '
FROM ALL_OBJECTS
WHERE OWNER = '<schema_name>'
AND OBJECT_TYPE = 'TABLE' <> '<TABLESPACE_NAME>';
Run Code Online (Sandbox Code Playgroud)
- 或在评论中建议(没有自己测试)
SELECT 'ALTER TABLE <SCHEMA>.' || TABLE_NAME ||' MOVE TABLESPACE '||' TABLESPACE_NAME>; '
FROM dba_tables
WHERE OWNER = '<SCHEMA>'
AND TABLESPACE_NAME <> '<TABLESPACE_NAME>
Run Code Online (Sandbox Code Playgroud)
<schema_name>
用户的名称在哪里.并且<tablespace_name>
是目标表空间.
结果你得到如下行:
ALTER TABLE SCOT.PARTS移动TABLESPACE用户;
将结果粘贴到脚本或oracle sql开发人员(如应用程序)中并运行它.
移动索引:
第一次运行:
SELECT 'ALTER INDEX <schema_name>.'||INDEX_NAME||' REBUILD TABLESPACE <tablespace_name>;'
FROM ALL_INDEXES
WHERE OWNER = '<schema_name>'
AND TABLESPACE_NAME NOT LIKE '<tablespace_name>';
Run Code Online (Sandbox Code Playgroud)
此代码中的最后一行可以节省大量时间,因为它会过滤掉已经存在于正确表空间中的索引.
结果你应该得到类似的东西:
ALTER INDEX SCOT.PARTS_NO_PK REBUILD TABLESPACE用户;
将结果粘贴到脚本或oracle sql开发人员(如应用程序)中并运行它.
最后但并非最不重要的是,移动LOB:
第一次运行:
SELECT 'ALTER TABLE <schema_name>.'||LOWER(TABLE_NAME)||' MOVE LOB('||LOWER(COLUMN_NAME)||') STORE AS (TABLESPACE <table_space>);'
FROM DBA_TAB_COLS
WHERE OWNER = '<schema_name>' AND DATA_TYPE like '%LOB%';
Run Code Online (Sandbox Code Playgroud)
这会将LOB对象移动到另一个表空间.
结果你应该得到类似的东西:
ALTER TABLE SCOT.bin $ 6t926o3phqjgqkjabaetqg == $ 0 MOVE LOB(calendar)STORE AS(TABLESPACE USERS);
将结果粘贴到脚本或oracle sql开发人员(如应用程序)中并运行它.
哦还有一件事:
出于某种原因,我无法移动"DOMAIN"类型索引.作为一种解决方法,我放弃了索引.将用户的默认表空间更改为de desired tablespace.然后再次重新创建索引.有一个更好的方法,但它对我有用.
归档时间: |
|
查看次数: |
203801 次 |
最近记录: |