Oracle结构知识学习+部分函数实例
一 Oracle的结构1 实例(instance) 是内存和后台进程的集合, 数据库是数据的物理储存;实例和数据库的关系是一对多的关系;
2 多个实例同时驱动一个'数据库'的架构 叫集群(RAC)
3 Oracle的内存由PGA(程序全局区,包含服务器进程的数据和控信息,内容不共享),和SGA;
4 Oracle的逻辑结构由表空间(tablespace),段(segment),区(extent),数据块(datablock)组成,
二 oracle的数据字典(DATA DICTIONARY)
1 数据字典的内容
1)数据字典的表的拥有者是sys
2)内容:所有Oracle用户的信息;
表空间,数据文件的信息
权限,角色信息
模式,对象的信息(表,视图,过程,函数,触发器等)
完整性约束信息
数据库中 对象的空间分布以及当前使用情况
审计信息(谁修改过对象)
3)结构:
base TABLES :用户无法读取
基表视图: 用户可以访问,这些视图以USER ALL DBA 作为前缀,不同前缀代表的权限不同
三 Oracle的逻辑结构
1 数据块:datablock
1)块头:HEADER 存放块的基本信息
2)表目录: TABLE DICTIONARY 存放表的信息,如果表的数据存放在这个块,则表的相关信息存放在这个块的表目录
3)行目录: ROW DIRECTORY 如果块中有行数据存在,则这些行的信息存在行目录中 包含行的存放地址
4)行数据: ROW DATA 正真存放表数据 和索引数据的地方
5)空余空间: free SPACE 未使用分区域,用于新行的插入和行的更新
6)头部信息区:Overhead 块头 表目录 行目录的合称 ,此区不存放数据 只存放整个块的信息(84BYTE 到 107byte)
(当块中自由空间不够的时候,数据库会自动合并不连续的自由空间)
7)行链接:如果一行数据很大 ,则可能占用多个块,则此行 叫做 链接行, oracle操作的过程叫做行链接(ROW chaining)
8)行迁移;ROW migrating 更新数据的时候 块的iyou空间不够,将这行数据迁移到新块,原块保留指针,指向此处
(行链接和迁移都会影响数据库性能)
9) 块的标准大小由初始化参数db_block_size指定;
2区extent:
1)由连续的块(datablock)构成,是一段连续的储存空间
2)创建表时 自动创建初始区(INITIAL extent) (一个表由一个段或者多个段构成,比如分区表)
3)一个区的数据满了 会再分配一个,依次递增;段的头部含有区的一个目录;
4)区的分配机制:
存储参数:规定如何给段(表)分配空间;存储参数分成表空间级别 和表级别
例1:
CREATE TABLESPACE space1
DATAFILE 'D:\hundsun\space1_1.dat' SIZE 20M
DEFAULT STORAGE (INITIAL 128k NEXT 128k PCTINCREASE 40 MINEXTENTS 1 MAXEXTENTS 999)-- 表空间级别的存储参数
ONLINE;
例2:
CREATE TABLE tb1(
ID NUMBER(10) NOT NULL,
NAME VARCHAR2(10) NOT NULL
)
TABLESPACE space1
storage(INITIAL 1M NEXT 2M PCTINCREASE 60 MINEXTENTS 2 MAXEXTENTS unlimited);--表级别存储参数
-- 初始区大小 第二个区大小 后续区大小增长百分比 给该表/段 分配的最小/大的区数量
如果例2中不指定存储参数,则直接继承space1的存储参数
例3:
CREATE TABLESPACE space2
DATAFILE 'D:\hundsun\space2_1.dat' SIZE 50M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE --- 又oracle自动决定分配区的大小
或者
EXTENT MANAGEMENT LOCAL/DICTIONARY UNIFORM SIZE 128k ---自己指定区的大小
-- 区的管理方式:本地管理/字典管理
SEGMENT SPACE MANAGEMENT MANUAL / AUTO ;
-- 段的管理方式: 手动/自动
5)去空间的释放
1 DROP TABLE 或者drop CLUSTER 命令会自动回收区空间
2 TRUNCATE ...drop STORAGE / ALTER TABLE ... DEALLOCATE UNUSED 会回收还未使用的区
四 段(segment)
1)段的分类 数据段(DATA segment)索引段(INDEX segment) 临时段(TEMPORARY segment) 回滚段(ROLLBACK segment)
2)普通表由一个段构成,分区表由多个段构成
3)创建表的实质就是创建一个或者多个段;
4)数据段可以存放:1 一个普通的表的数据;2 分区表(patition table)的一个分区;3 聚簇表(CLUSTER table)
5)索引段: 同普通表;一个非分区索引有一个单独的索引段
6)临时段:查询且内存不足的时候会用到临时段;用到临时段说明数据库性能降低了;比如排序的时候:
CREATE INDEX...
SELECT ... ORDER BY
SELECT destinct ...
SELECT ... GROUP BY
SELECT UNION ...
SELECT ... INTERSECT
SELECT ... MINUS 以上语句会用临时段,应该尽量避免
五 表空间(TABLESPACE )
1)表空间分类:1大/小文件表空间;2系统表空间(自动);3辅助表空间(自动);4回滚表空间;5临时表空间
2)回滚表空间(UNDO TABLESPACE )的理解:
(1)回滚段存放在回滚表空间中,
(2)回滚段中的区是循环使用的,头到尾,满了之后,如果第一个区未被使用则被oracle调用
3)当用户输入了DML(INSERT UPDATE DELETE)的时候 会用到回滚段
4)一个回滚段至少2个区 便于循环使用 最大默认是32765个区
5)表空间的离线(offline)和在线(online),表空间离线,则表空间的数据不可访问
对于表空间的操作实例:
例1:创建大文件表空间
CREATE BIGFILE TABLESPACE bigspace1
DATAFILE 'D:\hundsun\bigspace1.dbf'
SIZE 500M ---初始大小
AUTOEXTEND ON; --允许大文件自动扩展
例2:创建表空间
CREATE TABLESPACE space1
DATAFILE 'D:\hundsun\space1_1.dbf' SIZE 10M, 'D:\hundsun\space1_2.dbf' SIZE 20M
AUTOEXTEND ON --允许space1_2.dbf自动扩展
NEXT 1M --space1_2.dbf每次扩展1M
MAXSIZE unlimited --space1_2.dbf大小 不限制
例3:删除表空间
DROP TABLESPACE space1
INCLUDING CONTENTS --连内容一起删除
AND DATAFILES --将操作系统文件一起删除
CASCADE CONSTRAINTS; --连参照完整性约束一起删除
例4 查询表空间又哪些文件组成
SELECT file_name FROM Dba_Data_Files WHERE TABLESPACE_name ='space1';
例5 显示标准块大小
SHOW parameter db_lock_size;
例6 创建块大小是16k的非标准表空间
CREATE TABLESPACE space1
BLOCKSIZE 16k
DATAFILE 'D:\hundsun\space1.dbf'
SIZE 30M AUTOEXTEND ON;
其他语句如下:
ALTER TABLESPACE sapce1 READ ONLY;
ALTER TABLESPACE DATAFILE 'D:\hundsun\space1.dbf' RESIZE 50M;
ALTER TABLESPACE space1 ADD DATAFILE'D:\hundsun\space2.dbf' SIZE 100M;
ALTER USER test1 QUOTA 50M ON SPACE1 --限制用户test1 在space1中只能使用50M空间
ALTER TABLESPACE space1 ONLINE/OFFLINE ;
SELECT * FROM dba_tablespaces;--查询表空间信息
查询每个表空间的使用情况
SELECT b.file_id AS id,
b.tablespace_name AS NAME,
b.bytes / 1024 / 1024 AS tatal,
(b.bytes - SUM(nvl(a.bytes, 0))) / 1024 / 1024 AS used,
SUM(nvl(a.bytes, 0)) / 1024 / 1024 AS remaind,
(100 - (SUM(nvl(a.bytes, 0)) / (b.bytes) * 100)) 已经使用百分比
FROM dba_free_space a,
dba_data_files b
WHERE a.file_id = b.file_id
GROUP BY b.tablespace_name,
b.file_name,
b.file_id,
b.bytes
ORDER BY b.tablespace_name
六 sql语言
1)SELECT 语句中使用回车
SELECT 'hello' ||CHR(10)||'world,i am home' FROM dual;
2) 设置日期格式
ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT SYSDATE FROM dual;
3) 使用行号
SELECT ROWNUM FROM tsys_parameter WHERE ROWNUM <20;
七 Oracle高级查询
1 分组
SELECT kind_code,COUNT(*) FROM tsys_dict_entry GROUP BY kind_code;
2 自循环:
SELECT key,
m_1
FROM dual model dimension BY(0key) --定义维度列名=key值等于0
measures(CAST(NULL AS VARCHAR2(100)) m_1) --定义一个度量类型是 varchar2(100) 列名=m_1
rules --规则约束
iterate(5) --定义自循环次数 =5从 0开始循环
(m_1 [ 0 ] = nvl(m_1 [ 0 ], 'TEST') || 'x' || '/' || iteration_number || '/')
3 日期操作
select add_months(sysdate,3) from dual; --后推三个月
SELECT ADD_MONTHS(TO_DATE('2016-05-01 19:15:26','yyyy-mm-dd HH24:MI:SS'), 3) FROM dual; --变形1
SELECT ADD_MONTHS(TO_DATE('20160501191526','yyyymmddHH24MISS'), 3) FROM dual; --变形2
SELECT add_months(to_date(20140702, 'yyyymmDD'),1) from dual; --获取下一个月
SELECT to_number(to_char(Sysdate,'yyyymmddhh24miss')) FROM dual; --日期转换
select MONTHS_BETWEEN(sysdate,to_date('2012-01-30','yyyy-mm-dd')) from dual;--日期之间相差的月数
select next_day(sysdate,3) from dual; --下周二
select LAST_DAY(sysdate) from dual; --本月最后一天
select round(sysdate,'day') from dual; --本周/年/月/日的最开始
SELECT sysdate + numtoyminterval(1,'hour') FROM dual -- 下个月的同一天 month ,year,
SELECT sysdate + NUMTODSINTERVAL(1,'day') FROM dual -- 参数day,hour,minute,second
4 数字处理
SELECT ROUND('22222.22222',2) FROM cc_dbo.record_template t; -- 四舍五入
5字符串处理
SELECT wm_concat( s.user_id) FROM tsys_user s Where 1=1 and s.user_status =0 --多行结果用逗号连接
select replace('HelloWoreld!','o','1111') FROM dual --替换
select reverse('abc') FROM dual --翻转
select SUBSTR('HelloWorld!',6,6) FROM dual --截取
SELECT SUBSTR('1230',0,2)||':'||SUBSTR('1230',2,2) FROM dual
SELECT DECODE('1','12',123,'1','234') FROM dual; --swich
SELECT INSTR2('dcabcd','abc') FROM dual; -- 是否有摸个字符
select instr('abcd,efgh',',') position from dual; --是否有摸个字符
select chr(54740) zhao,chr(65) chr65 from dual; --编码转换成字符
select userenv('language') from dual; --当前oracle编码
==========================================================
查询质检任务分数
SELECT LEVEL,
connect_by_isleaf AS is_leaf,
d.*,
r.qck_result_id,
r.qck_score_point,
r.qck_item_comment,
r.qck_has_fatal
FROM qck_template_dir_item d,
(SELECT r.*
FROM qck_result r
WHERE r.qck_tsk_id = 4835871) r
WHERE d.qck_item_id = r.qck_item_id(+)
AND d.qck_template_id = 5000000
AND d.qck_item_status = '1'
START WITH d.qck_p_item_id = 0
CONNECT BY PRIOR d.qck_item_id = d.qck_p_item_id
ORDER SIBLINGS BY d.qck_item_sort, d.qck_item_id;
----3.3数据字典查询
SELECT wm_concat(NAME||CODE) FROM sys_dict WHERE code LIKE '715%'; -- 字典表
----4.0数据字典查询
SELECT '/*' || MAX(te.dict_entry_name) || '[' ||
wm_concat(t.dict_item_code || ':' || t.dict_item_name) || ']*/' AS 数据字典
FROM tsys_dict_item t,
tsys_dict_entry te
WHERE t.dict_entry_code = te.dict_entry_code
AND t.dict_entry_code LIKE
-- LOWER('qck_src_type');
upper('QCK_TEMPLATE_COPYID');
--添加权限
--添加邮件群发权限
CALL sp_update_subtrans('myEmailSpace', 'emailSends', '邮件群发', '', '', '1');
--添加短信群发权限
CALL sp_update_subtrans('mySendSpace', 'smsSends', '短信群发', '', '', '1');
COMMIT;
Oracle结构知识学习+部分函数实例的更多相关文章
- Oracle索引知识学习笔记
目录 一.Oracle索引简介 1.1 索引分类 1.2 索引数据结构 1.3 索引特性 1.4 索引使用注意要点 1.5.索引的缺点 1.6.索引失效 二.索引分类介绍 2.1.位图索引 1.2.函 ...
- MySQL索引知识学习笔记
目录 一.索引的概念 二.索引分类 三.索引用法 四 .索引架构简介 五.索引适用的情况 六.索引不适用的情况 继我的上篇博客:Oracle索引知识学习笔记,再记录一篇MySQL的索引知识学习笔记,本 ...
- 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构
VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...
- Oracle基础知识汇总一
Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...
- TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...
- Oracle data guard学习
Oracle data guard学习:三思笔记 Data guard 1data guard结构: data guard是一个集合,由一个primary数据库(生产数据库)和一个或多个standby ...
- [Oracle入门级]知识概况
oracle各个版本间的主要技术更新 oracle 增加数据库创建和存储对象 oracle 8i 整体性能提升 oracle9i 实施应用集群 oracle 10g 支持网格计算 oracle 11g ...
- Objective-c基础知识学习笔记
Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...
- Vue2基础知识学习
Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...
随机推荐
- Java Swing 如何添加输入文字并且可以滚动的文本框?( JTextArea ,JScrollPane的使用)
准备: JTextArea 文本区,一个可以输入文字的文本框 常用方法: 1.setText(String t)设置文本区中显示的文本 2.getText() 获取文本区中显示的文本 JScrollP ...
- 关于PC端与手机端随着手指移动图片位置放生变化的拖拽事件
当按下鼠标时,图片随鼠标移动松开时图片回到原位 drag("div_id") function drag(node_id){ var node = document.getElem ...
- .netER的未来路,关于基础是否重要和应该自己手写代码吗?
http://www.cnblogs.com/onepiece_wang/p/5558341.html#!comments 引用"基础知识的学习,一开始可能是背书,但是在后续若干年的工作过程 ...
- svn 中commit时必须填写备注信息如何设置
在软件开发团队中总是有人忘记添加备注信息,可以通过下面方式进行设置,从而在commit时强制需要填写备注信息. 在服务端选中需要设置的项目进行设置. 选中项目右键,"所以任务"-& ...
- ubuntu14.04 下安装mysql5.6
1.sudo apt-get install mysql-server-5.6 2.测试是否安装成功 ps aux |grep mysql mysql -u root -p 3.允许远程访问设置 su ...
- linux重要目录说明
1 home :root用户的home 目录是root,普通用户的home 目录是/home,users/(不要随便使用root权限,小白容易改错东西哒) 2 bin:常用可执行文件:/bin./us ...
- Python 第一课笔记
1.Hello World程序的两种方法 在windows下执行 1.编辑器里输入,不用编译 print("Hello World!") 直接就可以运行 2.可以 ...
- 开机自动挂载 VHD 的方法
一.批处理 除了将 VHD 文件用人工方式在[磁盘管理]里[附加]来挂载以外,也能用[脚本]来实现自动挂载. 打开[启动],将写好的 mount.bat 放入即可: Mount.bat 文件的内容为: ...
- 【.NET】XML文件的创建,修改,删除
类名:XML /// 1.创建XML文档 /// 2.在根节点下增加子元素 /// 3.在元素下增加子元素 /// 4.获取类型为制定值的一组节点 /// 5.抓取网页上的xml文档赋值给XmlDoc ...
- Go-利用Map实现类似Python的Set数据结构
该笔记参考<Go并发编程实战> 首先实现一个自定义的HashSet 利用interface{}作为键,布尔型作为值. package main import ( "bytes&q ...