重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3262|回复: 1
打印 上一主题 下一主题

[原创] [传输数据库][linux 32位到windows 64位]

[复制链接]
跳转到指定楼层
楼主
发表于 2018-4-3 15:39:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从linux到windows传输数据库

准备工作
一、实验目的
linux 系统到windows 系统,传输整个数据库

二、准备工作
  
  
源数据库
目标数据库
操作系统
Oracle  Linux 6.4 32
Oracle  Linux 6.4 32
数据库软件版本
11.2.0.4
11.2.0.4
数据库实例名
sztech1
只安装软件,不建库
plantform_name
Linux IA  (32-bit)
  
Microsoft  Windows x86 64-bit


三、限制要求
     要从一个平台向另一个平台移动数据库,必须确保源系统和目标系统都运行于v$transportable_platform中列出的平台上,并且具有相同的endian格式。此功能与可移动表空间不同,可移动表空间有一个可以插入数据的目标数据库,而此功能将在目标平台上创建新的数据库。新创建的数据库种包含的数据与源数据库中相同,除了数据库名、实例名和文件位置等,新数据库与源数据库的设置也相同。
(这里我之前一直有个误解,endian format不是说,64位与32位字节格式不一样,而是指v$transportable_platformendian_format列的biglittle不一样)

四、实验规划
     必须先以只读模式打开数据库,然后才能移动该数据库。然后使用RMAN转换数据库的必要数据文件。
     在源平台执行转换时,RMAN命令CONVERT DATABASE将生成一个包含正确的CREATE CONTROLFILE RESETLOGS命令的脚本,此命令用于在目标系统上创建新数据库。然后CONVERT DATABASE 命令将装换识别出的所有数据文件,以便这些文件可以在目标系统上使用。接着,需要将已转换的数据文件和生成的脚本传送到目标平台。通过目标平台上执行生成的脚本,创建数据库的新副本。
注:源数据库必须在COMPATIBLE初始化参数设为10.0.0或者更高的条件下运行。自COMPATIBLE设置10.0.0或更高版本以来,识别出的所有表空间必须至少已被读写过一次。(教材原内容)
     
实验开始

一、查看endian(源库、目标库)
   
1.查看可传输数据库的平台
         SQL> select * from v$transportable_platform;
PLATFORM_IDPLATFORM_NAME                           ENDIAN_FORMAT
--------------------------------------------------- --------------
          1 Solaris[tm] OE (32-bit)                  Big
          2 Solaris[tm] OE (64-bit)                  Big
          7 Microsoft Windows IA (32-bit)            Little
         10 Linux IA (32-bit)                        Little
          6 AIX-Based Systems (64-bit)               Big
          3 HP-UX (64-bit)                           Big
          5 HP Tru64 UNIX                            Little
          4 HP-UX IA (64-bit)                        Big
         11 Linux IA (64-bit)                        Little
         15 HP Open VMS                              Little
          8 Microsoft Windows IA (64-bit)            Little

PLATFORM_IDPLATFORM_NAME                           ENDIAN_FORMAT
--------------------------------------------------- --------------
          9 IBM zSeries Based Linux                  Big
         13 Linux x86 64-bit                         Little
         16 Apple Mac OS                             Big
         12 Microsoft Windows x86 64-bit             Little
         17 Solaris Operating System (x86)           Little
         18 IBM Power Based Linux                    Big
         19 HP IA Open VMS                           Little
         20 Solaris Operating System(x86-64)        Little
         21 Apple Mac OS (x86-64)                    Little
20 rowsselected.

2.源数据库查看endian格式
SQL>select d.platform_name,tp.endian_format
  2  fromv$transportable_platform tp,v$database d
  3 where tp.platform_name=d.platform_name;
PLATFORM_NAME                            ENDIAN_FORMAT
------------------------------------------------------
Linux IA(32-bit)                        Little
     
二、在源数据库转换
    1.查看源数据库打开方式
     
     SQL> select open_mode from v$database;
         OPEN_MODE
         --------------------
         READ WRITE

     2.修改源库为只读模式
     SQL> startup mount;
     SQL> alter database open read only;
     Database altered.
     SQL> select open_mode from v$database;
         OPEN_MODE
         --------------------
         READ ONLY

三、转换前的检验
     利用DBMS_TDB包检验数据库能否被传输以及列出外部表和DIRECTORY等无法传输的信息。

1.对源数据库执行dbms_tdb.check_db检查
SQL> setserveroutput on  (设置环境变量serveroutput为打开状态,使PL/SQL程序在SQL*plus中输出结果)
SQL>declare
     db_ready boolean;     (定义db_ready变量为布尔型)
     begin
     db_ready:=dbms_tdb.check_db('MicrosoftWindows x86 64-bit');                              
                                     (给db_ready赋值,使用dbms_tdb包检查目标平台)
     end;
     /
