OS环境:10.0.1.28/windows 2008/64位 10.0.1.31/windows 2008/64位
OS配置:2CPU/16G/2TB 2CPU/16G/2TB
数据库版本:ORACLE 10.2.1 ORACLE 11.2.1
服务器信息:ip/10.0.1.28 用户/tranuser 用户表空间/tranuser
ip/10.0.1.31 用户/tranuser 用户表空间/tranuser
实施方案:将10.0.1.28服务器上的tranuser用户下所有对象逻辑
移到10.0.1.31服务器的tranuser用户内。
实施工具:expdp/impdp
实施规划:数据量114G
导入速度:1min/36m
导入时间:24小时
瓶 颈: 通过生成AWR报告,可以看出瓶颈为user/IO
实施过程:
//服务器10.0.1.28
使用expdp工具以schema=tranuser模式导出
使用ftp服务器将导出的dmp文件传输到10.0.1.31服务器上
导出数据实施脚本:
1:create directory my_dir as 'd:/expdp'
2:grant read,write on directory my_dir to tranuser
3:expdp tranuser/****** DIRECTORY=my_dir DUMPFILE=tranuser.dmp schema=tranuser job_name=tranuser
//服务器10.0.1.31
创建tranuser用户
创建tranuser表空间
赋予tranuser用户权限
验证用户下的默认表空间
查询数据导入的信息更新
实施脚本:
1:create user tranuser identified by tranuser default tablespace tranuser;
2:create tablespace TRANUSER datafile 'd:/oracledata/tranuser01.dbf' size 20480M;
3:grant connect,resource to tranuser;
4:select username,default_tablespace from dba_users where username='TRANUSER';
导入数据实施脚本:
1:create directory my_dir as 'd:/impdp'
2:grant read,write on directory my_dir to tranuser
3:impdp tranuser/***** DIRECTORY=my_dir DUMPFILE=tranuser.dmp schema=tranuser job_name=tranuser
4:SQL> select dbf.tablespace_name,
dbf.totalspace "总量(M)",
dbf.totalblocks as 总块数,
dfs.freespace "剩余总量(M)",
dfs.freeblocks "剩余块数",
dfs.freespace/1024 "剩余总量(G)",
(dbf.totalspace-dfs.freespace)/1024 "已使用量(G)",
(dfs.freespace / dbf.totalspace) * 100 "空闲比例"
from (select t.tablespace_name,
sum(t.bytes) / 1024 / 1024 totalspace,
sum(t.blocks) totalblocks
from dba_data_files t
group by t.tablespace_name) dbf,
(select tt.tablespace_name,
sum(tt.bytes) / 1024 / 1024 freespace,
sum(tt.blocks) freeblocks
from dba_free_space tt
group by tt.tablespace_name) dfs
where trim(dbf.tablespace_name) = trim(dfs.tablespace_name)
and dbf.tablespace_name in ('JYDB','TRANUSER','CCXE');
实施过程问题:数据库在导入的过程中,开发人员提出导入缓慢的质疑,要求DBA发现并解决问题。
发现问题:
1:通过查看告警日志文件可以看出日志切换速度太快,基本十几秒钟切换一次(日志文件大小为100M,1*5组),因为切换日志要发生增量检查点,要将脏数据块写入数据文件,所以频繁切换影响数据库性能。
解决方案:将日志文件加大,每组日志文件加到500M,共5组,再次查看告警日志文件,发现切换频率降低,每五分钟切换一次,数据库性能提升。
2:因为导入数据时,数据库会发生大量的insert操作,直接接触的内存区域则为buffer cache,可通过select * from V$MEMORY_DYNAMIC_COMPONENTS;语句查看当前内存的使用配分情况,根据分析来设定SGA的大小,而导入时则会创建索引,因此会发生大量的排序,PGA也要相应的调整。
解决方案: Show parameter sga
Show parameter pga;
Alter system set pre_page_sga=6g scope=spfile
Alter system set pga_aggregate_target=6g scope=spfile;
导出/导入前期规划:
1:设置好对应的参数:如SGA,PAG,BUFFE, log buffer等
2:字符集:包括源数据库,客户端,目标数据库字符集
3:PARALLEL:并行度,可以加快到导出导入的速度
4:索引:导入时为了加快速度,可以先删除索引,导入后重建
5:约束:导出/导入时最少把约束取消,特别是主外键
6:日志:将日志文件大小设置好,避免频繁出发增量检查点
7:数据块:根据情况而定,大数据块可以插入大行,减少IO,避免行连接
8:数据文件:一次规划好数据文件,不要开启自动扩展,因为扩展后要写数据字典,影响性能。
9:为了导入时避免不必要的报错,把导入用户赋予DBA权限
10:导出/导入时避免参数的书写问题,参数要加前面。
11: 如果数据库设为归档,那么要把归档进程的数量增加。