导航:首页 > 物理学科 > oracle物理读怎么解决

oracle物理读怎么解决

发布时间:2023-04-20 07:25:42

A. 究竟怎么理解Oracle中的物理读,逻辑读,即时读,一致读和读一致性

1. 物理读
这个很容易理解,cpu需要的数据在内存中找不到,那么此时必须去物理磁盘上获取,必然产生物理i/o。
反应在oracle中,就是会话需要某条数据时,在内存的buffer cache中中没有,此时就要去磁盘上的dbf文件中读取。就产生物理读。
2. 逻辑读
这个概念是最清晰,但同时又是最模糊的。
按照计算机原理来讲,逻辑读,表示cpu需要的数据在内存中被找到,数据被直接从内存中传入cpu执行。
3. 即时读(又叫当前读)
按照tom大师的描述:
当前读(Current read):得到块来实际更新所要修改的行时,所完成的获取就是当前读。
这么话怎么理解?
A:读块的时候要加锁。如果读块的目的是为了定位行、然后修改,这时加的锁和纯读的锁并不一样,虽然它们两个都是读操作。
因为加的锁不同,就有了当前读和一致读。
4. 一致读
按照tom大师的描述:
一致读(Consistent read):“发现”要修改的行时,所完成的获取就是一致读。
这么话怎么理解?
A:一致读和当前读放在一起时,一致读指的纯读。
5. 读一致性
这个概念,无庸置疑。
读一致性:Oracle在需要时会使用undo数据来构造CR块,从而提供非阻塞的查询。

B. Oracle的一次查询会产生一次物理读或者逻辑读吗

物理读即是把数据从磁盘读入到buffer catch的过程。
通常情况下是,如果需要数据的时候发现不存在于buffer catch当中,即oracle就会执行物理读。
例子如下:
C:/Documents and Settings/Administrator>sqlplus jenny/jenny
SQL> set autotrace traceonly;
SQL> select * from t_test1;

C. 只有ORACLE 物理文件如何恢复表空间

用户的表空间不能够被轻易地重建
在大多数情况伏旁下,重建表空间是不可能及太辛伍厅高苦的工作.方法是倒备份及做介
质恢复.如果您的系统运行在NOARCHIVELOG模式下,则只有丢失的数据
在online redo log中方可被恢复。
步骤如下:
1)Restore the lost datafile from a backup
2)svrmgrl>; startup mount
3)svrmgrl>; select v1.group#,member,sequence#,first_change#
>; from v$log v1,v$logfile v2
>; where v1.group#=v2.group#;
4)如果数据库运行在NOARCHIVELOG模式下则:
svrmgrl>; select file#,change# from v$recover_file;
如果 CHANGE# 大于最小的FIRST_CHANGE#则数据文件可以被恢复。
如果 CHANGE# 小于最小的FIRST_CHANGE#则数据文件不可恢复。 恢复最近一
次的全备份或腔尺采用方案一.
5)svrmgrl>; recover datafile filename;
6)确认恢复成功
7)svrmgrl>; alter database open resetlogs;
3.只读表空间无需做介质恢复,只要将备份恢复即可.唯一的例外是:
表空间在最后一次备份后被改为read-write 模式
表空间在最后一次备份后被改为read-only 模式
在这种情况下,均需进行介质恢复

D. 怎样减少oracle数据库

其实每个项目需求不一样,肯定处理方法不一样。
你说IO/cpu/内存这些,其实属于数据库调优的部分,最简单的办法就是找瓶颈。
哪方面是瓶颈,就优化哪方面,就像木桶一样,尽量把最短的板子拉长。

因为数据库本身不可能做到绝对完美,只能说在当前需求,当前资源的情况下尽量做到最好。
要真说精髓,那就是随机应变吧。

多注意Top 5 events , 尽量消除等待事件,降低物理读,降低硬解析等等。。

E. oracle安装物理内存不足有什么解决方法

