暂无图片
Oracle12c数据库,为什么有些表收集不了统计信息?报错如下,请帮看看
我来答
分享
刘晓华
2025-03-10
Oracle12c数据库,为什么有些表收集不了统计信息?报错如下,请帮看看
暂无图片 50M

我来答
添加附件
收藏
分享
问题补充
7条回答
默认
最新
大魔导师秀儿

有锁,其他事物占用着,超过了等待时间限制就报错了,可以查询一下是那个会话是源头锁,kill掉源头锁再试试

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
刘晓华
题主
2025-03-10
知道有锁,但是却查不到有锁
大魔导师秀儿
答主
2025-03-10
查询当前收集统计信息的的会话信息,看看blocking_session,final_blocking_session列有没有值

表收集统计信息那个被lock了,收集统计信息有个参数可以强制收集,忽略lock

暂无图片 评论
暂无图片 有用 1
打赏 0
范达宏

这不提示都说清楚了么

暂无图片 评论
暂无图片 有用 0
打赏 0
zwtian

应该对应的表上面有ddl操作吧。

暂无图片 评论
暂无图片 有用 0
打赏 0
virvle

试下正在运行的是否包含了相关表,会引起锁的

1.正在运行的sql

SELECT s.sid, -- 会话ID s.serial#, -- 会话序列号 s.username, -- 登录用户名 s.status, -- 会话状态 s.machine, -- 客户端机器名 s.program, -- 客户端程序名 s.sql_id, -- 当前SQL的ID q.sql_text, -- 当前SQL的文本 s.prev_sql_id, -- 上一个SQL的ID pq.sql_text AS prev_sql_text -- 上一个SQL的文本 ,pq.sql_fulltext -- 上一个SQL的全文本 FROM v$session s LEFT JOIN v$sql q ON s.sql_id = q.sql_id LEFT JOIN v$sql pq ON s.prev_sql_id = pq.sql_id WHERE s.status = 'ACTIVE' -- 只查询活跃会话 AND s.type = 'USER'; -- 只查询用户会话
复制

2. 正在运行的事务

SELECT s.sid, -- 会话ID s.serial#, -- 会话序列号 s.username, -- 登录用户名 t.start_time, -- 事务开始时间 t.status, -- 事务状态 t.used_ublk, -- 使用的undo块数 t.used_urec, -- 使用的undo记录数 t.log_io, -- 逻辑I/O数 t.phy_io, -- 物理I/O数 t.cr_get, -- 一致性读次数 t.cr_change -- 一致性读更改次数 FROM v$session s JOIN v$transaction t ON s.taddr = t.addr WHERE s.status = 'ACTIVE'; -- 只查询活跃会话
复制
暂无图片 评论
暂无图片 有用 1
打赏 0

desc dbms.stats然后找function是gather_table_stats这个,里面收集统计信息有个参数FORCE,你加上这个参数就可以跳过lock直接收集我遇到过这个

暂无图片 评论
暂无图片 有用 1
打赏 0
virvle

来来来,查看大佬的文章,应该可以解你的问题
https://www.modb.pro/db/1899001058081386496?utm_source=index_ori

暂无图片 评论
暂无图片 有用 0
打赏 0
刘晓华
题主
2025-03-13
报错的代码不同,我昨天用force也不行
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