Oracle的体系结构概览
声明:版本11gR2,CentOS5.8 1 物理结构(文件) 主要性能影响在IO上 (1)controlfile select * from v$controlfile (2)datafile select * from dba_data_files (3)redo?(online logfile) select * from v$logfileselect * from v$log (4)password file
声明:版本11gR2,CentOS5.8
1 物理结构(文件)
主要性能影响在IO上
(1)controlfile
select * from v$controlfile
(2)datafile
select * from dba_data_files
(3)redo?(online logfile)
select * from v$logfile select * from v$log
(4)password file(sys)
select * from dba_users
(从11g开始password项里变为空了,以免被破解)
2 逻辑结构
2.1 实例
instance(memory[sga]+process[background])
实例=内存(sga)+后台进程(background)
查看内存,可以通过以下视图
select * from v$sga_dynamic_components
?后台进程,可以通过下面视图查看
select * fromv$bgprocess where paddr!='00';
? 我们只关心paddr不等于0的就可以了,等于0的都是没启用
2.2实例的管理
参数文件spfilesid.ora,initsid.ora
两个文件可以互相转化
create spfile from pfile; create pfile from spfile;
(1)开启实例分为nomount,mount,open三个阶段

l? nomount阶段
在开启到nomount阶段需要使用到参数文件,而从9i版本开始默认优先使用spfile参数文件,如果spfile文件没有就去使用pfile文件,如果pfile文件还没有,就会报找不到pfile文件的错误。
11g有一个新功能,也许是我才发现吧!!!首先先说下数据库开启时,如果参数文件丢失或者损坏,不会导致数据库直接宕掉,但是如果数据库重新启动的话,就会报错,而且如果要是没有个好的备份的话,那是非常麻烦的事情,如果数据库在运行时及时发现了参数文件丢失或者损坏,可以使用如下方法处理:
create pfile from memory;
所以参数文件一定要有个良好的备份。
可以通过v$instance视图查看数据库状态
select status from v$instance;
通过v$bgprocess视图可以查看后台进程的情况
select * from v$bgprocess where paddr’00’;