Oracle安装过程物理内存检查及临时temp空间不足解决办法
物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB
(944128.0KB)。
预期值 : N/A
实际值 : N/A
错误列表: –
可用物理内存 PRVF-7531 : 无法在节点上执行物理内存检查 –
Cause: 无法在指示的节点上执行物理内存检查。 – Action: 确保可以访问指定的节点并可以查看内存信息。
可用物理内存 – 此先决条件将测试系统可用物理内存是否至少为 50MB
(51200.0KB)。
预期值 : N/A
实际值 : N/A
错误列表: –
PRVF-7563 : 无法在节点上执行可用内存检查 – Cause: 无法在指示的节点上执行可用内存检查。 – Action: 确保可以访问指定的节点并
可以查看内存信息。
交换空间大小
交换空间大小 – 此先决条件将测试系统是否具有足够的总交换空间。
预期值 : N/A
实际值 : N/A
错误列表: –
PRVF-7574 : 无法在节点上执行交换空间大小检查 – Cause: 无法在
指示的节点上执行交换空间检查。 – Action: 确保可以访问指定的节点并可以查看交换空间信息。
解决办法:
你可以忽略所有强制安装,一般不会影响功能,但如果你有一个好奇的心,想知道为什么会产生这种错误,并且如何解决,请继续阅读事实上Oracle执行先决条件检查是依赖c$共享,很多系统管理员为了安全默认都关闭了这个,所以导致检查不通过。打开方法很简单,确保“服务”里的Server服务正常运行,然后在CMD命令控制台里输入
net share c$=c:
如果提示C盘什么的临时盘大小不足:
C:\Documents and Settings\Administrator\Local Settings\Temp
可与看下自己C盘是否真的太小,不够容纳oracle安装过程中的临时文件。

F. oracle读写问题

回答如下:
1) 开始->运行->cmd.exe
2) d:
3) cd d:\text
4) sqlplus [username]/[password]@[tnsnames] (中括号内的值为你的数据库信息,请自行修改,此句后进入sqlplus状态)
5) set pagesize 1000 --确保不换行
6) set linesize 1000 --确保不折行
7) spool f1.txt
8) select [column1]||'^'||[column2]||'^'||[column3]||.... from emp; -- (中括号内的字段为emp表的所有字段,请按顺序逐一穷举完毕)
9) spool off
10) drop table emp3 purge; --如果此前未存在emp3表,此句可省
11) create table emp3 as select * from emp where 1=2; --创建emp3,结构与emp一模一样
12) host --此句可暂时回到命令行状态
14) notepad mycontrol.ctl ; 编辑sql loader的控制文件
15) load data infile 'f1.txt' truncate into table emp3 fields terminated by '^' ([column1],[column2],[column3],...) --(中括号内的字段为emp表的所有字段轮圆和,请按顺序逐一穷举完毕,然后存盘退出,回到命令行状态)
16) sqlldr userid=[username]/[password]@[tnsnames] control=mycontrol.ctl ; 运行sqlldr命令,以装载数据
17) exit ; 再次回到sqlplus环境
18) select * from emp3; --检腔扰验工作成果腊盯

回答完毕,请给分。

--补充回答如下:
--第一步,生成emp.txt
sqlplus scott/tiger@tnsname
set pagesize 1000
set linesize 1000
--以下目录可自行设定,为讨论,不妨设为d:\temp
spool d:\temp\emp.txt
select
'^'||EMPNO
||'^'||ENAME
||'^'||JOB
||'^'||MGR
||'^'||HIREDATE
||'^'||SAL
||'^'||COMM
||'^'||DEPTNO||'^' --注意首尾处理,确保每个字段均被夹在'^'号中间,以简化后续计算
from emp order by empno;
spool off

--第二步,整理emp.txt(操作系统下用notepad打开此文件,掐头去尾,留下中间干净的数据)

