扩展表空间(PDB数据库):add_tbs.sh

#!/bin/bash

source ~/.bash_profile

export pdb_name=pdb      #PDB名称
export ts_name=default_tbs       #表空间
export inc_size_gb=1   #需要增加的GB数,单位G

#单次增长上限
inc_size_mb_threshold=$((32 * 1024))
inc_size_mb=$((${inc_size_gb} * 1024))

pdb_name=$(echo $pdb_name | tr 'a-z' 'A-Z')
ts_name=$(echo $ts_name | tr 'a-z' 'A-Z')
echo PDB名:${pdb_name}
echo 表空间名: ${ts_name}

#该函数执行SQL
function exec_select(){
sqlplus -s '/as sysdba' <<EOF
   set head off feedback off serveroutput on lines 1000
   $1
   quit;
EOF
}

function exec_ddl(){
sqlplus -s '/as sysdba' <<EOF
   set head off feedback off serveroutput on
   alter session set container=$1;
   $2
   quit;
EOF
}

db_role=$(exec_select "select database_role from v\$database;")
echo 主备库角色:${db_role}
if [ ${db_role} != 'PRIMARY' ]; then
    echo 表空间扩容需要在主库执行
    exit 1
fi

pdb_exist=$(exec_select "select count(*) from CDB_PDBS where pdb_name = '${pdb_name}';")
if [ $pdb_exist -ne 1 ]; then
   echo 目标PDB不存在
   exit 1
fi

bigfile_ts=$(exec_select "SELECT bigfile FROM CDB_PDBS d join cdb_tablespaces t on d.con_id = t.con_id WHERE d.pdb_name = '${pdb_name}' and t.tablespace_name = '${ts_name}';")
if [ ! $bigfile_ts ]; then
   echo PDB${pdb_name}下${ts_name}表空间不存在
   exit 1
fi

# 文件尺寸上限
file_size_mb_limit=$((32 * 1024 - 100))
if [ $bigfile_ts = 'YES' ]; then
   echo "big file tablespace"
   file_size_mb_limit=$((32 * 1024 * 1024 - 512))
else
   echo "normal tablespace"
fi

data_file_info=$(exec_select "SELECT * FROM (SELECT f.file_name, ROUND(f.bytes/1024/1024,5) size_mb, ROUND(f.maxbytes/1024/1024,5) max_size_mb,f.autoextensible FROM CDB_DATA_FILES f join CDB_PDBS d on f.con_id = d.con_id WHERE d.pdb_name ='${pdb_name}' and f.tablespace_name = '${ts_name}' order by max_size_mb) where rownum = 1;")
file_name=$(echo ${data_file_info} | awk '{ print $1 }')
file_size_mb=$(echo ${data_file_info} | awk '{ print $2 }' | tr '.' '0.')
file_max_size_mb=$(echo ${data_file_info} | awk '{ print $3 }' | tr '.' '0.' )
file_autoextensible=$(echo ${data_file_info} awk '{ print $4 }')

echo 数据文件${file_name}
echo 文件当前尺寸${file_size_mb}MB
echo 文件可扩展:$file_autoextensible
echo 文件自增最大尺寸:${file_max_size_mb}MB

# 增长后的新文件尺寸
new_file_size_mb=$( echo ${file_size_mb} + ${inc_size_mb} | bc)

if [ ${new_file_size_mb} -gt ${file_size_mb_limit} ]; then
   echo 超出数据文件最大限制${file_size_mb_limit}MB
   exit 1
fi

# 所属ASM磁盘组组名
asm_disk_group=$(echo $file_name | awk -F '/' '{ print $1 }')
asm_disk_group=${asm_disk_group/+/}

# 统计ASM磁盘空间
asm_dg_info=$(exec_select "SELECT free_mb,total_mb FROM V\$asm_diskgroup_stat WHERE name = '${asm_disk_group}';")
asm_dg_free_mb=$(echo ${asm_dg_info} | awk '{ print $1 }')
asm_dg_total_mb=$(echo ${asm_dg_info} | awk '{ print $2 }')
fix_asm_dg_free_mb=$(echo "${asm_dg_total_mb} * 0.95 - (${asm_dg_total_mb} - ${asm_dg_free_mb})" | bc | awk -F "." '{ print $1 }')

if [ ${inc_size_mb} -gt ${fix_asm_dg_free_mb} ]; then
   echo ${asm_disk_group}磁盘组剩余${asm_dg_free_mb}MB. 要预留5%的空间,最多能扩展${fix_asm_dg_free_mb}MB
   exit 1
fi

# 新文件尺寸超过文件自增最多尺寸的话,先调整文件最大尺寸
if [ ${new_file_size_mb} -gt ${file_max_size_mb} ]; then
   echo "ALTER DATABASE DATAFILE '${file_name}' AUTOEXTEND on MAXSIZE ${new_file_size_mb}M;"
   exec_ddl ${pdb_name} "ALTER DATABASE DATAFILE '${file_name}' AUTOEXTEND on MAXSIZE ${new_file_size_mb}M;"
