Oracle表空间管理(三)

  1. List item

本篇介绍自定义表空间及数据文件的管理,这里所说的自定义就是指业务或者DBA自己创建的表空间及其对应的数据文件,也就是后续作为DBA要运维管理的核心数据。全是干货,看完这篇,表空间及其数据文件的管理你就全部拿下了!!

业务表空间管理

1. 表空间创建

语法:

CREATE TABLESPACE 表空间名字

DATAFILE '数据文件详细信息'

EXTENT MANAGEMENT { LOCAL {AUTOALLOCATE \| UNIFORM \[SIZE INTETER \[K\|M\] \] } }

举例:

-- 创建大小为100mb的永久表空间TEST01,禁止自动扩展数据文件:

复制代码
create tablespace TEST01 logging datafile '/oradata/TEST01.dbf' size 100m reuse autoextend off;

-- 创建永久表空间TEST02,允许自动扩展数据文件,本地管理方式:

复制代码
create tablespace TEST02 logging datafile '/oradata/TEST02.dbf' size 100m reuse autoextend on next 10m maxsize 200m extent management local;

-- 创建永久表空间TEST03,允许自动扩展数据文件,本地管理方式,区分配方式为自动分配

复制代码
create tablespace TEST03 logging
datafile'/oradata/TEST03.dbf' size 100m
reuse autoextend on next 10m maxsize 200m
extent management local autoallocate;

-- 创建永久表空间TEST04,允许自动扩展数据文件,本地管理方式,区分配方式为定制分配

复制代码
create tablespace TEST04
logging
datafile'/oradata/TEST04.dbf' size 100m
reuse autoextend on next 10m maxsize 200m
extent management local uniform size 10m;

2. 管理表空间

通过alter tablespace命令该表空间中数据文件的位置(或名字)

--首先把该表空间设置为脱机状态

复制代码
alter tablespace tbs_data offline normal;

-- 手动创建TEST03文件夹,并且复制TEST03.dbf到TEST03文件夹,重命名为TEST03_1.dbf

复制代码
alter tablespace tbs_data rename datafile
'/oradata/ORCL/tbs_data01.dbf'
to
'/oradata/tbs_data01.dbf';

--最后把该表空间设置为联机状态

复制代码
alter tablespace TEST03 online;

3. 删除表空间

删除表空间test01 及其对应的数据文件

复制代码
drop tablespace test01 including contents and datafiles;

4. 查询表空间使用情况

查询表空间的free space

复制代码
select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS
MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;

--查询表空间的总容量

复制代码
select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group
by tablespace_name;

--查询表空间使用率

