• RAC修改字符集


    字符集修改做过几次了,这次感觉还是有点不顺,走了弯路,再记一遍
    【概况】
    准备搭建RAC+RAC DG,发现两端字符集不大一致,担心到时出问题。

    【目标】
    将备库NLS_NCHAR_CHARACTERSET修改成与主库一致。
    --备
    NLS_NCHAR_CHARACTERSET UTF8
    修改为
    --主
    NLS_NCHAR_CHARACTERSET AL16UTF16

    0、备库 修改前
    PRIMARY-SYS@TESTDB2>set pagesize 100
    PRIMARY-SYS@TESTDB2>col value$ for a30
    PRIMARY-SYS@TESTDB2>select name,value$ from props$ where name like '%NLS%';

    NAME VALUE$
    ------------------------------------------------------------------------------------------ ------------------------------
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICA
    NLS_CURRENCY $
    NLS_ISO_CURRENCY AMERICA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CHARACTERSET ZHS16GBK
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD-MON-RR
    NLS_DATE_LANGUAGE AMERICAN
    NLS_SORT BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY $
    NLS_COMP BINARY
    NLS_LENGTH_SEMANTICS BYTE
    NLS_NCHAR_CONV_EXCP FALSE
    NLS_NCHAR_CHARACTERSET UTF8
    NLS_RDBMS_VERSION 11.2.0.4.0

    20 rows selected.

    1、节点2 先停掉,在节点1修改完成后再启动
    [root@NODE2 ~]# ls -l /u01/app/11.2.0/grid/bin/crsctl
    -rwxr-xr-x 1 root oinstall 8576 Jan 13 2017 /u01/app/11.2.0/grid/bin/crsctl
    [root@NODE2 ~]#
    [root@NODE2 ~]# /u01/app/11.2.0/grid/bin/crsctl stop cluster
    CRS-2673: Attempting to stop 'ora.crsd' on 'NODE2'
    CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on 'NODE2'
    CRS-2673: Attempting to stop 'ora.LISTENER_SCAN1.lsnr' on 'NODE2'
    CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'NODE2'
    CRS-2673: Attempting to stop 'ora.CRSDG.dg' on 'NODE2'
    CRS-2673: Attempting to stop 'ora.TESTDB.db' on 'NODE2'
    CRS-2677: Stop of 'ora.LISTENER_SCAN1.lsnr' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.scan1.vip' on 'NODE2'
    CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.NODE2.vip' on 'NODE2'
    CRS-2677: Stop of 'ora.scan1.vip' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.scan1.vip' on 'NODE1'
    CRS-2677: Stop of 'ora.NODE2.vip' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.NODE2.vip' on 'NODE1'
    CRS-2677: Stop of 'ora.TESTDB.db' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.DATA.dg' on 'NODE2'
    CRS-2673: Attempting to stop 'ora.FRA.dg' on 'NODE2'
    CRS-2677: Stop of 'ora.DATA.dg' on 'NODE2' succeeded
    CRS-2677: Stop of 'ora.FRA.dg' on 'NODE2' succeeded
    CRS-2676: Start of 'ora.scan1.vip' on 'NODE1' succeeded
    CRS-2672: Attempting to start 'ora.LISTENER_SCAN1.lsnr' on 'NODE1'
    CRS-2676: Start of 'ora.NODE2.vip' on 'NODE1' succeeded
    CRS-2676: Start of 'ora.LISTENER_SCAN1.lsnr' on 'NODE1' succeeded
    CRS-2677: Stop of 'ora.CRSDG.dg' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.asm' on 'NODE2'
    CRS-2677: Stop of 'ora.asm' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.ons' on 'NODE2'
    CRS-2677: Stop of 'ora.ons' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.net1.network' on 'NODE2'
    CRS-2677: Stop of 'ora.net1.network' on 'NODE2' succeeded
    CRS-2792: Shutdown of Cluster Ready Services-managed resources on 'NODE2' has completed
    CRS-2677: Stop of 'ora.crsd' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.ctssd' on 'NODE2'
    CRS-2673: Attempting to stop 'ora.evmd' on 'NODE2'
    CRS-2673: Attempting to stop 'ora.asm' on 'NODE2'
    CRS-2677: Stop of 'ora.evmd' on 'NODE2' succeeded
    CRS-2677: Stop of 'ora.asm' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.cluster_interconnect.haip' on 'NODE2'
    CRS-2677: Stop of 'ora.cluster_interconnect.haip' on 'NODE2' succeeded
    CRS-2677: Stop of 'ora.ctssd' on 'NODE2' succeeded
    CRS-2673: Attempting to stop 'ora.cssd' on 'NODE2'
    CRS-2677: Stop of 'ora.cssd' on 'NODE2' succeeded
    [root@NODE2 ~]#

    2、节点1

    PRIMARY-SYS@TESTDB1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string +DATA/TESTDB/parameterfile/spf
    ile.344.1016736315
    PRIMARY-SYS@TESTDB1>create pfile from spfile;
    --这样的话就直接修改上面生成的pfile文件中cluster_database=false 用pfile mount +修改INTERNAL_USE + open ,然后再创建spfile共节点2一起使用

    --下面没必要修改spfile,保持spfile(两节点共享的)中cluster_database=TRUE
    --alter system set cluster_database=false;
    PRIMARY-SYS@TESTDB1>alter system set cluster_database=false scope=spfile;

    System altered.

    --需要【重启】才能生效,尽管上面已经修改了
    PRIMARY-SYS@TESTDB1>show parameter cluster_database

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    cluster_database boolean TRUE
    cluster_database_instances integer 2
    PRIMARY-SYS@TESTDB1>shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    --mv initTESTDB1.ora initTESTDB1.ora.bak,最后又mv回来了,没改回就报下面的错了
    PRIMARY-SYS@TESTDB1>startup mount;
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_home1/dbs/initTESTDB1.ora'

    PRIMARY-SYS@TESTDB1>startup mount;
    ORACLE instance started.

    Total System Global Area 7.4826E+10 bytes
    Fixed Size 2261048 bytes
    Variable Size 4.6976E+10 bytes
    Database Buffers 2.7649E+10 bytes
    Redo Buffers 199049216 bytes
    Database mounted.
    PRIMARY-SYS@TESTDB1>ALTER SYSTEM ENABLE RESTRICTED SESSION;

    System altered.

    PRIMARY-SYS@TESTDB1>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

    System altered.

    PRIMARY-SYS@TESTDB1>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

    System altered.

    PRIMARY-SYS@TESTDB1>ALTER DATABASE OPEN;

    Database altered.
    --这一步是【重点要修改的】
    PRIMARY-SYS@TESTDB1>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;

    Database altered.

    --pfile启动了,没法修改spfile了
    PRIMARY-SYS@TESTDB1>alter system set cluster_database=true scope=spfile sid='*';
    alter system set cluster_database=true scope=spfile sid='*'
    *
    ERROR at line 1:
    ORA-32001: write to SPFILE requested but no SPFILE is in use


    PRIMARY-SYS@TESTDB1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string

    --手动修改initTESTDB1.ora中的cluster_database=true,重建spfile
    PRIMARY-SYS@TESTDB1>create spfile from pfile='/u01/app/oracle/product/11.2.0/db_home1/dbs/initTESTDB1.ora';

    File created.

    PRIMARY-SYS@TESTDB1>shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    PRIMARY-SYS@TESTDB1>startup mount;
    ORACLE instance started.

    Total System Global Area 7.4826E+10 bytes
    Fixed Size 2261048 bytes
    Variable Size 4.6976E+10 bytes
    Database Buffers 2.7649E+10 bytes
    Redo Buffers 199049216 bytes
    Database mounted.
    --还得改回去,0->1
    PRIMARY-SYS@TESTDB1>ALTER SYSTEM DISABLE RESTRICTED SESSION;

    System altered.

    PRIMARY-SYS@TESTDB1>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=1;

    System altered.

    PRIMARY-SYS@TESTDB1>ALTER SYSTEM SET AQ_TM_PROCESSES=1;

    System altered.

    PRIMARY-SYS@TESTDB1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string /u01/app/oracle/product/11.2.0
    /db_home1/dbs/spfileTESTDB1.or
    a
    PRIMARY-SYS@TESTDB1>alter system set cluster_database=true scope=spfile sid='*';

    System altered.

    PRIMARY-SYS@TESTDB1>alter database open;

    Database altered.


    --cluster_database【重启】才生效

    PRIMARY-SYS@TESTDB1>show parameter cluster_database

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    cluster_database boolean FALSE
    cluster_database_instances integer 1
    PRIMARY-SYS@TESTDB1>shut immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    PRIMARY-SYS@TESTDB1>
    PRIMARY-SYS@TESTDB1>
    PRIMARY-SYS@TESTDB1>
    PRIMARY-SYS@TESTDB1>startup
    ORACLE instance started.

    Total System Global Area 7.4826E+10 bytes
    Fixed Size 2261048 bytes
    Variable Size 4.9392E+10 bytes
    Database Buffers 2.5233E+10 bytes
    Redo Buffers 199049216 bytes
    Database mounted.
    Database opened.
    PRIMARY-SYS@TESTDB1>show parameter cluster_database

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    cluster_database boolean TRUE
    cluster_database_instances integer 2
    PRIMARY-SYS@TESTDB1>

    PRIMARY-SYS@TESTDB1>set pagesize 100
    PRIMARY-SYS@TESTDB1>col value$ for a30
    PRIMARY-SYS@TESTDB1>select name,value$ from props$ where name like '%NLS%';

    NAME VALUE$
    ------------------------------------------------------------------------------------------ ------------------------------
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICA
    NLS_CURRENCY $
    NLS_ISO_CURRENCY AMERICA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CHARACTERSET ZHS16GBK
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD-MON-RR
    NLS_DATE_LANGUAGE AMERICAN
    NLS_SORT BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY $
    NLS_COMP BINARY
    NLS_LENGTH_SEMANTICS BYTE
    NLS_NCHAR_CONV_EXCP FALSE
    --发现已【修改】成功
    NLS_NCHAR_CHARACTERSET AL16UTF16
    NLS_RDBMS_VERSION 11.2.0.4.0

    20 rows selected.

    PRIMARY-SYS@TESTDB1>


    3、第二个节点启动
    [root@NODE2 ~]# /u01/app/11.2.0/grid/bin/crsctl start cluster
    CRS-2672: Attempting to start 'ora.cssdmonitor' on 'NODE2'
    CRS-2676: Start of 'ora.cssdmonitor' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.cssd' on 'NODE2'
    CRS-2672: Attempting to start 'ora.diskmon' on 'NODE2'
    CRS-2676: Start of 'ora.diskmon' on 'NODE2' succeeded
    CRS-2676: Start of 'ora.cssd' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.ctssd' on 'NODE2'
    CRS-2676: Start of 'ora.ctssd' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.evmd' on 'NODE2'
    CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'NODE2'
    CRS-2676: Start of 'ora.evmd' on 'NODE2' succeeded
    CRS-2676: Start of 'ora.cluster_interconnect.haip' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.asm' on 'NODE2'
    CRS-2676: Start of 'ora.asm' on 'NODE2' succeeded
    CRS-2672: Attempting to start 'ora.crsd' on 'NODE2'
    CRS-2676: Start of 'ora.crsd' on 'NODE2' succeeded

    --设置了自动重启,所以失败。。。
    PRIMARY-SYS@TESTDB2>startup mount
    ORA-10997: another startup/shutdown operation of this instance inprogress
    ORA-09968: unable to lock file
    Linux-x86_64 Error: 11: Resource temporarily unavailable
    Additional information: 169786
    。。。自启动了。。。

    --稍等发现已启动OK
    PRIMARY-SYS@TESTDB2>select inst_id,instance_name,status from gv$instance;

    INST_ID INSTANCE_NAME STATUS
    ---------- ------------------------------------------------ ------------------------------------
    2 TESTDB2 OPEN
    1 TESTDB1 OPEN

    2 rows selected.

    自此两个节点都OK了


    【总结】
    上面可能说的有点乱,捋一捋。。。不知道说的对不对
    0、做事之前要盘算计划好,眼高手低是技术一大障碍,说来都很美好,做起来总不是那么一帆风顺的,稍微一个错误浪费的时间比事前多花点时间准备好多了,当然牛人除外,能够及时处理。
    1、根据节点1生成的pfile,修改cluster_database=false启动修改,然后再改回来是不是少点麻烦
    2、修改字符集要关闭一个节点,在另外一个节点修改,修改前要把这个节点的cluster_database改成false(别改spfile,spfile是两个节点公用的,改了等下又要改回来,重复工作!),重启(才生效),修改时按照上面mount之后操作即可,修改后再把0改成1,cluster_database再改成true,重启(生效),启动节点2(还是修改之前的spfile额,cluster_database仍为true),结束。


    【小插曲】两节点不从ASM中的spfile启动了
    PRIMARY-SYS@DINPAY1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string /u01/app/oracle/product/11.2.0
    /db_home1/dbs/spfileDINPAY1.or
    a
    PRIMARY-SYS@DINPAY1>create pfile from spfile;

    File created.

    PRIMARY-SYS@DINPAY1>create spfile from pfile='/u01/app/oracle/product/11.2.0/db_home1/dbs/initDINPAY1.ora';
    create spfile from pfile='/u01/app/oracle/product/11.2.0/db_home1/dbs/initDINPAY1.ora'
    *
    ERROR at line 1:
    ORA-32002: cannot create SPFILE already being used by the instance

    PRIMARY-SYS@DINPAY1>shut immediate

    PRIMARY-SYS@DINPAY1>startup pfile='/u01/app/oracle/product/11.2.0/db_home1/dbs/initDINPAY1.ora';

    PRIMARY-SYS@DINPAY1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string
    PRIMARY-SYS@DINPAY1>create spfile='+data' from pfile='/u01/app/oracle/product/11.2.0/db_home1/dbs/initDINPAY1.ora';

    File created.
    PRIMARY-SYS@DINPAY1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string
    PRIMARY-SYS@DINPAY1>shut immediate

    --grid登陆查找生成spfile位置
    ASMCMD> cd +DATA/dinpay/parameterfile/
    ASMCMD> ls
    spfile.282.1016709123
    spfile.343.1016734531
    spfile.344.1016736315
    spfile.346.1025548589
    --刚刚生成的
    +DATA/dinpay/parameterfile/spfile.346.1025548589

    --更新pfile,别这样create pfile from spfile;指定pfile生成位置
    [oracle@zhjlrac1 dbs]$ pwd
    /u01/app/oracle/product/11.2.0/db_home1/dbs
    [oracle@szml02-db01 dbs]$ cat initDINPAY1.ora
    SPFILE='+DATA/dinpay/parameterfile/spfile.346.1025548589'

    PRIMARY-SYS@DINPAY1>startup
    ORACLE instance started.

    Total System Global Area 7.4826E+10 bytes
    Fixed Size 2261048 bytes
    Variable Size 4.9124E+10 bytes
    Database Buffers 2.5501E+10 bytes
    Redo Buffers 199049216 bytes
    Database mounted.
    Database opened.
    PRIMARY-SYS@DINPAY1>

    PRIMARY-SYS@DINPAY1>show parameter pfile;

    NAME TYPE VALUE
    ------------------------------------ --------------------------------- ------------------------------
    spfile string +DATA/dinpay/parameterfile/spf
    ile.346.1025548589
    另外一个节点页如上指向这个spfile,重启OK。

    如果直接使用create pfile from spfile;命令创建pfile,那么生成的pfile 文件将覆盖原有$ORACLE_HOME/dbs 目录下的pfile 文件。 而在之前的pfile文件里面值保留了一条指向spfile存放位置的记录。 这样修改之后,就会造成数据库启动时会因为找不到spfile文件而读取本地的pfile文件,而不是共享设备上的spfile文件。这样对参数管理上就会带来麻烦,也带来其他的隐患。
    所以对于RAC,要慎用 create pfile from spfile; 来创建pfile 文件, 在创建的时候,尽量指定pfile的生成位置

  • 相关阅读:
    设计模式-状态模式
    设计模式-策略模式
    Spring MVC 梳理
    Spring MVC 梳理
    设计模式-总结
    Spring boot 梳理
    Spring boot 梳理
    [DP题]最长上升子序列
    NOIP2013 Day1
    20171025日程
  • 原文地址:https://www.cnblogs.com/ritchy/p/12037919.html
Copyright © 2020-2023  润新知