同版本 oracle 11g 数据库移植详解

 

--作者邮箱 [email protected]

一、移植前提:
 1、操作系统满足oracle数据库版本的安装条件。
 2、数据库版本一致

二、源数据库端的操作:

 1、检查数据库是否归档,如果没归档,则归档。
  sqlplus "/as sysdba"
  
  SQL>archive log list;

  如果数据库工作在非归档模式下,则要打开归档。

  在数据库mount状态下,
  1.SQL>alter system set archivelogs;
  2.SQL>alter database open;
 2.SQL>alter database backup controlfile to trace; --备份数据库的控制文件,用来在目的端重建。
 3.SQL>shutdown immediate --此时数据库干净关闭,数据的SCN号保持一致。
 4.从告警日志中找到控制文件的备份踪迹。
  找到alter_[ORACLE_SID].log,这里是alert_PROD.log 这个文件是系统运行日志里面可以查看到,控制文件
  备份的位置.其中有shift+ g 到文件的最后,往回看,看到" Backup controlfile written to trac
  e file /u03/DEV/db/tech_st/11.1.0/admin/PROD_dev01/diag/rdbms/prod/PROD/trace/PROD_ora_2654332.trc"
  一般和告警日志在同一个目录。
  或者用
  show parameter diag命令查看控制文件备份trc的放置路径,然后找到最新的trc,里面就有备份信息。

 5.生成控制文件sql脚本。
  然后把倒数第一个 startup nomount 到alter database open resetlogs,指令中间的留下来其余删除,结果类似如下:
  

  STARTUP NOMOUNT
  CREATE CONTROLFILE set DATABASE "ERP" RESETLOGS ARCHIVELOG  --这里要把 reuse 改成set,还不理解为什么。
      MAXLOGFILES 16
      MAXLOGMEMBERS 2
      MAXDATAFILES 30
      MAXINSTANCES 1
      MAXLOGHISTORY 292
  LOGFILE
    GROUP 1 '/u01/app/oracle/oradata/erp/redo01.log'  SIZE 10M BLOCKSIZE 512,
    GROUP 2 '/u01/app/oracle/oradata/erp/redo02.log'  SIZE 10M BLOCKSIZE 512,
    GROUP 3 '/u01/app/oracle/oradata/erp/redo03.log'  SIZE 10M BLOCKSIZE 512,
    GROUP 4 '/u01/app/oracle/oradata/erp/redo04.log'  SIZE 10M BLOCKSIZE 512,
    GROUP 5 '/u01/app/oracle/flash_recovery_area/ERP/onlinelog/o1_mf_5_7wc3dk6b_.log'  SIZE 100M BLOCKSIZE 512
  -- STANDBY LOGFILE
  DATAFILE
    '/u01/app/oracle/oradata/erp/system01.dbf',
    '/u01/app/oracle/oradata/erp/sysaux.dbf',
    '/u01/app/oracle/oradata/erp/undo01.dbf',
    '/u01/app/oracle/oradata/erp/rbs01.dbf',
    '/u01/app/oracle/oradata/erp/user01.dbf'
  CHARACTER SET WE8ISO8859P1;
  --RECOVER DATABASE USING BACKUP CONTROLFILE 这个注释掉
  ALTER DATABASE OPEN RESETLOGS;
 6.把上面脚本保存成 clt.sql 文件。
三、数据和文件的迁移

 1.把数据库的init<$ORACLE_SID>.ora拷贝 目的数据库的 $ORACLE_HOME/dbs目录下,
 2.把上面第6步生成的 clt.sql 拷贝的某个目录下,自己能想起来就行。
 3.把上面控制文件中的出现并且目的服务器中不存在的目录建好,例如 mkdir -p /u01/app/oracle/oradata/erp
 4.把源数据库中的数据文件拷贝到目标服务器上相应目录里,不存在就新建,可以sftp,也可以U盘拷贝。
  伪代码:cp -R /u01/app/oracle/oradata/erp/*   /u01/app/oracle/oradata/erp/
 
 

四、修改目标服务器个配置文件
 1、pfile(init<$ORACLE_SID>.ora)
  orcl.__db_cache_size=146800640
  orcl.__java_pool_size=4194304
  orcl.__large_pool_size=4194304
  orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
  orcl.__pga_aggregate_target=188743680
  orcl.__sga_target=200321536
  orcl.__shared_io_pool_size=0
  orcl.__shared_pool_size=94549376
  orcl.__streams_pool_size=4194304
  *.audit_file_dest='/u01/app/oracle/admin/erp/adump' --目录重建
  *.audit_trail='db'
  *.compatible='11.2.0.0.0'
  *.control_files='/u01/app/oracle/oradata/erp/control01.ctl','/u01/app/oracle/flash_recovery_area/erp/control02.ctl' --这两个目录重建
  *.db_block_size=8192
  *.db_domain='localdomain'
  *.db_name='erp' --这个改好,和源服务器一样
  *.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
  *.db_recovery_file_dest_size=4039114752
  *.diagnostic_dest='/u01/app/oracle'
  *.dispatchers='(PROTOCOL=TCP) (SERVICE=erpXDB)' --这里改好,注意XDB前面的字符串。
  *.memory_target=538968064
  *.open_cursors=300
  *.processes=150
  *.remote_login_passwordfile='EXCLUSIVE'
  *.undo_tablespace='UNDO01'  --这里改好,和源文件一样,
  ~                                  

 不存在的目录要建好,mkdir -p /u01/app/oracle/admin/erp/adump

 2.数据库用户的环境变量.env .bash_profile $ORACLE_SID,$ORACLE_HOME,$ORACLE_BASE
  

 3.因为刚才数据文件拷贝,把源服务器的控制文件一同拷贝过来,这是要修改已有控制文件名字了,切就要随意删除文件,切记切记。
  
五、恢复数据库
 1.recreate controlfile
  sqlplus "/as sysdba"
  SQL>startup nomount; 
  SQL>@ctl.sql
 2、检查数据库恢复情况。


六、建立监听
 1.netca
 2.netmgr
 3.直接修改脚本listener.ora和tnsname.ora

名字是HD01
端口1531

 

--下面是oracle 11.1.6.0升级到11.1.7.0后的一些调整代码。

@$ORACLE_HOME/RDBMS/Admin/utlip.sql


select owner, object_name, object_type, status  from all_objects  where status = 'INVALID';

ALTER TRIGGER MDSYS.SDO_GEOR_ERR_TRIGGER DISABLE;
show errors trigger MDSYS.SDO_GEOR_ADDL_TRIGGER;查看trigger的错误

@$ORACLE_HOME/RDBMS/Admin/utlip.sql


select * from dba_objects d
where d.OBJECT_NAME ='CUXBMJ_WIP_DISCRETE_JOBS_V';

select count(*) from all_tables-- where table_name like '%CUX%';

 


 

你可能感兴趣的:(oracle,数据库,服务器,File,database,character)