--第三步,导入emp3表
--3.1 创建emp3表
declare
v_num integer;
v_TableName varchar2(40);
v_PurgeClause varchar2(10);
begin
v_TableName:='emp3';
v_PurgeClause:=' purge';
select count(1) into v_num from user_tables where table_name=upper(v_Tablename);
if(v_num>0)then
execute immediate 'drop table '||v_TableName||v_PurgeClause;
end if;
end;
/
create table emp3 as select * from emp where 1=2; --oracle 11g以上,此处可能出现ORA-01536错,请自行解决

--3.2 创建一个oracle目录,指向操作系统的目标目录,例如d:\temp,并授权给scott
-- 如果您的oracle是windows版本,那么可如下撰写
-- 如果您的oracle是linux之类的版本,做法类似,只不过需要先将前面的emp.txt ftp至linux系统对应目录,此处不赘述此类情形
create or replace directory empdir as 'd:\temp';
grant read on directory empdir to scott;

--3.3 开始利用utl_file灌录数据
declare
v_fp utl_file.file_type;
v_line varchar2(1024);
v_int1 integer;
v_int2 integer;

--由于oracle可以隐式转换,字段变量可简单定义成varchar2
v_EMPNO varchar2(100);
v_ENAME varchar2(100);
v_JOB varchar2(100);
v_MGR varchar2(100);
v_HIREDATE varchar2(100);
v_SAL varchar2(100);
v_COMM varchar2(100);
v_DEPTNO varchar2(100);
begin
v_fp:=utl_file.fopen('EMPDIR','emp.txt','r'); --此处务必大写目录名,否则出错
loop
begin
utl_file.get_line(v_fp,v_line);
exception
when others then
dbms_output.put_line('处理完毕');
exit;
end;

--第一个比较特殊处理
v_int1:=instr(v_line,'^',1,1);
v_int2:=instr(v_line,'^',1,2);
v_empno:=substr(v_line,v_int1+1,v_int2-v_int1-1);

--以后均统一处理
v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_ename:=substr(v_line,v_int1+1,v_int2-v_int1-1);

v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_job:=substr(v_line,v_int1+1,v_int2-v_int1-1);

v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_mgr:=substr(v_line,v_int1+1,v_int2-v_int1-1);

v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_hiredate:=substr(v_line,v_int1+1,v_int2-v_int1-1);

v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_sal:=substr(v_line,v_int1+1,v_int2-v_int1-1);

v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_comm:=substr(v_line,v_int1+1,v_int2-v_int1-1);

v_int1:=v_int2;
v_int2:=instr(v_line,'^',v_int1,2);
v_deptno:=substr(v_line,v_int1+1,v_int2-v_int1-1);

insert into emp3(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values(v_empno,v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno);
end loop;
commit;
end;
/

这次该给分了吧?

G. oracle如何读取数据

Oracle读取数据的最大限制取决于操作系统和Oracle对多块读IO的限制。在物理上来说,一个SQL语句要读取某个记录,必须将该记录读取到DB CACHE中,然后才能从DB CACHE中获取,这种访问我们一般称为物理读(READ),如果这个数据已谈戚经存在于DB CACHE中,那么前台进程可以直接从DB CACHE中读取数据,这样的读取成为逻辑读(GET),如果要读取的数据已经被修改,需要从UNDO中读取前映像来获取一致性的数据,那么会从UNDO中取出前映像,和当前的数据块一起形成一个一致性读块(CR BLOCK),然后再从CR BLOCK中读取数据,这种访问方式称为一致性读(CR GET)。 从逻辑上讲, Oracle读取数据通过三种途径:全表扫弯侍渗描( Full Table Sacn,FTS )、引扫描、通过ROWID直接访问。在阅读SQL执行计划的时候,可以通过 TABLE ACCESS子句来查看Oracle访问某个表的方法,一般来说,对于大型的表来说,如果出现 TABLE ACCESS FULL 的提示,是需要加以重视的,一般情况下,对于大表的全表扫描应该是尽量避免的。下面是一个简单的执行计划:Query Plan----------------------------------------- SELECT STATEMENT [CHOOSE] Cost=1234 TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]查看SQL的执行计划的时候,最右边的,最上面的操作是首先被执行的,上面的例子只有一个操作,就是对表“LARGE”进行全表扫描。当这个步骤执行完毕后,就会将结果集返回给上面一层的语句,上面的例子就是 SELECT STATEMENT 这个语句,一般来说 SELECT STATEMENT 是整个执行计划的顶层。 [CHOOSE]表明这个SQL语句的OPTIMIZER_GOAL ,在这个提示的右侧是COST数埋脊据,如果COST是有实际值的,那么说明使用了CBO优化器,如果COST没有实际值,那么说明使用了RBO优化器。比如: SELECT STATEMENT [CHOOSE] Cost=COST只是一个相对的值,只是优化器用来分析访问路径的优劣的,相同的SQL, COST越小的执行计划,起执行效果越好,开销越小。而不同的SQL ,其COST值是没有可比性的。 [:Q65001]指明这部分操作被采用并行查询的方式执行,