l? mount阶段
开启mount阶段需要用到控制文件
可以使用参数control_files查看控制文件所在位置:
show parameter control_files
如果控制文件损坏,在开启数据库的时候就会报错,而且告诉你去alert_sid.log里看具体错误信息,而这个文件所在位置,可以通过background_dump_dest参数去查看:
show parameter background
注:alert_sid.log最大支持到2G大小,所以当业务特殊繁忙或者文件变的比较大的时候需要备份。
l? open阶段
11gR2版本—经测试,其他版本不确定
可以从open阶段到mount阶段在到nomount阶段
alter database close; alter database dismount; shutdown immediate
(2)关闭实例
1.normal
2.transactional
系统有事务的时候就关闭不了
系统有没有事务可以查看v$transaction视图
3.immediate
4.abort
2.3 参数的粗略概述
用db_cache_size和processes两个参数举例
首先查看v$parameter视图可以查看是否是静态参数或者是动态
select name,issys_modifiablefromv$parameter wherename in ('db_cache_size','processes'); NAME ISSYS_MOD -------------------- --------- processes FALSE db_cache_size IMMEDIATE
从ISSYS_MOD字段可以看出db_cache_size参数是立即生效,所以从这个可以看出db_cache_size字段是动态参数。
注意:其中processes参数如果过多比如更改为50000个数量的时候,数据库在重新启动的时候会挂住。
?
2.4 session(process)
A)process
select * from v$process;
包含v$bgprocess
l? 通过如下以下方法可以追溯到OS系统的进程
SQL> select distinct sid fromv$mystat; SID ---------- 37 SQL> select sid,paddr fromv$session where sid=37; SID PADDR ---------- -------- 37 43BC365C SQL> select addr,pid,spidfrom v$process where addr='43BC365C'; ADDR PID SPID -------- ---------------------------------- 43BC365C 20 11633 [root@elvis ~]# ps -ef | grepora root 3762 3732 0 May30 ? 00:01:02 hald-addon-storage: polling/dev/hdc oracle 4604 1 0 May30 ? 00:00:02/u01/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -inherit oracle 7624 1 0 06:22 ? 00:00:07 ora_pmon_elvis oracle 7628 1 0 06:22 ? 00:00:35 ora_vktm_elvis oracle 7634 1 0 06:22 ? 00:00:00 ora_gen0_elvis oracle 7638 1 0 06:22 ? 00:00:01 ora_diag_elvis oracle 7642 1 0 06:22 ? 00:00:00 ora_dbrm_elvis oracle 7646 1 0 06:22 ? 00:00:01 ora_psp0_elvis oracle 7650 1 0 06:22 ? 00:00:35 ora_dia0_elvis oracle 7654 1 0 06:22 ? 00:00:05 ora_mman_elvis oracle 7658 1 0 06:22 ? 00:00:03 ora_dbw0_elvis oracle 7662 1 0 06:22 ? 00:00:02 ora_lgwr_elvis oracle 7666 1 0 06:22 ? 00:00:16 ora_ckpt_elvis oracle 7670 1 0 06:22 ? 00:00:06 ora_smon_elvis oracle 7674 1 0 06:22 ? 00:00:00 ora_reco_elvis oracle 7678 1 0 06:22 ? 00:00:11 ora_mmon_elvis oracle 7682 1 0 06:22 ? 00:00:07 ora_mmnl_elvis oracle 7686 1 0 06:23 ? 00:00:00 ora_d000_elvis oracle 7690 1 0 06:23 ? 00:00:00 ora_s000_elvis oracle 9125 1 0 10:26 ? 00:00:00 ora_arc0_elvis oracle 9129 1 0 10:26 ? 00:00:00 ora_arc1_elvis oracle 9133 1 0 10:26 ? 00:00:00 ora_arc2_elvis oracle 9137 1 0 10:26 ? 00:00:00 ora_arc3_elvis oracle 9177 1 0 10:31 ? 00:00:00 ora_smco_elvis root 11596 11564 0 16:36 pts/0 00:00:00 su - oracle oracle 11597 11596 0 16:36 pts/0 00:00:00 -bash oracle 11629 11597 0 16:36 pts/0 00:00:00 rlwrapsqlplus / as sysdba oracle 11630 11629 0 16:36 pts/1 00:00:00sqlplus as sysdba oracle 11633 11630 0 16:36 ? 00:00:00oracleelvis (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 11637 1 0 16:36 ? 00:00:01 oracleelvis (LOCAL=NO) oracle 11678 1 0 16:38 ? 00:00:00 oracleelvis (LOCAL=NO) oracle 11682 1 0 16:39 ? 00:00:00 ora_w000_elvis root 11735 11695 0 16:42 pts/2 00:00:00 grep ora
注:如果是windows环境下情况较复杂,具体的进程ID需要去查看线程,而Windows不能直接查看进程下的线程必须通过第三方工具去查看。
l? 从进程资源占用情况追溯到session
这种情况下,可以查找到是哪个session在占用大量资源,甚至能查找到
B)session
l? 资源视图—重要
select * from v$resource_limit;
l? 命令类型视图,根据v$session视图里的command列判断
select * from audit_actions;
l?通过session视图的sql_id列,查看到sql语句
select * from v$sql where sql_id=’ ’;
模拟消耗资源的死循环的语句
declare number:=0; begin loop i:=1; end loop: end;
找到后Kill掉session
alter system kill session ’67,23’;
或者直接Kill掉进程
Window下是orakill命令,服务器端具备
Linux下是kill,top,ps –ef | grep ora等命令
Kill用法
--kill -9 sid 强制kill掉
C)connection
专有连接
共享连接
基本不使用,了解即可
池中连接
3 深入逻辑结构
3.1 表空间
database->tablespace->segments->extents->osblocks
===============================================
selelct * from dba_tablespaces; select * from dba_data_files; select * from dba_temp_files; select * from dba_segment;
?--一个表空间可以包含最多1023个数据文件
注:从11g开始有延迟段的概念,就是表中无数据的话,Oracle不分配空间
通过参数deferred_segment_creation查看延迟段的开启情况
--show parameterdeferred_segment_creation
===============================================
创建一个表空间
create tablespace orcl datafile 'E:\ORADATA\orcl\orcl01.dbf' size 10M;
然后创建一个表并指定存到orcl表空间中
create table t(id int) tablespace orcl;
表空间的分配方式 (extent为单位)
autoallocate(默认)
>1g???? 64m???8096blocks
Uniform [指定增长大小]
始终都会按指定的大小增长
分配方式可以查看dba_tablespace视图中allocate_type字段为system就是默认??
在关掉这个表空间
alter tablespace orcl offline;
->notes:虽然表不能访问和修改了,但可以删除,相当于数据库
? 关闭了,只不过这是局部关闭。
回收站命令 show recyclebin 可以查询,但不可以对回收站里的表执行DDL/DML
select * from " BIN$wHUg/RiVRxuXtwyypSxnTw==$0 TABLE" ;
从回收站里拿出来?闪回
flashback table t to before drop;
?
================================================
可以使用EM来观察表空间的使用率
?--登录->administration->tablespace
3.2 表空间和数据文件的管理
创建一个表
create table tt tablespace orcl as select * from dba_objects;
持续插入数据
insert into tt select * from tt;
当表空间大小不足时,扩展表空间大致有以下几种方式:
1.直接扩展数据文件大小
alter database datafile file_id resize 20M;
2.自动扩展数据文件大小
alter database datafile 5 autoextend on next 1M maxsize 1024M;
3.手动扩展表空间的大小
alter tablespace orcl add datafile 'D:\oradata\orcl\orcl02.dbf' autoextend on next 1M maxsize 1024M;
为tt表分配了40M的空间大小且会显示但里面没有数据是空的(插入会遵循有空间的优先插入)
alter table tt allocate extent(datafile'D:\oradata\orcl\orcl02.dbf' size 40M);
查看表中块的使用情况方法:
1.包的方式
execdbms_stats.gather_table_stats(‘table’,’TEST’);
2.分析表—这种更准确
analyze table tt computestatistics;
从10g开始可以为tt表紧缩
alter table t shrink space;
但紧缩需要行移动(row movement)
alter table t shrink space;
这样就可以紧缩了。。。
查看row movement 是否可以移动
select * from dba_tables where table_name='T';
===============================================================
把表t移动到表空间2里,观察会有什么变化
alter table t move tablespace orcl02;
案例一:
?优化问题,观察磁盘读取速率及各个文件的读取情况。
?视图:
?--dba打头的属于静态数据来自于system里的数据字典
??--v$打头的属于动态,一般来自于控制文件等,且存储在内存中,所以服务器尽量不要重启,重启后,动态信息会消失,当然从10g
?开始oracle已经每隔一个小时会存储下动态信息
select * from v$filestat;
3.3 undo表空间
创建undo表空间
create undo tablespace undotbs2 database'E:\oradata\orcl\undotbs02.dbf' size 10M;
在表t中加入一列
alter table t add name varchar2(10) default 'a'; insert into t values(1,'elvis'); insert into t values(2,'elvis'); commit;
然后更新下列值
updata t set name='c' where id=1; select * from t;
不提交通过另外一个窗口同一个用户身份去查询观察。
?--当然不会看到,因为没有提交
作者:elvis_dataguru 发表于2013-6-21 15:07:40 原文链接
阅读:38 评论:0 查看评论
原文地址:Oracle的体系结构概览, 感谢原作者分享。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

Oracle 日誌文件寫滿時,可採用以下解決方案:1)清理舊日誌文件;2)增加日誌文件大小;3)增加日誌文件組;4)設置自動日誌管理;5)重新初始化數據庫。在實施任何解決方案前,建議備份數據庫以防數據丟失。

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。
