如何向Oracle数据库表中进行大数据量的插入并提交?

如何向Oracle数据库表中进行大数据量的插入并提交?,第1张

一次折腾几千万的话,

那么设置一下,

20W了,

就自动提交一下。

set

autocommit

on

set

autocommit

200000

然后,假如你的目标数据库

是归档的话,

可以

INSERT

/*+

append

*/

INTO

目标表

nologging

SELECT

*

FROM

源表@DBLINK

commit

set

autocommit

off

假如你的

目标表

上面,

索引的话,

建议先删除

索引。

上面的

INSERT

语句执行完毕后,

再重建索引。

数据库用户的创建、权限的分配

数据库安装完成后,有两个系统级的用户:

system 默认密码为:manager

sys默认密码为:change_on_install

在安装的数据库目录中找到 \oracle\product\9.2\bin 中的sqlplus程序, 运行:./sqlplus system/manager@ora9i

用system用户创建自己的用户、权限;sql语句如下:

1、创建用户:

create user username identified by pwd default tablespace users Temporary TABLESPACE Temp

2、 用户授权 grant connect,resource,dba to business

3、 提交: commit

数据库数据的导入,导出

假设有两个数据库 9.0.1 与 9.0.2 1.导出数据

exp system用户/system的密码@服务器名 owner用户名=“oradial ” file="oradial.dmp"

说明:

(1) 如果该命令是在本地执行,则不用指定服务器名

(2) owner用户名,通过sys用户的登录所创建的用户名。同时授予的权限包括

connect , dba , resource ,还要创建表空间。

(3) system用户名,owner用户名 是9.0.1数据库中的用户 2.导入数据

imp system用户/system的密码@服务器名 file=oradial.dmp fromuser(用户名)=oradial touser(用户名)=abc

若了解更多详情,在DOS下输入 exp help = y imp help = y

这个commit应该是本机的,和dblink没什么关系,而且就算你找到的dblink的那个session那么也不行,以为这个session在dblink的 *** 作完成后已经关闭了。

个人感觉不要这么远程insert,最好是调用一个那个数据库上的过程去insert这样的话,在那个过程中commit肯定是没有问题的。

如果必须要这么写,那么可以加入一条insert和一条delete

就是上面是正常insert的语句。

下面有一条delete(这条删除一个绝对不可能出现的一条试试)

按照你的说法,第二个事务提交时,第一个事务才能commit。可是这样会出现问题,因为如果你大量提交,那么数据库会因此夯住的,所以你看看第一个办法行不行,我觉得第一个办法还靠谱点。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6659771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存