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; 

PGAPROCESS 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 表空间名

 

posted @ 2019-05-14 22:07  heima3  阅读(137)  评论(0)    收藏  举报