我可以针对用户定义的ORA-
错误创建警报吗?
我希望 EM 在发生以下错误时通知我:
begin
raise_application_error(-20118, 'myerror');
end;
/
我可以针对用户定义的ORA-
错误创建警报吗?
我希望 EM 在发生以下错误时通知我:
begin
raise_application_error(-20118, 'myerror');
end;
/
我可以拥有像这样的数据保护系统:
主要:11.2.0.1 备用:11.2.0.3
在逻辑待机?
在物理备用版本(发行版)中必须相同吗?
我想只检查先决条件并在不安装 Oracle 数据库的情况下生成日志。
当我运行以下命令时:
./runInstaller -silentvalidate -responseFile /0/grid/response/crs_install_mk.rsp
它向我显示以下错误:
The command line arguments '-silentvalidate' are not valid options. Type 'oui -help' at the command line for instructions on appropriate command line usage.
Usage: runInstaller [-options] [(<CommandLineVariable=Value>)*]
runInstaller 也有一个选项-executePrereqs
,但它会尝试在 GUI 模式下启动安装程序。
所以我只想检查先决条件并在不启动 GUI 的情况下生成日志。
甲骨文版本:11g R2
我已经从 ASM 磁盘组中删除了磁盘:
> ALTER DISKGROUP DATA01 DROP DISK DISK1;
Oracle 执行了重新平衡操作,然后删除了磁盘。
现在,我想从 ASM 库中删除磁盘并将磁盘返回给系统:
# oracleasm deletedisk -v DISK1
Clearing disk header: oracleasm-write-label: Unable to open device "/dev/oracleasm/disks/DISK1":
Device or resource busy failed
Unable to clear disk "DISK1"
系统详细信息:11.2.0.1 2 节点 RAC
为什么 ASM 不清除磁盘头?在哪里可以看到详细的日志?
------------------------------------编辑1------------- -------------------------------------------
# fuser /dev/oracleasm/disks/DISK1
在两个节点上都不返回任何内容
我在警报日志中发现了有关损坏块的警报。损坏的块属于名为 DOCS 的表。因为我没有这个数据库的任何备份,决定重新创建 DOCS 表来解决损坏问题。这是一个问题。
生成所有脚本:
1. DDL for table.
2. DDL for constraints,triggers,indexes on the table.
3. DDL for the constraints that references this table.
4. Saved grants on this table.
现在我想删除表,但留下它的依赖项,然后用它的约束、触发器、索引重新创建表。
我怎样才能做到这一点?
- - - - - - - - - - - - 编辑
这似乎很简单。
创建表 new_table 作为 select * from my_table;
插入数据
插入 my_table 作为 select * from new_table
此解决方案适用于重新创建表(这是重新创建表的正确方法)。但是损坏并没有解决,在 Alert.log 中插入表的过程中引发了有关块损坏的相同错误。
在评论中@Mindaugas Riauba 写了一个解决方案并且它有效。我只想知道为什么我关于重新创建表的解决方案不起作用而@Mindaugas Riauba 的解决方案起作用?
再次感谢@Mindaugas Riauba!
我已经配置了控制文件自动备份:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u02/backup/%F';
然后在数据库中添加一个测试表空间:
create tablespace test datafile '+DATA01' size 10m;
并且没有控制文件自动备份,警报日志文件中也没有关于备份它的条目。
为什么?
我正在使用 Oracle 10g XE。我注意到警报日志中的数据文件 1 中出现损坏的块错误。因为我发现 Oracle XE 不支持 Block Media Recovery(需要是企业版)。
所以我做了以下事情:
shutdown immediate;
startup mount;
recover database;
alter database open;
但是损坏的块仍然存在。
我的恢复命令不应该解决这个问题吗?为什么不?
编辑
我在恢复之前已经恢复了,现在它可以工作了。因此,以下步骤有效:
shutdown immediate;
startup mount;
restore database;
recover database;
alter database open;
recover 是否只查找 SCN,如果 SCN 是数据文件的当前 SCN,则什么都不恢复?甚至没有腐败的?
正如我猜测的那样,恢复只是应用存档日志(或联机日志)来赶上当前的 SCN,而不是纠正损坏。
我希望我的数据库以加密方式将数据发送到客户端。我搜索了一下,发现 Oracle 有 SSL。不幸的是,我找不到一步一步的教程来解释如何创建自签名证书、在数据库端配置 SSL、在客户端配置 SSL 并对其进行测试。
请与我分享你的知识。
先感谢您。
- -编辑
我的步骤:
new-root-ca.sh
并导入为数据库服务器上的受信任证书。sign-server-cert.sh
通过在数据库服务器上运行并作为用户证书导入来创建自签名服务器证书。在这里我很困惑,....不知道如何配置客户端
在ssl.ca-0.1中还有文件new-user-cert.sh
和sign-user-cert.sh
,我不明白它们的用途。
尝试使用从数据库服务器导出的相同认证请求运行它们并尝试将其导入客户端钱包我错了吗?
可能是的,因为它不导入用户证书......我真的很困惑,不明白主要思想。
我在客户端钱包位置复制了数据库服务器上生成的钱包,对吗?
我已完成以下步骤:
删除INCREMENTAL LEVEL 0备份而不告诉控制文件。于是手动删了。并且没有进行交叉检查。
具有增量级别 1的备份数据库(不进行交叉检查)。这可能是多么令人惊讶,日志向我显示增量级别 1已成功完成。
请注意,我没有增量级别 0备份,但 controlfile 不知道。我刚刚增量级别 1。
我试图用这个备份恢复数据库,但当然不能。它告诉我找不到数据文件 1-5 的备份...
如果 controlfile 知道 EXPIRED backups ,那么INCREMENTAL LEVEL 1备份首先会执行INCREMENTAL LEVEL 0,然后是INCREMENTAL LEVEL 1。
如何避免这种情况。我必须在备份脚本中使用 chrosscheck 吗?或者在 RMAN 中设置恢复窗口?
我有 Oracle 11g 数据库。备份由 Netbackup 服务器进行。因此,Netbackup 通过保留来删除备份本身。RMAN 保留策略配置为 REDUNDANCY 2。
请给我建议。
如果更改Oracle数据库服务器IP,可能会出现什么问题,如何解决?
hosts
文件tnsnames.ora
文件 listener.ora
文件tnsnames.ora
文件据我所知,没有必要在数据库服务器上拥有listener.ora
和文件;如果你需要连接到另一个数据库,tnsnames.ora
这是必要的。我对吗?
我有单实例数据库,版本 11.2.0.1.0
我发现我的数据库,特别是USERS
表空间的大小急剧增加。
如何找到在此表空间中的对象上执行的 DML 操作?
我想知道在函数/过程中插入/删除/更新后是否需要写提交?
例子:
create or replace function test_fun
return number is
begin
delete from a;
return 0;
end;
或程序
create or replace procedure aud_clear_pro
as
begin
delete from a;
end;
删除后是否需要提交?
无法理解以下情况:
如果我从 SQL 窗口调用函数/过程,那么它需要提交
但
如果我使用 dbms_scheduler 调度函数/过程并运行作业,则会自动提交删除语句。
为什么?
我想在 Oracle 中安排功能。
begin
dbms_scheduler.create_job(job_name => 'aud_clear',
job_type => 'PLSQL_BLOCK',
job_action => 'aud_clear_fun',
start_date => sysdate,
repeat_interval => 'freq=daily; byminute=0; bysecond=0',
end_date => null,
enabled => true,
comments => 'Created By: MK; Truncates aud$ table');
end;
我试图为 job_action 指明其他几个值,例如:
declare
my_var number;
begin
select aud_clear_fun into my_var from dual;
end;
但不起作用。你能给我提供调度函数的正确语法吗?
--aud_clear_fun
create or replace function aud_clear_fun
return number is
begin
delete from a;
return 0;
end;
- 工作
begin
dbms_scheduler.create_job(job_name => 'aud_clear',
job_type => 'PLSQL_BLOCK',
job_action => 'begin
mari_dba.aud_clear_fun();
end;',
start_date => sysdate,
end_date => NULL,
repeat_interval => 'freq=daily; byminute=0; bysecond=0',
enabled => true);
end;
- 执行
begin
dbms_scheduler.run_job('aud_clear');
end;
- 错误
ORA-06550: line 2, column 50:
PLS-00221: 'AUD_CLEAR_FUN' is not a procedure or is undefined
ORA-06550: line 2, column 50:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_ISCHED", line 185
ORA-06512: at "SYS.DBMS_SCHEDULER", line 486
ORA-06512: at line 2
View program sources of error stack?
我有 CLOB 列,并想逐行读取其数据以将其插入另一个表中。
现在让我们创建与我相同的情况:
表MyTable_1中的数据
OWNER | TABLE_NAME | SQL
----------------------------
HR | AAA | <CLOB>
里面有<CLOB>
以下数据:
CREATE TABLE AAA
( A NUMBER
);
我希望我的桌子看起来像这样(我们称之为MyTable_2):
OWNER | TABLE_NAME | SQL
----------------------------
HR | AAA |CREATE TABLE AAA
HR | AAA |( A NUMBER
HR | AAA |);