数据库随记(一)

一、oracle归档日志满了后处理操作

报错信息: ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.
#dblink ,dmp文件导入数据库都会导致归档日志逐渐增加。
#注意这是全清的。  #切换oracle用户后执行。
su - oracle 
cat rman_delArchiveLog.sh

#!/bin/bash
. /home/oracle/.bash_profile
echo "rman delete archiveLog starting ..."
rman target / log=/home/oracle/rman.log <<EOF
run
{
	delete noprompt archivelog all;
}
exit
EOF
exit

参考: https://blog.51cto.com/u_3369545/6612790

二、oracle导出xxx用户在yyy实例下所有的表结构。

#环境信息:   AIX  , oracle 11g
登录的用户是nxxx , 实例是 yyyapp ,里面有10000多张表

#具体操作:   创建directory
sqlplus / as sysdba
create directory MY_DIR2408 as '/appdata/202408_dmpFile';
grant read,write on directory MY_DIR2408 to nxxx;
grant read,write on directory MY_DIR2408 to public;

###
mkdir -p /appdata/202408_dmpFile
#写成一行式 ,在AIX上能正常执行(不要带有 \ 符号) ; 切换为oracle用户
expdp "'nxxx/xxxx@10.xx.xx.xx:1521/xxxapp'" directory=MY_DIR2408 dumpfile=xxxapp2xx_2xx_structure.dmp logfile=xxxapp2xx_2xx_structure.log content=metadata_only 	cluster=no   REUSE_DUMPFILES=YES

在这里插入图片描述

三、oracle 增加表空间容量

# 增加rac集群的表空间,应用库
select a.FREE_MB/1024,a.NAME,a.* from  v$asm_diskgroup a;

--一次最多加30G,  #这里的datafile根据实际情况填写
alter tablespace PM add datafile '+DATA01' size 31G;

四、修改db_files数量,重启rac后生效

#oracle  RAC重启大致参考操作。 #环境信息:
Euler bclinux , oracle 19c  RAC (两台)

增加多次表空间后,出现报错 ORA-00059:超出DB_FILES的最大值。

#修改db_files数量
alter system set db_files=8000 scope=spfile;
#查看db_files数量
show parameter db_files;

#1 重启rac集群 ,注意每个节点都要操作。 db01、 db02 ,重启
集群过程可能耗费10分钟+
#集群重启
su - root
/u01/app/19.3.0/grid/bin/crsctl stop has -f
/u01/app/19.3.0/grid/bin/crsctl start has
#观察着进程
ps -fu grid
ps -fu oracle


#进程都有了,最后登录到grid用户看看进群进程. 出现online则正常
su - grid
crsctl stat res -t
#2 启动对应的实例
oracle rac集群启停及状态检查
停止:
su - grid
srvctl stop database -d nwombak
srvctl status database -d nwombak
启动:
su - grid
srvctl start database -d nwombak
srvctl status database -d nwombak

在这里插入图片描述

4.2 上述小节途中报错及处理

ORA-01034 ORACLE not available
ORA-27101 shared memory realm does not exit
Linux-x86_64 Error:2 : No such file or directory
在这里插入图片描述

查看1521端口 , 和集群状态,是running ,端口进程PID还是在的,但还是报上述错误。
srvctl status database -d nwombak
lsof -i:1521

在这里插入图片描述

#继续处理:
su - oracle
sqlplus / as sysdba
startup mount;
exit ;
rman target /
delete noprompt archivelog all ;
exit ;
sqlplus / as sysdba
alter database open ;

在这里插入图片描述

ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initemr
ep1.ora'


#处理。  最好两台机器都执行查看情况。
su - grid
#根据pmon显示的内容,做修改。 下面是demo语句
srvctl start instance -d emrep -i emrep1 -o mount
[grid@gxwydb01 ~]$srvctl start instance -d nwombak -i nwombak1 -o mount            
PRCR-1004 : Resource ora.nwombak.db is already running

#另一台机器db02
[grid@gxwydb02 ~]$srvctl start instance -d nwombak -i nwombak2 -o mount            

在这里插入图片描述

后面发现是SID不对头。 PRKO-3032 Invalid instance name(s): nwombak

修改 /home/oracle/.bash_profile
export ORACLE_SID=nwombak1
source /home/oracle/.bash_profile

在这里插入图片描述

#db02机器操作
su - grid
srvctl status database -d nwombak
srvctl start instance -d nwombak -i nwombak -o mount 

在这里插入图片描述

#############

注意db01、db02各个用户的oracle_SID的值。
注意oracle用户 、 grid用户这两用户登录 sysdba后,他们显示的实例是不一样的。
因为oracle用户、grid用户他们各自的cat ~/.bash_profile ,里面的ORACLE_SID是不一样的。

比如grid的是export ORACLE_SID=+ASM1  ; oracle的是 export ORACLE_SID=nwombak1

select INSTANCE_NAME,STATUS FROM V$INSTANCE;
#
su - oracle
sqlplus / as sysdba

在这里插入图片描述

五、mysql删除3亿条log表-随记

在这里插入图片描述

log表占700GB ,3亿多行。 这里的索引字段为 create_time
没写存储过程。直接用shell   mysql -e 来删表里面的数据。
#/bin/bash
for i in {1..300}
do
	#删50万条数据,大概耗时3分钟。
	/usr/local/mysql/bin/mysql -uroot -p'123456' -e "use xxdata; DELETE FROM _log_g WHERE create_time < '2024-01-01 00:00:00'  limit 500000;"
	sleep 30;
	echo -e "$i finish clear  $(date +%F_%T)" >> /tmp/clearDBInfo.txt 
done

其他:

#方法1   删250万
DELETE FROM log_g WHERE create_time < '2024-01-01 00:00:00'  limit 2500000
> Affected rows: 2500000
> 时间: 337.169s

#方法2  删250万   #超过800秒 还没走完。
DELETE q
FROM  log_g q
JOIN (  
  SELECT id
  FROM log_g
  WHERE create_time < '2024-01-01 00:00:00'
  ORDER by id DESC
  limit 2500000;
) AS queryabc on q.id = queryabc.id


####  2023年限制, 可以
DELETE FROM log_g WHERE create_time < '2023-01-01 00:00:00'  limit 12500000
> Affected rows: 12500000
> 时间: 1717.663s

#### 换成2024年, 但报错失败了。
DELETE FROM log_g WHERE create_time < '2024-01-01 00:00:00'  limit 12500000
> 1206 - The total number of locks exceeds the lock table size
> 时间: 943.292s

这个报错,网上说需调整innodb_buffer_pool_size的值 ()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值