为了达到提升SGA和PGA得目的我会调整参数,还由于为了最小化误操作顺利的完成数据迁移工作,我会在各个步骤中给中具体的参数值、命令和需要建立的目录。这里说明一下对于新的服务器经过分析我准备为SGA分配16GB内存,PGA分配到3GB,剩余的5GB来分配给系统使用。
1、迁移前几天停止现有DATA GUARD,提前安装好备库服务器的系统和数据库软件。
2、迁移前一天停止RMAN脚本中的DELETE ALL INPUT来停止删除归档日志文件。
3、全备前使用V$LOG来确定当前的日志序列号,为确定恢复所需要的归档日志文件做好准备。
4、在当前服务器中新建目录(/??)来保存RMAN备份文件
5、使用RMAN全备命令进行完整的RMAN备份,指定目录到新建的目录(/??)中。同时保存RMAN备份日志,用来过后确定ORACLE控制文件所在的备份集备份片。
命令如下:
run {
backup format "/??/db_%s_%p_%T"
database plus archivelog
format "/??/arch_%s_%p_%T";
}
6、在原数据库中使用CREATE PFILE FROM SPFILE来更新PFILE,保证所有的参数设置都是最新的
7、在目标服务器中通过DBCA新建数据库,数据库的名字和原数据库一样,我们的生产库就为POMSPRO,但是其他的文件位置不需要更改,因为这个步骤只是为了建立初始实例(INSTANCE)
8、建立完成后删除所有数据文件,日志文件,控制文件,同时删除SPFILE。
9、在目标服务器中新建目录,此目录和原服务器中的目录一样,及和第5步中的目录一样(/??),用来存放RMAN全备的备份集备份片。
10、通过FTP传输所有备份集备份片到目标服务器中新建的目录中及/??目录中。
11、修改目标服务器中数据库的PFILE,要求和原数据库PFILE一样。然后修改部分参数,如下:
log_archive_dest_1='LOCATION=/u01/oradata/gelcprod10g
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)'
pga_aggregate_target = 3221225472
sga_max_size= 17179869184
sga_target= 17072495001
data guard 参数
12、启动数据库到NOMOUNT状态,此时实例已经启动内存已经分配。
13、在目标服务器中新建目录用来存在恢复的控制文件,参照PFILE中的配置及建立如下目录
/oradata/gelcprod10g/GELCPRO/
14、使用命令恢复控制文件,命令如下
restore controlfile from ‘/??/??’
??代表的是第5步确定的控制文件所在的备份片
15、启动数据库到MOUNT状态,此时数据库已经加载了控制文件。
16、在目标服务器中新建数据文件目录,日志目录,归档目录,同时建立各种TRACE
文件目录。我们需要建立的目录如下
/u01/oradata/gelcprod10g 归档位置
/oradata/gelcprod10g/GELCPRO/ 数据文件所在位置
/oradata/gelcprod10g/GELCPRO/ 日志文件组1所在位置
/u01/oradata/gelcprod10g/GELCPRO/ 日志文件组2所在位置
/home/oraprod/admin/GELCPRO/adump
/home/oraprod/admin/GELCPRO/bdump
/home/oraprod/admin/GELCPRO/cbump
/home/oraprod/admin/GELCPRO/udump
/home/oraprod/admin/GELCPRO/dpdump
/home/oraprod/admin/GELCPRO/pfile
这些目录用来存放各种TRACE
17、通过RESOTRE DATABASE来进行数据文件还原
到此准备工作完成,下面的步骤需要断开所有应用,停止所有业务进行操作
18、关闭应用,确定不会再有新的数据写入到数据库。
19、迁移前提取原库的对象信息,使用命令如下
select count(*) from user_tables;
select count(*) from user_indexes;
select count(*) from user_views;
select count(*) from user_synonyms;
select OBJECT_TYPE, count(*)
from user_objects
group by OBJECT_TYPE
having OBJECT_TYPE not in ('TABLE', 'INDEX', 'VIEW','SYNONYM');
select count(*) from dba_users;
select count(*) from dba_db_links;
select count(*) from user_jobs;
20、进行多次日志切换,确保所有更改的数据都已经写入到归档日志,我们的日志组为3组所以进行4-6次切换保证所有的数据都进入了归档日志,使用日下命令 ALTER SYSTEM SWITCH LOGFILE
21、通过在原数据库查看V$LOG来确定当前日志序列(SEQUENCE#),判断出需要拷贝的归档日志文件,为了更加安全可以在最早的归档以前再多取几个。
22、通过FTP拷贝原服务器归档日志到目标服务器相应的目录中,及拷贝到目录/u01/oradata/gelcprod10g中。
23、通过应用归档日志文件进行恢复。命令如下
recover database until logseq **
**代表最后一个归档日志文件的SEQUENCE#
24、使用ALTER DATABASE OPEN RESETLOGS来打开数据库。
25、使用命令SHUTDOWN IMMEDIATE来关闭数据库。
26、使用命令STARTUP MIGRATE启动数据库。
27、运行rdbms/admin 下的utlirp.sql脚本
28、使用命令SHUTDOWN IMMEDIATE来关闭数据库。
29、使用命令STARTUP来启动数据库。
30、运行rdbms/admin 下的utlrp.sql脚本
31、使用命令SHUTDOWN IMMEDIATE来关闭数据库。
32、使用命令STARTUP来启动数据库。
到此数据迁移工作完成,下面的步骤进行IP切换和监听配置,此时需要关闭原库并且禁用网络服务,避免IP冲突
33、关闭原生产服务器网络服务使用命令如下
service network stop
34、修改/etc/sysconfig/network-scripts/ ifcfg-eth0参数如下
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.8.255
IPADDR=192.168.8.9
NETMASK=255.255.255.0
NETWORK=192.168.8.0
ONBOOT=yes
TYPE=Ethernet
35、修改/etc/hosts中主机名所对应的IP 192.168.8.9
36、使用命令重启网络服务,命令如下
service network restart
37、通过FTP拷贝原数据库的listener.ora和tnsnames.ora文件到目标服务器的network/admin目录下
38、通过命令来重启ORACLE监听器,命令如下
Lsnrctl stop
Lsnrctl start
到此IP切换工作完成,下面的步骤是进行对象的验证,作为DBA只能对数据库中的各种对象进行验证,而不会对具体的数据进行验证
39、验证用户所拥有的表数量,使用如下命令
select count(*) from user_table;
40、验证用户所拥有的索引数量,使用如下命令
select count(*) from user_indexes;
41、验证用户所拥有的视图数量,使用如下命令
select count(*) from user_views;
42、验证用户所拥有的同义词数量,使用如下命令
select count(*) from user_synonyms;
43、验证其他一些对象,包括过程,函数,触发器等,使用如下命令
select OBJECT_TYPE, count(*)
from user_objects
group by OBJECT_TYPE
having OBJECT_TYPE not in ('TABLE', 'INDEX', 'VIEW');
44、验证所有用户使用如下命令
select count(*) from dba_users;
45、验证所用Dblink使用如下命令
select count(*) from dba_db_links;
46、验证用户拥有的JOB使用如下命令
select count(*) from user_jobs;
至此我们DBA所能做的数据验证结束,需要开发人员进行详细的数据抽样验证,等到数据验证完成我们就可以启动应用。