fi

echo "ALTER DATABASE DATAFILE '${file_name}' resize ${new_file_size_mb}M;"
exec_ddl ${pdb_name} "ALTER DATABASE DATAFILE '${file_name}' RESIZE ${new_file_size_mb}M;"

echo 操作完成
new_ts_size_mb=$(exec_select "SELECT ROUND(sum(f.bytes)/1024/1024) size_mb FROM CDB_DATA_FILES f join CDB_PDBS d on f.con_id = d.con_id WHERE d.pdb_name = '${pdb_name}' and f.tablespace_name = '${ts_name}';")

segment_total_mb=$(exec_select "SELECT ROUND(sum(s.bytes)/1024/1024) size_mb FROM cdb_segments s join CDB_PDBS d on s.con_id = d.con_id WHERE d.pdb_name = '${pdb_name}' and s.tablespace_name = '${ts_name}';")

new_ts_free_size_mb=$(echo ${new_ts_size_mb} - ${segment_total_mb} | bc)
echo 新表空间尺寸${new_ts_size_mb}MB,空闲空间${new_ts_free_size_mb}MB

new_asm_dg_free_mb=$(exec_select "SELECT free_mb FROM V\$asm_diskgroup_stat WHERE name = '${asm_disk_group}';")
echo ${asm_disk_group}磁盘组最新剩余${new_asm_dg_free_mb}MB


=========================打印正常内容如下=============================

oracle@racdb1:/home/oracle>sh add_tbs.sh 
PDB名:PDB
表空间名: DEFAULT_TBS
主备库角色: PRIMARY
normal tablespace
数据文件+DATADG/YQBDB/FA8C41145AA66161E0530AC5A8C04C82/DATAFILE/default_tbs.286.1148745207
文件当前尺寸100MB
文件可扩展:+DATADG/YQBDB/FA8C41145AA66161E0530AC5A8C04C82/DATAFILE/default_tbs.286.1148745207 100 3072 YES awk { print $4 }
文件自增最大尺寸:3072MB
ALTER DATABASE DATAFILE '+DATADG/YQBDB/FA8C41145AA66161E0530AC5A8C04C82/DATAFILE/default_tbs.286.1148745207' resize 1124M;
操作完成
新表空间尺寸 1124MB,空闲空间330MB
DATADG磁盘组最新剩余 688MB

oracle@racdb1:/home/oracle>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习css 伪类:has

学习抖音&#xff1a; 渡一前端提薪课 首先我们看下:has(selector)是什么 匹配包含&#xff08;相对于 selector 的 :scope&#xff09;指定选择器的元素。可以认为 selector 的前面有一个看不见的 :scope 伪类。它的强大之处是&#xff0c;可以实现父选择器和前面兄弟选择器…

常见工具指令【Vim | GIT | ZIP | UNZIP | IDEA】

VIM 快捷键说明Ctrl U (up)向上翻动半页Ctrl B (back)向上翻动一页Ctrl D (down)向下翻页半页Ctrl F (forward)向下翻动一页 GIT 指令解释git init 使用指定目录作为Git仓库git add filename向资源库添加文件filenamegit rm file从资源库中删除文件git branch 分支名称创…

linux系统部署jar脚本编译

一 shell脚本 #启动参数 START_OPTS=$3#AppName=biz-score-service ##!/bin/bash SpringBoot=$2#JVM参数 JVM_OPTS="-Dname=$SpringBoot -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=512M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX…

TWDS车辆轮对故障、尺寸动态检测系统

随着我国铁路的建设发展&#xff0c;客运专线网络形成&#xff0c;既有铁路的货运能力得到释放&#xff0c;货物运输向重载方向发展&#xff0c;运输组织呈现长交路、运转周期短、编组固定的特点。 跟踪调查表明重载车辆车轮磨耗较普通车辆更为严重。大秦线c80型车辆在不到1个…

sudo -i与sudo su的区别

sudo -i 和 sudo su 都用于以超级用户&#xff08;root&#xff09;的身份运行命令&#xff0c;但两者有以下区别&#xff1a; 参数&#xff1a; sudo -i 中的 -i 表示以交互式方式登录为超级用户&#xff0c;会执行超级用户的登录脚本&#xff08;例如.bashrc&#xff09;&…

mac(M1)安装anaconda3

首先下载 然后正常安装即可&#xff0c;之所以我现在测试了anaconda,因为我发现miniconda后&#xff0c;jupyter notebook的安装就出现问题&#xff0c;所以就直接卸载miniconda&#xff0c;而直接安装anaconda了 (base) yxkbogon ~ % pip list Package …

代码规范问题,“static“ base class members should not be accessed via derived types

代码规范问题,“static” base class members should not be accessed via derived types 例如在使用fastjson时 LinkedHashMap days JSONObject.parseObject(JSONObject.toJSONString(data.get(CommonConstant.AQIW)),LinkedHashMap.class);这里使用了JSONObject来调用parse…

