Oracle学习笔记 第一天 ORACLE 体系结构及表空间建立
实例(INSTANCE,内存结构)
一个数据库只能在一个实例中打开,用户通过实例访问数据库。实例就是数据库在内存中的镜像。
SGA( SYSTEM GLOBAL AREA ):各种缓冲区。
DATABASE BUFFER CACHE:缓存用户最近访问的数据。
REDO LOG BUFFER:缓存和事务有关的重作日志。
SHARED POOL:提高SQL的执行效果。
库缓存:用来缓存用户最近执行的SQL语句( 二进制分析代码即分析编译结果),分析代码,执行计划。
一条语句可能被分析多次 (可共享分析代码,但书写不一样,大小写不一样,不能共享分析代码,所以要注意规范,尽量使用变量。如:ID = '1111';SELECT ....... WHERE ....= ID)。
数据字典缓存:缓存用户最近访问的数据对象结构信息 (但数据字典、系统表,存在硬盘上而不在内存上,频繁访问会降低数据库性能)。
结构缓存:缓存最近的SQL执行结果 ,减少硬盘读的操作。
后台进程(DBW进程):DBW把数据库缓冲区中的脏缓冲区写入到数据文件,(注意:这个不是时时刻刻在工作,在一定时机下工作,如:脏缓冲区一定数量、空闲缓冲区很少、超时、发出检查点)
数据库(硬盘文件。新技术:内存数据库)
数据文件
控制文件
重做日志文件
连接模式
专用模式
共享模式(如:12306)
ORALCE特色
初始化参数
动态性能视图:与性能有关 。
DESC 视图、表
数据字典视图:与结构有关
USER_:当前用户所拥有的的某类数据对象 USER_TABLE、USER_VIEWS
ALL_:当前用户有权限访问的某类数据库对象 ALL_TABLES
DBA_:当前数据库中所有的某类数据库对象 DBA_TABLE、DBA_USER、DBA_INDEX
SGA(SGA:SYSTEM GLOBAL AREA是ORACLE INSTANCE的基本组成部分,在实例启动时分配;条件允许的情况下,越大越好、为公共场所)
系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
SGA_MAX_SIZE(是从ORACLE9I以来一直存在,是不可动态修改的。 尽量不要修改)
SGA_TARGET(ORACLE10G中用于实现自动SGA内存管理而新增加的,可以上下浮动)
可以用如下命令修改SGA_MAX_SIZE与SGA_TARGET的值
SQL> ALTER SYSTEM SET SGA_MAX_SIZE=160M SCOPE=SPFILE;
SQL> ALTER SYSTEM SET SGA_TARGET=160M SCOPE=SPFILE;
PGA(PROCESS GLOBAL AREA是为每个连接到ORACLE DATABASE的用户进程保留的内存)
属于每个会话(私有)
程序全程区
游标、堆栈
内存管理(内存调整优化)
自动内存管理(ORACLE 9I):只需要指定ORACLE可用最大内存,SGA、PGA自动调整
MEMORY_MAX_TARGET:指定可用的最大内存
MAMORY_TARGET:实际的可用内存大小
自动共享内存管理:分别指定SGA和PGA的大小
SGA_MAX_SIZE
SGA_TARGET
PGA_AGGREGATE_TARGET
手工共享内存管理(ORACLE 8I):分别指定各种缓冲区大小
缓冲区状态
空闲
PINGED:忙得,正在被某个进程访问
DIRTY:数据被修改,还未被写会数据文件
事务(TRANSACTION):能够引起数据变化的一系列SQL的集合(如:存款、取款,下订单、买票等)
作为整体执行的一系列DML语句(执行语句),不能只执行一部分(如:转账,作为整体来执行),需要手工COMMIT或ROLLBACK 。
单条的DDL语句 (如:CRATE、DROP、ALTER) 立刻提交,结构变化。
单条的DCL语句(如:GRANT、REVOKE) 立刻提交,结构变化。
事务的处理
COMMIT(银行转账)
ROLLBACK(回滚)
数据库复制同步
GOLDNGATE:抽取在线日志中的数据变化。转换为GGS自定义的数据格式存放在本地队列或远端队列中。
DATAGUARD:复制归档日志或在线日志
SQL的执行过程
第一步:客户端把语句发给服务器端执行
第二步:语句解析。产生分析代码和执行计划,最花费时间,占据总时间的2/3。
第三步:语句执行
第四步:提取数据
参考:HTTPS://WWW.CNBLOGS.COM/ILIUYUET/P/4431845.HTML
初始化参数类型
动态参数:直接修改、立刻生效。
静态参数:修改结果,写入参数文件,数据库服务器重启后生效。
不可修改的参数:DB _BLOCK _ SIZE
表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小。
ORACLE的物理文件最大只允许4194304个数据块(由操作系统决定),表空间数据文件的最大值为 4194304×DB_BLOCK_SIZE/1024M。
参考:HTTPS://WWW.CNBLOGS.COM/ZJFJAVA/P/9556311.HTML
SCN(SYSTEM CHANGE NUMBER)
递增,不重复,每个事务都有个SCN
数据文件、控制文件、重做文件中的SCN,要减少差距,定期同步(检查点)
完全一致:上次数据库正常关闭,可以直接打开
三个文件一致,最后一个SCN之后还有一些重做日志,属于没提交事务的SCN,事务被回滚
重做日志文件SCN领先,事务重新执行一遍(更新数据文件、控制文件),重新执行已经提交
参考:HTTPS://CZMMIAO.ITEYE.COM/BLOG/1010267
DML的执行
服务器进程把数据文件读写到数据库缓冲区缓存(以数据块为单位)
服务器进程在缓存中对数据加锁
服务器进程对事务产生重做日志,重做日志缓冲区
服务器进程在缓存中修改数据,产生脏缓冲区
事务的提交
服务器进程把事务SCN 写入重做日志缓冲区
LGWR 进程把该事务的重做日志和SCN 重做日志文件
向用户进程报告事务状态
服务进程在缓存中对数据加锁
事务的回滚
服务器进程把以前的数据UNDO表空间写会原表
向用户进程报告事务状态
服务器进程在缓冲区中对事务加锁
注:ORACLE 默认锁的级别为行级别的锁;
数据库启动、关闭
启动STARTUP
STARTUP NOMOUNT :在内存中产生实例,读参数文件
STARTUP MOUNT:实例需要读控制文件
STARTUP OPEN:实例打开数据文件和重做日志文件
关闭SHUTDOWN
SHUTDOWN ABORT: 不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。
SHUTDOWN IMMEDIATE:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动ROLLBACK的。启动时不需要实例恢复。
SHUTDOWN TRANSACTIONL:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。
SHUTDOWN NORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。
数据库远程连接
在服务器端,需要配置监听器(NETMANAGER )
命令:NETMGR(直接在终端输入,无需ROOT权限)
ROOT命令:SU ROOT;在输入密码。
再用IFCONFIG -ALL命令检查网络,
重启网络服务SERVICE NETWORK RESTART
在客户端,不需要配置监听器
ORACLE客户端,需要配置的字符串SERVICE NAMING 可以解析为:客户端需要知道的IP地址+数据库名称+对方端口
监听器命令
STATUS OF THE LISTENER
命令:LSNRCTL START
LSNRCTL STOP
LSNRCTL STATUS
修改网络配置后,必须先停止监听,在启动监听才可链接新的监听。
身份验证
ORACLE对于普通账户和超级管理员(指SYSDBA和SYSOPER)的认证机制不一样,前者是通过数据字典,后者主要是通过操作系统验证和密码文件验证。
数据库验证:普通用户
外部验证(操作系统验证): SYS用户本地登录
命令:EXPORT ORACLE_SID=TESTDB
口令文件验证:SYS用户的远程登录,远程登录必须输入正确的用户名口令
注:忘记SYS密码解决办法
命令:CD $ORACLE_HOME/DBS
找到文件ORAPW数据库名
删除RM ORAPW数据库名
指定名称和新密码 ORAPWD FILE= 'ORAPW数据库名' PASSWORD='XX'
表空间类型
字典管理表空间:已经被淘汰
本地管理表空间:区大小都一样,没有存储碎片
表空间
SYSTEM表空间:数据字典
SYSAUX表空间:系统数据(不必要的)
临时表空间:存储临时数据(TEMP)
UNDO表空间:允许用户回滚数据
USERS用户默认表空间:把不同类型数据分开
DBA_TABLESPACES:数据库中表空间的信息
PERMANENT永久的
DBA_DATA_FILES:表空间中的数据文件信息
命令:DESC DBA_TABLESPACES
DESC DBA_DATA_FILES
COLUMN FILE_NAME FORMAT A40 修改长度
参考:https://www.cnblogs.com/eastsea/p/3863354.html
创建表空间
ORACLE中的表就是一张存储数据的表。表空间是逻辑上的划分。方便管理的。
数据表空间 (TABLESPACE) :存放数据总是需要空间, ORACLE把一个数据库按功能划分若干空间来保存数据。当然数据存放在磁盘最终是以文件形式,所以一盘一个数据表空间包含一个以上的物理文件
数据表:在仓库,我们可能有多间房子,每个房子又有多个货架,每架又有多层。 我们在数据库中存放数据,最终是数据表的单元来存储与管理的。
数据文件:以上几个概念都是逻辑上的, 而数据文件则是物理上的。就是说,数据文件是真正“看得着的东西”,它在磁盘上以一个真实的文件体现
命令:CREATE TABLESPACE 表间名 DATAFILE '数据文件名' SIZE 表空间大小
CREATE TABLESPACE DATA_TEST DATAFILE 'E:\ORACLE\ORADATA\TEST\DATA_1.DBF' SIZE 2000M;
CREATE TABLESPACE IDX_TEST DATAFILE 'E:\ORACLE\ORADATA\TEST\IDX_1.DBF' SIZE 2000M;
创建表空间和默认区大小
命令:CREATE TABLESPACE BXJ_DATA
DATAFILE '/ORADATA/BXJ_DATA_001.DBF'
SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ONLINE;
创建表空间和指定区尺寸为128k(区大小默认64K;数据块大小默认8K)
命令:CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k;
段管理方式
MANUAL:手工
AUTO:自动
段管理方式创建表
命令:CREATE TABLESPACE BXJ_DATA
DATAFILE '/ORADATA/BXJ_DATA_001.DBF'
SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO ONLINE;
默认表空间修改
命令:ALTER DATABASE DEFAULT TABLESP TS1
给用户默认表空间
命令:ALTER USER SCOTT DUFAULT TABLESPACE TS2
表空间删除
命令:DROP TABLESPACE TS1
强制删除
命令:DROP TABLESPACE TS1 INCLUDING CONTENTS
强制删除,夹带段也删除
命令:DROP TABLESPACE TS1 INCLUDING CONTENTS AND DATAFILES
VIM的基本用法
Vim File -->按[I]进入insert模式-->书写内容-->按[Esc]退出insert模式-->:Wq退出保存
数据块STARTUP 出错方法
CREATE PFILE
CREATE SPFILE
消除数据碎片
DELETE FROM EMP; COMMIT;为DML语句,需要手工提交,空间不释放,每行数据删除,出现重做日志
TRUNCATE TABLE EMP;(命令慎用)DDL语句,立刻提交,指针移到段头,数据为未删除,数据不可回滚,不产生重做日志
重新创建 消除碎片
命令:ALTER TABLE 表名 MOVE 移动表位置
ALTER TABLE 表明 MOVE TEBLESPACE 表空间名
ALTER INDEX IDX2 REBUILD
ALTER INDEX IDX2 REBUILD TEBLESPACE 表空间名

浙公网安备 33010602011771号