系统信息:
Primary端
RAC Primary | RACDG1(主机) | RACDG2(主机) | 备注 |
Public IP | 172.20.10. 11 | 172.20.10. 12 | |
Virtual IP | 10.0.0.11 | 10.0.0.12 | |
Instance | racdg1 | racdg2 | |
DB name | RACDG | ||
DATA file | +DATA2/racdg/datafile | ||
Control file | +DATA2/racdg/controlfile +DATA1/racdg/controlfile/ | ||
Redo Log file | +DATA2/racdg/onlinelog/ db_recovery_file_dest | ||
db_unique_name | racdg | ||
service_names | racdg | ||
Oracle_Version | 11.2.0.1.0 |
Standby 端
Single instance standby | 主机名 | 备注 |
IP | 172.20.10.100 | |
Oracle_version | 11.2.0.1.0 | |
Instance | racdg | |
DB name | RACDG | |
DB_unique_name | racdg_standy | |
service_names | racdg_standy | |
DATA file | /u01/oracle/racdg_standy/datafile/ | |
Control file | /u01/app/oracle/controlfile1/ /u01/app/oracle/controlfile2/ | |
Redo Log file | /u01/oracle/racdg_standy/onlinelog3/ /u01/oracle/racdg_standy/onlinelog/ |
结构图
Standby 库类型说明
1、 PhysicalStandby Databases其特性:
Disaster recovery and high availability
Data protection
Reduction in primary database workload
Performance
Protection against additional kinds of failure
Effcient use of resource
Workload distribution
Optimized of reporting add decision supportrequirements
Minimizing downtime on software upgrade
A snapshot standby database is a type of updatable standby databasethat provides full data protection for a primary database. A snapshot standbydatabase receives and archives, but does not apply, redo data from its primarydatabase. Redo data received from the primary database is applied when asnapshot standby database is converted back into a physical standby database,after discarding all local updates to the snapshot standby database
A snapshot standby database typically diverges from its primarydatabase over time because redo data from the primary database is not appliedas it is received. Local updates to the snapshot standby database will causeadditional divergence. The data in the primary database is fully protectedhowever, because a snapshot standby can be converted back into a physicalstandby database at any time, and the redo data received from the primary willthen be applied
这段话可以看出snapshot standby DB对主库的数据完全保护,snapshot standby DB是通常对生产库不能做业务的测试和开发是一种解脱。如下这段话:
Benefits of a SnapshotStandby Database
A snapshot standby database is a fullyupdatable standby database that provides disaster recovery and data protectionbenefits that are similar to those of a physical standby database. Snapshotstandby databases are best used in scenarios where the benefit of having atemporary, updatable snapshot of the primary database justifies the increasedtime to recover from primary database failures.
The benefits of using a snapshot standbydatabase include the following:
It provides an exact replica of aproduction database for development and testing purposes, while maintainingdata protection at all times.
It can be easily refreshed to containcurrent production data by converting to a physical standby andresynchronizing.
The ability to create a snapshot standby,test, resynchronize with production, and then again create a snapshot standbyand test, is a cycle that can be repeated as often as desired. The same processcan be used to easily create and regularly update a snapshot standby forreporting purposes where read/write access to data is required.
以上可说明,对生产库的实时保护。将开发和测试的主库,转到备库。备库并将接受主库的redlog但不apply,等测试完成后,再将snapshot standby DB切换回physical standby DB,恢复之前状态。
这里配置是的physical standby database类型
准备配置环境:
配置 tnsname.ora,在tnsname.ora文件中添加如下内容,并把tnsname.ora文件复制到所有节点及standby DB中。
rac_dg1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.10.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdg)
(INSTANCE_NAME = racdg1)
)
)
rac_dg2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.10.12)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdg)
(INSTANCE_NAME = racdg2)
)
)
racdg_standy =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.10.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = racdg)
)
)
配置physical standby DB 监听:listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = PLSExtProc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.10.100)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
Preparingthe Primary Database for Standby Database Creation
EnableForced Logging (Place the primary database in FORCE LOGGING mode.)
configure redotransport authentication
Configurethe Primary Database to Receive Redo Data
Set PrimaryDatabase Initialization Parameters
EnableArchiving
Creatinga Physical Standby Database
Create a Backup Copy of the Primary Database Datafiles
Create a Control File for the Standby Database
Copy Files from the Primary System to the Standby System
Prepare an Initialization Parameter File for the Standby Database
Start the Physical Standby Database
Verify the Physical Standby Database Is Performing Properly
Primarydatabase 配置:
1、开启Force logging
SQL> ALTER DATABASE FORCE LOGGING;
执行这条语句database 至少在mounted或者open状态,而且也可能会花费很多时间来完成,因为enable forced logging要等待all unlogged write I/O 结束。
查看select force_logging from v$database;
2、Configure RedoTransport Authentication
Data Guard usesOracle Net sessions to transport redo data and control messages between themembers of a Data Guard configuration. These redo transport sessions areauthenticated using either the Secure Sockets Layer (SSL) protocol or a remotelogin password file. 这里使用password file。
在rac 节点1上创建 pwdfile
orapwdfile=/u01/app/oracle/product/11.2.0/db_1/dbs/orapwracdg1 password=FANfan1234entries=10 force=y
并将orapwracdg1复制到节点2和 standby DB 节点上并命名。
scp$ORACLE_HOME/dbs/orapwracdg1 oracle@racdg2:$ORACLE_HOME/dbs/orapwracdg2
scp$ORACLE_HOME/dbs/orapwracdg1 oracle@racdg2:$ORACLE_HOME/dbs/orapwracdg
3、Configure thePrimary Database to Receive Redo Data
这里在primary 主库做switchoverto standby db 时,再配置。
4、Set Primary DatabaseInitialization Parameters
Primary DB initialization parameter:
SQL> show parameter pfile
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string +DATA1/racdg/spfileracdg.ora
SQL>
createpfile=’/home/oracle/primary_pfile.pfile’ fromspfile=’+DATA1/racdg/spfileracdg.ora’
编辑参数:
racdg2.__db_cache_size=276824064
racdg1.__db_cache_size=276824064
racdg2.__java_pool_size=4194304
racdg1.__java_pool_size=4194304
racdg2.__large_pool_size=4194304
racdg1.__large_pool_size=4194304
racdg2.__pga_aggregate_target=339738624
racdg1.__pga_aggregate_target=339738624
racdg2.__sga_target=503316480
racdg1.__sga_target=503316480
racdg2.__shared_io_pool_size=0
racdg1.__shared_io_pool_size=0
racdg2.__shared_pool_size=209715200
racdg1.__shared_pool_size=209715200
racdg2.__streams_pool_size=0
racdg1.__streams_pool_size=0
*.audit_file_dest=‘/u01/app/oracle/admin/racdg/adump‘
*.audit_trail=‘db‘
*.cluster_database=true
*.compatible=‘11.2.0.0.0‘
*.control_files=‘+DATA2/racdg/controlfile/current.260.875118793‘,‘+DATA1/racdg/controlfile/current.256.875118799‘
*.db_block_size=8192
*.db_create_file_dest=‘+DATA2‘
*.db_domain=‘‘
*.db_name=‘racdg‘
*.db_recovery_file_dest=‘+DATA1‘
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest=‘/u01/app/oracle‘
*.dispatchers=‘(PROTOCOL=TCP)(SERVICE=racdgXDB)‘
racdg1.instance_number=1
racdg2.instance_number=2
*.log_archive_format=‘%t_%s_%r.dbf‘
*.memory_target=839909376
*.open_cursors=300
*.processes=150
*.remote_listener=‘scan.localdomain:1521‘
*.remote_login_passwordfile=‘exclusive‘
racdg2.thread=2
racdg1.thread=1
racdg2.undo_tablespace=‘UNDOTBS2‘
racdg1.undo_tablespace=‘UNDOTBS1‘
添加参数:
*.db_unique_name=racdg
*.service_names=racdg
*.log_archive_config=‘dg_config=(racdg,racdg_standy)‘
*.log_archive_dest_1=
‘location=use_db_recovery_file_dest
valid_for=(all_logfiles,all_roles)
db_unique_name=racdg‘
*.log_archive_dest_2=
‘service=racdg_standy async
valid_for=(online_logfiles,primary_role)
db_unique_name=racdg_standy‘
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_max_processes=30
*.fal_server=racdg_standy
racdg1.fal_client=racdg1
racdg2.fal_client=racdg2
*.db_file_name_convert=
‘/u01/oracle/racdg_standy/datafile/‘,‘+DATA2/racdg/datafile/‘,
‘/u01/oracle/racdg_standy/tempfile/‘,‘+DATA2/racdg/tempfile/‘
*.log_file_name_convert=
‘/u01/oracle/racdg_standy/onlinelog/‘,‘+DATA1/racdg/onlinelog/‘,
‘/u01/oracle/racdg_standy/onlinelog3/‘,‘+DATA2/racdg/onlinelog/‘
*.standby_file_management=auto
注:
这里需要注意fal_server和fal_client的配置,db_unique_name的参数设置。
创建primary DB spfile:
关闭集群
[grid@racdg1 ~]$ srvctl stop database -d racdg
[oracle@racdg1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production onTue Mar 17 18:18:09 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> createspfile=‘+DATA1/racdg/spfileracdg.ora‘ from pfile=‘/home/oracle/config.pfile‘;
File created.
启动集群:
[grid@racdg1 ~]$ srvctl start database -dracdg
启动后登陆两个节点查看参数:
在Racdg1节点查询参数:
SQL> show parameter fal
NAME TYPE VALUE
----------------------------------------------- ------------------------------
fal_client string racdg1
fal_server string racdg_standy
SQL> show parameter archive
NAME TYPE VALUE
----------------------------------------------- ------------------------------
archive_lag_target integer 0
log_archive_config string dg_config=(racdg,racdg_standy)
log_archive_dest string
log_archive_dest_1 string location=use_db_recovery_file_
dest
valid_for=(all_logfiles,all_
roles)
db_unique_name=racdg
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
NAME TYPE VALUE
----------------------------------------------- ------------------------------
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
log_archive_dest_2 string service=racdg_standy async
valid_for=(online_logfiles,p
rimary_role)
db_unique_name=racdg_standy
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_file_name_convert string /u01/app/oracle/racdg_standy/d
atafile, +DATA1/racdg/datafile
/, /u01/app/oracle/racdg_stand
y/tempfile, +DATA1/racdg/tempf
ile/
SQL>
SQL>
SQL> show parameterlog_file_name_convert
NAME TYPE VALUE
----------------------------------------------- ------------------------------
log_file_name_convert string /u01/app/oracle/racdg_standy/o
nlinelog, +DATA1/racdg/onlinel
og/, /u01/app/oracle/racdg_sta
ndy/onlinelog3, +DATA3/racdg/o
nlinelog/
SQL> show parameter control
NAME TYPE VALUE
----------------------------------------------- ------------------------------
control_file_record_keep_time integer 7
control_files string +DATA1/racdg/controlfile/curre
nt.296.874604041, +DATA3/racdg
/controlfile/current.426.87460
4051
control_management_pack_access string DIAGNOSTIC+TUNING
SQL>
在racdg2节点查看参数:
SQL> show parameter fal
NAME TYPE VALUE
----------------------------------------------- ------------------------------
fal_client string racdg2
fal_server string racdg_standy
SQL> show parameter archive
NAME TYPE VALUE
----------------------------------------------- ------------------------------
archive_lag_target integer 0
log_archive_config string dg_config=(racdg,racdg_standy)
log_archive_dest string
log_archive_dest_1 string location=use_db_recovery_file_
dest
valid_for=(all_logfiles,all_
roles)
db_unique_name=racdg
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
NAME TYPE VALUE
----------------------------------------------- ------------------------------
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
log_archive_dest_2 string service=racdg_standy async
valid_for=(online_logfiles,p
rimary_role)
db_unique_name=racdg_standy
SQL> show parameter control
NAME TYPE VALUE
----------------------------------------------- ------------------------------
control_file_record_keep_time integer 7
control_files string +DATA1/racdg/controlfile/curre
nt.296.874604041,+DATA3/racdg
/controlfile/current.426.87460
4051
control_management_pack_access string DIAGNOSTIC+TUNING
SQL> show parameterlog_file_name_convert
NAME TYPE VALUE
----------------------------------------------- ------------------------------
log_file_name_convert string /u01/app/oracle/racdg_standy/o
nlinelog, +DATA1/racdg/onlinel
og/, /u01/app/oracle/racdg_sta
ndy/onlinelog3, +DATA3/racdg/o
nlinelog/
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_file_name_convert string /u01/app/oracle/racdg_standy/d
atafile, +DATA1/racdg/datafile
/, /u01/app/oracle/racdg_stand
y/tempfile, +DATA1/racdg/tempf
ile/
SQL>
5、开启RAC归档
略
PhysicalStandby Database 配置
1、 创建primary DB 备份
Rman 备份primary DB
[oracle@racdg1db_backup]$ rman target /
Recovery Manager:Release 11.2.0.1.0 - Production on Tue Mar 17 18:58:43 2015
Copyright (c) 1982,2009, Oracle and/or its affiliates. Allrights reserved.
connected to targetdatabase: RACDG (DBID=1109864007)
RMAN> backup database format‘/home/oracle/db_backup/racdbfull_%T_%t_%u_%s_%p‘;
Starting backup at17-MAR-15
using targetdatabase control file instead of recovery catalog
allocated channel:ORA_DISK_1
channel ORA_DISK_1:SID=32 instance=racdg1 device type=DISK
channel ORA_DISK_1:starting full datafile backup set
channel ORA_DISK_1:specifying datafile(s) in backup set
input datafile filenumber=00001 name=+DATA1/racdg/datafile/system.292.874603637
input datafile filenumber=00002 name=+DATA1/racdg/datafile/sysaux.293.874603643
input datafile filenumber=00003 name=+DATA1/racdg/datafile/undotbs1.294.874603645
input datafile filenumber=00005 name=+DATA1/racdg/datafile/undotbs2.300.874604699
input datafile filenumber=00004 name=+DATA1/racdg/datafile/users.295.874603647
channel ORA_DISK_1:starting piece 1 at 17-MAR-15
channel ORA_DISK_1:finished piece 1 at 17-MAR-15
piecehandle=/home/oracle/db_backup/racdbfull_20150317_874609135_01q22uff_1_1tag=TAG20150317T185854 comment=NONE
channel ORA_DISK_1:backup set complete, elapsed time: 00:02:45
channel ORA_DISK_1:starting full datafile backup set
channel ORA_DISK_1:specifying datafile(s) in backup set
including currentcontrol file in backup set
including currentSPFILE in backup set
channel ORA_DISK_1:starting piece 1 at 17-MAR-15
channel ORA_DISK_1:finished piece 1 at 17-MAR-15
piece handle=/home/oracle/db_backup/racdbfull_20150317_874609302_02q22ukm_2_1tag=TAG20150317T185854 comment=NONE
channel ORA_DISK_1:backup set complete, elapsed time: 00:00:16
Finished backup at17-MAR-15
RMAN>
2、 为standby db创建controlfile
SQL> ALTER DATABASE CREATE STANDBYCONTROLFILE AS ‘/home/oracle/db_backup/racdg.ctl‘;
Database altered.
SQL> alter system switch logfile;
System altered.
SQL>
3、复制primaryDB备份文件到standbyDB上
[oracle@racdg1db_backup]$ ll
total 1074652
-rw-r--r-- 1 oracleasmadmin 2330 Mar 16 11:00backcuppfile.pfile
-rw-r----- 1 oracleasmadmin 1062264832 Mar 17 19:01 racdbfull_20150317_874609135_01q22uff_1_1
-rw-r----- 1 oracleasmadmin 18579456 Mar 17 19:02racdbfull_20150317_874609302_02q22ukm_2_1
-rw-r----- 1 oracleasmadmin 18497536 Mar 17 19:06racdg.ctl
-rw-r--r-- 1 oracleoinstall 1575 Mar 6 19:51 standby_db.pfile
[oracle@racdg1db_backup]$ scp racd* oracle@172.20.10.100:/home/oracle/db_backup/
oracle@172.20.10.100‘spassword:
racdbfull_20150317_874609135_01q22uff_1_1 24% 203
4、创建standby initialization parameter
准备工作
相关目录创建:
log_file=/u01/oracle/racdg_standy/onlinelog
db_file=/u01/oracle/racdg_standy/datafile
archive_log=/u01/oracle/racdg_standy/arch
设置文件目录权限权限:
[root@localhost ~]# chown -Roracle:oinstall /u01/oracle/racdg_standy
[root@localhost ~]# chown 775/u01/oracle/racdg_standy
[root@localhost ~]# ls -ls/u01/oracle/racdg_standy/
total 16
4 drwxr-xr-x 2 oracle oinstall 4096 Feb 1500:54 arch
4 drwxr-xr-x 2 oracle oinstall 4096 Feb 1500:54 datafile
4 drwxr-xr-x 2 oracle oinstall 4096 Feb 1500:54 onlinelog
4 drwxr-xr-x 2 oracle oinstall 4096 Feb 1500:54 tempfile
复制primary DB parameter进行修改
去掉primary parameter中的内容如下:
*.cluster_database=TRUE
racdg1.instance_number=1
racdg2.instance_number=2
*.remote_listener=‘scan.localdomain:1521‘
*.db_create_file_dest=‘+DATA1‘
*.cluster_database=true
*.memory_target=842006528
*.db_recovery_file_dest=‘+DATA3‘
*.db_recovery_file_dest_size=4070572032
添加修改参数:
*.pga_aggregate_target=339738624
*.sga_target=503316480
*.audit_file_dest=‘/u01/app/oracle/admin/racdg_standy/adump‘
*.core_dump_dest=‘/u01/app/oracle/admin/racdg_standy/cdump‘
*.audit_trail=‘db‘
*.compatible=‘11.2.0.0.0‘
*.control_files=‘/u01/app/oracle/controlfile1/control1.ctl‘,
‘/u01/app/oracle/controlfile2/control2.ctl‘
*.db_block_size=8192
*.db_domain=‘‘
*.db_name=‘racdg‘
*.diagnostic_dest=‘/u01/app/oracle‘
*.dispatchers=‘(PROTOCOL=TCP)(SERVICE=racdgXDB)‘
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=‘exclusive‘
*.thread=1
*.undo_tablespace=‘UNDOTBS1‘
*.db_unique_name=‘racdg_standy‘
*.service_names=‘racdg_standy‘
*.log_archive_config=‘dg_config=(racdg_standy,racdg)‘
*.log_archive_dest_1=‘location=/u01/oracle/racdg_standy/arch/
valid_for=(all_logfiles,all_roles)
db_unique_name=racdg_standy‘
*.log_archive_dest_2=‘service=rac_dg1 async
valid_for=(online_logfiles,primary_role)
db_unique_name=racdg‘
*.log_archive_dest_state_1=‘enable‘
*.log_archive_dest_state_2=‘enable‘
*.log_archive_format=‘%t_%s_%r.dbf‘
*.log_file_name_convert=‘+DATA1/racdg/onlinelog/‘,‘/u01/oracle/racdg_standy/onlinelog/‘,
‘+DATA2/racdg/onlinelog/‘,‘/u01/oracle/racdg_standy/onlinelog3/‘
*.db_file_name_convert=‘+DATA2/racdg/datafile/‘,‘/u01/oracle/racdg_standy/datafile/‘,
‘+DATA2/racdg/tempfile/‘,‘/u01/oracle/racdg_standy/tempfile/‘
*.log_archive_max_processes=30
*.standby_file_management=‘auto‘
*.fal_client=‘racdg_standy‘
*.fal_server=‘rac_dg1‘,‘rac_dg2‘
Startup nomount;
var cpro_id = "u6292429";
小编还为您整理了以下内容,可能对您也有帮助:
oracle 双机热备,oracle dataguard 和oracle rac的区别和联系
Data Guard
是Oracle的远程复制技术,它有物理和逻辑之分,但是总的来说,它需要在异地有一套的系统,这是两套硬件配置可以不同的系统,但是这两套系统的软
件结构保持一致,包括软件的版本,目录存储结构,以及数据的同步(其实也不是实时同步的),这两套系统之间只要网络是通的就可以了,是一种异地容灾的解决
方案。而对于RAC,则是本地的高可用集群,每个节点用来分担不用或相同的应用,以解决运算效率低下,单节点故障这样的问题,它是几台硬件相同或不相同的
服务器,加一个SAN(共享的存储区域)来构成的。
Data Guard由两个多两个以上的的数据库构成,他们各自有各自的存储,Oracle负责他们之间的切换和数据同步
双机热备由两台计算机和一个共享存储设备构成,通过第三方软件(HA Rose等)实现切换,不需要做数据同步
建议应用RAC+Dataguard ,RAC保证可用性,Dataguard在RAC组磁盘上和另外一台主机上,保证可靠性。
双机就是人们所说的双机热备,数据库放在共享设备上,同一时刻只能有一台主机接管,另一台待用,这种方式只能保护实例,不能保护db,而且备机长期处于闲置,对资源是一种极大的浪费!
如果原本是双机,建议转换为RAC
规划好应用,DML操作从一个节点跑,查询操作从另一个节点跑,通常不需要太多调优就可以利用闲置的另外一台机器了
RAC服务器共用一套存储,同时提供服务,没有主备之分.宕一个其它的可以继续服务.
双机热备,共用一套存储,一个提供服务一个备份,主机宕了切换到备份服务器提供服务.
data guard 完全两套系统,存储是单独的,用日志同步.
RAC: 实例层冗余
DG :数据库层冗余
热备:仅仅只是数据冗余
Oracle dataguard 和Oracle rac的区别和联系
DataGuard是一种数据库级别的HA方案,最主要功能是冗灾、数据保护、故障恢复等。 它是在主节点与备用节点间通过日志同步来保证数据的同步,可以实现数据库快速切换与灾难性恢复。Data Guard只是在软件上对数据库进行设置,并不需要额外购买任何组件。用户能够在对主数据库影响很小的情况下,实现主备数据库的同步。而主备机之间的数据差异只限于在线日志部分,因此被不少企业用作数据容灾解决方案。 而RAC一般翻译为“真正应用集群”,它一般有两台或者两台以上同构计算机及共享存储设备构成,可提供强大的数据库处理能力。 简单说dataguard是为了安全而做的自动化备份,RAC是为了提高效率而做的多台电脑共同处理的集群,现在都把两者配合使用。 希望能帮到您!
oracle 双机热备,dataguard,和RAC的区别是什么
RAC实现了多台服务器同时访问一个数据库,避免了服务器出现单点故障,同时多台服务器集群工作,提高了系统访问效率;
DATAGUARD实现了一个数据库复制为两个数据库,避免了数据库的单点故障,同时多个数据库也可以同时为用户提供给服务,如主数据库是交易数据库,复制数据库作为查询报表使用。
另外RAC是不可替代的,DATAguard可以有很多其他软件替代,如sybase的Replication Server,DSG等
oracle 双机热备,dataguard,和RAC的区别是什么
RAC实现了多台服务器同时访问一个数据库,避免了服务器出现单点故障,同时多台服务器集群工作,提高了系统访问效率;
DATAGUARD实现了一个数据库复制为两个数据库,避免了数据库的单点故障,同时多个数据库也可以同时为用户提供给服务,如主数据库是交易数据库,复制数据库作为查询报表使用。
另外RAC是不可替代的,DATAguard可以有很多其他软件替代,如sybase的Replication Server,DSG等
RAC双节点什么意思
就是有两台ORACLE服务器组成的一个RAC集群
RAC,全称real application clusters,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。
RAC双节点什么意思
就是有两台ORACLE服务器组成的一个RAC集群
RAC,全称real application clusters,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。
Oracle dataguard 和Oracle rac的区别和联系
data guard简称DG,是一个主库(包括instance和数据库文件),多个备库(多个instance、多套数据库文件):
主库和备库之间都是的数据库;
主库和备库的数据完全相同,DG通过复制、重演redo log,把主库的数据复制到备库中,所以备库的数据会有一点时间延迟;
DG的作用,当主库down机后,可以用备库顶上;或者主机负责数据写入、备库给外界提供数据读取,实现读写分离;
RAC,全称Realtime Application Cluster,多个instance,一套数据文件:
多个instance之间有自己的物理内容,但是共享内存数据,协同工作;
多个instance之间共享一套数据文件;
RAC作用,提供instance级别的HA,High Availability,即高可用,一个instance down掉了,另一个instance自动顶上;其次,在应用分离的情况下,可以提供SQL性能;
区别:个人认为,RAC提供了instance级别的HA,而DG提供了数据库文件的HA,所以大部分的oracle 7*24解决方案都是RAC+DG。
Oracle dataguard 和Oracle rac的区别和联系
区别:
1.作用:dataguard用于冗灾,提升安全可用性,不提升性能,rac用于集群,提升性能
2.实例:dataguard单实例单库,rac多实例单库
3.RAC仅针对实例,存储是两台主机共享的,DG是独立的两套系统,通过日志实现HA
联系:
都能提升高可用性,单节点失效,数据库不会停止服务。
oracle dataguard:Oracle数据库冗灾方案、提供数据保护,高可用性。
oracle rac:oracle集群,提供更强的数据处理能力。
Oracle dataguard 和Oracle rac的区别和联系
区别:
1.作用:dataguard用于冗灾,提升安全可用性,不提升性能,rac用于集群,提升性能
2.实例:dataguard单实例单库,rac多实例单库
3.RAC仅针对实例,存储是两台主机共享的,DG是独立的两套系统,通过日志实现HA
联系:
都能提升高可用性,单节点失效,数据库不会停止服务。
oracle dataguard:Oracle数据库冗灾方案、提供数据保护,高可用性。
oracle rac:oracle集群,提供更强的数据处理能力。
大话OracleRAC集群、高可用性、备份与恢复的目录
第1部分集群理论篇
第1章RAC初体验
1.1本书使用环境
1.1.1硬件环境
1.1.2软件环境
1.1.3本书使用的环境
1.2如何在PC机上搭建RAC环境
1.2.1需要下载的软件
1.2.2安装过程
1.3任务列表
1.4规划阶段
1.4.1确认主机名和3个IP地址
1.4.2存储方案选型
1.5实施阶段
1.5.1主机配置
1.5.2安装OracleClusterware
1.5.3安装OracleDatabase
1.5.4配置Listener
1.5.5创建ASM
1.5.6创建数据库
1.6客户端测试
1.6.1客户端配置
1.6.2体验Failover
1.6.3体验LoadBalance
1.6.4修改归档模式
第2章什么是RAC集群
2.1集群分类
2.2集群环境的特殊问题
2.2.1并发控制
2.2.2健忘症(Amnesia)
2.2.3脑裂(SplitBrain)
2.2.4IO隔离(IOFencing)
2.3RAC集群
2.3.1存储层
2.3.2网络层
2.3.3集群件层
2.3.4应用层
2.4小结
第3章OracleClusterware
3.1Clusterware和RAC的关系
3.2OracleClusterware组成
3.2.1磁盘文件
3.2.2Clusterware后台进程
3.2.3网络组件
3.3Clusterware的日志体系
3.4小结
第4章RAC原理
4.1数据库基本原理
4.1.1并发访问和数据一致性
4.1.2事务和隔离级别
4.1.3Oracle支持的隔离级别
4.2Oracle单实例的并发控制机制
4.2.1Lock
4.2.2数据记录的行级锁
4.2.3Latch
4.2.4Latch和Lock对比
4.2.5进一步理解
4.3RAC下的并发控制
4.3.1DLM中资源和锁
4.3.2Non-CacheFusion资源
4.3.3CacheFusion资源
4.3.4GRD(GlobalResourceDirectory)
4.3.5PCMLock
4.3.6CacheFusion
4.3.7RAC并发控制总结
4.4RAC架构
4.4.1SGA的变化
4.4.2后台进程的变化
4.4.3文件
4.4.4SCN
4.4.5CacheFusion、GCS、GES
4.5RAC和Clusterware的交互
4.5.1Clusterware层
4.5.2RAC层
4.6小结
第5章存储方案——ASM初步
5.1Shared-Disk和Shared-Nothing架构
5.2Oracle10gRAC的存储方案介绍
5.3ASM架构
5.3.1ASM实例
5.3.2文件
5.4配置ASM
5.4.1安装位置
5.4.2创建ASM磁盘
5.4.3配置ASM实例
5.4.4创建磁盘组
5.4.5在数据库中使用ASM的磁盘组
5.5ASM实例:将数据库迁移到ASM
5.5.1试验说明
5.5.2操作步骤
5.5.3最后验证
5.6小结
第2部分实战篇
第6章RAC维护工具集
6.1OracleClusterware工具集
6.2节点层
6.3网络层
6.4集群层
6.4.1crsctl
6.4.2OCR命令系列
6.5应用层
6.5.1crs_stat
6.5.2onsctl
6.5.3srvctl
6.5.4恢复
6.6小结
第7章HA和LB
7.1什么是高可用性
7.2Failover
7.2.1Client-SideConnectTimeFailover
7.2.2TAF(TransparentApplicationFailover)
7.2.3Client-SideFailover和TAF的对照试验
7.2.4Server-SideTAF
7.3OracleClusterwareHA框架
7.3.1术语介绍
7.3.2配置命令
7.3.3完整实例
7.4LoadBalance
7.4.1ConnectionBalancing
7.4.2利用Service分散负载
7.5测试LoadBalance
7.5.1通过Listener日志区分路由来源
7.5.2测试方法
7.5.3测试过程
7.6小结
第8章备份
8.1概述
8.1.1备份
8.1.2恢复
8.1.3RMAN工具
8.2使用FlashRecoveryArea
8.2.1配置FlashRecoveryArea
8.2.2FlashRecoveryArea的空间监控
8.3使用RMAN
8.3.1RMAN工具的使用方法
8.3.2RMAN配置
8.4完全备份和增量备份
8.4.1完全备份
8.4.2增量备份
8.4.3其他RMAN命令
8.5RAC的备份实例
8.6小结
第9章恢复
9.1为什么Oracle数据库能够恢复
9.2日志
9.2.1日志线程(RedoThread)
9.2.2RAC的联机日志
9.3恢复种类
9.3.1InstanceRecovery
9.3.2MediaRecovery
9.3.3CrashRecovery
9.3.4OnlineBlockRecovery
9.4介质恢复
9.4.1完全恢复
9.4.2不完全恢复
9.4.3恢复到单实例
9.5小结
第10章其他恢复技术
10.1数据块恢复
10.2如何检查数据块一致性
10.2.1使用初始化参数
10.2.2DBV工具
10.2.3Analyze命令
10.2.4RMAN工具
10.2.5dbms_repair包
10.3模拟数据块不一致
10.4数据块不一致处理办法
10.4.1收集信息
10.4.2设计恢复方法
10.4.3恢复操作
10.5数据块恢复实例
10.6Flashback家族介绍
10.7FlashbackDatabase
10.7.1FlashbackDatabase架构
10.7.2启用FlashbackDatabase
10.7.3FlashbackDatabase
10.7.4命令和视图
10.8FlashbackDrop
10.8.1TablespaceRecycleBin
10.8.2FlashbackDrop操作
10.8.3RecyclyBin的维护
10.9FlashbackQuery和FlashbackTable
10.9.1Oracle9i的FlashbackQuery
10.9.2FlashbackVersionQuery
10.9.3FlashbackTransactionQuery
10.9.4FlashbackTable
10.9.5UNDORetntion
10.10小结
第11章RAC和DataGuard
11.1DataGuard介绍
11.1.1DataGuard架构
11.1.2日志发送(RedoSend)
11.1.3日志接收(RedoReceive)
11.1.4日志应用(RedoApply)
11.1.5数据保护模式
11.1.6自动裂隙检测和解决
11.2RAC和Standby配置实例
11.2.1RACPrimary和SingleStandby
11.2.2RACPrimary和RACStandby
11.3小结
第12章RAC和StreamReplication
12.1Stream的工作原理
12.2DataGuard和Stream对比
12.3RACStream配置实例
12.3.1Single(Source)和RAC(Target)
12.3.2RAC对RAC的复制
12.3.3STRMMON工具
12.4小结
第13章深入ASM
13.1非ASM的存储结构
13.2ASM存储结构
13.3ASM文件系统
13.3.1ASMMetadata
13.3.2PhysicalMetadata
13.3.3VirtualMetadata
13.3.4DiskRecovery
13.4条带化(ASMStriping)
13.4.1ASM文件模板(ASMFileTemplate)
13.4.2ASM别名(ASMFileAlias)
13.5RDBMS和ASM之间的交互
13.6ASM的实例恢复
13.7ASM和OSFilesystem之间交互
13.7.1dbms_file_transfer包
13.7.2RMAN的CONVERT方法
13.7.3ASM和TTS
13.8ASM的*
13.9小结
第14章性能与RAC
14.1RAC的若干特点
14.2AWR
14.2.1启用AWR
14.2.2修改AWR配置
14.2.3产生AWR报告
14.3ASH
14.4SQL调整策略
14.4.1SQL语句的执行过程
14.4.2SQL性能调整的基本方法
14.4.3PL/SQL和SQL
14.5小结
大话OracleRAC集群、高可用性、备份与恢复的目录
第1部分集群理论篇
第1章RAC初体验
1.1本书使用环境
1.1.1硬件环境
1.1.2软件环境
1.1.3本书使用的环境
1.2如何在PC机上搭建RAC环境
1.2.1需要下载的软件
1.2.2安装过程
1.3任务列表
1.4规划阶段
1.4.1确认主机名和3个IP地址
1.4.2存储方案选型
1.5实施阶段
1.5.1主机配置
1.5.2安装OracleClusterware
1.5.3安装OracleDatabase
1.5.4配置Listener
1.5.5创建ASM
1.5.6创建数据库
1.6客户端测试
1.6.1客户端配置
1.6.2体验Failover
1.6.3体验LoadBalance
1.6.4修改归档模式
第2章什么是RAC集群
2.1集群分类
2.2集群环境的特殊问题
2.2.1并发控制
2.2.2健忘症(Amnesia)
2.2.3脑裂(SplitBrain)
2.2.4IO隔离(IOFencing)
2.3RAC集群
2.3.1存储层
2.3.2网络层
2.3.3集群件层
2.3.4应用层
2.4小结
第3章OracleClusterware
3.1Clusterware和RAC的关系
3.2OracleClusterware组成
3.2.1磁盘文件
3.2.2Clusterware后台进程
3.2.3网络组件
3.3Clusterware的日志体系
3.4小结
第4章RAC原理
4.1数据库基本原理
4.1.1并发访问和数据一致性
4.1.2事务和隔离级别
4.1.3Oracle支持的隔离级别
4.2Oracle单实例的并发控制机制
4.2.1Lock
4.2.2数据记录的行级锁
4.2.3Latch
4.2.4Latch和Lock对比
4.2.5进一步理解
4.3RAC下的并发控制
4.3.1DLM中资源和锁
4.3.2Non-CacheFusion资源
4.3.3CacheFusion资源
4.3.4GRD(GlobalResourceDirectory)
4.3.5PCMLock
4.3.6CacheFusion
4.3.7RAC并发控制总结
4.4RAC架构
4.4.1SGA的变化
4.4.2后台进程的变化
4.4.3文件
4.4.4SCN
4.4.5CacheFusion、GCS、GES
4.5RAC和Clusterware的交互
4.5.1Clusterware层
4.5.2RAC层
4.6小结
第5章存储方案——ASM初步
5.1Shared-Disk和Shared-Nothing架构
5.2Oracle10gRAC的存储方案介绍
5.3ASM架构
5.3.1ASM实例
5.3.2文件
5.4配置ASM
5.4.1安装位置
5.4.2创建ASM磁盘
5.4.3配置ASM实例
5.4.4创建磁盘组
5.4.5在数据库中使用ASM的磁盘组
5.5ASM实例:将数据库迁移到ASM
5.5.1试验说明
5.5.2操作步骤
5.5.3最后验证
5.6小结
第2部分实战篇
第6章RAC维护工具集
6.1OracleClusterware工具集
6.2节点层
6.3网络层
6.4集群层
6.4.1crsctl
6.4.2OCR命令系列
6.5应用层
6.5.1crs_stat
6.5.2onsctl
6.5.3srvctl
6.5.4恢复
6.6小结
第7章HA和LB
7.1什么是高可用性
7.2Failover
7.2.1Client-SideConnectTimeFailover
7.2.2TAF(TransparentApplicationFailover)
7.2.3Client-SideFailover和TAF的对照试验
7.2.4Server-SideTAF
7.3OracleClusterwareHA框架
7.3.1术语介绍
7.3.2配置命令
7.3.3完整实例
7.4LoadBalance
7.4.1ConnectionBalancing
7.4.2利用Service分散负载
7.5测试LoadBalance
7.5.1通过Listener日志区分路由来源
7.5.2测试方法
7.5.3测试过程
7.6小结
第8章备份
8.1概述
8.1.1备份
8.1.2恢复
8.1.3RMAN工具
8.2使用FlashRecoveryArea
8.2.1配置FlashRecoveryArea
8.2.2FlashRecoveryArea的空间监控
8.3使用RMAN
8.3.1RMAN工具的使用方法
8.3.2RMAN配置
8.4完全备份和增量备份
8.4.1完全备份
8.4.2增量备份
8.4.3其他RMAN命令
8.5RAC的备份实例
8.6小结
第9章恢复
9.1为什么Oracle数据库能够恢复
9.2日志
9.2.1日志线程(RedoThread)
9.2.2RAC的联机日志
9.3恢复种类
9.3.1InstanceRecovery
9.3.2MediaRecovery
9.3.3CrashRecovery
9.3.4OnlineBlockRecovery
9.4介质恢复
9.4.1完全恢复
9.4.2不完全恢复
9.4.3恢复到单实例
9.5小结
第10章其他恢复技术
10.1数据块恢复
10.2如何检查数据块一致性
10.2.1使用初始化参数
10.2.2DBV工具
10.2.3Analyze命令
10.2.4RMAN工具
10.2.5dbms_repair包
10.3模拟数据块不一致
10.4数据块不一致处理办法
10.4.1收集信息
10.4.2设计恢复方法
10.4.3恢复操作
10.5数据块恢复实例
10.6Flashback家族介绍
10.7FlashbackDatabase
10.7.1FlashbackDatabase架构
10.7.2启用FlashbackDatabase
10.7.3FlashbackDatabase
10.7.4命令和视图
10.8FlashbackDrop
10.8.1TablespaceRecycleBin
10.8.2FlashbackDrop操作
10.8.3RecyclyBin的维护
10.9FlashbackQuery和FlashbackTable
10.9.1Oracle9i的FlashbackQuery
10.9.2FlashbackVersionQuery
10.9.3FlashbackTransactionQuery
10.9.4FlashbackTable
10.9.5UNDORetntion
10.10小结
第11章RAC和DataGuard
11.1DataGuard介绍
11.1.1DataGuard架构
11.1.2日志发送(RedoSend)
11.1.3日志接收(RedoReceive)
11.1.4日志应用(RedoApply)
11.1.5数据保护模式
11.1.6自动裂隙检测和解决
11.2RAC和Standby配置实例
11.2.1RACPrimary和SingleStandby
11.2.2RACPrimary和RACStandby
11.3小结
第12章RAC和StreamReplication
12.1Stream的工作原理
12.2DataGuard和Stream对比
12.3RACStream配置实例
12.3.1Single(Source)和RAC(Target)
12.3.2RAC对RAC的复制
12.3.3STRMMON工具
12.4小结
第13章深入ASM
13.1非ASM的存储结构
13.2ASM存储结构
13.3ASM文件系统
13.3.1ASMMetadata
13.3.2PhysicalMetadata
13.3.3VirtualMetadata
13.3.4DiskRecovery
13.4条带化(ASMStriping)
13.4.1ASM文件模板(ASMFileTemplate)
13.4.2ASM别名(ASMFileAlias)
13.5RDBMS和ASM之间的交互
13.6ASM的实例恢复
13.7ASM和OSFilesystem之间交互
13.7.1dbms_file_transfer包
13.7.2RMAN的CONVERT方法
13.7.3ASM和TTS
13.8ASM的*
13.9小结
第14章性能与RAC
14.1RAC的若干特点
14.2AWR
14.2.1启用AWR
14.2.2修改AWR配置
14.2.3产生AWR报告
14.3ASH
14.4SQL调整策略
14.4.1SQL语句的执行过程
14.4.2SQL性能调整的基本方法
14.4.3PL/SQL和SQL
14.5小结
oracle 11g rac 哪个版本能装在2012
RAC
在Grid Infrastructure安装完以后,我们把注意力转移到集群上的Oracle软件的安装上来。我们看到,Grid Infrasctructure提供了运行RAC的框架,包括集群通讯链接、节点分离、节点成员关系等服务。ASM是Oracle存储数据库的首选方式。RAC利用这些概念并扩展了需要的基本服务。
安装选项
成功安装了Grid Infrastructure/Clusterware以后,Oracle Universal Installer检测到集群环境的建立,然后提供安装整个集群上或是用户指定其中几个节点的RAC选项。使用集群检验工具cluvfy来为RDBMS的安装检测是否满足先决条件是良好的做法。和安装集群一样,Oracle Universal Installer将首先在第一个节点上对软件进行拷贝和链接,然后将Oracle主目录push到指定的其他节点中。和Grid Infrastructure不同的是,Oracle RDBMS可以被安装在共享文件系统上(例如OCFS2或ACFS上),在集群中增加新节点被简化,因为不需要在新的节点上重新安装软件,打补丁同样被简化了--只有一个Oracle主目录需要打补丁。但是补丁不能以rolling方式安装,因此停机时间不可避免。
在安装过程中,Oracle Universal Installer将提醒管理员安装或升级数据库,或只安装软件。如果安装的时候有新的版本发布,那么仅仅安装软件,打补丁升级后再创建数据库是比较好的做法。
单实例和RAC数据库
RAC和单实例数据库在很多重要方面都有所不同。
在RAC中,一个数据库在共享存储中为多个服务器上的实例所访问。数据库文件、在线redo文件、控制文件和服务器参数文件(spfile)都必须共享。此外,闪回日志、已归档的redo日志、数据泵转储文件、和dataguard broker配置文件也可以共享,根据你的配置来决定(这是可选的,但还是强烈建议这么做)。在使用ASM的时候,你同样可以在每个RAC的节点中找到一个本地的pfile文件,这个文件指向对应磁盘组中的spfile。另一个存储在本地的文件是Oracle密码文件。集群文件系统中的用户常常把这些文件放在一个共享的位置,通过符号链接指向$ORACLE_HOME/dbs数据库文件
数据库文件包含数据库中的所有数据,包括表、索引、数据字典和经过编译的PL/SQL代码,不胜枚举。在RAC中,每个数据文件都只有一个拷贝,位于共享存储中,并为所有实例所访问。Oracle默认不为数据文件提供镜像,大部分用户选择在存储层面来做冗余,避免介质故障导致的数据丢失。在存储阵列没有这个功能时,可以使用Oracle ASM来提供冗余。
控制文件
控制文件储存数据库的物理结构的相关信息,包括它们的状态。如果你使用RMAN且没有专门的RMAN catalog数据库,控制文件中也可以储存RMAN备份的信息。在单实例数据库和RAC中,控制文件应该做镜像以防止损坏或存储故障。当同时使用ASM和闪回恢复区时,会自动做多路复用。默认情况下,Oracle在db_create_file_dest和db_recovery_file_dest指定的磁盘组中对控制文件做多路复用。这种情况下,若你使用spfile,control_files参数将自动更新。要知道控制文件会成为RAC中的一个争用点,因为它们会被频繁更新。因此不要对控制文件做过多的镜像拷贝,而且应该把它们放置在高速存储上。
REDO和归档
在RAC中,每个实例有它自己的联机日志文件,称为线程(thread)。线程的信息可以在V$LOG和相关的视图中查看。
每个线程中你需要两组redo日志,而且若没有使用ASM和闪回恢复区,你应该考虑手动对组中的成员做多路复用。由spfile负责实例和线程间的映射(通过初始化参数thread)。当添加一个新的实例到集群中时,就需要一个相应的redo线程,这可以使用两种方式来做到:第一种,执行SQL语句alter database add logfile group x thread y; 第二种,在使用策略管理的数据库(policy-managed)中,会自动创建。然后由Oracle来启用。
lgwr后台进程将redo buffer刷新到redo log中。online redo log需要放在高速存储中,否则它可能会成为一个争用的点,特别是在一个高频率提交的系统中。通常对设计不合理的应用的优化是减少commit的频率,并至少将redo log和控制文件移到高速存储中,以减少一些性能瓶颈。在日志切换频繁的系统中,增加每个线程的重做日志组数会有所帮助,它能给归档进程更多的时间来归档redo日志。这种方法在归档进程需要将归档的redo传送到standby数据库中时也能获益,但是,现在的大部分系统采用Log Network Service(LNSn)进程来异步传送redo给standby数据库的Remote File Server(RFS)进程。在Oracle 10.2和11.1中,每个destination有一个LNS进程,到了11.2,LNSn进程被NSSn何NSAn后台进程所代替。NSSn进程被用来同步传送redo,NSAn用来异步传送redo。redo log大小设置的原则是,日志切换不会太频繁(AWR和statspack能够帮助定义一个合适的大小)。Oracle 11.2还允许管理员来选择redo log的块大小,现代存储单元使用4kb扇区大小代替了原先的512b。
当RAC中的一个实例发生故障,所有线程被合并来帮助建立恢复集,由服务器监控进程来执行前滚或回滚操作。
在lgwr进程将一个redo log写满以后,其中一个归档进程会将该文件拷贝到指定的目录中。
闪回恢复区在Oracle 10.1中引入,看是来是归档日志的最佳存放位置。如果你没有使用闪回恢复区,建议将归档日志放在一个共享文件系统中,以便每个节点都可以访问到。与单实例数据库不同,RAC需要所有线程的归档日志。当一个实例执行介质恢复时,你可以从它的alter日志上看到,Oracle使用了每个线程的所有日志文件。
Undo表空间
和redo线程类似,每个集群数据库的实例由它自己的undo表空间。spfile中配置了实例和undo表空间之间的一对一映射关系。但这个映射并不代表该undo表空间就长期绑定在该实例上,所有的其他实例同样可以访问该undo表空间来创建块的读一致前镜像。
当添加一个实例到集群中时,需要添加新的undo表空间并映射到该实例,和redo log一样。在policy-managed数据库中,Oracle可以自己来做这件事。
虽然还是可以使用手动的undo管理,但是强烈建议使用自动undo管理(AUM)。
RAC数据库的存储选项
管理员可以在如下的选项中选择:
ASM 这是Oracle的首选存储选项,而且是RAC标准版中支持的唯一配置OCFS2
裸设备 不推荐使用,不仅是因为被新版的linux内核弃用,在Oracle 11.2中同样不支持网络文件系统(NFS)
Red Hat Global File System 只在红帽和Oracle Enterprise Linux中支持,可以用在闪回恢复区和数据库文件上RAC实例
一个RAC数据库包含2个或更多的实例,一般每个实例都在不同的节点上,由一些共享内存结构和后台进程组成。
每个实例都有自己的SGA,在实例启动的时候分配。Oracle在10g中引入了自动共享内存管理(ASMM),在11g中引入了自动内存管理(AMM)。但是AMM与linux的大页面不兼容,这对大内存的系统来说是个问题。
Oracle需要同步访问本地共享内存和整个集群。所有实例都能访问其他实例的SGA。
在RAC中Oracle内核对共享内存的保护措施和单实例中是一样的,同样使用了闩和锁。闩是一个低级别、轻量级的串行装置。请求闩的进程不会排队,如果进程不能获得闩,它就会进入spin状态。spin的意思是,这个进程会进入一个紧密循环来预防被操作系统的调度程序从CPU中取下。如果一个进程长时间得不到闩,它会进入睡眠,在一个时间间隔后再次尝试申请。闩是实例级别的,没有集群范围的闩。
另一方面,锁在更长的时间请求一次,比闩更为复杂。锁可以是共享或独占的,请求锁的进程以先进先出(FIFO)的机制来等待,由队列来控制锁的访问,这个队列是集群范围内的。
缓存一致性的需求意味着锁和闩在RAC中比单实例要更加复杂。和单实例中一样,对buffer cache中数据库的访问和队列必须在本地实例中管理,但是,远程实例的访问也需要管理。因为这个原因,Oracle使用全局资源目录(GRD)和一些额外的后台进程。
(Oracle将V$视图加上实例标识组合起来形成GV$视图,一个GV$视图包含了集群中所有实例的动态性能视图)全局资源目录 (GRD)
RAC中使用了一些附加的后台进程来做缓存间的同步——记住RAC使用cache fusion结构来模拟一个横跨集群内所有节点的全局SGA。访问buffer cache中的块需要在读一致和写的访问间进行协调,共享资源的队列现在也是在集群全局上的。全局缓存服务(Global Cache Service GCS)用来对公共buffer cache的访问,全局队列服务(Global Enqueue Service GES)用来管理集群中的队列。
GCS和GES对应用而言都是透明的。内部使用的原结构就是先前提到的GRD,由GCS和GES进程来维护。GRD分布在集群的所有节点上,是SGA的一部分,这就是为什么一个RAC数据库的SGA比同等情况下的单实例数据库要来得大。资源管理由GCS和GES来协商。特定的资源完全由一个实例来管理,这个实例就是resource master。但它并是不固定的,Oracle 9.2以后的版本实现了动态的资源管理(DRM),在9.2以前,资源的remastering只发生在实例故障、GRD重建的时候。新的版本中,如果Oracle检测到一个resource master以外的实例在一个给定的时间间隔中对一个特定的资源的访问过于频繁,就会发生resource mastering。在这种情况下,该资源就会被remaster到其他节点上,也就是说,频繁访问该资源的另一个节点将成为resource master。很多用户反馈了动态remastering的一些问题,当它过于频繁发生的时候会造成一些不必要的开支。这种情况下,可以禁用DRM。
(GRD还记录了哪些资源由哪些实例来管理,当一个实例发生故障时,恢复起来将非常方便)下图说明GCS如何与GES协同工作来维护GRD
全局缓存服务(GCS)
LMSn后台进程使用GCS在全局buffer cache中维护缓存的一致性,SGA中可以存在同一个数据块的多份拷贝(当前版本只有一个),GCS对数据块的状态和位置进行跟踪,并通过内部连接将块传输到其他节点的实例中。
全局队列服务(GES)
和GCS类似,GES工作在块级别,管理集群中的全局队列。根据经验,如果一个操作没有涉及在全局buffer cache中控制/移动数据块,那么很可能是经过了GES的处理。全局队列服务负责所有的实例中的资源操作,比如对数据字典和库缓存的访问或事务的全局管理。它同样可以检测集群中的死锁。它跟踪多个实例同时访问资源时Oracle队列机制的状态。全局队列服务监控(LMON)和全局队列服务后台进程(LMD)组成全局队列服务的一部分。锁进程LCK0负责无缓存方式的访问,比如library和row cache请求。
缓存融合(Cache Fusion)
缓存融合是实例间数据传送的最新演变。Oracle 8i中曾使用block ping的机制,作为替代,Oracle使用高速的内部连接来为所有节点间的读写转移数据块。
实例间使用block ping方法来转移数据块代价是很昂贵的,它建议你将工作量与实例联系在一起来使实例间的数据块转移达到最少。在Oracle并行服务器(Oracle Parallel Server)中,当一个实例请求一个数据块来进行修改,而这个数据块当前正由别的实例所持有,它将发出一个信号给持有该块的实例,使其将块写入到磁盘,再发回该块已经可读的信号。这种方法的通讯和对磁盘的读写操作的量很不尽如人意。
缓存融合的块转移依赖于全局资源目录,不需要超过3次跳跃(hop),这与安装及节点的个数有关。很明显,如果一个集群只有两个节点,那么有一个双向的缓存转移。如果多于2个节点,将跳跃数*在3次是必要的。Oracle使用专用的等待事件来衡量涉及缓存的通讯,根据实际情况来决定做一个双向或是三向的缓存转移。
当一个实例通过缓存融合来请求一个数据块时,它首先与资源的master联系来确定这个资源的当前状态,如果这个资源没有正在被使用,那么它可以通过从本地磁盘读取以获得这个块。如果这个资源正在被使用,那么该资源master将把这个资源传递到发出请求的实例中。如果这个资源紧接着收到1个或多个实例的修改请求,将会把该资源添加进GRD,资源的master、请求者和持有者都可以不同,这种情况下最多需要三次跳跃来获得这个块。
上面提到的双向和三向的块转移与资源的管理方式有关。当资源的master持有被请求的资源,那么对数据块的请求就能马上得到满足并开始块的传输,这就是双向的通讯。在三向的情况中,请求者、master和持有者都不相同,那么该资源master需要转发这个请求,引发了新的跳跃。
从刚才的讨论中,你可以知道在全局buffer cache中对块和它们影像间协调是不能低估的。在RAC数据库中,缓存融合常常代表了最大的利益和最高的成本。好处是缓存融合理论上运行按比例增大,并可能取得近乎线性的扩展性。然而,缓存融合强加的额外工作量可能会在10%-20%的范围内。
读一致性
Oracle数据库的主要特征之一就是能同时提供不同视野下的数据,这个特征叫做多版本读一致。查询是读一致的,写不会阻塞读,反之亦然。当然,多版本读一致对RAC一样有效,但涉及到一点其他的工作。
System Change Number(SCN)是一个Oracle的内部时间戳,对读一致非常重要。如果本地实例请求一个块的读一致版本,它需要联系这个块的resource master来确定这个块是否有相同SCN的版本,或者更新的版本存在于某个远程实例的buffer cache中。如果这个块存在,那么resource master会发送请求给相应的远程实例来转发这个块的读一致版本给本地实例。如果远程实例持有这个块的请求时间SCN的版本,那么它会马上发送这个块。如果远程实例持有的是这个块更新的版本,它将创建这个块的拷贝(称为前镜像),并对这个拷贝应用回滚使其回到对应的SCN的状态,然后将其通过内部连接发送。
System Change Number(SCN)
SCN是Oracle数据库产生和使用的内部时间戳,数据库中发生的所有事件都以SCN标记,事务也一样。Oracle的读一致严重依赖于SCN和undo表空间中的信息。SCN需要在集群中同步,RAC中用来使SCN在所有节点间通用的方案有两个:broadcast-on-commit和Lamport。
broadcast-on-commit是10.2以后的默认方案,它解决了Lamport方案的一个问题:在以前,这个默认方案是Lamport,它承诺了更好的扩展性,让SCN像集群其他通讯一样来传播,但并不是在一个节点中commit后马上发生。这在大部分情况下都能满足要求,但是,Lamport方案有一个问题:一个节点的SCN相对另一个节点的SCN有延时是可能的,特别是在在消息传送不活跃的时候。这种SCN的延时意味着在一个节点上提交的事务从另一个延时的实例上“看起来”会有点太新了。
另一方面,broadcast-on-commit方案更加资源集中一点。LGWR进程在每次commit之后更新全局的SCN并将其广播到所有的其他实例中。在RAC11.1中,初始化参数max_commit_propagation_delay允许数据库管理员来修改默认的设定,这个参数在11.2中被移除。
oracle 11g rac 哪个版本能装在2012
RAC
在Grid Infrastructure安装完以后,我们把注意力转移到集群上的Oracle软件的安装上来。我们看到,Grid Infrasctructure提供了运行RAC的框架,包括集群通讯链接、节点分离、节点成员关系等服务。ASM是Oracle存储数据库的首选方式。RAC利用这些概念并扩展了需要的基本服务。
安装选项
成功安装了Grid Infrastructure/Clusterware以后,Oracle Universal Installer检测到集群环境的建立,然后提供安装整个集群上或是用户指定其中几个节点的RAC选项。使用集群检验工具cluvfy来为RDBMS的安装检测是否满足先决条件是良好的做法。和安装集群一样,Oracle Universal Installer将首先在第一个节点上对软件进行拷贝和链接,然后将Oracle主目录push到指定的其他节点中。和Grid Infrastructure不同的是,Oracle RDBMS可以被安装在共享文件系统上(例如OCFS2或ACFS上),在集群中增加新节点被简化,因为不需要在新的节点上重新安装软件,打补丁同样被简化了--只有一个Oracle主目录需要打补丁。但是补丁不能以rolling方式安装,因此停机时间不可避免。
在安装过程中,Oracle Universal Installer将提醒管理员安装或升级数据库,或只安装软件。如果安装的时候有新的版本发布,那么仅仅安装软件,打补丁升级后再创建数据库是比较好的做法。
单实例和RAC数据库
RAC和单实例数据库在很多重要方面都有所不同。
在RAC中,一个数据库在共享存储中为多个服务器上的实例所访问。数据库文件、在线redo文件、控制文件和服务器参数文件(spfile)都必须共享。此外,闪回日志、已归档的redo日志、数据泵转储文件、和dataguard broker配置文件也可以共享,根据你的配置来决定(这是可选的,但还是强烈建议这么做)。在使用ASM的时候,你同样可以在每个RAC的节点中找到一个本地的pfile文件,这个文件指向对应磁盘组中的spfile。另一个存储在本地的文件是Oracle密码文件。集群文件系统中的用户常常把这些文件放在一个共享的位置,通过符号链接指向$ORACLE_HOME/dbs数据库文件
数据库文件包含数据库中的所有数据,包括表、索引、数据字典和经过编译的PL/SQL代码,不胜枚举。在RAC中,每个数据文件都只有一个拷贝,位于共享存储中,并为所有实例所访问。Oracle默认不为数据文件提供镜像,大部分用户选择在存储层面来做冗余,避免介质故障导致的数据丢失。在存储阵列没有这个功能时,可以使用Oracle ASM来提供冗余。
控制文件
控制文件储存数据库的物理结构的相关信息,包括它们的状态。如果你使用RMAN且没有专门的RMAN catalog数据库,控制文件中也可以储存RMAN备份的信息。在单实例数据库和RAC中,控制文件应该做镜像以防止损坏或存储故障。当同时使用ASM和闪回恢复区时,会自动做多路复用。默认情况下,Oracle在db_create_file_dest和db_recovery_file_dest指定的磁盘组中对控制文件做多路复用。这种情况下,若你使用spfile,control_files参数将自动更新。要知道控制文件会成为RAC中的一个争用点,因为它们会被频繁更新。因此不要对控制文件做过多的镜像拷贝,而且应该把它们放置在高速存储上。
REDO和归档
在RAC中,每个实例有它自己的联机日志文件,称为线程(thread)。线程的信息可以在V$LOG和相关的视图中查看。
每个线程中你需要两组redo日志,而且若没有使用ASM和闪回恢复区,你应该考虑手动对组中的成员做多路复用。由spfile负责实例和线程间的映射(通过初始化参数thread)。当添加一个新的实例到集群中时,就需要一个相应的redo线程,这可以使用两种方式来做到:第一种,执行SQL语句alter database add logfile group x thread y; 第二种,在使用策略管理的数据库(policy-managed)中,会自动创建。然后由Oracle来启用。
lgwr后台进程将redo buffer刷新到redo log中。online redo log需要放在高速存储中,否则它可能会成为一个争用的点,特别是在一个高频率提交的系统中。通常对设计不合理的应用的优化是减少commit的频率,并至少将redo log和控制文件移到高速存储中,以减少一些性能瓶颈。在日志切换频繁的系统中,增加每个线程的重做日志组数会有所帮助,它能给归档进程更多的时间来归档redo日志。这种方法在归档进程需要将归档的redo传送到standby数据库中时也能获益,但是,现在的大部分系统采用Log Network Service(LNSn)进程来异步传送redo给standby数据库的Remote File Server(RFS)进程。在Oracle 10.2和11.1中,每个destination有一个LNS进程,到了11.2,LNSn进程被NSSn何NSAn后台进程所代替。NSSn进程被用来同步传送redo,NSAn用来异步传送redo。redo log大小设置的原则是,日志切换不会太频繁(AWR和statspack能够帮助定义一个合适的大小)。Oracle 11.2还允许管理员来选择redo log的块大小,现代存储单元使用4kb扇区大小代替了原先的512b。
当RAC中的一个实例发生故障,所有线程被合并来帮助建立恢复集,由服务器监控进程来执行前滚或回滚操作。
在lgwr进程将一个redo log写满以后,其中一个归档进程会将该文件拷贝到指定的目录中。
闪回恢复区在Oracle 10.1中引入,看是来是归档日志的最佳存放位置。如果你没有使用闪回恢复区,建议将归档日志放在一个共享文件系统中,以便每个节点都可以访问到。与单实例数据库不同,RAC需要所有线程的归档日志。当一个实例执行介质恢复时,你可以从它的alter日志上看到,Oracle使用了每个线程的所有日志文件。
Undo表空间
和redo线程类似,每个集群数据库的实例由它自己的undo表空间。spfile中配置了实例和undo表空间之间的一对一映射关系。但这个映射并不代表该undo表空间就长期绑定在该实例上,所有的其他实例同样可以访问该undo表空间来创建块的读一致前镜像。
当添加一个实例到集群中时,需要添加新的undo表空间并映射到该实例,和redo log一样。在policy-managed数据库中,Oracle可以自己来做这件事。
虽然还是可以使用手动的undo管理,但是强烈建议使用自动undo管理(AUM)。
RAC数据库的存储选项
管理员可以在如下的选项中选择:
ASM 这是Oracle的首选存储选项,而且是RAC标准版中支持的唯一配置OCFS2
裸设备 不推荐使用,不仅是因为被新版的linux内核弃用,在Oracle 11.2中同样不支持网络文件系统(NFS)
Red Hat Global File System 只在红帽和Oracle Enterprise Linux中支持,可以用在闪回恢复区和数据库文件上RAC实例
一个RAC数据库包含2个或更多的实例,一般每个实例都在不同的节点上,由一些共享内存结构和后台进程组成。
每个实例都有自己的SGA,在实例启动的时候分配。Oracle在10g中引入了自动共享内存管理(ASMM),在11g中引入了自动内存管理(AMM)。但是AMM与linux的大页面不兼容,这对大内存的系统来说是个问题。
Oracle需要同步访问本地共享内存和整个集群。所有实例都能访问其他实例的SGA。
在RAC中Oracle内核对共享内存的保护措施和单实例中是一样的,同样使用了闩和锁。闩是一个低级别、轻量级的串行装置。请求闩的进程不会排队,如果进程不能获得闩,它就会进入spin状态。spin的意思是,这个进程会进入一个紧密循环来预防被操作系统的调度程序从CPU中取下。如果一个进程长时间得不到闩,它会进入睡眠,在一个时间间隔后再次尝试申请。闩是实例级别的,没有集群范围的闩。
另一方面,锁在更长的时间请求一次,比闩更为复杂。锁可以是共享或独占的,请求锁的进程以先进先出(FIFO)的机制来等待,由队列来控制锁的访问,这个队列是集群范围内的。
缓存一致性的需求意味着锁和闩在RAC中比单实例要更加复杂。和单实例中一样,对buffer cache中数据库的访问和队列必须在本地实例中管理,但是,远程实例的访问也需要管理。因为这个原因,Oracle使用全局资源目录(GRD)和一些额外的后台进程。
(Oracle将V$视图加上实例标识组合起来形成GV$视图,一个GV$视图包含了集群中所有实例的动态性能视图)全局资源目录 (GRD)
RAC中使用了一些附加的后台进程来做缓存间的同步——记住RAC使用cache fusion结构来模拟一个横跨集群内所有节点的全局SGA。访问buffer cache中的块需要在读一致和写的访问间进行协调,共享资源的队列现在也是在集群全局上的。全局缓存服务(Global Cache Service GCS)用来对公共buffer cache的访问,全局队列服务(Global Enqueue Service GES)用来管理集群中的队列。
GCS和GES对应用而言都是透明的。内部使用的原结构就是先前提到的GRD,由GCS和GES进程来维护。GRD分布在集群的所有节点上,是SGA的一部分,这就是为什么一个RAC数据库的SGA比同等情况下的单实例数据库要来得大。资源管理由GCS和GES来协商。特定的资源完全由一个实例来管理,这个实例就是resource master。但它并是不固定的,Oracle 9.2以后的版本实现了动态的资源管理(DRM),在9.2以前,资源的remastering只发生在实例故障、GRD重建的时候。新的版本中,如果Oracle检测到一个resource master以外的实例在一个给定的时间间隔中对一个特定的资源的访问过于频繁,就会发生resource mastering。在这种情况下,该资源就会被remaster到其他节点上,也就是说,频繁访问该资源的另一个节点将成为resource master。很多用户反馈了动态remastering的一些问题,当它过于频繁发生的时候会造成一些不必要的开支。这种情况下,可以禁用DRM。
(GRD还记录了哪些资源由哪些实例来管理,当一个实例发生故障时,恢复起来将非常方便)下图说明GCS如何与GES协同工作来维护GRD
全局缓存服务(GCS)
LMSn后台进程使用GCS在全局buffer cache中维护缓存的一致性,SGA中可以存在同一个数据块的多份拷贝(当前版本只有一个),GCS对数据块的状态和位置进行跟踪,并通过内部连接将块传输到其他节点的实例中。
全局队列服务(GES)
和GCS类似,GES工作在块级别,管理集群中的全局队列。根据经验,如果一个操作没有涉及在全局buffer cache中控制/移动数据块,那么很可能是经过了GES的处理。全局队列服务负责所有的实例中的资源操作,比如对数据字典和库缓存的访问或事务的全局管理。它同样可以检测集群中的死锁。它跟踪多个实例同时访问资源时Oracle队列机制的状态。全局队列服务监控(LMON)和全局队列服务后台进程(LMD)组成全局队列服务的一部分。锁进程LCK0负责无缓存方式的访问,比如library和row cache请求。
缓存融合(Cache Fusion)
缓存融合是实例间数据传送的最新演变。Oracle 8i中曾使用block ping的机制,作为替代,Oracle使用高速的内部连接来为所有节点间的读写转移数据块。
实例间使用block ping方法来转移数据块代价是很昂贵的,它建议你将工作量与实例联系在一起来使实例间的数据块转移达到最少。在Oracle并行服务器(Oracle Parallel Server)中,当一个实例请求一个数据块来进行修改,而这个数据块当前正由别的实例所持有,它将发出一个信号给持有该块的实例,使其将块写入到磁盘,再发回该块已经可读的信号。这种方法的通讯和对磁盘的读写操作的量很不尽如人意。
缓存融合的块转移依赖于全局资源目录,不需要超过3次跳跃(hop),这与安装及节点的个数有关。很明显,如果一个集群只有两个节点,那么有一个双向的缓存转移。如果多于2个节点,将跳跃数*在3次是必要的。Oracle使用专用的等待事件来衡量涉及缓存的通讯,根据实际情况来决定做一个双向或是三向的缓存转移。
当一个实例通过缓存融合来请求一个数据块时,它首先与资源的master联系来确定这个资源的当前状态,如果这个资源没有正在被使用,那么它可以通过从本地磁盘读取以获得这个块。如果这个资源正在被使用,那么该资源master将把这个资源传递到发出请求的实例中。如果这个资源紧接着收到1个或多个实例的修改请求,将会把该资源添加进GRD,资源的master、请求者和持有者都可以不同,这种情况下最多需要三次跳跃来获得这个块。
上面提到的双向和三向的块转移与资源的管理方式有关。当资源的master持有被请求的资源,那么对数据块的请求就能马上得到满足并开始块的传输,这就是双向的通讯。在三向的情况中,请求者、master和持有者都不相同,那么该资源master需要转发这个请求,引发了新的跳跃。
从刚才的讨论中,你可以知道在全局buffer cache中对块和它们影像间协调是不能低估的。在RAC数据库中,缓存融合常常代表了最大的利益和最高的成本。好处是缓存融合理论上运行按比例增大,并可能取得近乎线性的扩展性。然而,缓存融合强加的额外工作量可能会在10%-20%的范围内。
读一致性
Oracle数据库的主要特征之一就是能同时提供不同视野下的数据,这个特征叫做多版本读一致。查询是读一致的,写不会阻塞读,反之亦然。当然,多版本读一致对RAC一样有效,但涉及到一点其他的工作。
System Change Number(SCN)是一个Oracle的内部时间戳,对读一致非常重要。如果本地实例请求一个块的读一致版本,它需要联系这个块的resource master来确定这个块是否有相同SCN的版本,或者更新的版本存在于某个远程实例的buffer cache中。如果这个块存在,那么resource master会发送请求给相应的远程实例来转发这个块的读一致版本给本地实例。如果远程实例持有这个块的请求时间SCN的版本,那么它会马上发送这个块。如果远程实例持有的是这个块更新的版本,它将创建这个块的拷贝(称为前镜像),并对这个拷贝应用回滚使其回到对应的SCN的状态,然后将其通过内部连接发送。
System Change Number(SCN)
SCN是Oracle数据库产生和使用的内部时间戳,数据库中发生的所有事件都以SCN标记,事务也一样。Oracle的读一致严重依赖于SCN和undo表空间中的信息。SCN需要在集群中同步,RAC中用来使SCN在所有节点间通用的方案有两个:broadcast-on-commit和Lamport。
broadcast-on-commit是10.2以后的默认方案,它解决了Lamport方案的一个问题:在以前,这个默认方案是Lamport,它承诺了更好的扩展性,让SCN像集群其他通讯一样来传播,但并不是在一个节点中commit后马上发生。这在大部分情况下都能满足要求,但是,Lamport方案有一个问题:一个节点的SCN相对另一个节点的SCN有延时是可能的,特别是在在消息传送不活跃的时候。这种SCN的延时意味着在一个节点上提交的事务从另一个延时的实例上“看起来”会有点太新了。
另一方面,broadcast-on-commit方案更加资源集中一点。LGWR进程在每次commit之后更新全局的SCN并将其广播到所有的其他实例中。在RAC11.1中,初始化参数max_commit_propagation_delay允许数据库管理员来修改默认的设定,这个参数在11.2中被移除。
谁有Oracle的视频教程?帮助下
Oracle白金级入门教程百度网盘免费资源在线学习
链接: https://pan.baidu.com/s/12GelRT8Dr4xy6XtVfK5bmQ
Oracle白金级入门教程 鸿鹄论坛_阶段8-RAC高可用集群.rar
鸿鹄论坛_阶段7-数据库性能优化.rar
鸿鹄论坛_阶段6-DataGuard容灾.rar
鸿鹄论坛_阶段5-Oracle备份还原恢复.rar
鸿鹄论坛_阶段4-Oracle体系结构.rar
鸿鹄论坛_阶段3-PL-SQL编程.rar
鸿鹄论坛_阶段2-SQL结构查询语言.rar
鸿鹄论坛_阶段1-Oracle数据库的安装与介绍.rar
谁有Oracle的视频教程?帮助下
Oracle白金级入门教程百度网盘免费资源在线学习
链接: https://pan.baidu.com/s/12GelRT8Dr4xy6XtVfK5bmQ
Oracle白金级入门教程 鸿鹄论坛_阶段8-RAC高可用集群.rar
鸿鹄论坛_阶段7-数据库性能优化.rar
鸿鹄论坛_阶段6-DataGuard容灾.rar
鸿鹄论坛_阶段5-Oracle备份还原恢复.rar
鸿鹄论坛_阶段4-Oracle体系结构.rar
鸿鹄论坛_阶段3-PL-SQL编程.rar
鸿鹄论坛_阶段2-SQL结构查询语言.rar
鸿鹄论坛_阶段1-Oracle数据库的安装与介绍.rar
mysql和oracle的区别
MySQL与Oracle的区别:
一、Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
二、Oracle支持大并发,大访问量,是OLTP最好的工具。
三、安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
四、Oracle也Mysql操作上的一些区别:
1、主键Mysql一般使用自动增长类型,在创建表时只要指定表的主键为autoincrement,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
2、单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
3、翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
4、长字符串的处理长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
5、空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOTNULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
6、字符串的模糊比较MYSQL里用字段名like'%字符串%',ORACLE里也可以用字段名like'%字符串%'但这种方法不能使用索引,速度不快。
7、Oracle实现了ANSIISQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱。