急!急!急!Oracle 数据库的一个字段每天凌晨2点多会定时被一个存储过程修改,请高手指点我该怎样定位

急!急!急!Oracle 数据库的一个字段每天凌晨2点多会定时被一个存储过程修改,请高手指点我该怎样定位,第1张

会不会是某个触发器里面, 调用了 rbt_admin_browsecat

或者是 某个 job 的 存储过程, 调用了 rbt_admin_browsecat

如果你知道 问题大约发生在 每天凌晨2点多

那么你可以先去看看 dba_jobs 视图去看看。 看看有什么 job 是 2点多执行的。

然后再看看, 这个时间里面, 都有哪些存储过程被执行了。

然后去看看, 这些存储过程里面, 有谁调用了 rbt_admin_browsecat

Step1 先在服务器上备份 Rman_backuptxt:

export ORACLE_HOME

ORACLE_BASE=/u01/oracle

export ORACLE_BASE

ORACLE_SID=dbsid

export ORACLE_SID

$ORACLE_HOME/bin/rman nocatalog target system/password <<EOF

spool log to '/u02/backup/rmanbackuplog' append;

CONFIGURE RETENTION POLICY TO REDUNDANCY 1;

report obsolete;

delete noprompt obsolete;

run{

allocate channel d1 device type disk rate 40M;

allocate channel d2 device type disk rate 40M;

allocate channel d3 device type disk rate 40M;

allocate channel d4 device type disk rate 40M;

backup as compressed backupset format '/u02/backup/db_%d_%T_%Udbf' database;

backup current controlfile format '/u02/backup/db_%d_%T_%Uctl';

release channel d1;

release channel d2;

release channel d3;

release channel d4;

}

CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

exit;

EOF

Step2:scp /u02/backup/db% 或FTP

Step 3: rm /u02/backup/db% 在另一台Server上处理

Step1中保留两次的备份文件,并自动Delete上上次的备份文件和Archive文件

你可以自行调整,也可以分为两个文件夹来处理,其它的可能要用排程或Crontab

相信为数不少的系统管理员每天都在做着同一样的工作——对数据进行备份 一旦哪一天疏忽了 而这一天系统又恰恰发生了故障 需要进行数据恢复 那么此时就无能为力了 假如每天设定一个固定的时间 系统自动进行备份 那该多好啊!下面笔者结合实践经验 谈一谈UNIX环境下Oracle数据库的自动备份 以起到抛砖引玉的作用 我们计划让数据库在晚上 点做export导出备份 在凌晨 点将备份文件拷贝到磁带上 在凌晨 点将备份文件拷贝到另一台UNIX机器上 为此我们可进行如下 *** 作 一 导出数据库 export命令将数据库中的数据备份成一个二进制文件 它通常有三种模式 用户模式 表模式和整个数据库模式 本文拟采用用户模式 备份之前 应先建立一个备份目录 以容纳备份文件 比如可建一个/backup目录 接着我们可在UNIX的Oracle目录下(也可以是其它目录)分别建立两个文件ora—backup tar—backup 需要说明的是 前一个文件需要对Oracle的参数进行初始化 为了方便起见 我们不妨将初始化命令放到一个文件中(文件名姑且定为ora—env) 再由第一个文件调用它 ora—env文件对Oracle的参数进行初始化 其内容如下 ORACLE—HOME=$ORACLE—HOME;export ORACLE—HOMEORACLE—SID=ora ;export ORACLE—SIDORACLE—TERM=sun;export ORACLE—TERMLD—LIBRARY—PATH=$ORACLE—HOME/lib;export LD—LIBRARY—PATHORA—NLS =$ORACLE—HOME/omon/nls/admin/data;export ORA—NLSPATH= :/usr/ccs/bin:/usr/ucb:$ORACLE—HOME/bin:$PATH;export PATHDISPLAY=host : ;export DISPLAYNLS—LANG=american—america zhs cgb ;export NLS—LANG ora—backup文件对数据库做export导出 导出的文件名可以任意定 本文定为字母 xx 加当天日期 即假如当天日期是 月 号 则导出的文件名为 xx dmp 以区别于其它日期的备份文件 ora—backup文件内容 /oracle/ora—env#初始化Oracle数据库rq=′date +″%m%d″ ′#把当天日期赋予变量rqrm /backup/# 清空 /backup目录exp test/test file=/backup/xx$rq dmp log=/backup/xx$rq log本命令用于在$提示符下 导出test用户的数据(其口令亦为test) 导出文件及日志均放在/backup目录下 二 磁带备份 tar—backup文件将用export命令导出的数据文件拷贝到磁带上 tar—backup文件内容 tar rvf /dev/rmt/ n/backup/本命令可将/backup目录下当天产生的文件备份到磁带上 本文件中 tar命令使用了三个参数 其中r选项表示向磁带上拷入文件而不破坏磁带原来内容 v选项表示在拷贝过程中显示文件信息 f选项后面加上磁带设备名 指定文件向何处拷贝 n选项表示磁带机不倒带 /dev/rmt/ 表示UNIX主机第一个磁带驱动器 同理 /dev/rmt/ 则表示UNIX主机第二个磁带驱动器 依此类推 ora—env ora—backup tar—backup文件编写完成后 分别使用下述命令 chmod ora—envchmod ora—backupchmod tar—backup这样 三个文件就都变成了可执行文件 三 异地备份 我们知道 通常可用FTP命令在两台主机间传输数据 但一般是通过交互方式实现的 即需要手工输入目标主机的IP地址 用户名 口令等 显然 这不符合自动备份的要求 所幸的是 我们可以通过编写一rc的文件来达到目标 这一文件必须命名rc 且必须存放在启动FTP命令的机器上的用户注册目录中 该文件的权限应禁止组内或其它用户进行读访问 这样 当用户使用FTP命令的时候 系统将会在该用户的注册目录中寻rc文件 如果能够寻找到 将会首先执行该文件 否则 会交互式地提示用户输入用户名 口令等 在使用FTP命令之前 应先在另一台作备份用的UNIX机器上建一目录 以容纳备份文件 本文建的目录是/pub 需要指出的是 为了加快备份速度 两台主机之间的传输速率应尽可能的高 最好位于同一局域网上rc文件内容如下 machine host # host 为作备份用的主机名login oracle#oracle为备份主机上的一个用户password oracle#oracle用户的口令为oraclemacdef init#定义一个名为init的宏 它将在自动注册进程的最后被执行bin#文件的传输方式设为二进制lcd /backup# 进入本地工作目录/backupcd /pub# 进入备份主机目录/pubmput # 将/backup目录下的所有文件传输至备份主机bye#退出FTP会话进程 rc文件编写完成后 使用下述命令 chmod rc这样rc文件就只能被该用户所访问 四 启动备份进程 Cron是一个永久进程 它由/etc/rc local启动执行 Cron检查/var/spool/cron/crontabs/目录中的文件 找到所要执行的任务和执行任务的时间 Crontab文件的每一行由六个域(minutes hours day of month month day of week mand)组成 域之间用空格或Tab分开 其中 minutes 分钟域 值的范围是 到 hours 小时域 值的范围是 到 day of month 日期 值的范围是 到 month 月份 值的范围是 到 day of week 星期 值的范围是 到 星期日值为 mand 所要运行的命令如果一个域是 表明命令可以在该域所有可能的取值范围内执行 如果一个域是由连字符隔开的两个数字 表明命令可以在两个数字之间的范围内执行(包括两个数字本身) 如果一个域是由逗号隔开的一系列值组成的 表明命令可以在这些值组成的范围内执行 如果日期域和星期域都有值 则这两个域都有效 现在 我们编写一个文件 用以启动自动备份进程 值得注意的是 该文件只能在Oracle用户名下用crontab -e 命令来编辑 否则将不会被定时执行 文件名定为Oracle 文件将放在/var/spool/cron/crontabs 目录下 编辑完成后 可以在Oracle的$提示符下 用crontab -l命令来查看 Oracle文件内容    /oracle/ora—backup# 每天 点对数据库执行备份    /oracle/tar—backup# 每天 点将文件备份到磁带上    ftp -i host # 每天 点将文件备份到另一台主机上经过以上的 *** 作后 系统每天晚上将自动产生一个备份 并且自动将备份文件分别拷贝到磁带上和另一台主机上 系统管理员需要做的是 隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和清理备份目录 这样 他们就可以从备份数据的繁琐中解脱出来 去做其它更有意义的工作 而数据库既实现了磁带备份 又实现了异地备份 相应的安全性也大大提高了 lishixinzhi/Article/program/Oracle/201311/18204

在日常工作中oracle数据库的日志空间不足只能进行清理空间 *** 作。

1、扩大表空间现有数据文件的大小。

2、oracle用户登录数据库服务器,用sysdba连接数据库sqlplus,assysdba即可。

数据库中死锁是什么产生的

Mysql数据库里的 锁,根据存储引擎不同,一般有行锁 表锁。

其实锁的作用跟文件锁 是差不多的就是避免同时对某表 或某条记录进行修改。

死锁 我估计是2个应用同时锁住了 同一个表 或 同一条记录。这样谁也释放不了资源。

个人愚见。欢迎拍砖。

使用MySQL数据库,都有哪些情况易出现死锁的情况?

在老版本的MySQL 322中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 323开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。

而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。

当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。

而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。

oracle经常死锁,锁定数据库的一些表,导致oracle死锁的原因一般有那些?

一般情况只发生锁超时,就是一个进程需要访问数据库表或者字段的时候,另外一个程序正在执行带锁的访问(比如修改数据),那么这个进程就会等待,当等了很久锁还没有解除的话就会锁超时,报告一个系统错误,拒绝执行相应的SQL *** 作。发生死锁的情况比较少,比如一个进程需要访问两个资源(数据库表或者字段),当获取一个资源的时候进程就对它执行锁定,然后等待下一个资源空闲,这时候如果另外一个进程也需要两个资源,而已经获得并锁定了第二个资源,那么就会死锁,因为当前进程锁定第一个资源等待第二个资源,而另外一个进程锁定了第二个资源等待第一个资源,两个进程都永远得不到满足。

erp100

如何解决多线程造成的数据库死锁

多线程是很容易造成死锁,一般情况下死锁都是因为并发 *** 作引起的。我不懂JAVA,但死锁这个问题每种开发工具和数据库都会碰到解决办法是:

1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。

2、数据库方面设置等待超时时间

3、发生死锁后直接KILL掉数据库进程

查询数据库的时候,在什么情况下可能会导致死锁

察看死锁

select sesssid,

sessserial#,

looracle_username,

loos_user_name,

aoobject_name,

lolocked_mode

from v$locked_object lo,

dba_objects ao,

v$session sess

where aoobject_id = loobject_id and losession_id = sesssid

order by aoobject_name ;

清除死锁

alter system kill session sid,serial#

怎么查看数据库死锁,和解决方法

exec sp_lock 快捷键 C_2

exec sp_who active exec sp_who快捷键 C_1

用Profiler里面的Locks->Deadlock graph 监控看看,如果看到了死锁图,就可以比较形象地展现死锁发生的过程,还可以看到锁的具体类型和过程里面的语句,对你诊断会有帮助。

Declare @LockTab table( spid int,dbid int ,ObjId int,IndId int ,Type varchar(50),Resource varchar(50),Mode varchar(50),Status varchar(50))

insert into @LockTab exec sp_lock

Declare @ActiveTab table(spid int,ecid int,status varchar(50),loginname varchar(50),hostname varchar(50),blk int,dbname varchar(50),cmd varchar(50),request_id int)

insert into @ActiveTab exec sp_who active

select from @LockTab lt

left join @ActiveTab at on ltspid=atspid

数据库发生死锁会出现什么情况

数据只能查询,删和盯都不超时在数据库中==>管理==>活动监视器中查找到相关锁,然后终止掉就OK

数据库查询时可能造成死锁吗

查询不会产生死锁。

更新有可能会造成死锁。死锁不需要干预的,系统会定时清理死锁并在alert里记录。估计你感兴趣的应该是其他的锁比如行锁、表锁或者是锁等待之类的。

数据库,因为高访问量,造成线程死锁的原因是,如何来解除呢?

死锁主要是资源共享造成的冲突。比如a拥有资源1,需要资源2才能运行。

b拥有资源2,需要资源1才能。这是就产生资源1、2都有,叮a,b都无法运行的情况。解决死锁的方法有很多,你要了解更多的信息就去看看 *** 作系统的数。里面讲的很详细。

数据库中解决死锁的方法:

1限制同时访问数据库的用户数。

2超时线程自动释放。

3优化访问方式

多个程序访问一个数据库出现死锁,怎么处理

如果是sql数据库本身就不会锁死表,锁死是你的逻辑控制的,一般不通过锁死来 *** 作数据库。看你怎么用,或者可以提出你的具体问题。

1在使用Oracle时候,一般启动OracleServiceORCL和OracleOraDb11g_home1TNSListener这两个服务Oracle就能正常运行;2要让局域网上的机子访问你的oracle,必须启动oracleora81homemanagermentserver服务。

3oracle服务启动、关闭脚本(windows下)

注:实例名:ORCL

(1)建立启动脚本dbstartcmd

cmd代码

dbstart

@echo halt oracle service

net stop OracleServiceORCL

net stop OracleDBConsoleorcl

net stop OracleOraDb11g_home1TNSListener

pause

(2)建立关闭脚本dbstopcmd

cmd代码

dbstop

@echo halt oracle service

net stop OracleServiceORCL

net stop OracleDBConsoleorcl

net stop OracleOraDb11g_home1TNSListener

pause

注:ORCL是Oracle实例名(安装Oracle时自定义)。

附:Oracle各服务介绍:

(1)OracleServiceSID

数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动类型为自动。服务。进程为ORACLEEXE,参数文件initSIDora,日志文件SIDALRTlog,控制台SVRMGRLEXE、SQLPLUSEXE。

(2)OracleHOME_NAMETNSListener

监听器服务,服务只有在数据库需要远程访问时才需要(无论是通过另外一台主机还是在本地通过 SQLNet 网络协议都属于远程访问),不用这个服务就可以访问本地数据库,它的缺省启动类型为自动。服务进程为TNSLSNREXE,参数文件 Listenerora,日志文件listenerlog,控制台LSNRCTLEXE,默认端口1521、1526。

(3)OracleHOME_NAMEAgent

OEM代理服务,接收和响应来自OEM控制台的任务和事件请求,只有使用OEM管理数据库时才需要,它的缺省启动类型为自动。服务进程为DBSNMPEXE,参数文件snmp_rwora,日志文件nmilog,控制台LSNRCTLEXE,默认端口1748。

(4)OracleHOME_NAMEClientCache

名字缓存服务,服务缓存用于连接远程数据库的Oracle Names 数据。它的缺省启动类型是手动。然而,除非有一台Oracle Names 服务器,否则没有必要运行这个服务。服务进程为ONRSDEXE,参数文件NAMESORA,日志文件ONRSDLOG,控制台 NAMESCTLEXE。

(5)OracleHOME_NAMECMAdmin

连接管理服务,是构建ConnectionManager服务器所用,只有服务器作为Connection Manager才需要,它的缺省启动类型是手动。服务进程为CMADMINEXE,参数文件CMANORA,日志文件CMADM_PIDTRC,控制台CMCTLEXE,默认端口1830。

(6)OracleHOME_NAMECMan

连接网关服务,是构建ConnectionManager服务器所用,只有服务器作为Connection Manager才需要,它的缺省启动类型是手动。服务进程为CMGWEXE,参数文件CMANORA,日志文件CMAN_PIDTRC,控制台 CMCTLEXE,默认端口1630。

(7)OracleHOME_NAMEDataGatherer

性能包数据采集服务,除非使用Oracle Capacity Planner 和 Oracle PerformanceManager,否则不需要启动,它的缺省启动类型是手动。服务进程为VPPDCEXE,日志文件alert_dglog,控制台 vppcntlexe。

(8)OracleHOME_NAME>

1create table test(id int,starttime date,state int);

2create or replace procedure sp_update is

cursor cur is select from test where state=0;

v_id int;

v_starttime date;

v_state int;

begin

open cur;

loop

fetch cur into v_id,v_starttime,v_state;

exit when cur%notfound;

update test set state=1 where starttime=sysdate;

commit;

end loop;

close cur;

end;

/

3创建JOB

SQL> variable job1 number;

SQL>

SQL> begin

2 dbms_jobsubmit(:job1,sp_update;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行sp_update过程一次

3 end;

4 /

PL/SQL 过程已成功完成。

运行JOB

SQL> begin

2 dbms_jobrun(:job1);

3 end;

4 /

以上就是关于急!急!急!Oracle 数据库的一个字段每天凌晨2点多会定时被一个存储过程修改,请高手指点我该怎样定位全部的内容,包括:急!急!急!Oracle 数据库的一个字段每天凌晨2点多会定时被一个存储过程修改,请高手指点我该怎样定位、oracle数据库备份自动删除用指定的搜索标准没有找到文件、实现Oracle数据库的每天的自动备份等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10180136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存