PL/SQLprocedure successfully completed.
(如果没有输出内容,就可以了)

2.对源数据库执行dbms_tdb.check_external来识别外部对象
SQL> setserveroutput on  
SQL>declare
     external boolean;
     begin
     external:=dbms_tdb.check_external;(使用dbms_tdb检查外部对象)
     end;
     /
##如下也可以忽略
The following external tables exist in the database:
SH.SALES_TRANSACTIONS_EXT
The following directories exist in the database:
SYS.DATA_FILE_DIR, SYS.MEDIA_DIR, SYS.LOG_FILE_DIR,SYS.SS_OE_XMLDIR,
SYS.XMLDIR, SYS.SUBDIR, SYS.ORACLE_OCM_CONFIG_DIR2,SYS.ORACLE_OCM_CONFIG_DIR,
SYS.DATA_PUMP_DIR
The following BFILEs exist in the database:
PM.PRINT_MEDIA

PL/SQLprocedure successfully completed.

四、备份源库
     RMAN>backup as compressed backupsetdatabase plus archivelog delete all input;

五、利用RMAN把数据库转换成目标平台格式
1、查看数据库实例名
     SQL> select name from v$database;
         NAME
         ---------
         SZTECH1

2. CONVERT DATABASE命令转换数据库
RMAN>convert database new database 'SZTECH1'
2> transport script '/u01/backup/transport.sql'to platform 'Microsoft Windows x86 64-bit'
3> db_file_name_convert '/u01/app/oracle/oradata/sztech1''/u01/backup';
Finished Control File and SPFILE Autobackup at24-MAR-18

##注意:
     1new database 表示目标数据库的名字,
     2transport script 指定生成建库脚本的位置
     3to platform 表示目标数据库的平台
     4db_file_name_convert
         指定源数据库数据文件所在的位置/u01/app/oracle/oradata/sztech1
     和转换后数据文件的存放位置/u01/backup

##中途生成报错:ORA-19502: write error on file"/u01/backup/sysaux01.dbf", block number 46336 (block size=8192)
ORA-27072: File I/O error

查看alert.log日志,没有生成报错信息。
[报错原因] 提示是I/O发生错误,所以怀疑是不是备份路径的空间,发现是因为空间满了

3.查看/u01/backup路径下的文档
[oracle@dbserver backup]$ ls
example01.dbf  sysaux01.dbf  transport.sql  users01.dbf
rcat_tbs01.dbf system01.dbf  undotbs01.dbf

其中有1个脚本和转化后的数据文件

六、修改Linux参数文件  
   
     1.找到参数文件
     通过查看生成的/u01/backup/transport.sql,查找出生成的参数文件是STARTUP NOMOUNTPFILE='/u01/app/oracle/product/11.2.0/db_1/dbs/init_00sui4dl_1_0.ora'

     2.修改参数文件
     vi/u01/app/oracle/product/11.2.0/db_1/dbs/init_00sui4dl_1_0.ora
将里面的内容修改成如下:
# Please change the values of the followingparameters:
control_files            = "D:\oracle\product\11.2.0\db_1\dbs\control01.ctl"
db_recovery_file_dest    ="D:\oracle\fast_recovery_area"
db_recovery_file_dest_size= 4353687552
audit_file_dest          = "D:\oracle\product\11.2.0\db_1\dbs\adump"
  db_name                  = "SZTECH1"
# Please review the values of the followingparameters:
# __oracle_base            = "D:\oracle"
__shared_pool_size       =75497472
__large_pool_size        = 8388608
__java_pool_size         = 4194304
__streams_pool_size      = 0
__sga_target             =197132288
__db_cache_size          =100663296
__shared_io_pool_size    = 0
remote_login_passwordfile= "EXCLUSIVE"
db_domain                =""
dispatchers              ="(PROTOCOL=TCP) (SERVICE=sztech1XDB)"
__pga_aggregate_target   =171966464
# The values of the following parameters are fromsource database:
processes                = 150
memory_target            =369098752
db_block_size            = 8192
compatible               = "11.2.0.4.0"
undo_tablespace          ="UNDOTBS1"
audit_trail              ="OS"
open_cursors             = 300
# diagnostic_dest          = "D:\oracle"                                       
修改完成后,把它复制到目标数据库的%oracle_home%/dbs/initsztech1.ora文件

七、修改生成的SQL脚本

