Exp和imp的dmp:
关于oracle的导入 导出工具跟oracle的版本的概念关系一直是迷迷糊糊的,跟网友们的讨论一样:高版本兼容低版本。
这个解释应该是export的导出版本应该低于或等于imp的导入版本。例如oracle 9i的数据库服务器无法用oracle 10g的客户端导出,由于dmp文件的imp是9I的,但是需要exp的版本却是10g的,同样还有10g客户端导出的dmp文件无法导入到oracle 9I的数据库中。
Dmp文件是平台独立的二进制文件,里面存储元数据(create和alert语句)和数据本身,只要是oracle版本允许可以导入导出到任何平台,但是由于在windows和文件ftp传输中,会默地把dmp文件当成文本文件,这样会破坏dmp文件,所以在windows和文件ftp传输中选择二进制传输。
数据磊文件:
Oracle 10g推出了数据磊格式,数据磊格式也是跨平台的二进制文件,包含有存储为xml的元数据(不是create和alter的语句),可能还包含数据,由于使用了xml,impdp和expdp有一些复杂的过滤和转换功能。Dmp文件元数据create alter语句在导入工具执行sql需要解析每一条sql,impdp只需要简单的xml转换就可以达到。
关于手动pga管理中排序sort_area_size测试
在Session A执行
sql>create table sess_stats(name varchar2(80),value number,diff number);
--创建表sess_stats记录排序操作中uga和pga使用
SQL> alter session set workarea_size_policy=manual;
Session altered
SQL> alter session set sort_area_size=65536;--设置sort_area_size排序区为64KB
Session altered
SQL> select * from v$mystat where rownum=1;--记录sid
SID STATISTIC# VALUE
---------- ---------- ----------
126 0 1
在执行排序sql之前在session B运行merge into sql语句记录此前的记录信息
Session B:
Sql>merge into sess_stats
Using
(select name,value from v$statname a,v$sesstat b
Where a.statistic#=b.statistic#
And b.sid=$sid—输出sid等于运行排序sql的sid
And (a.name like '%ga%' or a.name like '%direct temp%'))curr_stats
On(sess_stats.name=curr_stats.name)
When matched then
Update set diff=curr_stats.value-sess_stats.value,value=curr_stats.value
When not match then
Insert(name,value,diff) values(curr_stats.name,curr_stats.value,null);
/
Sql>Commit;
/
回到session A运行排序操作
Session A
set termout off
select * from t order by 1,2,3,4;
set termout on
运行完毕后再次在session b运行merge into更新记录。
SQL> select * from sess_stats;
NAME VALUE DIFF
------------------------------ ---------- ----------
calls to kcmgas 5 2
session pga memory max 1302100 720896
session pga memory 581204 65536
session uga memory 221744 65464
session uga memory max 969932 682724
physical writes direct tempora 6108 3054
ry tablespace
physical reads direct temporar 6108 3054
y tablespace
可以看出在sort_area_size=64KB下,sql语句对临时表空间执行了3054次读和写I/O,为了完成查询和排序,oracle分配了排序区,pga和uga都增大,session uga memory max和session pga memory max 来执行排序sql,排序完毕后又回缩value的session uga memory和session pga memory。
类似当设置sort_area_size为1MB,相应的pga和uga 临时表空间I/O
SQL> select * from sess_stats;
NAME VALUE DIFF
------------------------------ ---------- ----------
calls to kcmgas 5 0
session pga memory max 2416212 1114112
session pga memory 581204 0
session uga memory 221744 0
session uga memory max 1400096 430164
physical writes direct tempora 6801 693
ry tablespace
physical reads direct temporar 6801 693
类似使用1GB的sort_area_size排序区,记录的pga和uga 临时表空间I/O信息
SQL> select * from sess_stats;
NAME VALUE DIFF
------------------------------ ---------- ----------
calls to kcmgas 5 0
session pga memory max 68345428 65929216
session pga memory 581204 0
session uga memory 287208 65464
session uga memory max 67331120 65931024
physical writes direct tempora 6801 0
ry tablespace
physical reads direct temporar 6801 0
y tablespace
自动pga内存管理:
尽可能充分的使用ram,而且尽量不会超过可用的pga_aggregate_target的大小。少量用户时,会尽可能分配过多ram给用户,随着系统负载的增加,会最大限度使用内存,但是会减少每个用户分配,然后随着系统负载减少,为每个用户分配的ram又将增加(但是出于系统内存需求,有时可能会大于这个值)
对于串行的session,每个工作区(排序区和散列区)最多只能使用5%pga_aggregate_target。
并行查询的session,工作区最多只能使用30%pga_aggregate_target内存,每个并行进程最多只能使用0.3pga_aggregate_target/parallel n。
少量用户需要排序和散列时,oracle会分配更多的内存给少量用户以减少磁盘I/O,而如果大量用户需要排序和散列消耗内存时,oracle又会合理平衡的分配内存给相应用户,在pga_aggregate_target的限制下充分使用内存。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1057351/ ,如需转载,请注明出处,否则将追究法律责任。