Oracle 11.2.0.3 具有每日完整备份和每小时存档日志备份。带有目录的 RMAN。
如果我在晚上 11 点进行备份并在第二天早上 5 点完成并且我想将备份恢复到不同的系统,我如何确定“设置直到”的时间或需要最少数量的 SCN要重放的存档日志?晚上 11 点?早上 5 点以后?RMAN 是我对数据库了解最少的部分。
我运行了一个DBCC CHECKDB
,它发现了分配错误。当我运行它时REPAIR_ALLOW_DATA_LOSS
- 它是否需要花费相同的时间来扫描错误,或者它会尝试使用我最后一次CHECKDB
运行并运行得更快?
(SQL Server 2000。是的,它很古老,不,我无法升级。)
我过去曾多次将我们的产品复制到我们的 UAT 环境,但由于各种原因,这次是一个严重的 PITA。甲骨文 11.2.0.3。
我们有一个恢复目录设置。这是在 UAT 框上运行的脚本:
connect catalog rman/cat@rc
connect auxiliary /
run {
ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL aux2 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL aux3 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL aux4 DEVICE TYPE DISK;
duplicate database RACDB01 to GVPUAT skip tablespace
TS_ADMIN2,TS_ERROR_ERRORLOG,...
<big list of tablespaces I don't care about>...,RADSS_WG_INDEX_LARGE
NOFILENAMECHECK until time "to_date('2016-03-02 00:00:00','YYYY-MM-DD HH24:MI:SS')";
问题是 RMAN-06023 出错:找不到要还原的数据文件 352 的备份或副本。这是因为在 2016 年 3 月 1 日,我将一个数据文件添加到生产环境中。备份在中午 12 点开始,我在下午 6 点添加了一个数据文件,备份在大约晚上 11 点完成。我该如何使用该备份?
我们正在运行带有两个节点 RAC 的 Oracle 11.2.0.3,而我们的 FRA 磁盘组空间不足。我需要通过 ASM 为其分配更多磁盘。我不知道该怎么做。我可以登录到一个节点并访问 asmcmd 或其他 asm 命令行实用程序。我需要做什么?
编辑:直到菲尔的回答才知道它是相关的:我们正在使用原始磁盘设备。
我正在尝试跟踪当前 Oracle 会话的不同等待时间类,但我一定是误解了一些东西。当我比较sum(time_waited)/1000
给定会话的时间时,gv$session_wait_class
它通常大于seconds_in_wait
from的值,gv$session
有时甚至大于last_call_et
我认为的总时间......
我在这里想念什么?为什么他们不一样?我正在将数字与此查询进行比较:
select last_call_et,wait_time,seconds_in_wait,wait_time_micro/1000000,
(SELECT SUM(time_waited)
FROM gv$session_wait_class ot WHERE
ot.sid = ses.sid
AND ot.serial# = ses.serial#
AND ot.inst_id = ses.inst_id
)/1000 as wait_time_class from gv$session ses where sql_id is not null;
这是这个问题的结果。
所以我正在处理一个看起来像这样的查询:
select count(*)
from table1
where col1 = 123
and col2 = '1';
问题是这样的: col2
被定义为一个CHAR(1)
和所有会话集NLS_SORT = 'BINARY_CI'
和NLS_COMP = 'LINGUISTIC'
。(col1
是一NUMBER
列。)
首先,在没有为会话启用 NLS 设置的情况下,定义一个多列扩展统计(col1,col2)
可以正常工作并产生适当的基数。
但是对于NLS_SORT = 'BINARY_CI'
and NLS_COMP = 'LINGUISTIC'
,它不使用扩展统计信息。我相信它很像一个索引和 NLS 设置——我们必须用(NLSSORT("COL2",'nls_sort=''BINARY_CI'''))
.
因此,我在("COL1", (NLSSORT("COL2",'nls_sort=''BINARY_CI'''))
. 但它仍然不起作用(但定义相同的索引将起作用)。
在谓词信息中,它显示在启用 NLS 设置的情况下,col2 = '1'
转换为:
NLSSORT(INTERNAL_FUNCTION(col2),'nls_sort=''BINARY_CI''')=HEXTORAW('3100')
。我相信这INTERNAL_FUNCTION()
是由于col2
被定义为CHAR(1)
。我无法改变这一点。
根据我的条件,如何为这些列创建多列扩展统计列组?
我有一张表,其中计划的基数似乎太高了——尽管更新了统计数据,甚至尝试对 Oracle 11gR2 进行动态采样。
select count(*)
from table1
where col1 = 123
and col2 = '1';
当它返回的实际行数为 637 时,col1 的一个值的估计基数约为 29k。对于另一个值,当实际行数为 67k 时,其计划基数为 460k。总的来说,这导致它选择了非常糟糕的计划。
我试过更新统计数据:
exec DBMS_STATS.gather_table_stats (ownname => 'ME', tabname =>'table1');
或者
exec DBMS_STATS.gather_table_stats (ownname => 'ME', tabname =>'table1',estimate_percent =>100);
我已经尝试了 dynamic_samping (1-10) 的各种值,但没有任何显着改变:
select /*+ dynamic_sampling(t1 10) */ count(*)
from table1 t1
where col1 = 123
and col2 = '1';
dyanmic_sampling 会改变,但仍然会降低近 50-100 倍。
我怎样才能得到更好的估计?
我有另一个会话,我怀疑它在 Oracle 11gR2 中没有为我们使用“正确”的 NLS 设置。我可以查询什么来显示不同活动会话的 NLS 设置 - 所有 NLS_* 视图都引用我当前的会话。
我们需要确保在 Oracle 中只有一个特定过程的副本正在运行。如果它已经在运行并且用户尝试打开另一个,那么它应该会出错。
这样做的最佳方法是什么?
周日,我们在 Oracle 11R2 RAC 集群上运行了每周计划的架构范围统计信息更新。其中一个查询没有明显的数据或代码更改,但现在运行 3 小时而不是 20 分钟。查看 dba_hist_sqlstat ,它运行与以前相同的 SQL,但具有不同的计划。统计数据似乎对其产生了负面影响。因为它是一个涉及几十个表的大型查询,所以他们已经决定恢复受影响表上的统计信息不是一种选择。
通过执行以下命令,我制定了旧的(更好的)和新的(糟糕的)计划:
select * from TABLE(DBMS_XPLAN.DISPLAY_AWR('sqlid'));
但它们是如此不同,以至于它不是一个小的手动调整来让它们回来。
考虑到数据库仍然有很多可用的信息,有没有办法强制它回到旧计划?(而且我们没有调整包。)