Luo Hao

Oracle实践数据库笔记-9

Rehoni / 2018-03-30


管理表空间和数据文件

  1. 数据库的存储层次结构 PPT153
    • 数据库,
    • 表空间,
    • 段(存储结构)
    • 区(最小的空间分配单位)___空间管理
      • 数据字典管理[占用系统表空间,增加系统负担,现已被废弃]
      • 本地管理 bitmap位图 extend_id bitmap 1 1 2 0 //可用
    • 块(最小的IO单位) 根据访问数据量来控制块的单位大小
    • 碎片,本地管理 依据管理和性能分配表空间 索引和数据不要放在一个表空间里
  2. 空间管理
    • 系统空间
    • 非系统空间
  3. 创建表空间
        desc dba_segments
        show parameter db_block_size
        create tablespace tbs1 datafile 'D:\app\hwj\oradata\sales\tbs1.dbf' size 10m blocksize 2048;---报错
        alter session set nls_language=america;---解决报错为?????的办法
        show parameter cache;
        alter system set db_2k_cache_size= 10m;
        create tablespace userdata datafile 'E:\app\Res0liya\oradata\orcl\userdata01.dbf' size 100m autoextend on next 5m maxsize 200m;---创建表空间
        create tablespace userdata datafile 'E:\app\Res0liya\oradata\orcl\userdata01.dbf' size 100m extend management dictionary;---创建表空间
        desc dba_tablespaces;---如果你的system表空间是本地管理local的,那你只能创建本地管理表空间,如果是dictionary的那么两者都可以创建
    
  4. 表空间的类型
    • 常规表空间
        select name from v$tablespace;
    
    • 临时表空间(排序) 数据库属性视图
        desc database_properties;
        select property_name,property_value from database_properties;---default_temp_tablespace临时表空间,default_permament_tablespace默认常规表空间
        create tablespace users datafile 'E:\app\Res0liya\oradata\orcl\users01.dbf' size 30m;
        alter database default tablespace users;---设置为默认表空间
        create temporary tablespace temp2 tempfile 'E:\app\Res0liya\oradata\orcl\users02.dbf' size 30m;
        alter database default temporary tablespace temp2;
    
    • 大文件表空间理解一下
        default_tbs_type ---smallfile
    
    • 撤销表空间(放回滚的数据的DML修改之前可以回滚)
        show parameter undo_tablespace;
        create undo tablespace undotbs2 datafile 'E:\app\Res0liya\oradata\orcl\undotbs02.dbf' size 20m;
        alter system set undo_tablespace=undotbs2;
    
  5. 表空间的状态
    • 正常状态(联机,可读可写)
        desc dba_tablespaces;
        select tablespace_name,status from dba_tablespaces;---online,read only
        create table scott.demo(id int,name varchar(20)) tablespace tbs1;
        insert into scott.demo values(1,'luobo');
        insert into scott.demo values(2,'aaa');
        commit;
        alter system checkpoint;
    
    • 只读状态
        alter tablespace tbs1 read only;
        drop table scott.demo;---是可以删除掉的
        alter tablespace tbs1 read write;
        flashback table demo to before drop;
    
    • 脱机状态 不能脱机的表空间 system,undotbs1,所有的临时表空间 sysaux辅助系统表空间,自动优化调整,自动化管理,能够脱机,功能失效 undotbs撤销表空间,活动/当前的undotbs不能够脱机
        alter tablespace system offline;---online
    
  6. 删除表空间
        drop tablespace tbs1;---内容不是空的,就不能删
        drop tablespace tbs1 including contents;
    
  7. OMF的表空间
        show parameter db_create;
        alter system set db_create_file_dest;
        create tablespace tbs2;---报错
        create tablespace tbs2 datafile 'path' size 10m;
        drop tablespace tbs2;---文件没被删掉
        alter system set db_create_file_dest='E:\app\OMF\dest';
        create tablespace tbs2;
        select tablespace name,file_name from 某个表;
        drop tablespace tbs2;---文件被删掉
    
  8. 扩展表空间 PPT167
    • 修改原数据文件的大小
      • 自动扩展
      • 手动扩展
        ALTER DATABASE DATAFILE
        '/u01/oradata/userdata02.dbf' SIZE 200M
        AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
        ALTER DATABASE
        DATAFILE '/u03/oradata/userdata02.dbf'
        RESIZE 200M;
    
    • 添加新的数据文件
        ALTER TABLESPACE app_data
        ADD DATAFILE '/u01/oradata/userdata03.dbf'
        SIZE 200M;
    
  9. 移动数据文件 PPT171
    • 可以移动 不再用的文件
    • 物理移动
    • 更新控制文件

实验

