首先,使用下面的命令移动:
站在用户的角度思考问题,与客户深入沟通,找到延庆网站设计与延庆网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖延庆地区。
alter table table_name move tablespace tablespace_name;
然后,如果有索引的话必须重建索引:
alter index index_name rebuild tablespace tablespace_name;
当然,可以使用spool来帮助实现多个表的操作.
set header off;
spool /export/home/oracle/alter_tables.sql;
select 'alter table ' || object_name || ' move tablespace users'
from dba_object
where owner = 'XXX' and object_type = 'TABLE';
spool off;
之后执行此sql脚本即可.
同样对于index也做同样的操作.
一楼的回答不一定是提问者要的吧. 第一帖试着回答,不知掉百度问答好玩不好玩..
有几种方法可以做,一种是1楼回答的,建user,授权,然后imp/exp
针对于对你的问题的理解这是我的方法:
假设想从user A 移表C到user B.
此处楼主没有说清楚,是同一个instance里的俩个不同user,还是俩个不同instance里的不同user.
如果不同instance里的不同user,以下方法里用了db link的方法
1. 俩个user存在, 并且有相关权限,比如create session etc, 因为你有需要从一个user中去访问另个user,所以Grant select,insert等你需要的权限给另外个user,比如在user B里执行:
grant insert on C to A;
2. 在user B中建DB link使其能访问user A;
3. user B 中建立和user A你想移的那种表的表结构定义,此处俩个选择:
1). 手动建表,和moreazy做法一样, 在user B里执行create table C as select * from userA where rownum1;
2). 把建表语句build in到你的存储过程中
4. 因为存储过程里用到了dblink所以动态sql可能会被用到.
以上是思路,以下是伪代码是最简单的类型,不考虑性能等等,至少简单逻辑,没时间测,顺手一写:
简单写的没有游标等等,如果考虑到大数据量,最好不要做一次性的insert select,用游标取出表数据然后loop的处理,适量的commit(比如1000-5000 commit)可大幅提高性能。
set serveroutput on;
DECLARE
v_dblink varchar2(128):='sss.com';
v_sql VARCHAR2(4000);
v_count NUMBER(10);
v_message VARCHAR2(4000);
BEGIN
-- check dblink
v_sql := 'select count(*) from all_db_links where db_link=upper('''||v_dblink||''')';
EXECUTE IMMEDIATE v_sql INTO v_count;
IF v_count = 0 THEN
v_message := 'db link '''||v_dblink||''' does not exist.';
DBMS_OUTPUT.PUT_LINE(v_message);
ELSE
v_sql := 'INSERT INTO C
(col1,col2)
SELECT col1,col2 FROM C'||v_dblink;
BEGIN
EXECUTE IMMEDIATE v_sql;
COMMIT;
EXCEPTION WHEN OTHERS THEN
v_message := SQLERRM(SQLCODE);
DBMS_OUTPUT.PUT_LINE(v_message);
END;
END IF;
END;
/
扩展临时表空间:
方法一、增大临时文件大小:
sql
alter
database
tempfile
‘/u01/app/oracle/oradata/orcl/temp01.dbf’
resize
100m;
方法二、将临时数据文件设为自动扩展:
sql
alter
database
tempfile
‘/u01/app/oracle/oradata/orcl/temp01.dbf’
autoextend
on
next
5m
maxsize
unlimited;
方法三、向临时表空间中添加数据文件:
sql
alter
tablespace
temp
add
tempfile
‘/u01/app/oracle/oradata/orcl/temp02.dbf’size
100m;
表空间是数据库里一个逻辑存储结构,其对应物理结构是数据文件,一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。
您所问的表空间在D盘、E盘的 实际上是数据文件所在的位置。
-- 以上是对于 表空间和数据文件的一个简单的感念,希望lz能先弄明白这个。
-- 移动表空间总的来说有两种办法。一种联机,一种脱机。分别介绍如下:
脱机(可以移动任何表空间中的数据文件,命令为alter database rename file)
SQLshutdown
2:用系统命令移动数据文件,这里lz是win操作系统,可直接复制粘贴
3:sqlplus / as sysdbsa
SQLstartup mount
alter database rename file 'D:/xxxxx' to 'E:/xxxxx'
(注意在alter open之前不要退出)
SQLalter database open;
二:联机(不可移动system表空间,回滚段和临时表空间中的数据文件,命令为alter tablespace )
SQL conn / as sysdba
SQL alter tablespace xxxx offline;
2:在操作系统层面上移动数据文件
3:alter tablespace xxxx rename datafile 'D:/xxxx' to 'E:/xxxxx';
4:alter tablespace xxxx online;