一.oracle11g的新特性,表中记录数是0时不分配segment,所以空表不能被导出
解决方法:
1.导入或创建数据库之前执行
SQL> alter system set deferred_segment_creation=false;
2.导入或创建数据库之后修改方法
每个用户单独执行,通过select 来生成修改语句:
select ‘alter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0
然后执行:
alter table E2USER_STATE allocate extent;
alter table ENTERPRISE_E2USER allocate extent;
alter table ENTERPRISE_INFO_TYPE allocate extent;
alter table ENTERPRISE_MAPMARK allocate extent;
alter table ENTERPRISE_NEEDTASK allocate extent;
alter table ENTERPRISE_PICTURE allocate extent;
alter table ENTERPRISE_REPORT allocate extent;
alter table ENTERPRISE_REPORT_TYPE allocate extent;
二.开启附加日志
在oracle中我们可以通过rowid来定位某条记录,但是目标端的数据库和源端数据库的数据库可能完全不一样,所以无法通过rowid来确定源端数据库的逻辑变化,可以使用附加日志supplemental log.
数据库在开启附加日志功能后,对于源端的修改操作,oracle会同时追加能够标示记录的列到redo log.这样目标端数据库就可以知道源端发生了哪些具体的变化.
SQL> alter database add supplemental log data;
SQL> alter system switch logfile;
SQL> select supplemental_log_data_min from v$database;
三.开启强制日志模式
SQL> alter database force logging;
四.自动内存管理(AMM)
采用AMM时需要对以下参数进行调整
MEMORY_MAX_TARGET
MEMORY_TARGET
SGA_MAX_SIZE
memory_target=0表示禁用AMM
自动内存管理是用两个初始化参数进行配置的:
MEMORY_TARGET:动态控制SGA和PGA时,Oracle总共可以使用的共享内存大小,提供给Oracle的内存总量是可以动态增大,也可以动态减小,它不能超过MEMORY_MAX_TARGET参数设置的大小,默认值是0。
MEMORY_MAX_TARGET:这个参数定义了MEMORY_TARGET最大可以达到而不用重启实例的值,如果没有设置MEMORY_MAX_TARGET值,默认等于MEMORY_TARGET的值。
使用动态内存管理时,SGA_TARGET和PGA_AGGREGATE_TARGET代表它们各自内存区域的最小设置,要让Oracle完全控制内存管理,这两个参数应该设置为0。
A:如Memory_target设置为非0值,表示启用AMM
1.sga_target和pga_aggregate_target已经设置大小
如果Oracle 中已经设置了参数sga_target和pga_aggregate_target,则这两个参数将各自被分配为最小值最为它们的目标值。Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET,大小和 memory_max_size 一致。
2.sga_target设置大小, pga_aggregate_target 没有设置大小
pga_aggregate_target初始化值=memory_target-sga_target
3.sga_target没有设置大小, pga_aggregate_target设置大小
sga_target 初始化值=memory_target-pga_aggregate_target
4.sga_target和pga_aggregate_target都没有设置大小
Oracle 11g 中对这种sga_target 和pga_aggregate_target 都没有设定大小的情况下,Oracle将对这两个值没有最小值和默认值。Oracle 将根据数据库运行状况进行分配大小。 但在数据库启动是会有一个固定比例来分配:
sga_target =memory_target *60%
pga_aggregate_target=memory_target *40%
B:如果Memory_target=0(在11g 中默认为0)
11g中默认为0则初始状态下取消了Memory_target的作用,完全和10g在内存管理上一致,完全向下兼容。
1.SGA_TARGET设置值
自动调节SGA 中的shared pool,buffer cache,redo log buffer,java pool,larger pool等内存空间的大小。PGA 则依赖pga_aggregate_target 的大小。sga 和pga 不能自动增长和自动缩小。
2.SGA_TARGET和PGA_AGGREGATE_TARGET 都没有设置
SGA 中的各组件大小都要明确设定,不能自动调整各组建大小,PGA不能自动增长和收缩。
五.连接超时问题处理
这种情况最有可能是listener.log文件过大造成的(超过4G),windows下常有此问题,处理方法:
停止监听服务,将app\administrator\diag\tnslsnr\机器名\listenrt\trace下监听日志文件
listener.log删除,启用监听