汽车一键启动点火开关按键一键启动按钮型号规格

汽车点火开关/移动管家一键启动按键/汽车改装引擎启动按钮型号&#xff1a;YD828溥款开关 一键启动按钮&#xff08;适用于配套启动主机使用或原车一键启动开关更换&#xff09; 1.适合配套专用板板安装 2.开孔器开孔安装 3.原车钥匙位安装 外观&#xff1a;黑色 按钮上有3种不…

基于位置的前馈神经网络

目录 1、什么是前馈全连接层 2、前馈全连接层的作用 3、代码实现FFN 1、什么是前馈全连接层 在Transformers中前馈全连接层就是具有两层线性层的全连接网络 2、前馈全连接层的作用 考虑注意力机制可能对复杂过程的拟合程度不够&#xff0c;通过增加家两层网络来增强模型的能…

MVCC和BufferPool缓存机制

文章目录 1. MVCC多版本并发控制机制2. BufferPool缓存机制 1. MVCC多版本并发控制机制 Mysql可以在可重复读隔离级别下可以保证事务较高的隔离性&#xff0c;这个隔离性是由MVCC机制来保证的&#xff0c;对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性&#…

机器学习与模式识别作业----决策树属性划分计算

文章目录 1.决策树划分原理1.1.特征选择1--信息增益1.2.特征选择2--信息增益比1.3.特征选择3--基尼系数 2.决策树属性划分计算题2.1.信息增益计算2.2.1.属性1的信息增益计算2.2.2.属性2的信息增益计算2.2.3.属性信息增益比较 2.2.信息增益比计算2.3.基尼系数计算 1.决策树划分原…

设计模式 - 解释器模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 解释器模式&#xff08;Interpreter Pattern&#xff09;指给定一门语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子&#xff0c;属于行为型设计模式。是…

AIGC|利用大语言模型实现智能私域问答助手

随着ChatGPT的爆火&#xff0c;最近大家开始关注到大语言模型&#xff08;LLM&#xff09;这个领域。像雨后春笋一样&#xff0c;国内外涌现出了很多LLM。作为开发者&#xff0c;我们通常会关注LLM各自擅长的领域和能力&#xff0c;然后思考如何利用它们的能力来解决某个场景或…

Table ‘mysql.proc‘ doesn‘t exist

使用workbench 同步model 報錯 "Table ‘mysql.proc‘ doesn‘t exist" 爲什麽會出現這個錯誤&#xff1f; 原因&#xff1a;误删了mysql数据库 解决办法如下&#xff1a; 1、在服务列表里找到mysql&#xff0c;停止服务 2、把mysql文件夹下的data文件夹备份&…

GaussDB向量数据库为盘古大模型再添助力

在今年7月7日的华为开发者大会2023(Cloud)期间,华为云盘古大模型3.0正式发布。目前盘古大模型已在政务、金融、制造、医药研发、气象等诸多行业发挥巨大价值。此次华为云发布的GaussDB向量数据库,具备一站式部署、全栈自主创新优势,不仅如此,它的ANN算法在行业排名第一,…

华为、小鹏大定爆单,智驾苦尽甘来,车主终于愿意买单

‍作者|德新 编辑|王博 国庆假期结束&#xff0c;车圈的最大热点事件&#xff0c;当属问界M7卖爆&#xff0c;上市不到一个月时间内&#xff0c;狂揽5万张大定订单。 在华为手机强势回归&#xff0c;改款问界M7大热的高光之下&#xff0c;还有一个重要趋势值得关注&#xff1…

[MySQL]基础篇

文章目录 1. MySQL基本使用1.1 MySQL的启动和登录1.1.1 MySQL的启动1.1.2 MySQL的客户端连接 1.2 数据模型 2. SQL2.1 SQL类型2.1.1 数值类型2.1.2 字符串类型2.1.3 日期类型 2.2 DDL2.2.1 数据库操作2.2.2 表操作 - 查询2.2.3 表操作 - 创建表2.2.4 表操作 - 修改 2.3 DML2.3.…

C++语言实现网络爬虫详细代码

当然&#xff01;下面是一个用C语言实现的基本网络爬虫的详细代码示例&#xff1a; #include <iostream> #include <string> #include <curl/curl.h> size_t writeCallback(void* contents, size_t size, size_t nmemb, std::string* output) {size_t totalS…

linux系统配置Samba实现与Windows系统的文件共享

1.linux系统下载安装Samba sudo apt install samba 2.在linux文件系统中创建一个共享目录(通常在用户目录下面创建一个名为share的目录) mkdir share 3.修改samba配置文件 sudo vim /etc/samba/smb.conf 添加配置信息(path share路径,需要修改) ,保存修改 [Share]comm…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Stack

堆叠容器&#xff0c;子组件按照顺序依次入栈&#xff0c;后一个子组件覆盖前一个子组件。该组件从API Version 7开始支持。可以包含子组件。 一、接口 Stack(value?: { alignContent?: Alignment }) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 二、…