H. oracle中逻辑读的单位是什么

有两种读:逻辑读和物理读
数据库读写的单位是数据块。当用户最终得到的结果可能只是某个哪升数据块中的几行或几列。当一个查询语句被执行时,服务器进程会将相关的数据块从数据文件中写入内存(buffer cache)。这就叫做物理读。每读取一个数据块,即是一次物理读。

而用户需要的并不是整个数据块,而是其中的几行或几列。从buffer cache中提取行的过程,便是逻辑读。

而其中逻辑读又分成两种:即时读(current read)和一致性读(consistent read)。
(1)即时读::即时读就是读取数据块当前的最新数据。任早陆何时候在buffer cache中都只有一份当前数据块。即时读陆缓顷通常发生在对数据进行修改,删除操作时。这时,进程会给数据加上行级锁,并且标识数据为“脏数据”。
(2)一致性读:

一致性读就是为了保证数据的一致性。在Buffer Cache中的数据块上都会有最后一次修改数据块时的SCN。
如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和SCN的数据块,然后再更新Buffer Cache中的数据块的数据及其SCN,并标识其为“脏”数据。
当其他进程读取数据块时,会先比较数据块上的SCN和自己的SCN。如果数据块上的SCN小于等于进程本身的SCN,则直接读取数据块上的数据;
如果数据块上的SCN大于进程本身的SCN,则会从回滚段中找出修改前的数据块读取数据。通常,普通查询都是一致性读。

综上所述,逻辑读的原理和过程比较复杂。逻辑读的单位并不能简单的认为是个块。

I. oracle中怎么处理大批量数据更新

可以御察锋使用rowid进行更新,后果是取消随即更新,按照的读入的数据镇晌块顺序进行更新,增加更新效没凳率。但是会出现大量的物理读

阅读全文

与oracle物理读怎么解决相关的资料

热点内容
word中化学式的数字怎么打出来 浏览:703
乙酸乙酯化学式怎么算 浏览:1371
沈阳初中的数学是什么版本的 浏览:1316
华为手机家人共享如何查看地理位置 浏览:1009
一氧化碳还原氧化铝化学方程式怎么配平 浏览:846
数学c什么意思是什么意思是什么 浏览:1368
中考初中地理如何补 浏览:1259
360浏览器历史在哪里下载迅雷下载 浏览:670
数学奥数卡怎么办 浏览:1349
如何回答地理是什么 浏览:988
win7如何删除电脑文件浏览历史 浏览:1021
大学物理实验干什么用的到 浏览:1447
二年级上册数学框框怎么填 浏览:1658
西安瑞禧生物科技有限公司怎么样 浏览:826
武大的分析化学怎么样 浏览:1212
ige电化学发光偏高怎么办 浏览:1300
学而思初中英语和语文怎么样 浏览:1605
下列哪个水飞蓟素化学结构 浏览:1387
化学理学哪些专业好 浏览:1451
数学中的棱的意思是什么 浏览:1016