标签云
asm恢复 bbed bootstrap$ dul In Memory kcbzib_kcrsds_1 kccpb_sanity_check_2 MySQL恢复 ORA-00312 ORA-00607 ORA-00704 ORA-00742 ORA-01110 ORA-01555 ORA-01578 ORA-01595 ORA-08103 ORA-600 2131 ORA-600 2662 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 Oracle 恢复 ORACLE恢复 ORACLE数据库恢复 oracle 比特币 OSD-04016 YOUR FILES ARE ENCRYPTED 勒索恢复 比特币加密文章分类
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (103)
- 数据库 (1,768)
- DB2 (22)
- MySQL (77)
- Oracle (1,609)
- Data Guard (52)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (166)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (69)
- Oracle Bug (8)
- Oracle RAC (54)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (29)
- Oracle备份恢复 (591)
- Oracle安装升级 (97)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (86)
- PostgreSQL (30)
- pdu工具 (6)
- PostgreSQL恢复 (9)
- SQL Server (32)
- SQL Server恢复 (13)
- TimesTen (7)
- 达梦数据库 (3)
- 达梦恢复 (1)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (39)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (22)
-
最近发表
- ORA-600 kokiasg1故障分析(obj$中核心字典序列全部被恶意删除)
- ORA-00756 ORA-10567故障数据0丢失恢复
- 数据库文件变成32k故障恢复
- tcp连接过多导致监听TNS-12532 TNS-12560 TNS-00502错误
- 文件系统格式化MySQL数据库恢复
- .sstop勒索加密数据库恢复
- 解决一次硬件恢复之后数据文件0kb的故障恢复case
- Error in invoking target ‘libasmclntsh19.ohso libasmperl19.ohso client_sharedlib’问题处理
- ORA-01171: datafile N going offline due to error advancing checkpoint
- linux环境oracle数据库被文件系统勒索加密为.babyk扩展名溯源
- ORA-600 ksvworkmsgalloc: bad reaper
- ORA-600 krccfl_chunk故障处理
- Oracle Recovery Tools恢复案例总结—202505
- ORA-600 kddummy_blkchk 数据库循环重启
- 记录一次asm disk加入到vg通过恢复直接open库的案例
- CHECKDB 发现了 N 个分配错误和 M 个一致性错误
- 达梦数据库dm.ctl文件异常恢复
- Oracle Recovery Tools修复ORA-00742、ORA-600 ktbair2: illegal inheritance故障
- 可能是 tempdb 空间用尽或某个系统表不一致故障处理
- 11.2.0.4库中遇到ORA-600 kcratr_nab_less_than_odr报错
分类目录归档:数据库
long查询结果转换为varchar2类型
来自Thomas Kyte 《Oracle9i/10g/11g编程艺术》 12章节中.由于long的操作限制,那么在操作long之前可以将该类型的结果转换为varchar2然后再使用,long_help.substr_of的基本意思是将long结果的的前4000字节转换为varchar2类型.如果long的数据超过了4000字节,那么可以将循环调用此函数
create or replace package long_help authid current_user as function substr_of ( p_query in varchar2, p_from in number, p_for in number, p_name1 in varchar2 default NULL, p_bind1 in varchar2 default NULL, p_name2 in varchar2 default NULL, p_bind2 in varchar2 default NULL, p_name3 in varchar2 default NULL, p_bind3 in varchar2 default NULL, p_name4 in varchar2 default NULL, p_bind4 in varchar2 default NULL ) return varchar2; end; create or replace package body long_help as g_cursor number := dbms_sql.open_cursor; g_query varchar2(32765); procedure bind_variable( p_name in varchar2, p_value in varchar2 ) is begin if ( p_name is not null ) then dbms_sql.bind_variable( g_cursor, p_name, p_value ); end if; end; function substr_of ( p_query in varchar2, p_from in number, p_for in number, p_name1 in varchar2 default NULL, p_bind1 in varchar2 default NULL, p_name2 in varchar2 default NULL, p_bind2 in varchar2 default NULL, p_name3 in varchar2 default NULL, p_bind3 in varchar2 default NULL, p_name4 in varchar2 default NULL, p_bind4 in varchar2 default NULL ) return varchar2 as l_buffer varchar2(4000); l_buffer_len number; begin if ( nvl(p_from,0) <= 0 ) then raise_application_error (-20002, 'From must be >= 1 (positive numbers)' ); end if; if ( nvl(p_for,0) not between 1 and 4000 ) then raise_application_error (-20003, 'For must be between 1 and 4000' ); end if; if ( p_query <> g_query or g_query is NULL ) then if ( upper(trim(nvl(p_query,'x'))) not like 'SELECT%') then raise_application_error (-20001, 'This must be a select only' ); end if; dbms_sql.parse( g_cursor, p_query, dbms_sql.native ); g_query := p_query; end if; bind_variable( p_name1, p_bind1 ); bind_variable( p_name2, p_bind2 ); bind_variable( p_name3, p_bind3 ); bind_variable( p_name4, p_bind4 ); dbms_sql.define_column_long(g_cursor, 1); if (dbms_sql.execute_and_fetch(g_cursor)>0) then dbms_sql.column_value_long (g_cursor, 1, p_for, p_from-1, l_buffer, l_buffer_len ); end if; return l_buffer; end substr_of; end;
使用方法:查询DBA_TAB_PARTITIONS中的HIGH_VALUE
SELECT * FROM (SELECT TABLE_OWNER, TABLE_NAME, PARTITION_NAME, LONG_HELP.SUBSTR_OF('SELECT HIGH_VALUE FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER=:TABLE_OWNER AND TABLE_NAME=:TABLE_NAME AND PARTITION_NAME=:PARTITION_NAME', 1, 4000, 'TABLE_OWNER', TABLE_OWNER, 'TABLE_NAME', TABLE_NAME, 'PARTITION_NAME', PARTITION_NAME) HIGH_VALUE FROM DBA_TAB_PARTITIONS);
发表在 Oracle
评论关闭
WARNING: inbound connection timed out (ORA-3136)
1、现象
alert文件中
Mon Jun 27 11:12:34 2011
WARNING: inbound connection timed out (ORA-3136)
sqlnet.log文件中
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 10.2.0.4.0 – Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 10.2.0.4.0 – Production
TCP/IP NT Protocol Adapter for Linux: Version 10.2.0.4.0 – Production
Time: 27-JUN-2011 11:12:34
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS:operation timed out
ns secondary err code: 12606
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=211.155.227.20)(PORT=2104))
2、原因
Whenever default timeouts are assigned to a parameter, there may be cases where this default does not work well with a particular application. However, some type of timeout on the connection establishment is necessary to combat Denial of Service attacks on the database. In this case, SQLNET.INBOUND_CONNECT__TIMEOUT and INBOUND_CONNECT_TIMEOUT_listenername were given default values of 60 seconds in Oracle 10.2. It is these timeout values that can cause the errors described in this note.
Also note that it is possilbe the reason the database is slow to authenticate, may be due to an overloaded Oracle database or node.
3、解决
1). set INBOUND_CONNECT_TIMEOUT_listenername=0 in listener.ora
2). set SQLNET.INBOUND_CONNECT_TIMEOUT = 0 in sqlnet.ora of server.
3). stop and start both listener and database.
4). Now try to connect to DB and observe the behaviour
4、具体操作
4.1)修改INBOUND_CONNECT_TIMEOUT_listenername
4.1.1)lsnrctl命令修改
LSNRCTL> set inbound_connect_timeout 0
LSNRCTL>save_config
4.1.2)vi修改
修改listener.ora文件,加入: INBOUND_CONNECT_TIMEOUT_listenername=0
4.2)修改SQLNET.INBOUND_CONNECT__TIMEOUT
修改sqlnet.ora文件,加入: SQLNET.INBOUND_CONNECT__TIMEOUT=0
基于innobackupex的mysql备份脚本
#! /bin/bash #数据库相关信息 dbuser=root dbpasswd=password mycnf=/etc/mysql/my.cnf #如果bin-log没有指定路径 dir_bin=/opt/mysql/mysqldata/mysqllog #数据库备份的路径 install_dir=/opt/MySqlBackUp data_dir=$install_dir/data temp_dir=$install_dir/temp log_dir=$install_dir/logs bin_dir=$install_dir/bin #接受邮箱 mail=chengfei@srt.com.cn #备份文件名、日志名、备份日志 sj=`date +\%Y``date +\%m``date +\%d``date +\%H``date +\%M``date +\%S` datafile=$sj"_data.tar.gz" log=$sj".log" binlogfile=$sj"_bin.tar.gz" #使用mysqldump备份 #是否启动dump功能(0表示不启用,1表示启用) dump_flag=1 #需要dump出来的数据库名 dumpdb=srtair #dump文件名 dumpfile=$sj"_"$dumpdb".sql.gz" #是否备份至远程 #是否启用ftp传输功能 ftp_flag=0 #ftp IP地址 ftp_ip= #ftp 用户名 ftp_user= #ftp 密码 ftp_passwd= #上传ftp 路径 ftp_dir= #读取my.cnf文件 process_readconfig() { echo "-----------开始读my.cnf文件--`date`-------------" #没有具体路径情况或者有具体路径 bin_log=`cat $mycnf | grep -i '^log-bin' | awk -F = '{print $2}'|sed s/\ //g` #数据文件路径 datadir=`cat $mycnf | grep -i '^datadir' | awk -F = '{print $2}'|sed s/\ //g` #需要判断是否有/,然后决定是否是全路径 #basedir路径 basedir=`cat $mycnf | grep -i '^basedir' | awk -F = '{print $2}'|sed s/\ //g` } #日志处理 process_binlog() { echo "……………………………开始备份日志文件--`date`………………………………">>"$log_dir/$log" echo "……………………………开始备份日志文件--`date`………………………………" echo "需要备份二进制日志列表……">>"$log_dir/$log" ls -tl "$bin_log."[0-9]* >>"$log_dir/$log" echo "开始备份二进制日志文件……"`date`>>"$log_dir/$log" tar czvfP "$data_dir/$binlogfile" "$bin_log".[0-9]* echo "结束备份二进制日志文件……"`date`>>"$log_dir/$log" #删除一天以前的日志文件 echo "删除过期二进制日志文件……"`date`>>"$log_dir/$log" echo "删除过期二进制日志列表……">>"$log_dir/$log" find $dir_bin -type f -mtime +1>>"$log_dir/$log" find $dir_bin -type f -mtime +1 -exec rm -f {} \; echo "删除过期二进制日志文件结束……"`date`>>"$log_dir/$log" echo "…………………………备份日志文件结束--`date`……………………………………">>"$log_dir/$log" echo "…………………………备份日志文件结束--`date`……………………………………" } #数据备份 process_backup() { process_readconfig #备份数据库 echo "……………………………开始备份数据文件--`date`………………………………" echo "……………………………开始备份数据文件--`date`………………………………">>"$log_dir/$log" source /root/.bash_profile $bin_dir/innobackupex --user="$dbuser" --password="$dbpasswd" --defaults-file="$mycnf" --stream=tar "$temp_dir" 2>"$temp_dir/$sj"_tmp.log | gzip>"$data_dir/$datafile" echo "……………………………备份数据文件结束--`date`………………………………">>"$log_dir/$log" echo "……………………………备份数据文件结束--`date`………………………………" cat "$temp_dir/$sj"_tmp.log>>"$log_dir/$log" #删除7天以前备份数据和信息 echo "清理7天前备份数据与相关信息……"`date`>>"$log_dir/$log" find $data_dir -type f -mtime +7>>"$log_dir/$log" find $data_dir -type f -mtime +7 -exec rm -f {} \; #mysqldump操作 if [ "$dump_flag" == 1 ]; then echo "……………… mysqldump操作开始--`date`……………" echo "……………… mysqldump操作开始--`date`………">>"$log_dir/$log" exp_sql echo "……………… mysqldump操作结束--`date`…………">>"$log_dir/$log" echo "……………… mysqldump操作结束--`date`……………………………" fi #登录mysql,切换日志 $basedir/bin/mysql -u$dbuser -p$dbpasswd<<XFF flush logs; exit XFF #备份日志文件 process_binlog #ftp(没有写是否上传失败,成功) if [ "$ftp_flag" == 1 ]; then echo "……………… ftp操作开始--`date`……………" echo "……………… ftp操作开始--`date`…………">>"$log_dir/$log" exec_ftp echo "……………… ftp操作结束--`date`…………">>"$log_dir/$log" echo "……………… ftp操作结束--`date`……………………………" fi #发送邮件 process_send } process_send() { #查找错误 grep "Error" "$temp_dir/$sj"_tmp.log > "$temp_dir/$sj".err IP=`/sbin/ifconfig ${eth} | grep 'inet addr:'| awk '{print $2}' | awk -F : '{print $2}'` IP=`echo $IP|awk '{print $1}'` echo `grep "innobackupex: completed OK\!" "$temp_dir/$sj"_tmp.log | awk -F : '{print $4}'|sed s/\ //g`>"$temp_dir/$sj".good GOOD_COUNT=`cat "$temp_dir/$sj".good |wc -l` ERROR_COUNT=`cat "$temp_dir/$sj".err |wc -l` if [ "$ERROR_COUNT" == 0 -a "$GOOD_COUNT" == 1 ]; then echo "`date`-----MySql备份成功-----">>"$log_dir"/result.log echo "-----------------------------------">>"$log_dir"/result.log echo "……………………………开始发送邮件--`date`………………………………" echo "……………………………开始发送邮件--`date`………………………………">>"$log_dir/$log" echo "MySql_Backup_Succeed" | mutt -s "$IP"_MySql_Backup_Succeed -a "$log_dir/$log" ${mail} else echo "`date`-----MySql备份失败,请检查$temp_dir"/"$sj"_tmp.log>>"$log_dir"/result.log echo "-----------------------------------">>"$log_dir"/result.log echo "……………………………开始发送邮件--`date`………………………………" echo "……………………………开始发送邮件--`date`……………………………">>"$log_dir/$log" cat "$temp_dir/$sj".err | mutt -s "$IP"_MySql_Backup_Fail -a "$temp_dir/$sj"_tmp.log ${mail} fi #删除7天前的日志文件 find $temp_dir -type f -mtime +7 -exec rm -f {} \; echo "……………………………发送邮件结束--`date`………………………………">>"$log_dir/$log" echo "……………………………发送邮件结束--`date`………………………………" } #导出sql语句 exp_sql() { mysqldump -u "$dbuser" -p"$dbpasswd" --single-transaction --allow-keywords --add-locks --add-drop-table -F -q "$dumpdb" |gzip 1>"$data_dir/$dumpfile" } #ftp操作 exec_ftp() { echo "#!/bin/bash">"$temp_dir/$sj"_ftp.sh echo "ftp -n $ftp_ip <<XFF">>"$temp_dir/$sj"_ftp.sh echo "user $ftp_user $ftp_passwd">>"$temp_dir/$sj"_ftp.sh echo "bin">>"$temp_dir/$sj"_ftp.sh echo "cd $ftp_dir">>"$temp_dir/$sj"_ftp.sh echo "lcd $data_dir">>"$temp_dir/$sj"_ftp.sh echo "put $datafile">>"$temp_dir/$sj"_ftp.sh echo "put $dumpfile">>"$temp_dir/$sj"_ftp.sh echo "put $binlogfile">>"$temp_dir/$sj"_ftp.sh echo "lcd $log_dir">>"$temp_dir/$sj"_ftp.sh echo "put $log">>"$temp_dir/$sj"_ftp.sh echo "close">>"$temp_dir/$sj"_ftp.sh echo "bye" >>"$temp_dir/$sj"_ftp.sh echo "XFF">>"$temp_dir/$sj"_ftp.sh chmod 777 "$temp_dir/$sj"_ftp.sh sh "$temp_dir/$sj"_ftp.sh } #执行备份 process_backup
mysql_backup.sh程序安装说明
1、安装mysqlbackup程序
上传mysqlbackup到服务器/tmp目录
cd /tmp
unzip mysqlbackup.zip
cp /tmp/mysqlbackup/* /opt/mysql/product/5.1/bin
mkdir -p /opt/MySqlBackUp/bin
mkdir -p /opt/MySqlBackUp/data
mkdir -p /opt/MySqlBackUp/logs
mkdir -p /opt/MySqlBackUp/temp
ln -s /opt/mysql/product/5.1/bin/innobackupex /opt/MySqlBackUp/bin/innobackupex
对innobackupex进行授权
cd /opt/mysql/product/5.1/bin/
chmod +x innobackupex*
chmod +x xtrabackup*
chmod +x tar4ibd
cp /tmp/mysqlbackup/mysql_backup.sh /opt/MySqlBackUp/bin/
chmod 775 /opt/MySqlBackUp/bin/mysql_backup.sh
2、修改mysql_backup.sh中的相关数据
dbuser
dbpasswd
mail
dumpdb
3、配置mysql环境变量到root中
export MYSQL_BASE=/opt/mysql
export BASEDIR=$MYSQL_BASE/product/5.1
export DATADIR=$MYSQL_BASE/mysqldata
export LD_LIBRARY_PATH=$BASEDIR/lib:/lib:/usr/lib:/usr/local/lib
export TMPDIR=/tmp
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$BASEDIR/bin:$MYSQL_BASE:$BASEDIR:$LD_LIBRARY_PATH
添加到/root/.bash_profile文件中
4、测试备份
cd /opt/MySqlBackUp/bin
./mysql_backup.sh
5、查看备份是否成功
cat /opt/MySqlBackUp/logs/result.log
如果提示备份成功,则表示程序安装成功,可能不熟到crontab中
6、部署crontab
0 1 * * * (cd /opt/MySqlBackUp/bin;sh ./mysql_backup.sh)
说明:参数配置,均是基于按照mysql安装路径配置