复制代码
SELECT total.tablespace_name,
Round(total.MB, 2) AS Total_MB,
Round(total.MB - free.MB, 2) AS Used_MB,
Round(( 1 - free.MB / total.MB ) * 100, 2)
|| '%' AS Used_Pct
FROM (SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name;

5. 表空间扩容:表空间的扩容有4种方式:

第一种方式:表空间增加数据文件

复制代码
alter tablespace test02 add datafile '/oradata/test02_2.DBF' size 100M;

第二种方式:表空间增加数据文件,设置自增长,限制最大值

复制代码
alter tablespace test02 add datafile '/oradata/test02_3.DBF' size 100M autoextend
on maxsize 1024M;

第三种方式:已存在表空间数据文件设置自增长

复制代码
alter database datafile '/oradata/TEST02.dbf' autoextend on maxsize 2048M;

第四种方式:已存在表空间数据文件重新设置大小

复制代码
alter database datafile '/oradata/test02_3.DBF' resize 500M;

补充:redo的管理

1. redo日志状态查看

复制代码
select group#,thread#,sequence#,bytes/1024/1024
size_MB,members,archived,status,first_change#,to_char(FIRST_TIME,'yyyy-mm-dd
hh24:mi:ss') first_time from v$log;

2. 添加redo日志组

复制代码
SQL> alter database add logfile group 4
('/oradata/orcl/redo04a.log','/oradata/orcl/redo04b.log') size 100M;

3. 添加redo日志成员

复制代码
SQL> alter database add logfile group 5 ('/oradata/redo05a.log') size 10M;

-->给group 5添加一个日志成员

复制代码
SQL> alter database add logfile member '/oradata/redo05b.log' to group 5;

4.删除redo日志组

检查日志组状态

复制代码
SQL> select group#,thread#,sequence#,bytes/1024/1024
size_MB,members,archived,status,first_change#,to_char(FIRST_TIME,'yyyy-mm-dd
hh24:mi:ss') first_time from v$log;

当archvied状态为yes,status状态为inactive or unused状态时,可以删除该redolog group。

复制代码
SQL> alter database drop logfile group 5;

查询redo信息

V l o g V log V logVlogfile

5. redolog损坏的恢复

在做下面实验之前,请先对数据库进行一次全库备份。

复制代码
mkdir /u01/backup
vim full.sh
#!
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3/db_1
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:$PATH
rman target / log /u01/backup/rman_full.log append<<EOF
run
{allocate channel c1 type disk;
allocate channel c2 type disk;
backup database filesperset 4 format '/u01/backup/full_%d_%T_%s_%p';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format '/u01/backup/arch_%d_%T_%s_%p' delete input;
backup current controlfile format '/u01/backup/ctl_%d_%T_%s_%p';
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
}
EOF

-- 非当前日志组成员损坏

检查redolog日志组状态

复制代码
SQL> select group#,thread#,sequence#,bytes/1024/1024
size_MB,members,archived,status,first_change#,to_char(FIRST_TIME,'yyyy-mm-dd
hh24:mi:ss') first_time from v$log;

正常关闭数据库

复制代码
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

删除日志组4的一个日志组成员

复制代码
SQL> ! rm -f /oradata/orcl/redo04b.log

启动数据库,数据库可以正常启动但是在alert log 日志中报错误。

检查日志状态

复制代码
SQL> select a.group#,a.thread#,b.member,a.bytes/1024/1024
size_MB,a.members,a.archived,a.status from v$log a,v$logfile b where
a.group#=b.group#;
SQL> select a.group#,b.status,b.member from v$log a join v$logfile b on
a.group#=b.group# where b.status='INVALID';

-->遇到这种情况使用alter database clear方式重建group.

复制代码
SQL> alter database clear logfile group 4;
Database altered
SQL> select * from v$logfile;

当前日志组损坏

这种状态处理起来是比较麻烦的。需要做不完全恢复或者强制打开,这些都是有可能导致数据丢失的。因此我

们要尽量避免这种情况的发生,对每组日志进行镜像就是一个不错的方法。

-->恢复方法:

1)如果有归档和备份,用不完全恢复。

SQL>startup mount;

SQL>recover database until cancel; 先选择auto尽可能多的利用归档日志进行恢复,然后再次执行

SQL>recover database until cancel; 这次输入cancel,完成不完全恢复

用resetlogs打开数据

SQL>alter database open resetlogs;

2)强制恢复, 这种方法可能会导致数据不一致

sql>startup mount;

sql>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

SQL> shutdown abort

sql>startup mount;

sql>recover database until cancel;

sql>alter database open resetlogs;

-->使用该隐含参数将库来起来以后,需要将数据导出然后重新建库。

本篇涉及到的备份还原操作后续博文会重点专题介绍。

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB核心知识和排障案例及经验、性能调优等。

相关推荐
数据智能老司机13 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机14 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
宁zz14 小时前
乌班图安装jenkins
运维·jenkins
用户967151139167214 小时前
Rust 如何轻松实现 RTMP 流媒体推送?深入解析直播推流场景与解决方案
rust·ffmpeg
小小码农Come on14 小时前
ffmpeg命令整理
ffmpeg
松果猿14 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆14 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010114 小时前
rust 同时处理多个异步任务
java·数据库·rust
大丈夫立于天地间14 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
数据智能老司机14 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构