




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、技术创新,变革未来ORACLE数据库双活RAC实践目录1、多租户数据库2、12c R2 sharding3、IN Memory4、多LGWR进程5、RMAN Recover Table6、DataPump的新特性7、在线迁移活跃数据文件8、表分区或子分区在线迁移9、不可见字段Upgrade To Oracle Database 12C云端的数据库:多租户OLTP 基准比较仅 3 GB 内存对比 20 GB 内存 (用于 50 个数据库)可插拔数据库扩展至 250 个以上,同时独立数据库实例最多为 50 个可插拔数据库与独立数据库高效率:硬件资源降低到 1/6,可伸缩性提高 5 倍云端的数据库:
2、多租户Oracle正式的名称是:Multitenant Architecture,多租户。其他的名称:因为CDB中的C是Container,因此又被称为容器数据库。因为PDB的P是Plugged,因此也被称为可插拔数据库。多租户架构目前最多可以支持 252 个 PDB对连接的客户端用户而言,无法分清使用的是 PDB 还是非 CDB多租户容器数据库根HCM12.1DW12.1CRM12.1ERP12.1可插拔数据库 (PDB)PDBRootCDB云端的数据库:多租户简单点说,多租户就是在一个数据库里塞多个数据库。一个CDB可以有N个PDB(至少1个)。所有PDB共享同一个SGA,和一系列的后台进
3、程。每个PDB都是一个相对独立的数据库。有独立的SYSTEM和数据文件。 但共享控制文件和Redo文件和UNDO表空间。当CDB是OPEN状态时,它里面的每个PDB可以是以下三种状态:MOUNTOPENOPEN Read OnlyCDBSGADBWRLGWRCKPTPMONPDB1 PDB2 UNDO表空间Redo File控制文件云端的数据库:多租户CDB$ROOT是CDB中的根PDB。它也是一个独立数据库。它的数据字典中包含其他PDB的信息。所以拔出某个PDB,可以说是从一个CDB的CDB$ROOT中拔出。而插入到另一个CDB,当然就是插入到另一个CDB中的CDB$ROOT了。CDB$RO
4、OT中的配置,就是所有PDB的默认配置。修改CDB$ROOT中的参数、配置,就是在整个CDB级修改。保存所有PDB信息的数据字典视图是dba_pdbs:SQL col pdb_name for a20SQL select pdb_id, pdb_name, dbid, con_uid, guid, status, con_id from dba_pdbs;PDB_ID PDB_NAME DBID CON_UID GUID STATUS CON_ID- - - - - - - 2 PDB$SEED 3752187096 3752187096 257DA1860ED60599E054000C298
5、0BC24 NORMAL 2 3 PDBTEST4 2804740952 1883059466 258198A7A89F0D75E054000C2980BC24 NEW 3 4 PDBTEST2 3133277598 3133277598 25E2961874B803B0E054000C2980BC24 NORMAL 4云端的数据库:多租户PDB$SEED是种子PDB,它只能以只读模式打开,不能手动关闭,只能随CDB$ROOT一起打开或关闭。创建新的PDB时,就是Clone PDB$SEED为一个新的PDB。它只包含SYSTEM表空间和SYSAUX表空间,而且我们不能增减它的表空间,也不能在它
6、里面创建表、索引等对象。PDB$SEED只用来作Clone操作时的源,无法对它进行任何操作。多租户架构多租户架构目前最多可以支持252个 PDBPDB 的使用感觉和操作与非CDB相同对连接的客户端用户而言,无法分清使用的是 PDB 还是非 CDB数据库链接云端数据库:多租户拔出/插入然后插入到新 CDB 中在 CDB 之间移动 PDB 的一种简单情况是移动PDB的元数据拔出的 PDB 携带者自身的信息、补丁、加密密钥信息等等云端数据库:多租户拔出/插入示例alter pluggable database HCMunplug into /u01/app/oracle/oradata/hcm.xm
7、lcreate pluggable database My_PDBusing /u01/app/oracle/oradata/hcm.xml插入拔出云端数据库:多租户多租户架构 动态性PDB 共享公共 SGA 和后台进程前台会话只看到自己连接到的 PDB云端数据库:多租户多租户的可伸缩性添加其他PDB时,只需增加少量内存云端数据库:多租户CDB 中的文件每个 PDB 都有自己的一组表空间,其中包括 SYSTEM 和 SYSAUXPDB 共享 UNDO、REDO 以及控制文件和 (s)pfile文件默认情况下,CDB 有单个 TEMP 表空间,但是 PDB 可以创建自己的表空间命名空间云端数据库
8、:多租户实现功能云端数据库:多租户使用多租户将多个数据库作为一个管理统一备份多个数据库;在可插拔数据库级别执行恢复DW12.1CRM12.1ERP12.1 一个备份对可插拔数据库进行时间点恢复多租户容器数据库云端数据库:多租户使用多租户将多个数据库作为一个管理所有可插拔数据库使用同一个备用数据库生产容器数据库HCM12.1DW12.1CRM12.1ERP12.1备用容器数据库HCM12.1DW12.1CRM12.1ERP12.1云端数据库:多租户多租户简化修补应用更改后,所有可插拔数据库都会更新多租户容器数据库DW12.1CRM12.1ERP12.112.x12.x12.x就地升级云端数据库:
9、多租户多租户的升级提供灵活的数据库修补和升级选择原始容器数据库 (12.1)升级后的容器数据库 (12.X)DW12.xCRM12.xDW12.1CRM12.1ERP12.1云端数据库:多租户通过变化的负载提高敏捷性利扩展集群支持灵活的整合模式节点 1CDB 实例 1节点 2CDB 实例 2多租户容器数据库 (CDB)CRMBIHCMERPDW服务每个CDB实例有一个SGA云端数据库:多租户多租户供应快速克隆PDB可以从同一个CDB内克隆PDB可以从远程CDB克隆PDB云端数据库:多租户管理共享资源多租户环境中的资源管理可以从同一个CDB内克隆PDB可以从远程CDB克隆PDB多租户容器数据库高
10、优先级中优先级低优先级DWCRMERP云端数据库:多租户管理CPUCDB资源计划使有用共享指定如何在PDB之间分配CPU可拔插数据库共享有保障的 CPU最大 CPUHCM22/4 = 50%100%CRM11/4 = 25%100%ERP11/4 = 25%100%2 个共享1 个共享1 个共享云端数据库:多租户多租户架构的优势降低资本支出和运营支出,提高敏捷性,简化使用每个应用程序有独立的 PDB应用程序无需更改即可运行快速供应(通过克隆)移植性(通过可插拔性)共享内存和后台进程每个服务器运行更多应用程序公共操作在CDB 级别执行将多个数据库作为一个管理(升级、高可用、备份)粒度控制(如果适
11、用)容器数据库Container Database云端数据库:多租户如何升级为多租户云端数据库:多租户升级为多租户第1步:就地升级数据库12.1ERP12.1CRM12.1DW容器数据库就地升级云端数据库:多租户升级为多租户第2步:插入已升级的数据库容器数据库12.1ERP12.1CRM12.1DW云端数据库:多租户借助复制进行迁移然后插入到新 CDB 中通过种子克隆新 PDB使用诸如 Oracle GoldenGate 或 Data Pump 等技术复制12.1 中的新功能,在单个 expdb 和 impdb 命令中就能够最大限度的利用可传输表空间来完成用户要求的完整数据库导出和完整数据库导
12、入。(向后移植到 11.2.0.3。)云端数据库:多租户1、多租户测试和开发灵活、及时地为可插拔数据库建立副本及快照生产容器数据库 开发容器数据库 DW12.1CRM12.1ERP12.1ERP 开发副本ERP 开发副本ERP 开发副本云端数据库:多租户2、整合不同的应用程序内存和进程分摊开销系统资源容器数据库云端数据库:多租户Oracle多用户客户评价“Oracle 多租户是一项技术进步。该技术不但使我们能够更好地控制模式和应用程序并将其隔离,而且使我们能够对发挥的性能作出明确的陈述并能够更好地管理更多数据库。”Carfax“现在,借助于 Oracle Database 12c,我们可以使用
13、可传输导出/导入将整个数据库从一个实例复制到另一个实例。这能够最大程度缩短迁移客户端数据库时的停机时。”Accenture“现在,借助于 Oracle Database 12c,我们可以使用可传输导出/导入将整个数据库从一个实例复制到另一个实例。这能够最大程度缩短迁移客户端数据库时的停机时。”Accenture“毫无疑问,Oracle Database 12c 最吸引人的功能就是支持整合。Oracle 多租户可以共享内存资源,由于这些数据库仍旧是单个数据库实例,因此能够简化管理。”Pythian云端数据库:多租户主要优点优势实现的功能最大程度降低资本支出每台服务器运行更多应用程序最大程度降低运
14、营支出将多个数据库作为一个管理标准化过程和服务级别快速供应最大程度提高敏捷性为开发/测试而克隆通过“可插拔性”实现移植性 借助 RAC 实现可伸缩性易于使用应用程序无需更改即可运行云端数据库:多租户基本操作案例多租户:创建CDB使用 DBCA手动创建,步骤同非CDB:准备参数文件Nomount启动实例执行建库命令运行初始化脚本多租户:创建CDBCREATE DATABASE CDBV4MAXINSTANCES 2MAXLOGHISTORY 1MAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024DATAFILE /export/home/oradb/ora
15、data/CDBV4/system01.dbf SIZE 300M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITEDEXTENT MANAGEMENT LOCALSYSAUX DATAFILE /export/home/oradb/oradata/CDBV4/sysaux01.dbf SIZE 200M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITEDSMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE /export/home/oradb/o
16、radata/CDBV4/temp01.dbf SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITEDSMALLFILE UNDO TABLESPACE UNDOTBS1 DATAFILE /export/home/oradb/oradata/CDBV4/undotbs01.dbf SIZE 100M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITEDCHARACTER SET WE8MSWIN1252NATIONAL CHARACTER SET AL16UTF16LOGFILE GROUP
17、 1 (/export/home/oradb/oradata/CDBV4/redo01.log) SIZE 100M,GROUP 2 (/export/home/oradb/oradata/CDBV4/redo02.log) SIZE 100M,GROUP 3 (/export/home/oradb/oradata/CDBV4/redo03.log) SIZE 100MUSER SYS IDENTIFIED BY Oracle1 USER SYSTEM IDENTIFIED BY Oracle1enable pluggable databaseseed file_name_convert=(/
18、export/home/oradb/oradata/CDBV4/system01.dbf,/export/home/oradb/oradata/CDBV4/pdbseed/system01.dbf,/export/home/oradb/oradata/CDBV4/sysaux01.dbf,/export/home/oradb/oradata/CDBV4/pdbseed/sysaux01.dbf,/export/home/oradb/oradata/CDBV4/temp01.dbf,/export/home/oradb/oradata/CDBV4/pdbseed/temp01.dbf);注意以下
19、选项:enable pluggable database:启用CDB。seed file_name_convert: 这是两个选项,SEED和FILE_NAME_CONVERT。建库命令中所创建的SYSTEM、SYSAUX等等表空间、数据文件都属于根PDB:CDB$ROOT,”seed”选项是声明创建PDB$SEED。Oracle会从CDB$ROOT Clone SYSTEM表空间和SYSAUX表空间来创建PDB$SEED,file_name_convert选项指定Clone表空间时新数据文件的位置。此选择的作用和用法类似Standby中的file_name_convert。多租户:创建CDB
20、创建新的PDB:bash-3.2$ sqlplus / as sysdbaSQL CREATE PLUGGABLE DATABASE pdbtest1 ADMIN USER dba1 IDENTIFIED BY a file_name_convert=(/export/home/oradb/oradata/CDBV3/pdbseed/,/export/home/oradb/oradata/CDBV3/pdbtest1/);或SQL CREATE PLUGGABLE DATABASE pdbtest2 FROM pdbtest1 file_name_convert=(/export/home/o
21、radb/oradata/CDBV3/pdbtest1/,/export/home/oradb/oradata/CDBV3/pdbtest2/);多租户:创建CDB连接到PDB的两种方式:先进入cdb$root,再alter session set container=.,进入指定PDB(如需要使用sys连接某一个PDB,必须使用此方式)bash-3.2$ sqlplus / as sysdbaSQL show con_nameCON_NAME-CDB$ROOTSQL alter session set container=pdbtest2;Session altered.SQL show c
22、on_nameCON_NAME-PDBTEST2conn ./.TNS_NAME,使用tns_name直接进入指定的PDBbash-3.2$ sqlplus system/Oracle1pdbtest2Connected to:SQL show con_nameCON_NAME-PDBTEST2多租户:连接CDBTNS_NAME的配置:pdbtest2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = h3)(PORT = 1521) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =
23、pdbtest2) ) )监听状态:bash-3.2$ lsnrctl statusLSNRCTL for Solaris: Version 12.1.0.2.0 - Production on 25-DEC-2015 16:46:10STATUS of the LISTENER-Services Summary.Service pdbtest2 has 1 instance(s). Instance CDBV3, status READY, has 1 handler(s) for this service.Service pdbtest4 has 1 instance(s). Instan
24、ce CDBV3, status READY, has 1 handler(s) for this service.The command completed successfully数据库service_names参数:SQL show parameter serviNAME TYPE VALUE- - -service_names string CDBV3PMON进程会像监听中注册所有已经OPEN的PDB。云端的数据库:数据字典视图数据字典所有元数据存放在CDB$ROOT的SYSTEM中,PDB SYSTEM中的数据字典表只保存一个指针,指向CDB$ROOT中真正的元数据。AWR数据也是在
25、CDB$ROOT中。比如某个Oracle自身的存储过程,其代码只在CDB$ROOT的SYSTEM中存储一份,其他PDB的SYSTEM中的指针全都指向CDB$ROOT中的存储过程。这样的目的有两个,一是节省空间,二是升级的时候只需要修改CDB$ROOT的SYSTEM中的元数据即可。视图的变化:CDB_ DBA_ ALL_ USER_增加CDB_系统数据字典视图,可以在全局级别查看对象,所有有时候能看到这样的情况:SQL col owner for a15SQL col table_name for a15SQL select owner, table_name from cdb_tables w
26、here table_name=T1;OWNER TABLE_NAME- -SYS T1SYS T1重复的对象。其实它们分属不同的PDP。但在CDB视图中,并无专门的列说明对象属于哪个PDB。只有当PDB OPEN时,才能在cdb_*视图中查到相关PDB的对象。对于DBA_ ALL_ USER_系列视图,在哪个PDB中发出查询命令,显示结果就是哪个PDB中信息。多租户:打开与关闭PDB原来的打开数据库方式,只是打开CDB$ROOT和PDB$SEED:bash-3.2$ sqlplus / as sysdbaConnected to an idle instance.SQL startupORA
27、CLE instance started.Total System Global Area 629145600 bytesFixed Size 3006784 bytesVariable Size 478154432 bytesDatabase Buffers 142606336 bytesRedo Buffers 5378048 bytesDatabase mounted.Database opened.SQL select con_id, name, open_mode from v$pdbs; CON_ID NAME OPEN_MODE- - - 2 PDB$SEED READ ONLY
28、 3 PDBTEST4 MOUNTED 4 PDBTEST2 MOUNTED多租户:打开与关闭PDB打开其他PDB的方式:alter pluggable database PDB_NAME1,PDB_NAME2, open READ ONLY FORCE UPGRADE RESTRICTEDalter pluggable database PDB_NAME1,PDB_NAME2, close immediate; /不加immediate必须等待正在连接PDB的用户退出。注意,没有abort选项。因为close只是把某个PDB从open状态转为mount状态,并不是关闭整个CDB,SGA内存并
29、没有释放,因此不存在abort。其他的打开PDB的命令:ALTER PLUGGABLE DATABASE ALL OPEN;ALTER PLUGGABLE DATABASE ALL CLOSE IMMEDIATE;ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 OPEN;ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE IMMEDIATE;另一种打开PDB的方式:bash-3.2$ sqlplus / as sysdbaConnected to:SQL alter session set container=pdbt
30、est2;Session altered.SQL alter database open;Database altered.多租户:参数管理整个CDB只有一个SPFILE参数文件,有些参数在各个PDB中可以设置为不同值。spfile中只保存CDB的参数值(或者说只保存CDB$ROOT的值),猜想各PDB的参数值是保存在CDB的数据字典中。在某一个pdb中create pfile from spfile,结果文件中将只包含此pdb和CDB不同的参数(也就是单独在此pdb中修改了的参数)。SQL show con_nameCON_NAME-PDBTEST2SQL alter system set
31、open_cursors=1000;System altered.SQL show parameter open_curNAME TYPE VALUE- - -open_cursors integer 1000转到CDB中:SQL show con_nameCON_NAME-CDB$ROOTSQL SQL show parameter open_curNAME TYPE VALUE- - -open_cursors integer 300转到PDBTEST2中:SQL create pfile=/export/home/oracle/pdbtest2.ora from spfile;File
32、created.bash-3.2$ cat /export/home/oracle/pdbtest2.ora*.open_cursors=1000多租户:参数管理有些参数不能在PDB级别修改,如内存相关参数:SQL alter system set memory_target=500m;alter system set memory_target=500m*ERROR at line 1:ORA-65040: operation not allowed from within a pluggable database所有PDB会共享SGA,无法限制某个PDB的内存使用情况。因此,不必要也不能修
33、改某个PDB的内存参数。内存参数只能在CDB$ROOT中修改(或者说,只能在CDB级别修改):SQL show con_nameCON_NAME-CDB$ROOTSQL alter system set memory_target=500m;System altered.多租户:表空间管理可以在PDB中创建表空间,每个PDB中的数据文件、表空间都是独立的。多个PDB可以使用同一表空间名。查询DBA_视图,只能看到当前PDB的信息:在根PDB CDB$ROOT:SQL select tablespace_name, file_name from dba_data_files;TABLESPACE
34、_NAME FILE_NAME- -SYSTEM /export/home/oradb/oradata/CDBV3/system01.dbfSYSAUX /export/home/oradb/oradata/CDBV3/sysaux01.dbfUSERS /export/home/oradb/oradata/CDBV3/users01.dbfUNDOTBS2 /export/home/oradb/oradata/CDBV3/undotbs2_1.dbf在PDBTEST2:SQL select tablespace_name, file_name from dba_data_files;TABL
35、ESPACE_NAME FILE_NAME- -SYSTEM /export/home/oradb/oradata/CDBV3/pdbtest2/system01.dbfSYSAUX /export/home/oradb/oradata/CDBV3/pdbtest2/sysaux01.dbfUSERS /export/home/oradb/oradata/CDBV3/pdbtest2/users01.dbf在PDBTEST4:SQL select tablespace_name, file_name from dba_data_files;TABLESPACE_NAME FILE_NAME-
36、-SYSTEM /export/home/oradb/oradata/CDBV3/pdbtest4/system01.dbfSYSAUX /export/home/oradb/oradata/CDBV3/pdbtest4/sysaux01.dbf多租户:表空间管理但如果在CDB$ROOT中查询V$视图,可以看到所有PDB中表空间的信息:SQL select ts#,name,con_id from v$tablespace order by con_id; TS# NAME CON_ID- - - 0 SYSTEM 1 1 SYSAUX 1 3 TEMP 1 4 USERS 1 5 UNDOT
37、BS2 1 0 SYSTEM 2 1 SYSAUX 2 2 TEMP 2 1 SYSAUX 3 0 SYSTEM 3 2 TEMP 3 1 SYSAUX 4 2 TEMP 4 3 USERS 4 0 SYSTEM 415 rows selected.因此V$视图中会增加CON_ID列,DBA_视图中则没有此列。这是因为每个PDB自己的SYSTEM表空间中保存自己的数据字典,因此DBA_视图只有某个PDB的信息。而V$视图中的信息则来自于控制文件,控制文件是所有PDB共享的。多租户:用户管理用户分两类:Common用户和Local用户。Common用户一旦创建,将在每个PDB中都存在,可以说Co
38、mmon是全局用户。Oracle的内部用户都是Common用户,比如SYS和SYSTEM。DBA自已创建的Common用户,必须以c#或C#开头。Local用户只存在某一个PDB内。在cdb$root中创建用户,同时以c#开头,将是common用户。在pdb中创建将是Local的,在cdb$root中创建用户,不以c#开头,也是Local的。Public也是一个Comman用户, 在每个pdb中可以授于Public不同的权限。多租户:角色管理角色也有common和local之分。Local的角色只能在某个PDB中使用。创建角色的规则同User。同一Common role,在不同pdb中可以有不
39、同的权限。多租户:权限与角色Common用户在不同PDB中可以有不同的权限。权限相关命令有两个级别:当前PDB和所有PDB,使用选项CONTAINER=current|ALL控制。“CONTAINER=all”只能针对common用户使用。命令使用示例:在CDB$ROOT中创建c#u2用户:SQL create user c#u2 identified by a;User created.SQL grant create session to c#u2 CONTAINER=all;Grant succeeded.在其他PDB中创建Common用户将报出错误:SQL create user c#
40、u3 identified by a;create user c#u3 identified by a *ERROR at line 1:ORA-65094: invalid local user or role name多租户:PDB的插拔1). 拔出alter pluggable database pdbtest1 close;alter pluggable database pdbtest1 unplug into /export/home/oracle/pdb/CDBV1.xml; XML文件中包含此PDB的如下信息:表空间数据文件Local用户和Local角色针对此PDB修改过的参数
41、少量性能资料(CPU使用量、软、硬解析次数、DB Block Changes等等)2). 备分PDB相关文件rman target /BACKUP FOR TRANSPORT AS COMPRESSED BACKUPSET PLUGGABLE DATABASE PDBTEST1 FORMAT /export/home/oracle/pdb/PDBTEST_%U.pdb; 3). 拷贝XML文件和RMAN备份集文件到目标库多租户:PDB的插拔4). 在目标库上还原RAMN备份集:rman target /RESTORE FOREIGN DATAFILE 12 format /export/hom
42、e/oradb/oradata/CDBV3/pdbtest4/sysaux01.dbf, 11 format /export/home/oradb/oradata/CDBV3/pdbtest4/system01.dbf FROM BACKUPSET /export/home/oracle/pdb/PDBTEST_01qnvmlg_1_1.pdb ;和之前版本的还原命令不同的是,不要求控制文件中有备份集信息,可以使用选项“FROM BACKUPSET ”指定备份集位置。在目标库中运行下面的PL/SQL,可以检查XML对应的PDB是否兼容当前CDB:set serveroutput onDECLA
43、RE l_result BOOLEAN;BEGIN l_result := DBMS_PDB.check_plug_compatibility( pdb_descr_file = /export/home/oracle/pdb/CDBV3_test1.xml, pdb_name = pdbtest1); IF l_result THEN DBMS_OUTPUT.PUT_LINE(compatible); ELSE DBMS_OUTPUT.PUT_LINE(incompatible); END IF;END;/多租户:PDB的插拔5). 将PDB插入到目标数据库:create pluggable
44、 database pdbtest3 using /export/home/oracle/pdb/CDBV3_test1.xmlsource_file_name_convert= (/export/home/oradb/oradata/CDBV3/pdbtest1/,/export/home/oradb/oradata/CDBV3/pdbtest3/) file_name_convert=NONE NOCOPY tempfile reuse ;6). 在目标库打开新的pdbalter pluggable database pdbtest1 open;7). 删除源数据库的PDB(此步不是必须的
45、)drop pluggable database pdbtest1;云端的数据库:NoCDB转换为CDB1) 以受限模式打开数据库:shutdown immediate;startup restrict mount exclusive; alter database open read only; 2) 生成XML元数据描述文件:begin dbms_pdb.describe(PDB_DESCR_FILE = /u02/noncdb/orcl.xml); end; /3) 创建PDBcreate pluggable database orcl using /u02/noncdb/orcl.xm
46、l copy;4) 执行noncdb_to_pdb脚本alter session set container=orcl;?/rdbms/admin/noncdb_to_pdb.sql12c R2 shardingSharding,中文名叫数据分片,是对数据进行横向扩展的一种方式。数据量增加,我可以通过加一台机器,来扩展其容纳能力和处理能力。Sharding的三个问题:一、数据的路由:数据库告诉应用程序,你让我查的数据目前在哪个分片上,这条路怎么走过去。二、数据的分片:实际数据的存放地点,往往每个分片就是一台单独的服务器(含存储)。三、分片的元数据信息保存:分片的数据实际是被切割放在不同的机器上
47、,那么需要有个集中的地点存放数据分片的信息12c R2 shardingMongoDB的配置单:路由服务器(Router)解决路由问题分片服务器(Shard)存储实际数据(可能还有副本和仲裁)以及配置服务器(Config Server)存放分片元数据MongoDB架构:12c R2 shardingoracle12C:就是GDS框架(GSM,shard directors)shard nodeshardcat数据库12c R2 shardingSharding有哪些缺点:1. 增加了SQL的复杂性。因为开发人员必须要写更复杂的SQL来处理sharding的逻辑。2. Sharding本身带来的
48、复杂性。sharding软件需要照顾分区,数据平衡,访问协调,数据完整性。3. 单点故障。一个shard损坏可能导致整张表不可访问。4. 失效接管服务器也更复杂。因为负责失效接管的服务器必须拥有任何可能损坏的shard上的数据。5. 备份也更复杂。多个shard可能都需要同时备份。6. 维护也更复杂。比如增加删除索引,增减删除字段,修改表定义等等,都变得更困难。12c R2 sharding Sharding最佳实践:Shardcat是非常重要的一个模块,上面不仅仅有分片的元数据信息,还有duplicated table的master table信息,另外,当进行cross shard que
49、ry的时候,他还起着coordinator database的作用。所以建议对这个部分搭建RAC+adg架构,避免shardcat的单点故障。shard node,单个shard node的失效,将导致整个表的不可用。所以我们也要对shard node建立高可用的副本,这里可以用ADG或者OGG的技术。Sharding架构极其考验对应用的熟悉程度,需要配合应用进行合理的分区和分片。另外,如sharding key必须建索引,sharding的方式可以有一致性hash,让数据均匀分布,也还是可以是range或者list分区,或者hash-range,hash-list的子分区。分片和分区方式需要
50、结合业务,有些场景需要相关数据都在一个分区,避免cross shard join,有些场景需要均匀分片,禁止集中分片,导致热块数据都在一个分片上(如序列增长,做range分区,热点数据将会都在一个分片上)。思考:一个10个shard node的环境,按照上述规划,需要多少台机器In-Memory Option详解In-Memory Option:概述SGAIMCOSMCOWnnnIn-Memory Area1MIMCU(In Memory Compression Units)1M1M1M1M1M1M1MTX JournalBuffer cacheShare PoolLog Buffer其他PO
51、OL每个IMCU 1M大小左右,具体大小由Oracle自己决定。表的数据以列为单位保存在IMCU中。一个表至少占一个IMCU。我们不能指定只保存表的一部分列,Oracle把自动把表的所有列缓存在In-memory Area中。DML操作将同时针对表相关数据和缓存在IMCU中的数据。Tx Journal中记录IMCU的前映象,以提供未提交事务的一致读。IMCO:调度进程,负责IM内存数据的加载和重载的计划调度,它每两分钟会触发一次。SMCO/Wnnn:该两个后台进程是实际去执行IM对象加载和重载工作的进程In-Memory Option详解In-Memory Option详解In-Memory
52、Option:加载优先级加载优先级优先级含义critical最高优先级,在数据库启动后,具有该优先级的对象首先加载HIGH在所有的critical对象被加载完后仍有空间, 开始加载该级别对象MEDIUM在前两个优先级对象被加载完后仍有空间, 开始加载该级别对象LOW在前三个优先级对象被加载完后仍有空间, 开始加载该级别对象NONE只有在该对象被访问,并且IM依旧有足够的空间情况下加载 非必要情况,尽可能选择默认的NONE级别,提升数据库启动过程的效率。 对于必要加载对象,可以选择非繁忙时段,手工触发加载,因为加载过程会有较 高的CPU开销。 In-Memory Option:压缩级别压缩级别压
53、缩级别解释NO MEMCOMPRESS不压缩MEMCOMPRESS FOR DML兼顾DML性能的轻量级压缩MEMCOMPRESS FOR QUERY LOW兼顾查询性能的压缩MEMCOMPRESS FOR QUERY HIGH同时兼顾节约空间和查询性能的压缩MEMCOMPRESS FOR CAPACITY LOW倾向于节约空间的压缩MEMCOMPRESS FOR CAPACITY HIGH针对节约空间的压缩SQLalter table sales inmemory memcompress for query low priority critical; IMO进行列式压缩后,大致可以获得22
54、0倍的空间节省,不仅取决于压缩级别选项,同样 依赖于数据本身的特点。 MEMCOMPRESS FOR CAPACITY HIGH虽然压缩比最大,但在查询性能上不会有太大的劣势。 In-Memory Option:压缩级别Wnnn数 表名 行数 表大小( GB)缓存大小( GB) 缓存类型 加载时间( s)压缩比10 frank_test 206,609,165 46.61 40.09 NO MEMCOMPRESS 191 1.1610 frank_test 206,609,165 46.61 38.79 FOR DML 199 1.2010 frank_test 206,609,165 46.
55、61 18.59 FOR QUERY LOW 436 2.5110 frank_test 206,609,165 46.61 14.6 FOR QUERY HIGH 456 3.1910 frank_test 206,609,165 46.61 9.8 FOR CAPACITY LOW 612 4.7610 frank_test 206,609,165 46.61 7.16 FOR CAPACITY HIGH 692 6.51列式存储加载压缩测试: 以测试大表frank_test为例,各级别压缩比为1.166.51,最大未及10倍压缩。 从加载速度上来看,开启10个加载进程,加载速度与压缩比呈
56、正比例上升趋势。 In-Memory Option:开启设置In Memory Area大小:SQL alter system set inmemory_size=100m scope=spfile;System altered.重启数据库:SQL shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL startupORACLE instance started.Total System Global Area 629145600 bytesFixed Size 3006784
57、bytesVariable Size 452988608 bytesDatabase Buffers 62914560 bytesRedo Buffers 5378048 bytesIn-Memory Area 104857600 bytesDatabase mounted.Database opened.SQL In-Memory Option加载对象SQLalter table sales inmemory no memcompress priority critical;SQLALTER TABLESPACE ts_data INMEMORY;SQLALTER TABLE sales M
58、ODIFY PARTITION SALES_201501 INMEMORY;oracle支持对表,分区或表空间指定in memory属性,也就是说in memory属性是针对物理数据库对象的,而不是逻辑数据库对象的In-Memory Option:将表加载到内存中SQL select count(*) from t2;Execution Plan-Plan hash value: 3321871023-| Id | Operation | Name | Rows | Cost (%CPU)| Time |-| 0 | SELECT STATEMENT | | 1 | 515 (1)| 00:0
59、0:01 | 1 | SORT AGGREGATE | | 1 | | | 2 | TABLE ACCESS FULL| T2 | 461K| 515 (1)| 00:00:01 |-Note- - dynamic statistics used: dynamic sampling (level=2)Statistics- 0 recursive calls 0 db block gets 1796 consistent gets 1788 physical reads 0 redo size 542 bytes sent via SQL*Net to client 551 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微生物检测技术的伦理问题探讨试题及答案
- 硅冶炼在太阳能热利用的潜力考核试卷
- 2024年微生物检测技术的整合试题及答案
- 2025年银行从业资格证考试关键策略试题及答案
- 类似品密封材料的耐磨损机理研究考核试卷
- 2024年项目管理考点理解试题及答案
- 全景回顾特许金融分析师考试试题及答案
- 电视机智能传感技术与运动追踪考核试卷
- 项目管理专业人士的考试思路试题及答案
- 磷肥生产设备操作与维护考核卷考核试卷
- 铅锌矿的选矿工厂自动化控制技术
- 体育赛事管理课件
- 2024年采血针行业分析报告及未来发展趋势
- 大学生思想政治理论课研究性学习成果
- SL176-2007 水利水电工程施工质量检验与评定规程
- 小学各年级 小学一年级 了解自己的优点和弱点 主题班会
- 酒店网络营销外文翻译文献
- 油泼面广告语
- 咽部肿瘤的诊治
- 情景题心理测试题目及答案
- 2023-2024学年北京东城区北京汇文中学化学高一第一学期期末质量检测模拟试题含解析
评论
0/150
提交评论