存储结构与数据文件
存储结构: database----tablespace-----sefment-----extent----blocks | datafile tablespace:存储数据和表数据 1.表空间分类: 1.1永久表空间:存放用户和字典 查看表空间有名字及属于哪种类型:select tablespace_name,contents from dba_tablespaces; 1.1.1system(字典表空间):存放当前数据库数据字典信息,对象的结构信息,Oracle内部的基表(查看基表 desc tab$) 。 1.1.2sysaux(辅助表空间):分单字典表空间的负担,存放oracle内部使用的工具, 查看辅助表空间有哪些工具:select occupant_name from v$sysaux_occupants; 1.1.3undo(回退表空间):存放用户对数据块修改前的前镜像,主要用来用户执行回退或闪回操作; 1.1.4temp(临时表空间):1.存放用户临时数据,2.内存不够用时,排序操作 1.1.5users/example(用户表空间):需要手动创建 1.2表空间的状态: online:联机 offline:离线 read write:可写 read only:只读 system空间不能offline/read write/read only sysaux空间不能read only 设置表空间状态:alter tablespace users offline; 2.表空间的创建 创建语法:create [smallfile | bigfile] tablespace <> datafile '/' size <> [ extend uniform size <> | autoextend segment management local | auto]; 创建小表表空间:select bigfile tablespace sarch1 datafile '/opt/u01/oracle/oradata/db/up14.dbf' size 50m; 创建自动增长的大表表空间:select bigfile tablespace sarch1 datafile '/u01/..... .dbf' size 50m autoextend on; 查看默认使用的哪个表空间:select property_name,property_value from database_properties where property_name like '%DEF%'; 设置默认表空间:alter database default tablespace <> ; 使用默认的小 | 大 表表空间:alter databale set default smallfile | bigfile tablespace; 小表表空间:一个表空间下存放多个数据文件(最多存放1023个数据文件每个数据文件大小不能从超过32G)--------->系统默认 小表表空间数据文件头部:4k 大表表空间:一个表空间只存放一个数据文件(最大达到128T,最小8T,能放40亿个数据块) 大表表空间数据文件头部:4M 3.表空间的管理: 1.表空间改名: 注:system/sysaus 不能改名 自己创建的表空间可以改名 语法:alter tablespace <old> rename to <new>; 2.自己创建的表空间的迁移或空间下的数据文件的迁移 1.open状态下执行 注:不能离线的表空间不能迁移,能够离线的表空间可以迁移,不能直接拷贝(cp)需要离线 1.直接离线表空间(不建议使用,影响用户) 1.离线表空间:alter tablespace <> offline; 2.查看有哪些表空间:select tablespace_name,file_name from dba_data_files; 并拷贝(cp)到新路径 3.更新系统路径:alter tablespace <> rename datafile '/<old>' to '/<new>'; 4.表空间在线:alter tablespace <> online; 2.迁移表空间的某个数据文件: 1.离线数据文件:alter database datafile <路径 | 编号> offline; 查看数据文件编号:select file#,name,status from v$datafile; 2.拷贝到新路径;cp 3.更新系统路径:alter database rename file '/<old>' to '/<new>'; 4.介质恢复:recover datafile <编号 | 路径>; 5.数据文件在线:alter database datafile <编号 | 路径> online 2.mount状态下执行 1.拷贝到新路经 2.更新系统路径:alter database rename file '/<old>' to '/<new>'; 3.打开数据库:alter database open; 3.表空间的扩容:表空间使用率达到85%时需扩容--->推荐使用1.3种 查看表空间使用情况:select tablespace_name,bytes/1024/1024 bytes from dba_data_files; | 查看空闲情况:select tablespace_name,sum(bytes/1024/1024) bytes from dba_free_space group by tablespace_name ; 查看表空间是否自动增长:select file_name,autoextensible from dba_data_files; 扩容方法: 1.没有使用自动增长:----->该为自动增长:autoextend on alter database <> datafile '/' autoextend on 2.重置表空间的大小或数据文件的大小(使用它会出问题因为用户在使用) alter database datafile '/' resize 60M; 3.在表空间下增加数据文件 alter tablespace <> add datafile '/' size 50M; 4.表空间的删除: 没有对象:drop tablespace <>; 有对象:drop tabalespace <> including contents; 删除表空间及物理文件:drop tabalespace <> including contents and datafiles; 5.表空间相关试图: dba_tablespaces; dba_data_files; dba_free_space; v$tablespace(动态); undo表空间:主要给普通用户使用 默认分配10个段。 查看Undo表空间有多少个段:select segment_name from dba_rollback_segs; 查看undo表空间参数:show parameter undo; 1.作用 回退操作--------rollback 闪回操作-------commit 一致性 undo出了问题 创建undo表空间语法(也可以做smallfile | bigfile): create undo tablespace <> datafile '/' size <> autoextend in [ segment management <> entent management <> | uniform size <>]; undo_management: rallback segment: aum:auto undo management mum:manual undo management 11g:manual ----不能呢个做dml操作 sys----system auto---- 2.1Undo 表空间丢失处理(系统自带的) 1.改为手动管理:alter system set undo_management=manual scope=spfile; 2.重启数据库:shutdown immediate ---->启动:startup 3.删除undo表空间:drop tabalespace <> 4.创建undo表空间:create undo tablespace <> datafile '/' size 100m autoextend on ; 5.改为自动管理:alter system set undo_management=auto scope=spfile; 6.重启数据库:shutdown immediate ----->启动:startup 2.2undo物理文件丢失 1.关闭数据库:shutdown immediate; | shutdown abort; 启动到nomount阶段:startup nomount 2.改为手动管理undo表空间:alter system set undo_management=manual scope=spfile; 3. 启动数据库到mount阶段:shutdown immediate ---->startup nomount---->salter database mount; 4.让undo数据文件离线并删除物理文件: alter database datafile 3 offline drop; 5.打开数据库:alter databases open; 6.删除undo表空间(如果有dml操作会报错需要使用隐藏参数进行删除): drop tablespace undotbs1 7.新建undo: create undo tablespace undotbs1 datafile '/' size 100m autoextend on ; 8.改为默认:alter system set undo_tablespace=undotbs1; 9.该为自动管理: alter system set undo_management=auto scope=spfile 如果第六步不成功: 7.create pfile=‘/tmp/a.ora’ from spfile; 8.加隐藏参数过滤掉活动的undo段; select segment_name from dba_rollback_segs where tablespace_name='UNDOTBS1' vim /tmp/a.ora 添加: _corrupted_rollback_segments=(''_SYSSMU1_1240252155$,'...') 9.使用pfile启动数据库 startup pfile='/tmp/a.ora'; 10.删除undotbs1并重新创建一个undo设为默认的 drop tablespace undotbs1 including contents and datafiles; create undo tablespace undotbs2 datafile '/' size <> autoextend on; alter system set undo_tablespace=undotbs2; alter system set undo_management=auto scope=spfile; 11.重启并打开数据库 shutdown immediate---------->startup; 3.Undo表空间扩容(达到85%): 1.改为自动增长autoextend on alter database datafile '/' autoextend on; 2.重置表空间大小 resize alter database datafile '/' resize <>; 3.将表空间增加数据文件 alter tabalespcae <> add datadile ' ' size <>; 4.Undo试图: 与永久表空间试图一样 temp:临时表空间: 1.作用: 1.存放用户临时数据, 2.排序操作时,内存不够用时, 2.创建语法: create temporary tablespace <> tempfile '/' size <> [segment management <> | extent management <> uniform size <> ]; 查看临时表空间相关信息:desc dba_temp_files; 3.管理: 1.改为自动增长autoextend on alter database datafile '/' autoextend on; 2.重置表空间大小 resize alter database datafile '/' resize <>; 3.将表空间增加数据文件 alter tabalespcae <> add datadile ' ' size <>; 4.丢失处理: 允许重启:只需将数据库重启, 不允许重启:重新创建一个表空间并设置成默认的 1.重建:create temporary tablespace <> tempfile '/' size <> autoextend on; 2.设置为默认:alter database default temporary tablespace <>; 3.删除丢失的表空间:drop tablespace <>; 5.相关试图: 多1个 dba_temp_files; segment(段): 查看段的信息:desc user_segments(11g只有插入数据到segment里面才会分配段) 段的产生: 用户执行创建对象的时候,系统自动分配段,默认情况用户创建对象时候系统分配一个段, 段只有名字,没有大小 段的分类: 表段: 索引段: 临时段: undo段: 段的管理: 字典管理:10g就被淘汰。 本地管理: extent:(区) 区只有大小,没有名字: 查看区的信息:desc user_extents 区的管理: 区的大小自动管理 本地管理: Block:数据块 查看数据库信息: show parameter db_block 数据文件: 数据文件状态: online: 联机 offline:离线 recover:需要做介质恢复