Oracle实践数据库笔记-9
Rehoni / 2018-03-30
管理表空间和数据文件
- 数据库的存储层次结构 PPT153
- 数据库,
- 表空间,
- 段(存储结构)
- 区(最小的空间分配单位)___空间管理
- 数据字典管理[占用系统表空间,增加系统负担,现已被废弃]
- 本地管理 bitmap位图 extend_id bitmap 1 1 2 0 //可用
- 块(最小的IO单位) 根据访问数据量来控制块的单位大小
- 碎片,本地管理 依据管理和性能分配表空间 索引和数据不要放在一个表空间里
- 空间管理
- 系统空间
- 非系统空间
- 创建表空间
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的那么两者都可以创建
- 表空间的类型
- 常规表空间
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;
- 表空间的状态
- 正常状态(联机,可读可写)
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
- 删除表空间
drop tablespace tbs1;---内容不是空的,就不能删 drop tablespace tbs1 including contents;
- 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;---文件被删掉
- 扩展表空间 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;
- 修改原数据文件的大小
- 移动数据文件 PPT171
- 可以移动 不再用的文件
- 物理移动
- 更新控制文件
实验
创建USERS表空间,并设置为数据库默认的永久表空间
- 创建一个由4K的块组成表空间TEST(TEST01.dbf 10M) 🆗
- 向TEST表空间增加一个10M的数据文件(TEST02.dbf),将TEST01.DBF修改为15m 🆗
- 移动TEST01.DBF 🆗
- 在TEST表空间内创建一张表table1(insert)🆗
- 将TEST表空间改为read only🆗
- 删除表table1🆗
- 将表空间改为read write🆗
- 删除TEST表空间 检测数据文件是否被删除🆗
- OMF创建表空间 检测数据文件是否被删除🆗
- 创建1个撤销表空间undotbs2,并把它设为系统当前的撤销表空间🆗
- 创建临时表空间temp2,并把它设为数据库默认的临时表空间🆗
- 没有备份的恢复(归档模式)
- 创建一个表空间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最基础的部分已经结束了,后边的部分可以自学了啧