当前位置:  编程技术>php
本页文章导读:
    ▪Oracle Faq(Oracle TAF的配置)       如需转载,请注明出处!(刁馋在此先谢过了……)Oracle TAF的配置TAF为Transparent Application FailOver的缩写,一般应用TAF都是在OPS/RAC环境中。从8i开始有的这一功能,目的和.........
    ▪Oracle Faq(如何在ORACLE中更改表的列名和顺序 )       如需转载,请注明出处!用过ORACLE的人都知道,要想在ORACLE中更改表的列名和顺序可是一件很烦琐的事,下面给大家提供一种简单的方法。SQL> select object_id from all_objects.........
    ▪Oracle Faq(Oracle的字符集问题)       1、在建库时,catproc一定要运行,否则用rman时会出现如下字符集的错误:RMAN-00554: initialization of internal recovery manager package failedRMAN-04005: error from target database: ORA-06553: PLS-213.........

[1]Oracle Faq(Oracle TAF的配置)
    来源: 互联网  发布时间: 2013-11-30

如需转载,请注明出处!(刁馋在此先谢过了……)
Oracle TAF的配置

TAF为Transparent Application FailOver的缩写,一般应用TAF都是在OPS/RAC环境中。从8i开始有的这一功能,目的和想法都是很好的,但目前应用还很有限,本文将针对TAF相关问题作个详细探讨。

本文的测试环境是Tru64 V5.1+ Oracle9.2.0.1 RAC。

一、相关参数的说明

说实话oracle关于网络的几个配置参数真的是太乱了,很多人都弄不清到底是怎么回事,常见的错误为:
"ORA-12514 :TNS:listener could not resolve SERVICE_NAME given in connect descriptor" 和
"ORA-12154 :TNS: Could not resolve service name"
实质都是一样的,要解决这样的问题需要我们弄情几个参数:

initsid.ora中的几个参数:
DB_NAME --- database name,即建数据库时所提供的名称。
GLOBAL_NAMES --- True/false,设定是否使用数据库域名。
DB_DOMAIN --- 数据库域名,如果GLOBAL_NAMES=True则要求提供这个参数。
SERVICE_NAMES --- service names list,服务名称,可以有多个。

INSTANCE_NAME --- instance name,和SERVICE_NAMES一样从817开始支持,即从817开始可以将数据库、实例和服务名称分开。默认instance_name的值为instance的SID,即环境变量ORACLE_SID所对应的值。在817以前没有instance_name参数时,不同的instance是以SID来区分的。按照oracle817以后的文档解释:SID是为了区别同一主机上各instance的共享内存,并不是instance的唯一区别标示,而instance_name则是区别各个instance的。

环境变量:
ORACLE_SID --- 在817以前没有instance_name参数时,不同的instance是以SID来区分的(详细说明见上面的initsid.ora参数解释)。

listener.ora中的几个参数:
GLOBAL_DBNAME --- 全局数据库名称,在分布式环境中唯一确定不同的数据库。它的值为initsid.ora中DB_NAME和DB_DOMAIN的组合,即GLOBAL_DBNAME=DB_NAME.DB_DOMAIN,其中DB_DOMAIN如果没有设此处也就不需要了。这个参数在分布式环境中建议明确指定。
SERVICE_NAME --- 服务名称,取initsid.ora中service_names list至一即可。
SID_NAME --- 对应环境变量ORACLE_SID的值。
INSTANCE_NAME ---对应初始化参数instance_name。

tnsnames.ora中的几个参数:
service_name --- 服务名称,取initsid.ora中service_names list至一即可。
sid_name --- 可以简写成:sid,对应ORACLE_SID,也可以是初始化参数instance_name,当等于instance_name且instance_name不等于ORACLE_SID时,oracle会自动注册一个监听进程,此用以区分不同的instance。
instance_name --- 从817开始有了这个新的参数可以使用,对应初始化参数instance_name。

这样一来,参数就很复杂了,不过我们实际使用并不会用当然十月简单越好了。

二、相关参数设置

下面我将举例说明相关参数的设置:
1、环境变量:ORACLE_SID=rac1/2

2、initsid.ora:
db_name=ora92
service_names = ora92
instance_name=rac1/2
global_names=false
db_domain=""

3、listener.ora:
SID_LIST_RAC1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora92)
(ORACLE_HOME = /oracle/oracle9/app/oracle/product/9.2.0)
(SERVICE_NAME=ora92)(SID_NAME = rac1)
)
)

SID_LIST_RAC2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora92)
(ORACLE_HOME = /oracle/oracle9/app/oracle/product/9.2.0)
(SERVICE_NAME=ora92)(SID_NAME = rac2)
)
)

RAC1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.3.1)(PORT = 1522))
)
)
)

RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.3.2)(PORT = 1522))
)
)
)

三、TAF的设置
其实TAF设置很简单,在tnsnames.ora中添加failover=on即可,有两种不同的设置方法:
1、公用一个tns name方式:==================================================
myrac =
(description=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.1)(port=1522))
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)(retries=20)(delay=20))
)
)
==========================================================================

2、指明instance backup方式:===============================================
rac1 =
(description=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.1)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac2)(retries=20)(delay=20))
)
)

rac2 =
(description=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac1)(retries=20)(delay=20))
)
)
==========================================================================

四、TAF测试方法
一般可以将当前连接的instance down下来,client端将不会断开,并自动切换到backup节点上。相反也会自动切换回来。

当然也有人提出用post_transaction的方式来测试TAF,其实这样有时是得不到预期结果的,原因在于Oracle连接到一个instance上后,此后它会优先尝试对该instance的连接,当你disconnect后,client端一有新的请求就会自动尝试对最近连接的instance进行连接,如果不成功才会尝试对backup instance进行连接。






    
[2]Oracle Faq(如何在ORACLE中更改表的列名和顺序 )
    来源: 互联网  发布时间: 2013-11-30

如需转载,请注明出处!
用过ORACLE的人都知道,要想在ORACLE中更改表的列名和顺序可是一件很烦琐的事,下面给大家提供一种简单的方法。

SQL> select object_id from all_objects where owner='SCOTT' and object_name='T1';

OBJECT_ID
----------
6067
SQL> select obj#,col#,name from sys.col$ where obj#=6067;

OBJ# COL#
---------- ----------
NAME
------------------------------------------------------------
6067 1
ID

6067 2
NAME

SQL> update sys.col$ set name='NEW_ID' ,col#=3 where obj#=6067 and name='ID';

1 row updated.

SQL> update sys.col$ set name='MY_NAME',col#=1 where obj#=6067 and name='NAME';

1 row updated.

SQL> update sys.col$ set col#=2 where obj#=6067 and col#=3;

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from scott.t1;

ID NAME
---------- --------------------
3 cheng
2 yong
1 xin
2 gototop
1 topcio
2 yongxin
1 cyx

7 rows selected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 128159368 bytes
Fixed Size 732808 bytes
Variable Size 117440512 bytes
Database Buffers 8388608 bytes
Redo Buffers 1597440 bytes
Database mounted.
Database opened.
SQL> select * from scott.t1;

MY_NAME NEW_ID
-------------------- ----------
cheng 3
yong 2
xin 1
gototop 2
topcio 1
yongxin 2
cyx 1

7 rows selected.

到此为止我们已经把SCOTT.T1表中的列名和顺序都给该了,如果你只想改变顺序而不想改变列名,只需再进行UPDATE就可以了,之所以不能一次完成是因为SYS.COL$中COL#,NAME都是UNIQUE的。

这种方法虽然存在一定风险,但对于特别大的表效果是很明显的,而用一般的方法将需要更多的存储空间、回滚段和时间开销。 

    
[3]Oracle Faq(Oracle的字符集问题)
    来源: 互联网  发布时间: 2013-11-30

1、在建库时,catproc一定要运行,否则用rman时会出现如下字符集的错误:
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database: ORA-06553: PLS-213: package STANDARD noe
RMAN-04015: error setting target database character set to ZHS16CGB231280
如果建库时没有问题,那么可以Re-run catproc.sql. This will in turn call the dbmsbkrs.sql script which creates the dbms_backup_restore package.

2、中文字符集说明
ZHS16CGB231280 CGB2312-80 16-bit Simplified Chinese MB, ASCII
ZHS16GBK GBK 16-bit Simplified Chinese MB, ASCII, UDC
简单地说ZHS16GBK是ZHS16CGB231280的超集。
一九九○年中国、日本、韩国共同制定的统一东亚表意文字字符集,即常称的国标扩展码字符集(GBK)。

3、如何避免中文支持问题
我们的一贯建议是在建库时就做好规划,这样以后就不会有问题了。
1)create database
character set ZHS16GBK
national character set ZHS16GBK
2)环境变量:NLS_LANG=american_america.ZHS16GBK
最好export NL2004-10-20_FORMAT='YYYY-MM-DD HH24:MI:SS'指明日期格式;
3)如果建库时指定了props$中characterset肯定就是ZHSS16GBK了:
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET ZHS16GBK
如果不是可以使用update改变,但这样做对于已有数据会有影响,甚至会导致整个数据库不能用,所以还是在建库之后就进行验证,一个好的DBA就是能够尽量避免问题的发生,而不是等到出了问题再去救火。

如此一来就不会再有字符集和中文支持的问题了。还有问题吗?和我联系:)


 

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
.net/c#/asp.net iis7站长之家
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3