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核心知识和排障案例及经验、性能调优等。

相关推荐
齐 飞7 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空8 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅12 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
饮啦冰美式14 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp14 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
wowocpp16 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
Lign1731420 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
成富38 分钟前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq2739 分钟前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix42 分钟前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友