Roby's profileblue_princePhotosBlogListsMore Tools Help

Blog


    May 15

    使用DBMS_FILE_TRANSFER配置DATA GURAD和克隆数据库

    通常我们配置DATA GUARD,都需要对主库进行备份,再把备份的备份集复制到备库端进行配置。但是当数据库非常大时,尤其是数据库采用ASM作为存储方案时,如果没有足够的空间用于存放备份集,这样显然就无法通过常规的方式来配置STANDBY。利用DBMS_FILE_TRANSFER则可以方便地将主库的数据文件直接传递至备库的ASM磁盘组,这样再也不需要使用中间存储存放备份文件。下面简单介绍一下通过DBMS_FILE_TRANSFER配置基于ASM存储方案的DATA GUARD和克隆数据库的方法。

    一、在备用数据库端创建好ASM磁盘组和一个中间数据库。
    首先必须要在备用数据库端配置好ASM实例,创建好ASM磁盘组,并且ASM磁盘组的名字最好是和主库一样的。当然,名字不一样也可以,那就需要一些额外的设置。另外由于DBMS_FILE_TRANSFER远程传输是基于DB LINK的,因此需要在备用库端创建一个中间数据库,这个中间数据库的主要作用便是用于DB LINK传输数据文件。假定我们创建的ASM磁盘组叫DATA,中间数据库名字叫transfer。
    二、在备用库的中间数据库上创建一个到主库的DB LINK。做之前需要配置好到主库的TNS。

    SQL>create database link lnk_pri connect to system identified by password using ‘primary’;

    三、在主库端创建到数据文件目录的directory。

    SQL> create or replace directory pri_dir as ‘+DATA/TEST/datafile’;

    四、在备库端创建好备库的相应目录,比如bdump,udump等目录,另外在备库的ASM实例中创建备库的数据文件、控制文件等目录。

    SQL> alter diskgroup DATA add directory ‘+DATA/TEST/’;
    SQL> alter diskgroup DATA add directory ‘+DATA/TEST/DATAFILE’;
    SQL> alter diskgroup DATA add directory ‘+DATA/TEST/CRONTROLFILE’;
    SQL> alter diskgroup DATA add directory ‘+DATA/TEST/TEMPFILE’;

    五、在备库的中间数据库上创建好两个DIRECTORY,用于存放传递过来的数据文件和控制文件。

    SQL> create or replace directory stb_dir as ‘+DATA/TEST/datafile’;
    SQL> create or replace directory stb_ctl_dir as ‘+DATA/TEST/controlfile’;

    六、在中间数据库开始传输数据文件。
    由于是在线配置STANDBY,在传输数据文件之前,必须先在主库把相应的表空间置于恢复模式,然后利用dbms_file_transfer进行数据文件的传输,最后再把相应的表空间置为正常状态:

    SQL> conn sys/password@lnk_pri as sysdba
    SQL> alter tablespace system begin backup;
    SQL> conn /as sysdba
    SQL>begin
    dbms_file_transfer.get_file(
    source_directory_object => ‘ pri_dir ‘,
    source_file_name => ‘ system.286.650339101′,
    destination_directory_object => ‘ stb_dir ‘,
    destination_file_name => ‘ system01.dbf ‘,
    source_database => ‘lnk_pri’);
    end;
    /
    SQL> conn sys/password@lnk_pri as sysdba
    SQL> alter tablespace system end backup;

    这样依次对主库的每个数据文件进行处理传递后,主库上的数据文件都会传递至备库的ASM磁盘组上。
    七、 传输备库的控制文件。
    首先在主库端生成备库的控制文件:

    SQL> alter database create standby controlfile as ‘+DATA/TEST/datafilefile/standby.ctl’;

    如果是克隆数据库的话,那么生成一个普通备份控制文件即可:

    SQL> alter database backup controlfile to ‘+DATA/TEST/datafilefile/standby.ctl’;

    然后传输控制文件:

    SQL>begin
    dbms_file_transfer.get_file(
    source_directory_object => ‘ pri_dir ‘,
    source_file_name => ‘ standby.ctl’,
    destination_directory_object => ‘ stb_ctl_dir ‘,
    destination_file_name => ‘ control01.ctl ‘,
    source_database => ‘lnk_pri’);
    end;
    /

    八、 配置备用库。

    首先配置好备库的参数文件,并且配置好主库和备库的TNS,接下就可以配置备用库了:
    启动备库至mount状态

    SQL > startup nomount
    SQL > alter database mount standby database;

    如果是配置克隆数据库的话,则直接将数据库MOUNT就行:

    SQL > alter database mount;

    执行RMAN的catalog命令,以使控制文件能够识别传输过来的数据文件:

    RMAN> catalog start with ‘+DATA/TEST/DATAFILE’;

    然后将这些数据文件转换为备库的数据文件:

    RMAN >switch database to copy;

    如果是配置DATA GUARD的话,则可以将备库置为恢复模式:

    SQL > alter database recover managed standby database disconnect from session;

    如果是配置克隆数据库的话,那么直接恢复数据库并打开:

    SQL >recover database until cancel;
    SQL >alter database open resetlogs;

    这样DATA GUARD和克隆数据库就配置完成了。最后可以把中间操作创建的directory,DB LINK和中间数据库删除掉。

    May 14

    利用DBMS_FILE_TRANSFER传输数据库文件

    从Oracle 10g开始,Oracle提供了DBMS_FILE_TRANSFER这么一个程序包,可以方便地在本地数据库和远程数据库,ASM和文件系统间传输数据库文件。这样数据库文件的传输就方便了许多,尤其是在传输基于ASM存储的数据文件时,不再局限于利用RMAN来进行传输。下面介绍一下这个包的用法。

    DBMS_FILE_TRANSFER包一共包含了3个存储过程,分别提供本机之间、本机从远程主机抓取以及本机上传至远程主机三种传输数据库文件的功能。要求传输用户有对源目录读和对目标目录写的权限,单个数据库文件必须是512字节的整数倍并且文件大小必须小于或者等于2TB。

    1、COPY_FILE。可以在数据库本机的文件系统之间,ASM磁盘组之间或者文件系统和ASM磁盘组之间方便地传输数据库文件。

    DBMS_FILE_TRANSFER.COPY_FILE(
    source_directory_object IN VARCHAR2,–源目录
    source_file_name IN VARCHAR2,–源文件名
    destination_directory_object IN VARCHAR2,–目标目录
    destination_file_name IN VARCHAR2);–目标文件名

    SQL> create directory data as ‘+DATA/HELLODB/DATAFILE’;
    SQL> create directory test as ‘+TEST/HELLODB/DATAFILE’;
    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST’,’system.dbf’)
    ASMCMD> ls -a
    +TEST/HELLODB/DATAFILE/system.dbf => COPY_FILE.256.654701983

    2、GET_FILE。从远程数据库读取数据库文件并在本机的文件系统或者ASM磁盘组上创建一份复制文件。

    DBMS_FILE_TRANSFER.GET_FILE(
    source_directory_object IN VARCHAR2,
    source_file_name IN VARCHAR2,
    source_database IN VARCHAR2, –到远程数据库的db link名
    destination_directory_object IN VARCHAR2,
    destination_file_name IN VARCHAR2);

    begin
    DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘lnk_test’,’TEST1′,’system.dbf’);
    end;
    /

    3、PUT_FILE。在本地数据库将数据库文件传输至远程数据库的文件系统或者ASM磁盘组。

    DBMS_FILE_TRANSFER.PUT_FILE(
    source_directory_object IN VARCHAR2,
    source_file_name IN VARCHAR2,
    destination_directory_object IN VARCHAR2,
    destination_file_name IN VARCHAR2,
    destination_database IN VARCHAR2); –到目标数据库的db link名

    begin
    DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST2′,’system.dbf’, ‘lnk_test’);
    end;
    /

    May 07

    Qlogic Infiniband RDS高速互联驱动程序安装及配置

    在配置基于RDS协议的Infiniband高速内部互联的RAC数据库方案时,第一步必须是安装好驱动程序并配置好内部互联的IP地址,保证内部互联配置完成,才能进行下一步的RAC数据库安装和创建。下面简要介绍一下Infiniband安装配置的过程:
    一、首先删除操作系统自带的OFED模块,否则在日后的使用中,可能会和后续安装的Infiniband驱动程序发生冲突:

    #rm -rf /lib/modules/2.6.9-55.ELlargesmp/kernel/drivers/infiniband
    #rm -rf /usr/src/kernels/2.6.9-55.EL-largesmp-x86_64/drivers/infiniband

    这里面的2.6.9-55.Ellargesmp是LINUX的内核版本号,根据安装机器的OS内核而定。重启服务器,执行lsmod 去检查OFED是否还在运行。

    二、编译Infiniband安装程序:
    将InfiniServ安装文件COPY至相应目录,解压并编译:

    #cd /u01
    #tar –zxvf InfiniServ. 4.1.0.2.2.tgz
    #cd InfiniServ. 4.1.0.2.2/ALL_HOST
    #./do_build

    编译完成后,该OS上的Ininiband安装文件即可生成,对应安装文件在/u01/InfiniServ.4.1.0.2.2/ALL_HOST/release/redhat/X86_64/InfiniServ.4.1.0.2.2G里面。
    三、 安装Infiniband安装程序:

    #cd /u01/InfiniServ.4.1.0.2.2/ALL_HOST/release/redhat/X86_64/InfiniServ.4.1.0.2.2G
    #.INSTALL

    屏幕显示如下画面:

    SilverStorm Technologies Inc. InfiniBand 4.1.0.2.2 G Software

    1) Install/Uninstall Software
    2) Reconfigure IP over IB
    3) Reconfigure Driver Autostart
    4) Update HCA Firmware
    5) Generate Supporting Information for Problem Report
    6) Host Setup via Fast Fabric
    7) Host Admin via Fast Fabric
    8 ) Chassis Admin via Fast Fabric
    9) Externally Managed Switch Admin via Fast Fabric

    X) Exit

    选择“1”,屏幕显示如下画面:

    SilverStorm Technologies Inc. IB Install (4.1.0.2.2G release) Menu

    Please Select Install Action:

    0) IB Network Stack [ Install ] [Available]
    1) IB Development [ Install ] [Available]
    2) IB Boot [ Install ] [Available]
    3) Fast Fabric [ Install ] [Available]
    4) Virtual HBA (SRP) [ Install ] [Available]
    5) Virtual NIC [ Install ] [Available]
    6) IP over IB [ Install ] [Available]
    7) MPI Runtime [ Install ] [Available]
    8 ) MPI Development [ Install ] [Available]
    9) MPI Source [ Install ] [Available]
    a) uDAPL [ Install ] [Available]
    b) SDP [ Install ] [Available]
    c) RDS [ Install ] [Available]

    P) Perform the selected actions
    I) Install All
    U) Uninstall All

    X) Return to Previous Menu (or ESC)

    上图中显示,P:执行选择的项
    I:全部安装以上11项
    U:全部卸载以上11项
    选择安装某项的方法如下:
    例如要安装IB Network Stack项,我们可以通过在键盘上敲击IB Network Stack前面的数字0,来切换到Install提示(此处提示共有Install,Do Not Install或Up To Date三种选择)。
    如果HPC应用,只需选择0,1,3,6,7,8,9,b项进行安装即可。
    如果使用RDS for Oracle应用, 选择全部进行安装即可
    如果使用IPOIB for Oracle应用,选择0,1,3,6 进行安装就可以。
    选择各项为Install提示后,
    输入”P”,执行,系统出现如下画面:

    ——————————————————————————-
    Installing IB Network Stack…
    Adding module dependencies…
    Adding memory locking limits…
    Copying ibt.ko…
    Copying ics_dsc.ko…
    Copying 82808XA.ko…
    Copying mt23108vpd.ko…
    Copying mt25218vpd.ko…
    Creating IB Network Stack (iba) system startup files…
    Creating IB Port Monitor (iba_mon) system startup files…
    ——————————————————————————-
    Installing IB Development…
    ——————————————————————————-
    Installing Fast Fabric…
    ——————————————————————————-
    Installing IP over IB Driver…
    Copying ipoib.ko…
    Assign IP over IB static IPV4 addresses now? [n]: y
    提示是否配置IPOIB,输入”y”,出现如下画面:
    You may configure an IP over IB interface for each IB port
    Or you may select to have IP over IB only run on some IB ports
    Or you may select to configure redundant IB ports with a
    pair of IB ports running a single IP over IB interface
    How many IP over IB interfaces would you like to configure? [1]:

    提示需要配置多少个ip,默认为1个,如果我们只需设置1个IP地址,直接回车或输入“1”回车,屏幕出现如下画面:

    Preparing to create IP over IB ifcfg files in /etc/sysconfig/network-scripts
    Assign interface names sequentially starting with ib1? [y]:
    Assign Internet Addresses sequentially from a base IP address? [y]:
    Enter IPV4 address in dot notation for ib1: 192.168.100.145
    Is IPV4 address ‘192.168.100.145′ correct? (y/n): y
    Enter IPV4 netmask in dot notation for ib1 192.168.100.145 [255.255.255.0]:
    Creating ifcfg-ib1 for 192.168.100.145 mask 255.255.255.0

    IP over IB requires /etc/sysconfig/ipoib.cfg specify parameters
    for each IP over IB device.
    The default configuration file provides for a 2 port redundant configuration.
    If you desire a different configuration for IP over IB, Manually edit the file.
    Hit any key to continue…

    根据屏幕提示输入:
    Assign interface names sequentially starting with ib1? [y]:
    提示是否要将IB接口名称设定为ib1, 直接回车或键入 y 回车.
    Assign Internet Addresses sequentially from a base IP address? [y]:
    提示是否要分配一个IP地址,直接回车或键入 y 回车.
    在提示Enter IPV4 address in dot notation for ib1: 键入 IP 地址xxx.xxx.xxx.x并回车
    在提示 Is IPV4 address ‘xxx.xxx.xxx.x’ correct? (y/n): 键入y并回车.
    在提示 Enter IPV4 netmask in dot notation for ib1 xxx.xxx.xxx.x [255.255.255.0]: 回车 以设置默认值 (255.255.255.0).

    敲入任何键,继续:

    Creating IP over IB (ipoib) system startup files…
    ——————————————————————————-
    Installing MPI Runtime…
    Make links for mpd in ///opt/iba/bin
    Make links for mpd in ///usr/local/bin
    ——————————————————————————-
    Installing MPI Development…
    ——————————————————————————-
    Installing MPI Source…
    ——————————————————————————-
    Installing uDAPL…
    Copying udapl_module.ko…
    Creating uDAPL (udapl) system startup files…
    ——————————————————————————-
    Installing SDP Driver…
    Copying ics_offload.ko…
    Copying ics_sdp.ko…
    Creating SDP (ics_sdp) system startup files…

    Enable IB Network Stack (iba) to autostart? [y]:
    Enable IB Port Monitor (iba_mon) to autostart? [y]:
    Enable IP over IB (ipoib) to autostart? [y]:
    Enable uDAPL (udapl) to autostart? [y]: n
    Enable SDP (ics_sdp) to autostart? [y]: n
    Hit any key to continue…

    在提示 Enable xxx to autostart? [y]: 键入 Y或N 回车,屏幕显示如下图:

    Generating module dependencies…
    Updating HCA Firmware …
    Select HCAs to Update:
    1) HCA 1 (23108 Rev a1 psid “MT_0030000001″ Node GUID: 0×00066a0098004c15)
    Selection (a for all, n for none) [a]:

    提示是否更新HCA firmware 版本,输入 n , 回车,屏幕出现最初画面:

    SilverStorm Technologies Inc. InfiniBand 4.1.0.2.2G Software

    1) Install/Uninstall Software
    2) Reconfigure IP over IB
    3) Reconfigure Driver Autostart
    4) Update HCA Firmware
    5) Generate Supporting Information for Problem Report
    6) Host Setup via Fast Fabric
    7) Host Admin via Fast Fabric
    8 ) Chassis Admin via Fast Fabric
    9) Externally Managed Switch Admin via Fast Fabric

    X) Exit

    敲入“x”退出安装。

    5) 重新启动系统
    #reboot
    6) 重新启动系统后,检查HCA驱动是否正常启动
    #lsmod
    显示如下图:

    o ipoib
    o mt23108vpd
    o ics_dsc
    o ics_offload
    o ibt
    o scsi_mod
    o ics_sdp

    至此,此节点的Infiniserv软件安装完成。

    May 06

    Linux上如何不重启识别新存储

    上周在一台生产机器上添加了一台新存储,并且成功不重启就识别了新添加的LUN。关于如何LINUX不重启如何识别新的LUNFenng有过一篇文章介绍过了:Linux 如何不重启而识别新增的 LUN,除了QLogic FC HBA LUN Scan Utility这个脚本,还有其他方式可以也可以识别,具体可以看Fenng BLOG中的回复。这里面简要介绍一下存储的配置过程,我添加的存储是EMC CX700,以此为例。在布好光纤线,配置好光纤交换机的ZONE之后,需要把主机的/etc/Navisphere/agent.config文件里面添加新存储的IP地址,然后重启NaviagentNaviagent重启的话对于主机现有的存储访问是没有影响的,如果不重启,那么在存储端也是可以看到主机信息的,不过并不会有主机名等详细信息的,需要用户手工添加注册信息。然后就在存储里面配置storage group,把要访问的LUN和主机设置好,按Fenng BLOG中步骤运行QLogic FC HBA LUN Scan Utility主机上powermt config一下,就识别到新的存储了。值得一提的是,在我的环境中,新添加的LUN没有具体的LUN编号,这个对于使用还是有些麻烦的。