Oracle中实现大表数据快速转移
如果你要把Oracle里的大量数据(80M以上)转移到另外的用户,另外的表空间里。可以用下面介绍的快速转移数据的方法。
一、建新表的方式
create table target_tablename tablespace
target_tablespace_name nologging
pctfree 10 pctused 60
storage(initial 5M next 5M minextents 1
maxextents unlimited pctincrease 0)
as select * from username.source_tablename where 条件;
注意事项: 新建的表没有原来表的索引和默认值, 只有非空(not null)的约束素条件可以继承过来,其它的约束条件或索引需要重新建立。
二、直接插入的方法
INSERT /*+ APPEND */ INTO target_tablename
SELECT * from username.source_tablename where 条件;
COMMIT;
注意事项:
用INSERT /*+ APPEND */ 的方法会对target_tablename产生级别为6的独占锁,如果运行此命令时还有对target_tablename的DML操作会排队在它后面,对OLTP系统在用的表操作是不合适的。
说明:这两种方法转移数据时没有用SGA里数据缓冲区和事物处理的回滚段, 也不写联机事物日志,就象数据库装载工具Solload一样直接把数据写到物理文件,速度是很快的。在Oracle8i以后的版本都可以使用。
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
//看看如何编写一些复杂的存储过程
一:无返回值的存储过程
为了验证,我先创建一张测试表
create table mytest(myid varchar2(30),myname varchar2(50));
存储过程为:
create or replace PROCEDURE mytest2(id in varchar2,name in varchar2) as
begin
insert into mytest (myid,myname) valu ......
2009-12-01 00:41:35
之前安装了oracle 10g,后来为了在C#里面连接oracle,安装了ODAC,之后连接数据库时,填写数据库服务名,总是会出错,连接测试无法通过,不填数据库服务名,倒还可以通过连接测试
今晚终于查到原因了。。。
系统属性那里的环境变量,path这里,oracle的两个默认路径:
d:\oracle\product\10. ......
查询用户信息
SELECT USERNAME,DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE, PROFILE, ACCOUNT_STATUS, CREATED from dba_users; 查询用户空间使用和上限情况
SELECT username, tablespace_name, bytes/1024/1024 space_used_in_mb, max_bytes/1024/1024 max_space_in_mb from dba_ts_quotas; 创建 ......
按资料说V$BH查看表来显示数据库里每个对象类型的数据缓冲区里数据块的数量.
然后查询V$bh
select
owner, object_name
from
dba_objects o,
v$bh &nbs ......