oracle 9i高级复制

先说一下高级复制背景
1、两台服务器上均有oracle 9i  92010版本。服务器均有固定IP地址,服务器系统均为windows server2003。
2、两台服务器的golbal_name为zzti.edu.cn和zzti1.edu.cn。 zzti的IP地址为 10.0.0.1 zzti1的ip地址为 10.0.0.2。
准备工作:
1、先检查两个oracle是否支持高级复制功能。
   操作为以sys用户登录sqlplus
   SQL>select value from v$option where parameter='Advanced replication';
   如果返回为true,则表明oracle支持高级复制功能。若返回为false 则表明oracle不支持高级复制功能,需要安装oracle高级复制组建。
2、初始化global_names参数为true
     操作为以sys用户登录sqlplus
     SQL>alter system set global_names = true;
     或着修改init.ora中的global_names=true;
(注:在有些教程中说不需要修改这个值,但是大部分还是说要修改 所以在我实施的过程中我修改了这个值)
3、修改openlinks值
     查看openlinks值的方法为
     以sys用户登录sqlplus
     SQL>show parameter open_links;
     默认oracle中openlinks为4 在此环境中修要为8(因为一个process需要4个link)
 (注:在此过程中我并没有修改这个值,原因是自己不知道如何去修改。有些教程上说是在init.ora中修改,但是在我的这个文件中我并没有找到这个参数)
4、修改job_queue_processes值
     修改方法为
     以sys用户登录sqlplus
     SQL>alter system set job_queue_processes=10;
5、检查双方的global_name是否相同,只有两边的global_name相同,才能建立正确的dblink。
     查看global_name 方法为
     以sysdba的权限登录sqlplus
     SQL>select * from global_name;
     如 在此环境中查询结果为zzti.edu.cn 则表明global_name值为edu.cn
         另一个oracle查询结果为zzti1.edu.cn表明golbal_name值为edu.cn
    双方的global_name值相同,所以可以建立连接。
    如果双方的不同,可以用以下方法修改:
     以sysdba的权限登录sqlplus
     SQL>alter database rename global_name to global_name值;
至此 我们的准备工作已经完成。下面我们正式开始oracle高级复制功能的配置。

1、创建用户以及数据(在两个oralcle数据库中均要进行的操作):
以sysdba的权限登录sqlplus
     SQL> create user victor identified by qwertyu1234567 default tablespace users;    其中victor是用户名,密码是qwertyu1234567
            (删除用户的命令为)
     SQL>grant connect,resource to victor ;    为新建victor用户赋予权限

     SQL>conn  victor/ qwertyu1234567   连接到victor用户
     
     SQL>  create table test(id number,name varchar2(20),constraint test_id_pk primary key(id));   主键一定是要的,其中test为表的名称。如果提示有缺少括号错误,那应该是你把其中的单词拼写错误了,所以 应该细心一些。

     SQL>insert into test values(1,'abc');  插入数据
     SQL>insert into test values(2,'def');   插入数据

2、建立管理数据库复制的用户repadmin,并赋予权限。(在两个oralcle数据库中均要进行的操作):
     SQL>create user repadmin identified by qwertyu1234567 default tablespace users temporary tablespace temp; 用户名为repadmin 密码                                    为qwertyu1234567 

     SQL>execute dbms_defer_sys.register_propagator('repadmin');

     SQL>grant execute any procedure to repadmin;

     SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');

     SQL>execute dbms_repcat_admin.grant_admin_any_schema(username=>'repadmin');

     SQL>grant comment any table to repadmin;

     SQL>grant lock any table to repadmin;

     SQL>grant select any dictionary to repadmin;
     
3、现在只在zzti上配置
       用repadmin用户登录数据zzti,并且建立私有数据库连接
       SQL>create database link " zzti1.edu.cn" connect to repadmin identified by  qwertyu1234567 ; zzti1.edu.cn 为对方的global_name值,用户                                        名repadmin,密码 qwertyu1234567 
      
      在tnsnames.ora用户中添加如下内容(tnsnames.ora文件路径:oracle\ora92\network\admin)
        ORA92 =                                                            这个名字随便起
           (DESCRIPTION =
           (ADDRESS = (PROTOCOL = TCP)(HOST =  10.0.0.2)(PORT = 1521))  zzti1的IP地址
           (CONNECT_DATA =
           (SERVER = DEDICATED)
           (SERVICE_NAME = zzti1.edu.cn )                        zzti1的全局数据库名称    
            ) )

      创建数据库连接
                SQL>create database link " zzti1.edu.cn@perday"
                connect to repadmin identified by  qwertyu1234567  
                using' ora92';
     
      检查连接是否建立成功(一定要用repadmin用户登录,否则会提示找不到连接)
               SQL> select * from global_name@ zzti1.edu.cn@perday;
          
      如果返回zzti1的global_name 则表明连接建立成功,若有问题 ,则表明没有建立成功。
      
 4、添加复制组,添加复制站点,将zzti称为主体站点,创建每天复制一次的组。( r epadmin用户登录在zzti 只在zzti上配置而且登录用户都为repadmin)
    添加:
    SQL> execute dbms_repcat.create_master_repgroup
             (gname=>'rep_gp_day',group_comment=>'replcation perday',qualifier=>'@perday');

    删除:
    SQL>execute dbms_repcat.drop_master_repgroup
            (gname=>'rep_gp_day',all_sites => true);                             配置错了可以用这条语句删除
                
      检查执行结果:
     SQL>select * from dba_repsites;
     
     用spool生成批量执行的SQL语句
      SQL>  set feedback off;
      SQL>  set pagesize 0;
      SQL>  set heading off;
      SQL>  set verify off;
      SQL>  set linesize 1000;
      SQL>  set trimspool on;
      SQL> spool finename.sql;
      SQL> select 'execute dbms_repcat.create_zzti_repobject 
