符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
一、使用PLSQL导出导入ORACLE数据库:
宁河ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
1、打开plsql--工具----》导出用户对象(可以导出表结构和序列、视图)
ps:如果上面不选中"包括所有者",这样到导出的表结构等就不包含所有者,
这样就可以将A所有者的表结构等导入到B所有者的表空间中
2、导出表结构和表数据:
1、想要导入数据库必须首先创建用户和表空间并赋权限
(1)创建用户:
(2)创建表空间:电脑开始菜单-----》找到Oracle目录----》找到数据要导入进的数据库---》打开该数据库的控制台---》然后可以创建表空间
2、导入表结构、序列和数据
(1)导入表结构和序列: plsql---》工具---》导入表
(2)导入表数据:
到此数据导入完成;
注:(1)创建的用户和表空间是和导出数据库中的用户和表空间对应的;如要从A数据库中导出B用户C表空间下的所有表、数据、序列到M数据库;则在M数据库中创建B用户
和C表 空间。
(2)oracle11数据库不能导出orcale10的数据
(3)plsql导出表数据是如果数据中用Long类型的大数据,导出格式不能是sql,只有dmp格式才可以。
Oracle ExpImp导入导出工具性能调优
Oracle Exp/Imp工具是一个操作简单、方便灵活的备份恢复和数据迁移工具,它可以实施全库级、用户级、表级的数据备份和恢复。对于数据量在G级或G级以内,强调高可用性,可以容忍少量数据丢失的数据库系统,Exp/Imp是普遍使用的逻辑备份方式。目前现网很多生产系统均使用Exp/Imp进行备份恢复。数据量达到G级以后,备份恢复的时间明显拉长了,有没有方法能够有效提高Exp/Imp的速度呢?答案是肯定的,某些方法还可以成倍的提高速度,本文就从Exp、Imp两个工具分别探讨优化备份恢复性能的方法。
1 Exp调优
1.1 使用DIRECT和RECORDLENGTH选项
DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。
和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:
exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
直接路径导出根据Oracle版本不同,有一些使用限制。比较重要的限制有,8i及以下版本不支持导出客户端和数据库的字符集转换,因此导出前必须保证NLS_LANG设置正确;8.1.5及以下版本不支持导出含LOBs对象的表;不能使用QUERY参数等。
1.2 使用管道技术
管道是从一个程序进程向另一个程序进程单向传送信息的技术。通常,管道把一个进程的输出传给另一进程作为输入。如果导出的数据量很大,可以利用管道直接生成最终的压缩文件,所耗费的时间和不压缩直接导出的时间相当。这样一来,不仅能够解决磁盘空间不足的问题,而且省去了单独压缩文件的时间;如果需要传输导出文件,还可以减少网络传输的时间。比如,一个10G的文件单独压缩可能需要半小时以上的时间。虽然管道技术不能够直接缩短Exp/Imp本身的时间,但节省出来的压缩时间非常可观。管道和Exp结合的具体使用方法如下:
导出数据示例:
% mknod /tmp/exp_pipe p # Make the pipe
% compress /tmp/exp_pipe export.dmp.Z # Background compress
% exp file=/tmp/exp_pipe # Export to the pipe
2 Imp调优
Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。
2.1 使用管道技术
前面已经说明了Exp时如何使用管道,在导入时管道的作用是相同,不仅能够解决磁盘空间不足的问题,而且省去了单独解压缩文件的时间。在大数据量导入导出的时候,推荐一定要使用管道。
导入数据示例:
2.2 避免I/O竞争
Import是一个I/O密集的操作,避免I/O竞争可以加快导入速度。如果可能,不要在系统高峰的时间导入数据,不要在导入数据时运行job等可能竞争系统资源的操作。
2.3 增加排序区
Oracle Import进程先导入数据再创建索引,不论INDEXES值设为YES或者NO,主键的索引是一定会创建的。创建索引的时候需要用到排序区,在内存大小不足的时候,使用临时表空间进行磁盘排序,由于磁盘排序效率和内存排序效率相差好几个数量级。增加排序区可以大大提高创建索引的效率,从而加快导入速度。
8i及其以下版本:导入数据前增加数据库的sort_area_size大小,可设为正常值的5-10倍。但这个值设定会影响到所有会话,设的过高有可能导致内存不足出现paging, swapping现象。更为稳妥的方法是,对于大表和索引特别多的表,只导数据不导索引。导完数据后,创建一个会话,设定当前会话的sort_area_size一个足够大的值,再手工创建索引。
9i:在workarea_size_policy=AUTO的情况下,所有会话的UGA共用pga_aggregate_target定义的内存,不必单独设定sort_area_size。导入数据前增加pga_aggregate_target大小,如果机器内存够大,可从通常设定的500M提高到1-2G。pga_aggregate_target大小可以动态调整,导入完成后可在线调回原值。
2.4 调整BUFFER选项
Imp参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000
2.5 使用COMMIT=Y选项
COMMIT=Y表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次。这样会大大减少对系统回滚段等资源的消耗,对顺利完成导入是有益的。
2.6 使用INDEXES=N选项
前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N 只导入数据不创建索引,从而加快导入速度。
我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
2.7 增加LARGE_POOL_SIZE
如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。
检查数据库是否在MTS模式下:
SQLselect distinct server from v$session;
如果返回值出现none或shared,说明启用了MTS。
附录:EXP/IMP命令选项注释
exp help=y
通过输入 EXP 命令和用户名/口令,您可以
后接用户名/口令的命令:
例程: EXP SCOTT/TIGER
或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”
按照不同参数。要指定参数,您可以使用关键字:
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)
OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)
FEEDBACK 每 x 行的显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整的或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名
imp help=y
可以通过输入 IMP 命令和您的用户名/口令
后接用户名/口令的命令:
例程: IMP SCOTT/TIGER
或者, 可以通过输入 IMP 命令和各种参数来控制“导入”
按照不同参数。要指定参数,您可以使用关键字:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明(默认) 关键字 说明(默认)
------------------------------------------------------------------------
USERID 用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有人用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
#includeiostream
using namespace std;
void main() {
int n;
cin n;
int* a=new int[n];
int* order=new int[n];
for(int i=0; in; i++) {
cin a[i]; order[i]=0;
}
int eqNum=0;
for(int ord=1; ord+eqNum=n; ord++) {
int first=0;
while(order[first]!=0) first++;
// cout "ord: " ord ", first: " first ;
int min=a[first], minAt=first;
for(int j=first+1; jn; j++) {
if(order[j]!=0) continue;
if(a[j]min) { min=a[j]; minAt=j; }
}
// cout ", minAt: " minAt ", min: " min endl;
int ord0=ord;
order[minAt]=ord0;
for(int k=minAt+1; kn; k++) {
if(a[k]==min) { order[k]=ord0; eqNum++; }
}
}
for(int i=0; in; i++) {
if(i0) cout " ";
cout order[i];
}
}
Oracle导出导出有两中方式:一、利用exp imp导出导入;二、利用Oracel数据泵expdp impdp导出导入。
一、利用exp imp导出导入
exp imp 语法如下:
exp:
1) 将数据库orcl完全导出
exp system/manager@orcl file=d:\orcl_bak.dmp full=y
2) 将数据库中system用户的表导出
exp system/manager@orcl file=d:\system_bak.dmp owner=system
3) 将数据库中表table1,table2导出
exp system/manager@orcl file=d:\table_bak.dmp tables=(table1,table2)
4) 将数据库中的表customer中的字段mobile以"139"开头的数据导出
exp system/manager@orcl file=d:\mobile_bak.dmp tables=customer query=\"where mobile like '139%' \"
imp:
1) 将备份文件bak.dmp导出数据库
imp system/manager@orcl file=d:\bak.dmp
如果数据表中表已经存在,会提示错误,在后面加上ignore=y就可以了。
2) 将备份文件bak.dmp中的表table1导入
imp system/manager@orcl file=d:\bak.dmp tables=(table1)
exp imp导出导入数据方式的好处是只要你本地安装了Oracle客户端,你就可以将服务器中的数据导出到你本地计算机。同样也可以将dmp文件从你本地导入到服务器数据库中。但是这种方式在Oracle11g版本中会出现一个问题:不能导出空表。Oracle11g新增了一个参数deferred_segment_creation,含义是段延迟创建,默认是true。当你新建了一张表,并且没用向其中插入数据时,这个表不会立即分配segment。
解决办法:
1、设置deferred_segment_creation参数为false后,无论是空表,还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQLalter system set deferred_segment_creation=false;
查看:
SQLshow parameter deferred_segment_creation;
该值设置后,只对后面新增的表起作用,对之前建立的空表不起作用,并且注意要重启数据库让参数生效。
2、使用 ALLOCATE EXTEN
使用 ALLOCATE EXTEN可以为数据库对象分配Extent,语法如下:
alter table table_name allocate extent
构建对空表分配空间的SQL命令:
SQLselect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
批量生成要修改的语句。
然后执行这些修改语句,对所有空表分配空间。
此时用exp命令,可将包括空表在内的所有表导出。
二、利用expdp impdp导出导入
在Oracle10g中exp imp被重新设计为Oracle Data Pump(保留了原有的 exp imp工具)
数据泵与传统导出导入的区别;
1) exp和imp是客户端工具,他们既可以在客户端使用,也可以在服务端使用。
2) expdp和impdp是服务端工具,只能在Oracle服务端使用。
3) imp只适用于exp导出文件,impdp只适用于expdp导出文件。
expdp导出数据:
1、为输出路径建立一个数据库的directory对象。
create or replace directory dumpdir as 'd:\';
可以通过:select * from dba_directories;查看。
2、给将要进行数据导出的用户授权访问。
grant read,write on directory dumpdir to test_expdp;
3、将数据导出
expdp test_expdp/test_expdp directory=dumpdir dumpfile=test_expdp_bak.dmp logfile=test_expdp_bak.log schemas=test_expdp
注意:这句话在cmd窗口中运行,并且最后不要加分号,否则会提示错误。因为这句话是操作系统命令而不是SQL。
impdp导入数据:
1、给将要进行数据导入的用户授权访问。
grant read,write on directory dumpdir to test_impdp;
2、将数据导入
impdp test_impdp/impdp directory=dumpdir dumpfile=test_expdp_bak.dmp remap_schema=test_expdp:test_impdp
1、首先在oracle建立数据表的时候,对表的命名有以下规范:以字母开头表名长度不能超过30个字符,不能使用oracle保留关键字,可以使用A-Z,a-z,0-9,#,$等。
2、如果表名中包含特殊字符是直接报错的。如下图使用了 *。
3、在建立表的时候,数字也是不能使用表名的开始的。
4、但如果使用双引号对表名进行规范的话,是可以建立以数字或者包含特殊字符的表名的。
5、过这样建立的表名,在查询数据的时候是非常麻烦的,查询时也要加双引号。而且这样建立的表名,在项目运行的过程中也非常容易造成各种麻烦,所以尽量不要使用。
你这是插入数据吧
其实id顺序无所谓,以后即使顺序乱了,查询的时候使用order by 就可以了