创建USERS表空间,并设置为数据库默认的永久表空间

  1. 创建一个由4K的块组成表空间TEST(TEST01.dbf 10M) 🆗
  2. 向TEST表空间增加一个10M的数据文件(TEST02.dbf),将TEST01.DBF修改为15m 🆗
  3. 移动TEST01.DBF 🆗
  4. 在TEST表空间内创建一张表table1(insert)🆗
  5. 将TEST表空间改为read only🆗
  6. 删除表table1🆗
  7. 将表空间改为read write🆗
  8. 删除TEST表空间 检测数据文件是否被删除🆗
  9. OMF创建表空间 检测数据文件是否被删除🆗
  10. 创建1个撤销表空间undotbs2,并把它设为系统当前的撤销表空间🆗
  11. 创建临时表空间temp2,并把它设为数据库默认的临时表空间🆗
  12. 没有备份的恢复(归档模式)
    • 创建一个表空间TBS1(TBS1.DBF)🆗
    • 在TBS1表空间内创建一张表T1🆗
    • shutdown immediate🆗
    • 手工删除表空间TBS1的数据文件🆗
    • startup🆗
    • 将数据文件TBS1.DBF脱机🆗
    • alter database open;🆗
    • alter database create datafile ‘pth\tbs1.bdf’;🆗
    • recover datafile ‘path\tbs1.dbf’;🆗
    • 将数据文件TBS1.DBF联机🆗
    • 检查数据是否恢复🆗
    create tablespace TEST datafile 'E:\app\Res0liya\oradata\orcl\test01.dbf' size 10m blocksize 4096;---报错
    alter system set db_4k_cache_size=10m;
    create tablespace TEST datafile 'E:\app\Res0liya\oradata\orcl\test01.dbf' size 10m blocksize 4096;
    alter tablespace TEST add datafile 'E:\app\Res0liya\oradata\orcl\test02.dbf' size 10m;
    alter database datafile 'E:\app\Res0liya\oradata\orcl\test01.dbf' resize 15m;
    select tablespace_name,status from dba_tablespaces;
    alter tablespace test offline;
    alter tablespace TEST
  2  rename
  3  datafile 'E:\app\Res0liya\oradata\orcl\test01.dbf'
  4  to 'E:\app\Res0liya\oradata\test01.dbf';
    alter tablespace TEST online;
    create table scott.table1(id int,name varchar(20)) tablespace test;
    insert into scott.table1 values(1,'luobo');
    insert into scott.table1 values(2,'aaa');
    alter tablespace TEST read only;
    select tablespace_name,status from dba_tablespaces;
    drop table scott.table1;
    alter tablespace TEST read write;
    drop tablespace TEST;---数据文件未被删除
    show parameter db_create;
    alter system set db_create_file_dest='E:\app\OMF';
    create tablespace TEST;
    drop tablespace TEST;---数据文件删除了
    create undo tablespace undotbs2 datafile 'E:\app\Res0liya\oradata\orcl\undotbs2.dbf' size 30m;
    alter system set undo_tablespace=undotbs2;
    show parameter undo_tablespace;---查询
    create temporary tablespace temp2 tempfile 'E:\app\Res0liya\oradata\orcl\temp2.dbf' size 30m;
    alter database default temporary tablespace temp2;
    select property_name,property_value from database_properties;---查询
    col PROPERTY_NAME for a32;
    col PROPERTY_VALUE for a32;
    select property_name,property_value from database_properties;
    create tablespace TBS1 datafile 'E:\app\Res0liya\oradata\orcl\tbs01.dbf' size 30m;
    select tablespace_name,status from dba_tablespaces;---查询
    create tablespace TBS1 datafile 'E:\app\Res0liya\oradata\orcl\tbs01.dbf' size 30m;
    select tablespace_name,status from dba_tablespaces;
    create table scott.t1(id int);
    insert table scott.t1 values (1);
    commit;
    alter system checkpoint;
    shutdown immediate
    删除本地文件tbs01.dbf
    startup---报错
    ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
    ORA-01110: 数据文件 8: 'E:\APP\RES0LIYA\ORADATA\ORCL\TBS01.DBF'
    alter database datafile 8 offline;---报错
    archive log list;---检查是不是归档模式
    alter database archivelog;--设置了归档模式(见之前的笔记)之后就不会报错
    alter database open;
    alter database create datafile 'E:\APP\RES0LIYA\ORADATA\ORCL\TBS01.DBF';
    recover datafile 'E:\APP\RES0LIYA\ORADATA\ORCL\TBS01.DBF';
    alter database datafile 8 online;
    本地文件tbs01.dbf回来了
    desc scott.t1;
    select * from scott.t1;

Oracle最基础的部分已经结束了,后边的部分可以自学了