(sname=>"victor",oname=>"test",type=>"table",use_existing_object=>true,gname=>"rep_gp_day",copy_rows=>true)'
CREATE_SQL from tabs;
      SQL> select 'dbms_repcat.generate_replication_support("victor","test","table")' GEN_SQL from tabs;
      SQL>  spool off;
      SQL>  set feedback on;
      SQL>  set pagesize 9999;
      SQL>  set heading on;
      SQL>  set verify on;

     检查复制组的状态
        SQL>select gname,master,status from dba_repgroup;
     如果改组的状态已经为normal 则在添加复制对象之前应该先停顿复制组即将normal状态改为quiesced状态
        SQL>execute dbms_repcat.suspend_master_activity(gname=>' rep_gp_day');

     然后执行以下语句
       SQL>execute dbms_repcat.create_master_repobject
               (sname=>' victor',oname=>' test',type=>'table',use_existing_object=>true,gname=>'rep_gp_day',copy_rows=>false);
       SQL>execute dbms_repcat.generate_replication_support(' victor',' test','table');

      如果添加后发现有错误 可以用一下语句删除
       SQL>execute dbms_repcat.drop_master_repobject(sname=>' victor',oname=>' test',type=>'table'); 不过经过自己的尝试,并不能彻底删除掉,            所以害的自己不得不把oracle彻底卸载掉 然后又重新配置。
 
 5、添加主体库,在这必须保证自己的dblink连接正常。( r epadmin用户登录在zzti 只在zzti上配置而且登录用户都为repadmin)
        
       SQL>execute dbms_repcat.add_master_database
               (gname=>' rep_gp_day',master=>' zzti1.edu.cn@perday',use_existing_objects=>true,
                copy_rows=>false,propagation_mode=>' asynchronous');
        
       SQL>select * from user_jobs;

       SQL>execute dbms_repcat.resume_master_activity('rep_gp_day',false);
   
       检查状态:
       SQL>select gname,master,status from dba_repgroup;
        如果状态 不为normal 则执行以下语句将其改为normal
       SQL>execute dbms_repcat.resume_master_activity('rep_gp_day',true);

        如果提示修改不成功,则先用以下语句把改组抑制,再用上面的语句激活
      SQL>execute dbms_repcat.suspend_master_activity('rep_gp_day');

      添加push任务:
    begin
    dbms_defer_sys.schedule_push(
    destination=>' zzti1.edu.cn@perday',
    interval=>'sysdate+1/1440',        一天每1分钟运行一次
    next_date=>sysdate,                 下一次运行时间为当前时间
    parallelism=>1,
    delay_seconds=>50);                延迟秒数50
    end;
    /

     添加PURFGE任务
                begin
dbms_defer_sys.schedule_purge(
next_date=>sysdate,
interval=>'sysdate+1/1440',
delay_seconds=>0,
rollback_segment=>'');
end;
/
   至此 zzti数据库上的配置已经完成。

6、在zzti1上配置。(用repadmin用户登录。)

   用repadmin用户登录数据zzti1,并且建立私有数据库连接
       SQL>create database link " zzti.edu.cn" connect to  repadmin identified by  qwertyu1234567 zzti.edu.cn 为对方的global_name值,用户                                        名repadmin,密码 qwertyu1234567
      
      在tnsnames.ora用户中添加如下内容(tnsnames.ora文件路径:oracle\ora92\network\admin)
        ORA92 =                                                            这个名字随便起
           (DESCRIPTION =
           (ADDRESS = (PROTOCOL = TCP)(HOST =  10.0.0.1)(PORT = 1521))  zzti的IP地址
           (CONNECT_DATA =
           (SERVER = DEDICATED)
           (SERVICE_NAME =  zzti.edu.cn )                         zzti1的全局数据库名称     
            ) )

      创建数据库连接
                SQL>create database link " zzti.edu.cn@perday"
                connect to  repadmin identified by  qwertyu1234567  
                using' ora92';
     
      检查连接是否建立成功(一定要用repadmin用户登录,否则会提示找不到连接)
               SQL> select * from global_name@ zzti.edu.cn@perday;
          
      如果返回zzti的global_name 则表明连接建立成功,若有问题 ,则表明没有建立成功。

      添加PUSH任务
     
  begin
    dbms_defer_sys.schedule_push(
    destination=>' zzti.edu.cn@perday',
    interval=>'sysdate+1/1440',        一天每1分钟运行一次
    next_date=>sysdate,                 下一次运行时间为当前时间
    parallelism=>1,
    delay_seconds=>50);                延迟秒数50
    end;
    /

     添加PURFGE任务
                begin
dbms_defer_sys.schedule_purge(
next_date=>sysdate,
interval=>'sysdate+1/1440',
delay_seconds=>0,
rollback_segment=>'');
end;
/
这样 zzti1上的也就建立好了,可以利用数据库同步啦。
自己参考的资料(oracle 官方下载的): /Files/victor_chou/Advanced.Replication.Research.by.Kamus.pdf
在该过程中,自己整整用了一周的时间才配置好,所以在以后的日子中我会把我配置中的错误拿出来给大家分享。
                                                                                                   
     

   

你可能感兴趣的:(oracle)