Oracle_导入大批量数据到表中的方法
来源:互联网 发布:魔域登陆器源码 编辑:程序博客网 时间:2024/05/29 02:12
我们知道,Nologging只在很少情况下生效
通常,DML操作总是要生成redo的
这个我们不多说.
关于Nologging和append,一直存在很多误解.
经过一系列研究,终于发现了Nologging的真相.
我们来看一下测试:
1.Nologging的设置跟数据库的运行模式有关
a.数据库运行在非归档模式下:
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 721420752 bytes
Database Buffers 343932928 bytes
Redo Buffers 4603904 bytes
数据库装载完毕。
SQL> alter database noarchivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 D:\app\Administrator\oradata\recover_file\SDXJ\ARCHIVELOG
最早的联机日志序列 201
当前日志序列 203
SQL>
###创建普通表
create table sdxj.redo1as select * fromdba_objects where 1=2;
Table created.
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 8956324 2 ---初始
---直接insert数据
insert into sdxj.redo1select * fromdba_objects;
commit;
10947 rows created.
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 17434976 2 ---插入数据后
--- /*+ append */ 插入数据
SQL> selectname,value,class fromv$sysstatwhere name='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 17434976 2 ---apped初始redo
insert /*+append*/into sdxj.redo1 select * fromdba_objects;
commit;
10947 rows created.
SQL> selectname,value,class fromv$sysstatwhere name='redosize';
NAME VALUE CLASS
redo size 17486416 2 ----append后的redo
---append+ nologging
--- /*+append */ 插入数据
alter table sdxj.redo1nologging;
SQL> selectname,value,class fromv$sysstatwhere name='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 20665548 2 ---apped + no初始redo
insert /*+append*/into sdxj.redo1 select * fromdba_objects;
commit;
SQL> selectname,value,class fromv$sysstatwhere name='redosize';
NAME VALUE CLASS
---------- ---------- ---------
redo size 20694972 2 ---apped + no后redo
select (17434976-8956324) insrt,(17486416-17434976) appe,(20694972-20665548) appeno from dual;
8478652 51440 29424
---create table 命令创建表
create table sdxj.redo7 as select * fromdba_objects;
create table sdxj.redo8nologging as select * fromdba_objects;
Table created.
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 19261692 2 ---create table初始值
redo size 19344232 2 --create table后值
redo size 19428120 2 --create table nologging后值
---比较
select 19344232-19261692,19428120-19344232from dual;
82540 83888
在非归档模式下:
INSERT INTO > CREATE TABLE > INSERT/*+APPEND */ > INSERT /*+APPEND */ (NOLOGGING)
b、数据库运行在归档模式下
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 721420752 bytes
Database Buffers 343932928 bytes
Redo Buffers 4603904 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\app\Administrator\oradata\recover_file\SDXJ\ARCHIVELOG
最早的联机日志序列 203
下一个存档日志序列 205
当前日志序列 205
SQL>
###创建普通表
create table sdxj.redo1as select * fromdba_objects where 1=2;
Table created.
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 275668 2 ---初始
---直接insert数据
insert into sdxj.redo1select * fromdba_objects;
commit;
10947 rows created.
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 8739776 2 ---插入数据后
--- /*+ append */ 插入数据
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 8748144 2 ---apped初始redo
insert /*+append*/into sdxj.redo1 select * fromdba_objects;
commit;
10947 rows created.
SQL> selectname,value,class fromv$sysstatwhere name='redosize';
NAME VALUE CLASS
redo size 17293020 2 ----append后的redo
---append+ nologging
--- /*+append */ 插入数据
alter table sdxj.redo1nologging;
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ----------
redo size 17301584 2 ---apped + no初始redo
insert /*+append*/into sdxj.redo1 select * fromdba_objects;
commit;
select name,value,classfromv$sysstat wherename='redosize';
NAME VALUE CLASS
---------- ---------- ---------
redo size 17330464 2 ---apped + no后redo
select (8739776-275668) insrt,( 17293020-8748144) appe,(17330464-17301584) appeno from dual;
8464108 8544876 28880
---create table 命令创建表
select name,value,class fromv$sysstat where name='redosize';
redo size 17358384 2 ---create table redo
create table sdxj.redo2 as select * fromdba_objects;
select name,value,classfromv$sysstat wherename='redosize';
redo size 25952108 2 ---
select name,value,classfromv$sysstat wherename='redosize';
redo size 26996488 2 ---
create table sdxj.redo3nologging as select * fromdba_objects;
select name,value,classfromv$sysstat wherename='redosize';
redo size 27108512 2 ---
---比较
select 25952108-17358384,27108512-26996488from dual;
8593724 112024
归档模式下:create table nologgingcreate table nologging
Insert into >create table >INSERT /*+APPEND */ >create table nologging > INSERT /*+APPEND */ (NOLOGGING).
- Oracle_导入大批量数据到表中的方法
- 大批量导入数据到mysql
- java类大批量导入数据到MYSQL
- Java大批量数据导入到Oracle…
- 大批量导入数据到mysql中
- 大批量数据导入
- SQLServer大批量数据导入
- 运用BCP导出数据库大批量数据以及导入大批量数据到数据库
- 实现秒级execl大批量导入数据到mysql中
- excel中数据导入到Orcale数据库表中的方法
- Excel 导入数据到GridControl中的方法
- ACCESS大批量导入导出数据
- SqlServer大批量导入导出数据
- 使用SqlBulkCopy大批量导入数据
- 多线程实现大批量数据导入
- 多线程实现大批量数据导入
- Sqlbulkcopy--大批量导入Sql数据
- csv文件中的数据导入到oracle数据库中的方法
- OC学习:OC中的协议
- android 在加代码混淆时 ,搜集到的错误(一)
- win7下ndk环境搭建
- kd树简析
- 如何定位占用oracle数据库cpu过高的sql
- Oracle_导入大批量数据到表中的方法
- 引用类型转换
- ZF2多级树形路由Route配置实例
- Unity3D ShaderLab<二>Shader属性
- UML类图简明教程
- 架构师之我见
- C++实现Miller-Rabin素数测试
- zoj1940
- The Number Off of FFF