Archive for 十二月 8th, 2007

ora-23375

星期六, 十二月 8th, 2007

 来自KAMUS 

有些时候我们在执行下面命令添加主体站点的时候会碰到ORA-23375错误。SQL>execute dbms_repcat.add_master_database(……)ERROR 位于第 1 :
ORA-23375:
特性与数据库版本<GLOBAL_NAME>不兼容
ORA-06512:
“SYS.DBMS_SYS_ERROR”, line 86
ORA-06512:
“SYS.DBMS_REPCAT_MAS”, line 2151
ORA-06512:
“SYS.DBMS_REPCAT”, line 146
ORA-06512:
line 1

上面的这个错误,通常表示我们在创建repadmin用户的时候缺少了几步授权的命令,按照如下步骤正确创建repadmin用户。

create user repadmin identified by repadmin default tablespace users temporary tablespace temp

execute dbms_defer_sys.register_propagator(’repadmin’);grant execute any procedure to repadminexecute dbms_repcat_admin.grant_admin_any_repgroup(’repadmin’)

execute dbms_repcat_admin.grant_admin_any_schema(username => ‘”REPADMIN”‘)

grant comment any table to repadmin

grant lock any table to repadmin

grant select any dictionary to repadmin

网上的一些其它文档通常缺少的是下面这两步:

product_user_profile;

星期六, 十二月 8th, 2007

(全文…)

2Gb相关错误

星期六, 十二月 8th, 2007

2Gb相关的Oracle错误

从KAMUS网站看的,记在此地 

当2Gb限制到达的时候可能会发生下面这些错误,这些错误的产生没有特定的顺 

ORA-01119 Error in creating datafile xxxx 

ORA-27044 unable to write header block of file 

SVR4 Error: 22: Invalid argument

ORA-19502 write error on file ‘filename’, blockno x (blocksize=nn)

ORA-27070 skgfdisp: async read/write failed

ORA-02237 invalid file size 

KCF:write/open error dba=xxxxxx block=xxxx online=xxxx file=xxxxxxxx file limit exceed. 

Unix error 27, EFBIG

数据迁移

星期六, 十二月 8th, 2007

有时候我们会遇到这样的情况,现有的数据库要从一个机器转移到另外一个机器上,一般我们会使用导出,导入。但是如果数据库的数据非常多,数据文件尺寸很大,那么在导出导入的过程就很可能会出现问题,并且漫长的过程也是我们无法容忍的。在这种情况下,我们可以简单地使用操作系统的copy命令,直接进行数据库的转移。

以下示例均在Redhat Fedora Core 1上的Oracle9.2.0.1中操作,其它操作系统和Oracle版本同样适用。

假设我们的数据库在服务器A上,$ORACLE_BASE/oracle$ORACLE_HOME/oracle/product/9.2.0。现在我们要将此数据库转移到服务器B上,并且新的$ORACLE_BASE/u01/oracle$ORACLE_HOME/u01/oracle/product/9.2.0SIDoralinux

操作步骤如下:

 

一.在服务器B上安装Oracle,安装过程中不要创建数据库。用户的profile直接从服务器Acopy过来即可,注意需要修改原先的$ORACLE_HOME到现在的位置。

二.如果服务器A上的Oracle使用的是spfile,那么根据此spfile创建pfile

create pfile from spfile

三.关闭服务器A上的数据库,shutdown immediate。如果数据库不允许关闭,那么可以使用联机备份,这种情况数据库必须处于archivelog模式,转移的原理和允许关闭的情况一样,此处不作讨论。

四.备份服务器A上的所有数据文件,包括以下:

a)         所有的datafile(临时文件可以不copy,比如temp01.dbf

b)        所有的online redo log

c)        所有的archive redo log

d)        所有的control file

e)         $ORACLE_HOME/dbs/init<SID>.ora(此文件是在上面第二步中创建的)

f)         $ORACLE_HOME/dbs/orapw<SID>(这是password file

g)        $ORACLE_HOME/network/listener.ora(这步可以省略,以后重新生成也可以)

h)        $ORACLE_BASE/admin/<SID>/下的所有目录,一般是udump, cdump, bdump(这步可以省略,以后手工创建目录也可以)

五.通过FTP或者别的工具将上述的备份文件,全部上传到服务器B的相应目录中。比如说原来在服务器A$ORACLE_BASE/oradata/<SID>/system01.dbf,现在就上传到服务器B$ORACLE_BASE/oradata/<SID>/system01.dbf,保证目录的逻辑结构一样,实际上物理结构已经发生了变化(A$ORACLE_BASE/oracle,而B上是/u01/oracle)。其它的文件均作相同处理,如果服务器B上还没有相应的目录,那么就手工创建。

六.编辑上传到服务器B上的init<SID>.ora文件,将其中涉及的目录结构全部改为B中目前的目录结构,比如本例中就是将/oracle改为/u01/oracle

七.在服务器B上,sqlplus “/ as sysdba”,提示进入空闲进程。

八.根据修改过的pfile创建spfilecreate spfile from pfile

九.启动数据库到mount状态,startup mount

十.修改control file中所有数据文件的位置,可以通过spool生成所有的SQL

SQL> alter database rename file ‘/oracle/oradata/oralinux/system01.dbf’

  2  to ‘/u01/oracle/oradata/oralinux/system01.dbf’;

按照以上语法修改所有的数据文件位置。

十一.       此时数据库已经可以使用了,alter database open

十二.       将临时文件添加到TEMP表空间中:

alter tablespace TEMP add tempfile ‘’/u01/oracle/oradata/oralinux/temp01.dbf’ size 20M;

十三.       还有一些后续工作,包括更新数据库B上的监听配置文件(其实可以不用管,因为9i的实例已经可以自动注册到监听程序上了,如果是先起监听再起数据库,那么立刻就会注册,如果是先起数据库再起监听,那么会稍微有些延时才注册),修改/etc/oratab文件,以能够使用dbstartdbshut脚本。

 

这样数据库就算完全转移了,如果有什么问题,可以给我发邮件。

create logical standby database

星期六, 十二月 8th, 2007

创建逻辑STANDBY库
一、首先要检查表的唯一性约束:
由于逻辑库的rowid和主库不一致。数据就需要唯一性标识:
如果有主键,则使用主键
如果没有主键,但有NOT NULL的唯一性约束,则使用该唯一性约束
如果两者都没有,则使用整个数据行

所有,为了更好的性能,确保每个table都有主键

查询的语句是

(全文…)