本帖最后由 lujiaguai 于 2017-3-12 14:16 编辑
如果数据库版本不一致,比如linux上的版本高,那么用dump比较省事,否则做完以后还要升级
除非唐老师说的dump出现额外的问题
其实建议,你还是要等唐老师的课,大概在传送表空间的那一堂课会有完整的说明和演示
因为这里还有一些大小码机的问题,和一些细节还需要完整听一次才能弄得懂
如果涉及到linux上还要把数据放入ASM,就不能用上面的办法。
还要在做转换一次,这又会涉及到文件系统到ASM的转换操作顺序,需要听ASM的最后一堂课
唐老师教的做法从逻辑上到实际操作,都是最简的,再此之前不建议去搜索和模仿江湖上的其他做法,容易误入歧途。
你听完课,再去搜索,发现一下子思路能清晰很多
如下是我的课后整理的笔记,缺2张v$transportable_platform的截图:
最后一部分是修改db_name和dbid的内容,可以不做
先查看v$transportable_platform表,查询支持的版本信息
select * fromv$transportable_platfor
Endian_format列中区分了跨平台迁移的处理器版本区别,分为大码机与小码机
注意:跨平台迁移只能发生在小码与小码,大码与大码之间,不可以跨大小码迁移
ADM的cpu标识为X86 6-bit INTEL的cpu标识为IA 64-bit
本例从windows IA 64-bit迁移至linux IA 64-bit操作的时候注意不要选错。
可以做以下查询匹配,看看可以对应哪些平台的迁移
SQL> select d.platform_name"Source", t.platform_name "Compatible Targets",endian_format
from v$transportable_platform t, v$database d
where t.endian_format = (select endian_format
from v$transportable_platform t, v$database d
where d.platform_name = t.platform_name);
将windows上的源数据库处于只读状态
SQL> shutdown immediate;
SQL> startup mount
SQL> alter database open read only;
在rman下,进行convert转换操作,注意这里'Linux IA (64-bit)'的格式不能错。
建议直接从select * fromv$transportable_platform;中复制出来。
RMAN> convert database to platform 'Linux IA (64-bit)' format'c:\data\newland\%
U.dbf';
启动 conversion at source 于 06-7月 -16
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=8 设备类型=DISK
在数据库中找到目录 SYS.ORACLECLRDIR
在数据库中找到目录 SYS.XMLDIR
在数据库中找到目录 SYS.DATA_PUMP_DIR
在数据库中找到目录 SYS.ORACLE_OCM_CONFIG_DIR
在口令文件中找到用户 SYS (具有 SYSDBA and SYSOPER 权限)
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件: 文件号=00003 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\UNDOTBS01.D
BF
已转换的数据文件 =C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-UNDOTBS1_FNO-3
_01RA0RLU.DBF
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:15
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件: 文件号=00001 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\SYSTEM01.DB
F
已转换的数据文件 =C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-SYSTEM_FNO-1_0
2RA0RMD.DBF
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件: 文件号=00002 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\SYSAUX01.DB
F
已转换的数据文件 =C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_0
3RA0RMK.DBF
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件转换
输入数据文件: 文件号=00004 名称=C:\APP\ADMINISTRATOR\ORADATA\NEWLAND\USERS01.DBF
已转换的数据文件 = C:\DATA\NEWLAND\DATA_D-NEWLAND_I-2996260363_TS-USERS_FNO-4_04
RA0RMR.DBF
通道 ORA_DISK_1: 数据文件转换完毕, 经过时间: 00:00:01
编辑 init.ora 文件 C:\DATA\NEWLAND\INIT_00RA0RLU_1_0.DBF.ORA。此 PFILE 将用于在
目标平台上创建数据库据
要重新编译所有 PL/SQL 模块, 请在目标平台上运行 utlirp.sql 和 utlrp.sql
要更改内部数据库标识符, 请使用 DBNEWID 实用程序
完成 conversion at source 于 06-7月 -16
完成后,源数据库可以read write,不再需要了。
SQL> shutdown immediate;
SQL> startup;
此时在路径c:\data\newland下,可见数据文件(dbf)及参数文件(init),但还缺少控制文件的trace脚本,可在c:\app\oracle(administrator)\diag\rdbms\newland\newland\trace下查找(*ora_*.trc)。
建议查找是按照时间排序,时间对应c:\data\newland下各数据文件生成的时间。
找到后将其复制到c:\data\newland文件夹下。
复制整个c:\data\newland目录到linux下(/u01/app/oracle/oradta)
确认或者修改文件夹权限,注意大小写!
chown –R oracleinstall newland
为了方便记忆,重命名转换的数据文件
[oracle@station79 trace]$ ls/u01/app/oracle/oradata/newland
DATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_03RA0RMK.DBF
DATA_D-NEWLAND_I-2996260363_TS-USERS_FNO-4_04RA0RMR.DBF
DATA_D-NEWLAND_I-2996260363_TS-SYSTEM_FNO-1_02RA0RMD.DBF
DATA_D-NEWLAND_I-2996260363_TS-UNDOTBS1_FNO-3_01RA0RLU.DBF INIT_00RA0RLU_1_0.DBF.ORA
newland_ora_2604.trc
[oracle@station79 trace]$ mvDATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_03RA0RMK.DBF sysaux.dbf
[oracle@station79 trace]$ cd/u01/app/oracle/oradata/newland
[oracle@station79 newland]$ mv DATA_D-NEWLAND_I-2996260363_TS-SYSAUX_FNO-2_03RA0RMK.DBFsysaux.dbf
[oracle@station79 newland]$ mvDATA_D-NEWLAND_I-2996260363_TS-USERS_FNO-4_04RA0RMR.DBF users.dbf
[oracle@station79 newland]$ mvDATA_D-NEWLAND_I-2996260363_TS-SYSTEM_FNO-1_02RA0RMD.DBF system.dbf
[oracle@station79 newland]$ mvDATA_D-NEWLAND_I-2996260363_TS-UNDOTBS1_FNO-3_01RA0RLU.DBF undotbs1.dbf
把控制文件脚本和参数文件移动出去,控制文件随意,参数文件去$ORACLE_HOME/dbs
[oracle@station79 newland]$ ls
INIT_00RA0RLU_1_0.DBF.ORA newland_ora_2604.trc sysaux.dbf system.dbf undotbs1.dbf users.dbf
[oracle@station79 newland]$ mv newland_ora_2604.trc/home/oracle/newland.sql
[oracle@station79 newland]$ mv INIT_00RA0RLU_1_0.DBF.ORA/u01/app/oracle/product/11.2.0/dbhome_1/dbs/init_newland.ora
[oracle@station79 newland]$ ls
sysaux.dbf system.dbf undotbs1.dbf users.dbf
编辑控制文件脚本:修改日志文件路径,大小,块大小(不是4K盘不用改);修改数据文件路径;字符集不能改;其余内容可以全部删除,后面手动配置即可。
注意保留resetlogs的一段即可:
CREATE CONTROLFILE REUSE SET DATABASE "newland"RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/newland/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/newland/redo02.log' SIZE 50MBLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/newland/redo03.log' SIZE 50MBLOCKSIZE 512
DATAFILE
'/u01/app/oracle/oradata/newland/system.dbf',
'/u01/app/oracle/oradata/newland/sysaux.dbf',
'/u01/app/oracle/oradata/newland/users.dbf',
'/u01/app/oracle/oradata/newland/undutbs1.dbf'
CHARACTER SET ZHS16GBK
;
修改参数文件内容,主要的条目不能少即可:
[oracle@station79 dbs]$ cd/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@station79 dbs]$ ls
hc_DBUA0.dat init_newland.ora initorcl.ora orapworcl peshm_orcl_0
hc_orcl.dat init.ora lkORCL peshm_DBUA0_0 snapcf_orcl.f
[oracle@station79 dbs]$ cp init_newland.orainitnewland.ora
[oracle@station79 dbs]$ vim initnewland.ora
control_files='/u01/app/oracle/oradata/newland/control01.ctl'
db_name='newland'
memory_target=2G
db_block_size=8192
db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
db_recovery_file_dest_size=4G
undo_tablespace='UNDOTBS1'
undo_management=auto
undo_retention=900
open_cursors=300
processes=150
audit_file_dest='/u01/app/oracle/admin/newland/adump'
创建密码文件(orapwdnewland),位于/u01/app/oracle/product/11.2.0/dbhome_1/dbs下
[oracle@station79 dbs]$ cd/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@station79 dbs]$ ls
hc_DBUA0.dat init_newland.ora initorcl.ora orapworcl peshm_orcl_0
hc_orcl.dat init.ora lkORCL peshm_DBUA0_0 snapcf_orcl.f
[oracle@station79 dbs]$ orapwd file=orapwdnewlandpassword=oracle_4U entries=10;
[oracle@station79 dbs]$ ls
hc_DBUA0.dat hc_orcl.dat initnewland.ora initorcl.ora lkORCL orapworcl peshm_newland_0 snapcf_orcl.f
hc_newland.dat init_newland.ora init.ora lkNEWLAND orapwdnewland peshm_DBUA0_0 peshm_orcl_0
添加数据库sid及路径
[oracle@station79 ~]$ vim /etc/oratab
+ASM:/u01/app/oracle/product/11.2.0/grid:N
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N newland:/u01/app/oracle/product/11.2.0/dbhome_1:N
参数文件修改后,数据库可以到nomount状态
[oracle@station79 ~]$ ls
Desktop oradiag_oracle newland.sql
[oracle@station79 ~]$ . oraenv
ORACLE_SID = [newland]?
The Oracle base forORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
[oracle@station79 ~]$ sqlplus /nolog
SQL> conn / as sysdba
Connected.
SQL> startup nomount
Total System Global Area 2042241024 bytes
Fixed Size 1337548 bytes
Variable Size 1124075316 bytes
Database Buffers 905969664 bytes
Redo Buffers 10858496 bytes
生成spfile文件
SQL> create spfile from pfile;
File created.
执行控制文件脚本
SQL> @newland.sql
Control file created.
启动数据库,重印日志,由于是正常关机下导出的数据,所以不需要recover
SQL> alter database open resetlogs;
Database altered.
最后记得添加临时表空间
SQL> alter tablespace temp add tempfile'/u01/app/oracle/oradata/newland/temp01.dbf' size 20m autoextend on;
Tablespace altered.
其余配置,可根据需要陆续自行补上即可。
此时还有一些遗留问题,会有一些对象在新的数据库上无效,虽然实际不产生不影响
先无效掉对象,再编译有效,先关闭数据库
SQL> shutdown immediate;
SQL> startup upgrade;
SQL> @?/rdbms/utlrp.sql;
SQL> shutdown immediate;
SQL> startup ;
修改几个参数,改大以后适应下面的大批量编译工作,加快速度
SQL> alter system set processes=1500scope=spfile;
SQL> alter system setparallel_max_servers=120;
SQL> alter system setjob_queue_processes=1000;
SQL> desc dba_objects
Name Null? Type
------------------------------------------------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
SQL> select OWNER,OBJECT_NAME,STATUSfrom dba_objects where status <> 'valid';
最后可以修改数据库名字
Show parameter db_name
Show parameter instance_name
Select * from v$version
Select dbid from v$database
数据库要处于mount的状态
Shutdown immediate
Shutdown mount
Nid 可见命令参数
仅仅该名字用setname
如果名字和dbid一起改就用dbname
[oracle@station76 stage]$ nid
DBNEWID: Release 11.2.0.1.0 - Production onTue Jul 12 09:49:33 2016
Copyright (c) 1982, 2009, Oracle and/or itsaffiliates. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
TARGET Username/Password (NONE)
DBNAME New database name (NONE)
LOGFILE Output Log (NONE)
REVERT Revert failed change NO
SETNAME Set a new database name only NO
APPEND Append to output log NO
HELP Displays these messages NO
[oracle@station76]$ nidTARGET=sys/oracle_4U DBNAME=nl
提示确认修改控制文件,日志文件
修改以后数据库自动到nomount状态,或者shutdown
Startup报错,参数文件不识别db_name
此时 show parameter db_name 可见依然依然是旧的名称
Alter system set db_name=nl scope=spfile
Shutdown immediate
Startup 提示需要resetlog,因为重写了日志
|