ORACLE学习笔记 第四天

OACLE 体系结构

实例(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、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 表空间名

  迁移表  INSERT INTO 表2 SELECT * FROM 表1    或者用MOVE 

 

重做日志文件

重做日志

  重做日志文件多元化,每个重做日志组中至少两个重作日志文件,尽量分布在不同存储设备上(防止硬盘损坏)

  重做日志文件比数据文件更重要

  归档

 

日志模式

  非归档

    覆盖

    只能对数据库进行冷备份(把数据库关闭之后的备份)

    只能备份整个数据库

    数据库出现故障,只能把数据库恢复到最后一个备份点,最后一个备份点到故障点之间数据丢失。

  归档模式

    归档

    可以对数据库进行冷备份或者热备份(数据库处于OPEN状态的备份)

    可以备份整个数据库或者某个表空间或者每个数据文件

    可以把数据库恢复到最后的故障点,保障数据不丢失,也可以恢复到其中一个时间点

    可以配置数据库的复制、同步

  两者区别,在于数据库的备份恢复。

 

重做日记文件管理

  重做日志有关的动态视图

  V$LOG 重做日志组的信息

  V$LOGFULE 重做日志文件的信息(状态为空时表示正常)

  重做日志组的状态

    Current 当前

    Unused 从未使用过

    Inactive 至少被使用过一次,与重做日志有关的脏缓冲区已经被写入数据文件

    Active 至少被使用过一次,与重做日志有关的脏缓冲区还没有被写入数据文件

  命令:

    Ls /u02

    Su root

    Mkdir /u02

    Chown -R oracle:oinstall /u02

    Exit

    Cd  /u02

    Ls 

    Mkdir orcl

    Ls -ld /u02

    Ls /u02/orcl

  代码:

    Alter database add logfile [group 4] (地址1,地址2) size 100M

    Select group#, member, status from v$logfile;

  增加重做日志组的意义 

    举例医院:社保系统1分钟被写满,4分钟需要备份

    可设定更多的重做日志组和更大的重做日志文件

  警告文件:alert_

  跟踪文件:orcl_cjq_

  强制切换日志

    代码:alter system switch logfile 

 

  跟踪文件

    后台进程跟踪文件:DBWR、LGWR、CKPT  命名orcl_ckpt_.trc,主要跟踪故障

      命令:ls *lgwr*.trc(也可以按时间来查询)

         Vi 文件名;打开文件

    前台进程跟踪文件:服务器进程、server进程等客户端进程,默认不是打开的,打开后所有的SQL执行都会被记录,查看语句执行效率(分析过几次、编写是否合理)

  Flashback闪回,恢复数据库或者表

    参考:https://www.cnblogs.com/ivictor/p/3975339.html

 

归档日志文件

  命令:archive log list;

      Select log_mode from v$database;

      Selec archiver from v$instance;

 

修改日志模式

  开启归档日志文件 

  Shutdown

  启动数据库实例到MOUNT状态

    命令startup MOUNT

  执行命令

    命令:alter database (no)archivelog

  打开数据库

    命令:alter database open 

       Archive log list;   --USE_DB_RECOVER_FILE_DEST

 

设置归档日志的路径

  31个参数设定31个归档路径,对应参数改为defer为失效 

  命令:  

    Show parameter log_archive;(查找归档参数)

    Alter system set log_archive_dest_1 = 'location=/u01/archive';

    Alter system set log_archive_dest_2 = 'location=/u02/archive';

    Alter system switch logfile;手动切换归档文件

  查询

    Ls /u01/archive

  归档日志命名

    %t:thread编号,实例编号,%T为扩展四位,前面补充0

    %s:sequence编号,防止文件名称冲突,%S为扩展十位,前面补充0

    %r:随机的数字,同一个文件不变

    命令:alter system set log_archive_format=arc_%T_%S_%r' scope=spfile  再重启数据库

    设置错误后修改方法:

      Create pfile = '/home/oracle/initorcl.ora' from spfile;

      Create spfile from pfile = '/home/oracle/initorcl.ora' from spfile;

 

RMAN对数据库备份与恢复

  冷备份、热备份:(见上面)

  物理备份:针对文件备份

  逻辑备份:表里面的数据导出到文件中

  备份集(backupset):对应操作系统一个文件,对应一个文件,一个备份片(piece),超出系统限制,被分割成多个文件,每个是一个备份片。

  影像拷贝(image copy):相当于对文件直接拷贝

  完全备份:可以针对整个数据库,也可以针对某个表空间、数据文件

  增量备份:相对完全备份而言,针对一段时间有变化的数据(如:银行数据库)

  增量备份和完全备份通过备份级别来实现

  备份级别

    Full:完全备份,是独立备份,用于迁移数据(如:数据库迁移)

    0:完全备份,增量备份的基础

    1-4:以0级备份为基础,增量备份

 

需要备份的文件

  参数文件:没有备份可以拷贝别的数据库文件修改后使用

  控制文件:数据库结构、数据名称等,可以设置自动备份

    命令:show parameter control_files;

  数据文件:重点备份

  重做日志文件:不需要备份,通过两种方式保证文件,多元化、归档

  口令文件:不需要备份

  归档日志文件:可能需要备份

  警告文件、跟踪文件:不需要备份

 

可恢复性的配置

  修改文件多元化

  修改初始化参数control_files

  Alter system set control_files = '文件1'  scope = spfile

关闭数据库

在操作系统中拷贝控制文件

  启动数据库服务器

 

  改进方法

  Spfile改为pfile

  编辑peile文件,修改初始化参数

  数据库关闭shutdown

    Cp 目录1 目录2

  Pfile改为spfile

  打开数据库startup

  控制文件备份代码:

  Create pfile='/home/oracle/initorcl.ora' from spfile;

    命令:vi /home/oracle/initorcl.ora

    I --开始编辑    

    '/u02/orcl/control03.ctl' –增加

    Esc : wq –退出

    Cp '/u01/app/oracle/oradata/db01/control01.ctl'  '/u02/orcl/control03.ctl'

  Create spfile from pfile = '/home/oracle/initorcl.ora';

  Show parameter control_files;

   

重做日志文件多元化

 

多表空间(不同的表放在不同的表空间)

       System:需要备份一次

       Sysaux:需要备份一次

       临时表空间:不需要备份

       Undo表空间:不需要备份

       业务表空间:需要重点备份,频分备份

       索引表空间:不需要备份

 

控制文件自动备份

       在RMAN中设置自动备份

       登录rman target /

              命令:show all

              CONFIGURE BACKUP OPTIMIZATION OFF; # default     改为ON

              OBID 数据库ID号

C-dbid-YYYYMMDD-00

创建文件:Mkdir /u01/backup

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup%F'; # default

       Qiit

 

Select status from v$instance --记录database状态

Alter database mount --修改database状态为mount

 

设置快速恢复区

       代码:   

Show parameter recovery

              Alter system set db_recovery_file_dest_size = 4G

              Alter system set db_recovery_file_dest = /u01/app/flash_recovery_area

 

MRAN特点

       目标数据库:需要备份的数据库

       恢复目录(catalog):就是表,记录目标数据库机构

       元数据:目标数据库结构(表名等)

                     目标数据库的备份历史记录

       通道:目标数据库到存储设备之间的数据流

                Disk硬盘  sbt磁带(tape单台磁带机)

       从控制文件中获得元数据

       代码:show parameter 初始化参数   -- 默认存7天

                Show parameter db_name

                Show parameter instance_name

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default –默认通道类型DISK

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default –并行度、类型

 

切换数据库 Export oracle_SID= testdb

       查询用户Echo $oracle_SID

 

Catalog配置

       第一:创建第二个数据库,作为catalog使用

              Testdb作为catalog

       第二:以sys用户登录catalog数据库,创建表空间

              Export ORACLE_SID=testdb

Sqlplus / as sysdba

Startup

Select file_name from dba_data_files;

Create tablespace rman_ts datafile '/u01/app/oracle/oradata/testdb/rman_ts.dbf' size 30M;

       第三:以sys用户登录catalog数据库创建用户, 并制定权限

Create user rcowner identified by "1234";

Grant connect,resource,recovery_catalog_owner to rcowner;

Quit;

Echo $ORACLE_SID;--查看一下数据库

       第四:以rcowner用户,rman工具,登录catalog数据库

Rman catalog rcowner/1234;

              执行命令      

Create catalog;

       第五:配置数据库的远程连接

              两个数据库:监听器

              Rman客户端:两个 service naming

              客户端直接执行

Netmgr  增加数据库

                     Lsnrctl stop

                     Lsnrctl start

              测试

Alter user sys identified by "1234";更改sys密码

                     Sqlplus sys/1234@db01 as sysdba

                     Sqlplus sys/1234@testdb as sysdba

Show parameter db_name;--显示数据库

Rman同时连接两个数据库,注册数据库

                     命令:

方法一:Rman target sys/1234@db01 catalog rcowner/1234@testdb

                     方法二:Rman

Connect target sys/1234@db01;                         

Connect catalog rcowner/1234@testdb;

              注册数据库

                     命令:register database

                     查是否成功:report schema

 

Rman中的命令

       Report schema

       Report need backup;

List backup;

List backup of spfile;

List backup of controlfile;

List backup of tablespace users;

Resync catalog

 

自动备份生效时机(针对的是参数问价你和控制文件)

       目标数据库的结构与变化时候

       当通过backup成功的备份任何一个文件时    

 

 

 

 

 

参数文件备份

       自动备份

       Backup命令

              Backup spfile;放在快速恢复区

              Backup spfile fromat ‘/u01/backup/spfile _%T_%U’ –参数文件被备份两次,手工、自动

              List backup  --备份查看

              List backup of spfile;

             

参数文件恢复

       Restore命令

              Restore spfile 恢复到默认的目录下

              Restore spfile from autobackup;

              Restore spfile tag ‘tag名称’

              Restrore spfile from ‘文件名称’

       参数文件位置固定:$ORACLE_HOME/dbs

 

参数文件备份/恢复步骤

       备份参数文件

查看备份

       模拟故障,先关闭数据库,删除参数文件(出现故障时恢复参数文件)

              RMAN 中执行shutdown

Cd $ORACLE_HOME/dbs

              Mv 参数文件 新的参数文件

             

       恢复过程

参数文件丢失时候,可以用RMAN启动实例,采用的模板参数文件,不是最终看的实例,作用是恢复参数文件。

              Export ORACLE_SID = db01

              Rman target /

              RMAN 中执行startup nomount

              新终端RMAN同时连接两个实例 rman target sys/1234@db01 catalog rcowner/1234@testdb

              Restore spfile from autobackup;

              参数文件恢复后必须Shutdown

             

控制文件备份

       自动备份      

       与其他文件一起备份

              Backup tablespace users include current controlfile;  

       单独备份控制文件

              Backup current controlfile;--放在快速去

              Backup current controlfile format ‘/u01/backup/con_%T_%U’

 

控制文件恢复

       List backup;  --列出备份    

       Restore controlfile;

       Restore controlfile from autobackup;

       Restore controlfile form tag ‘tag名称’

       Restore controlfile form tag ‘文件名称

       Show parameter control_file; --查找控制文件在什么地方;

 

控制文件备份/恢复示例

       对控制文件备份

              Rman 同时连接两个数据库             

Backup current controlfile format ‘u01/backup/con_%T_%U’

       查看备份

              List backup of controlfile

       关闭数据库,模拟故障,模拟破坏控制文件

              Shutdown

Cd 进入控制文件路径

              Mv 改名

       恢复

              Startup 观察错误

警告文件所在目录       show paramrter user_dump_dest

                     .log文件为警告文件   

                     .trc文件为跟踪文件

             

           Restore controlfile from autobackup;

              RMAN中Alter database mount  --还不能打开,原因是SCN三者不一样

              RMAN中重做日志也需要更新   recover database;

              Sqlplus中Alter database open resetlogs;把重做日志清空,必须清空。

 

数据文件备份

              Backup database;  --对数据库做full备份

              Backup tablespace users

              Backup datafile ‘XX’

              Backup full database;

              Backup as backupset database;

             

              Backup database format  ‘db_full_%T_%U’ tag ‘XX’

      

              Backup incremental level 0 database format ‘XXX’

%T:YYYYMMDD  %U随机的字符串   %p备份片的编号 每个备份片是一个文件 一个备份集可以对用多个备份片 %c备份的拷贝(可以放在多个地方)

              Backup incremental level 0 tablespace  users fromat ….

              。。。。。。。。。。。。。Datafile ‘XXX’ 。。。。。。。

 

Backup incremental level 1 database format ‘XXX’

              Backup incremental level 1 tablespace  users fromat ….

              。。。。。。。。。。。 1 datafile ‘XXX’ 。。。。。。。

 

              Report schema;

 

数据文件备份/恢复(针对表空间users)

       进行full或者0级备份

              Backup full database users fromt ‘’

              List backup of tablespace users;

       关闭数据库,模拟故障,删除数据库文件

       恢复

              查看故障视图       show patameter control_file

                                          Desc v$diag_info

                                          Select name,value,from v$diag_info

Trace跟踪 alert警告

              Shutdown;

              Pwd

              Startup 观察错误;普通表空间故障不影响数据库打开

数据文件的恢复状态

       MOUNT:SYSTEM 表空间,或者整个数据库

       OPEN :恢复普通表空间。

数据文件故障判断

                     Sqlplus 或者RMAN

                     使用EM

                     动态性能视图 v$recover_file 需要sqlplus

                            Select file#,error from v$recover_file

                            Desc Dba_data_files

                     警告文件和跟踪文件

                            Vi alert_orcl.log

                            Vi 跟踪文件

      

文件状态改为OFFLINE

RMAN中       Sql ‘Alter database datafile 4 offline’

RMAN中       Alter database open;

RMAN中       Restore tablespace users;

RMAN中       Recover tablespace users;

RMAN中       Sql ‘alter database datafile 4 online’

 

              恢复原理:

备份恢复restore

重作日志恢复recover

 

存储设备损坏恢复

       进行full或者0级备份

                     Backup full database users fromt ‘’

                     List backup of tablespace users;

              关闭数据库,模拟故障,删除数据库文件

恢复

              Startup 观察错误;普通表空间故障不影响数据库打开

文件状态改为OFFLINE

RMAN中       Sql ‘Alter database datafile 4 offline’

RMAN中       Alter database open;

 

Run{

Allocate channel ch1 device type disk;

Set newname for datafile 4 to '/u02/orcl/users01.dbf';

Restore datafile 4;

Switch datafile 4;

Recover datafile 4;

Sql 'alter database datafile 4 online';

Release channel ch1;

}

 

Linux任务调度

       At:一次性,时间确定;

       Crontab:周期性(用的较多)

       Batch:没有具体时间

 

测试增量备份、恢复(针对表空间users)

       进行0级备份

              Sys用户   rman连接两个数据库

Run{

allocate channel ch1 device type disk;

                    backup incremental level 0 tablespace users format '/u01/backup/users_0_%T_%U';

                    release channel ch1;

             }            

List backup of tablespace users;--查看备份

以scott用户登录target,在表空间中创建t20,写入数据10/20

Conn scott/tiger

Create table T20(id number) tablespace users;

Insert into T20 values(100);

Insert into T20 values(200);

Commit

       进行1级备份

Run{

                 Allocate channel ch1 device type disk;

Backup incremental level 1 tablespace users format '/u01/backup/users_1_%T_%U';

                    Release channel ch1;

             }            

List backup of tablespace users;--查看备份

              以scott用户向表t20写入新数据30/40

Insert into T20 values(300);

Insert into T20 values(400);

Commit;

       进行2级备份

Run{

                 Allocate channel ch1 device type disk;

                    Backup incremental level 2 tablespace users format '/u01/backup/users_2_%T_%U';

Release channel ch1;

}

List backup of tablespace users;--查看备份

              以scott用户向表t20写入新数据50/60

Insert into T20 values(500);

Insert into T20 values(600);

Commit

              关闭数据库,模拟故障(文件故障、硬盘故障)

Shutdown;

              Cd /u02/orcl

Mv users01.dbf users01.dbfz

Rmna 中 startup

report schema;  --看数据文件路径

Sql 'alter database datafile 4 offline';

Alter database open;

              恢复

run{

Allocate channel ch1 device type disk;

Restore tablespace users;

Recover tablespace users;

Sql 'alter database datafile 4 online';

Release channel ch1;

}

 

整个数据库备份

       针对整个数据库进行0级备份;

Run{

                    Allocate channel ch1 device type disk;

                    Backup incremental level 0 database format '/u01/backup/users_0_%T_%U';

                    Release channel ch1;

             }            

       向数据库写入数据;(不在备份,依靠重作日志备份)

Insert into T20 values(700);

Insert into T20 values(800);

Commit;

       模拟故障;

Rm 删除

       恢复数据库;

Alter database open;

       恢复

run{

Allocate channel ch1 device type disk;

Restore database;

Recover database;

Alter database open;

Release channel ch1;

}

 

 

数据库性能调优

       相应时间、吞吐量

       影响因素

              数据库服务器硬件配置

              网络(路由器过多)

              前台应用程序

              数据库的结构

              磁盘IO

                     READ0:条带化 LUX

                     READ1:镜像

                     READ5:条带化+校验(2个数据+1个校验)

READ5:条带化+校验(2个数据+2个校验)

 

可调整性能的地方

       前台应用程序

       I/O:尽量减少I/O;I/O分散。整理碎片、使用索引(减少查询次数)、使用特殊的数据对象(物化视图、分区表、cluster表、索引组织表)

      

       终端       Emctl start dbconsole;

Emctl status dbconsole;

https://student:1158/em/console/aboutApplication

 

netmgr

netca

 

优化器统计数据

       优化器用来产生最佳的执行计划;同一条SQL语句有若干条执行计划,优化器来选择。

 

数据库统计数据

       判断数据库性能

              吞吐量、尽快返回若干行数据

 

优化语句      

Select /*+     all_rows        */ * from emp;

       Select /*+     first_rows(10)      */ * from emp;

 

 

SQL调优

       EM监视SQL执行,判断是否合理;

       化解大事物为小事物,尽快提交。Autocommit = ture

       使用索引(减少I/O)

       使用物化视图(替代连接查询)

       使用分区表、索引组织表、簇表

 

索引

       注意:全表查询(或大部分)比索引效率更高

Select * emp

              Where 。。。 按顺序读、按条件过滤、每次读多个数据块

              触发参数DB_FILE_MULTIBLOCK_READ_COUNT

       创建索引

              Create index  inx1  on  emp(name)

              索引可以创建在多个列上; 对AND连接查询时候起作用。

              索引创建需消耗系统资源

       索引是否起作用

              跟踪SQL的执行

                     初始化参数 sql_trace

Sys:跟踪所有

                     Alter system set sql_trace = ture;

                     User:

                            跟踪结果进行解析:tkprog

                            表中主键上有索引、侧键没有视图

              查看SQL的执行计划

       反向索引(reverse)

              单列上数据基本有序,如果创建索引,索引深度与行数基本相同,则无意义,则把数据23变成32,再创建索引

       ROW_ID 一行的物理行号

       基于函数的索引:索引创建在一个表达式上面  列+条件

       UPPER(字符串)  LOWER(字符串) 大小写转换

       位图索引(BITMAP) 举例:员工性别

 

物化视图(materialized)

       视图的作用是简化查询;没有数据

       物化视图就是个表,数据来自select执行结果,数据可能不准,但是可以刷新。

 

数据库中一个表对应一个段(分区表对应多个段) 一个视图对应一个段

       表段

       搜索段

       临时段

       UNDO段

       分区表段

       Cluster 段

       索引组织表段

       Lob段:存放大对象,文本、视频;

LONG(2G)一个表中只能定义一个 数据在表中

Long 产品介绍 生平简介

long raw 声音 、图像

LOB(4G) 一个表中能定义多个 数据不在表中  存放在LOB段

clob 大文本

blob 大的二进制对象

             

       常规表

              Pctfree 在创建表时 保留块空间 减少块之间的migration

Pctused 指定块减少到指定位置 才可以进行插入

                     migration:一行数据被分配到两个块中(因update造成,数字改为NULL)

                     chin:一行数据超过块的大小,数据库大小不合理

              parallel并行查询度 服务器启动多个进程对表进行查询 ,提高查询效率

              cache 用户访问表时将表放到内存

              logging 访问表时产生重做日志 关闭后 不产生重做日志 效率高 写入表的时候可以先关闭

消除表中碎片 alter table 表名 move

              表创建大了 可以回收

分区表

       一个表进行分区(每个分区对应一个段)

              Partition by range(month)

              范围分区:按日期(1-3月为一个分区)

              列表分区:按单列(一个城市一个分区)

       Cluster表

              两个表放在一个段里 相关数据放在同一个块中 IO次数减少到1

 

       索引组织表(IOT)

              索引和表默认是两个段 可以将两者放在一个段 提高IO效率

              Organization tablespace index

              溢出段

 

posted @ 2019-06-11 16:59  heima3  阅读(363)  评论(0)    收藏  举报