Import 与Export都是Oracle数据库系统中的两个配套的相关实用程序,如果你想用Export把数据库里的数据卸出到操作系统的相关文件中,而Import实用程序则把Export卸出的数据恢复到数据库中。import过程有时要花费几个小时甚至几天时间才能成功地完成。
不幸的是,在许多情况下,import需要对数据库进行故障的恢复,这时对时间的要求比较高,因而这种性能是不能胜任的。笔者在从事Oracle 系统管理工作两年期间,总结出有几个基本的参数改变可以减少import所需的时间。
一、 系统级别的改变
1?在重建数据库时尽可能增大DB_BLOCK_SIZ参数。块的大小越大,所需I/O循环的次数就越少。这种改变是***性的,因此在修改它的时候应考虑到各种可能的影响。
2?建立并使用一个大的rollback段,同时将其他rollback段关闭(offline)。一个rollback段大约需要***的表(table)的50%的大小就足够了。
3?在import完成之前将数据库置于NOARCHIVELOG模式。这将减少创建和管理archive日志的时间。

4?与rollback段一样,创建几个大的重做日志文件(redo log files),越大越好。关闭一些小的重做日志文件。重做日志文件越大,所需的日志切换的次数就越少。检查警告日志信息如“Thread 1 cannot allocate new log,sequence 17,Checkpoint not complete”,这就意味着日志文件需要扩大或数量需增加。
5?如果可能,尽量将rollback段、表数据和重做日志文件分布在不同的硬盘上。这样可以减少I/O冲突的可能性。
二、 intr.ora参数的改变
1?将LOG_CHECKPOINT_INTERVAL的值置为大于重做日志文件的大小。这个值通常以操作系统的块大小来定义(UNIX系统大多是512字节)。这样可以将检查点checkpoint)减小到最少(仅在日志切换时执行)。
2?增大SORT_AREA_SIZE的值。这种增加取决于机器中其他活动进程的状况以及还有多少可用的空闲内存。我们可以试5-10次来寻找一个***值。若机器开始交换(swapping)及页面(paging)切换,说明值设置得太大。
三、 import选项改变
1?置COMMIT=N。这将导致import在每个对象(如table)结束之后提交(commit),而非缓冲区满提交。这就是我们为什么需要一个大的rollback段。
2?采用一个大的BUFFER值。这个值要视系统活动状况、数据库大小等情况而定。通常几兆字节就够了,但是若有足够的内存这个值还可更大些。同样,我们可以查看页面和交换的情况来确定这个值是否太大。这将减少import进程到文件中读取数据的次数(每次它将读取一个buffer大小的数据)。
3?置INDEXES=N。这将加快导入无索引表的速度。采用INDEXFILE选项,在数据导入完成后建立索引。建立索引时SORT_AREA_SIZE值要足够大。
【编辑推荐】
两个数据循环插入数据库
import ;import ;import ;import ;import ;
public class DBConnection { private static String Driver_Class=; private static String Driver_Url=jdbc:sqlserver://localhost:1433;databaseName=addressBook;// private static String Driver_Class=; //连接Oracle的驱动类// private static String Driver_Url=jdbc:oracle:thin:@localhost:1521:oracle; //连接oralce的url 最后的oracle是你自己配置的服务名称 private static String; //密码 /** 获取连接字符串*/ public static Connection getConnection(){Connection connection = null;try { (Driver_Class); connection = (Driver_Url,Database_User,Database_Password);} catch (ClassNotFoundException e) { ();} catch (SQLException e) { ();}return connection; } /*** 关闭连接* @param rs 结果集对象* @param pStatement PreparedStatement 对象* @param connection 连接对象*/ public static void closeAll(ResultSet rs, PreparedStatement pStatement, Connection connection){try { if(rs!=null){();rs = null; } if(pStatement!=null){();pStatement = null; } if(connection!=null){();connection = null; }}catch (SQLException e) { ();} } }
Connection connection = null; PreparedStatement pStatement = null; ResultSet rs = null;
String s1=null;String s2=null;
int count=0;
String sql = insert into表名 values(?,?);
try { connection = ();
connection (false); pStatement = (sql);
for(int i= 1;i<;i++){ for(int j=1;j<;j++){ s1=new String(name[i](8859_1),gb2312);
s2=new String( mumber[j](8859_1),gb2312);
(1, s1);(2, s2);
connection ();} catch (SQLException e) { ();}finally{ (rs, pStatement, connection);}
oracle数据库中有哪些字符集,字符集之间的子集和超集关系是怎么样的?
oracle数据库的字符集有很多的,具体的也不能一一详细地列举出来了,但是,建库的时候,会有选择字符集的界面,点开下拉条,将会列出oracle所支持的所有字符集(10/12)。 超集与子集是包含和被包含的关系,超集兼容子集。
Oracle数据库的导入/导出???
导出的肯定不止用户的表数据,还有用户的索引、视图、序列等,使用数据库管理员建立的用户的SQL语句肯定没有的啦,因为在数据库中并不会保留这些建表语句撒;导入时,不会自动建立对应的用户和对应的授权,因为导入的时候,需要写要导入的用户的用户名和密码,这样导出的表呀什么的都会导入到这个用户中,而不是建立相应的用户撒;至于具体的导入导出原理,楼主可以去网络搜搜撒,我刚搜了下,有好多的。
发表评论