STARTUP NOMOUNT PFILE='D:\oracle\product\11.2.0\db_1\dbs\initsztech1.ora'
CREATE CONTROLFILE REUSE SET DATABASE"SZTECH1" RESETLOGS  ARCHIVELOG
   MAXLOGFILES 16
   MAXLOGMEMBERS 3
   MAXDATAFILES 100
   MAXINSTANCES 8
   MAXLOGHISTORY 292
LOGFILE
  GROUP 1'D:\oracle\oradata\sztech1\redo01.log' SIZE 50M BLOCKSIZE 512,
  GROUP 2 'D:\oracle\oradata\sztech1\redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3'D:\oracle\oradata\sztech1\redo03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
  'D:\oracle\oradata\sztech1\system01.dbf',
  'D:\oracle\oradata\sztech1\sysaux01.dbf',
  'D:\oracle\oradata\sztech1\undotbs01.dbf',
  'D:\oracle\oradata\sztech1\users01.dbf',
  'D:\oracle\oradata\sztech1\example01.dbf'
CHARACTER SET ZHS16GBK
;
-- Database can now be opened zeroing the onlinelogs.
ALTER DATABASE OPEN RESETLOGS UPGRADE;
-- Commands to add tempfiles to temporarytablespaces.
-- Online tempfiles have complete spaceinformation.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\oracle\oradata\temp01.dbf'
     SIZE30408704  AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.
--
set echo off
prompt~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prompt * Your database has been createdsuccessfully!
prompt * There are many things to think about forthe new database. Here
prompt * is a checklist to help you stay on track:
prompt * 1. You may want to redefine the locationof the directory objects.
prompt * 2. You may want to change the internaldatabase identifier (DBID)
prompt *   or the global database name for this database. Use the
prompt *   NEWDBID Utility (nid).
prompt~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SHUTDOWN IMMEDIATE
STARTUP UPGRADE PFILE='D:\oracle\product\11.2.0\db_1\dbs\initsztech1.ora'
@@ ?/rdbms/admin/utlirp.sql
SHUTDOWN IMMEDIATE
STARTUP PFILE='D:\oracle\product\11.2.0\db_1\dbs\initsztech1.ora'
-- The following step will recompile all PL/SQLmodules.
-- It may take serveral hours to complete.
@@ ?/rdbms/admin/utlrp.sql
set feedback 6;

八、在目标数据库种还原数据库1、在目标数据库仅安装数据库软件,不建库2、在目标数据库上创建如下目录
C:\Users\administrator> md D:\oracle\oradata\sztech1
C:\Users\administrator > md D:\oracle\admin\sztech1\adump
C:\Users\administrator > md D:\oracle\diag\rdbms\sztech1\trace
C:\Users\administrator > md D:\oracle\fast_recovery_area\sztech1
C:\Users\administrator > md D:\oracle\diag\rdbms\sztech1\sztech1\cdump
C:\Users\administrator > md D:\oracle\product\11.2.0\db_1\dbs

3、拷贝相关文件到如下位置
     RMAN转换时生成的数据文件、生成并修改过的SQL脚本和参数文件拷贝到如下位置

D:\oracle\oradata\sztech1\SYSTEM01.DBF
D:\oracle\oradata\sztech1\UNDOTBS01.DBF
D:\oracle\oradata\sztech1\SYSAUX01.DBF
D:\oracle\oradata\sztech1\USERS01.DBF
D:\oracle\oradata\sztech1\EXAMPLE01.DBF
D:\oracle\product\11.2.0\db_1\dbs\initsztech1.ora
D:\oracle\oradata\sztech1\transport.sql

4windows上创建新的实例sztech1
C:\Users\administrator >oradim -new -sid sztech1
C:\Users\administrator > set oracle_sid=sztech1

5.利用新的pfile开启实例
C:\Users\administrator > sqlplus / as sysdba
(已连接空闲实例)
SQL> startup pfile='D\oracle\product\11.2.0\db_1\dbs\initsztech1.ora';
这时会遇到ORA-00205问题,这是控制文件的问题,先不用管

6.查看当前实例状态
SQL> select status from v$instance;
STATUS
------------
OPENED

7.执行脚本
SQL>@ D:\oracle\oradata\sztech1\transport.sql
此时,数据库移动已经完成。

九、传输后续工作
1.创建spfile
SQL> startup nomount;
SQL> create spfile from pfile='D:\oracle\product\11.2.0\db_1\dbs\initsztech1.ora';
SQL> alter database open;
SQL> show parameter spfile;(查看spfile位置)

2.查看控制文件位置
SQL> select * from v$controlfile;

3.查看日志文件位置
SQL> select * from v$logfile;
--------- end ------------

希望各位老师指点!



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

沙发
发表于 2018-4-4 12:21:47 | 只看该作者
转换后,select component,status from dba_registry;发出来看看呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-24 23:06 , Processed in 0.094429 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表