首页 文章 精选 留言 我的

精选列表

搜索[oracle12c],共18篇文章
优秀的个人博客,低调大师

Oracle12C新特性——cdb与pdb

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。 其实大家如果对SQL SERVER比较熟悉的话,这种CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事呢。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。看来ORACLE也“抄袭”了一把SQL SERVER的概念,只是改头换面的包装了一番。 1、CDB组件(Components of a CDB) 一个CDB数据库容器包含了下面一些组件: ROOT组件 ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。 SEED组件 Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库。 PDBS CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。 这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。 注意: ①:一个CDB可以包含253个PDB(去掉一个是seed还能创建252个PDB)。 ②:Root,seed以及每一个PDB的数据文件是独立的。 ③:一个单实例的CDB有一个redo log;RAC环境中每个实例有一个redo log。 ④:只有一组后台进程,它们被ROOT和所有PDB共享。 ⑤:Root的全局数据库名就是CDB的全局数据库名;PDB的全局数据库名是由PDB name和DB_DOMAIN参数共同定义的。 ⑥:一个CDB使用一个SPFILE或者一个PFILE,其中为ROOT设置的参数的值可以被PDB继承。另外,也可以使用ALTER SYSTEM语句来设置PDB的参数。对参数文件执行 操作时,必须使用common user并且使用AS SYSDBA, ASSYSOPER, AS SYSBACKUP来连接数据库。要创建CDB,必须要将初始化参数ENABLE_PLUGGABLE_DATABASE的 值设置为TRUE。 ⑦:所有PDB的字符集都使用CDB的字符集。 可以设置所有PDB的时区与CDB相同,也可以单独为PDB设置时区。 块大小被应用于整个CDB。 一个CDB也仅有一个控制文件(可以多路复用)。 ⑧:Root与每一个PDB都有自己的SYSAUX表空间和SYSTEM表空间。可以为root和每一个PDB设置默认表空间。而默认的临时表空间对于整个CDB只有一个,但是可以为 每个PDB创建临时表空间。 ⑨:撤销表空间对于CDB是唯一的。在CDB中,初始化参数UNDO_MANAGEMENT必须被设置为AUTO。当前容器为PDB时,无法通过数据字典视图查看撤销表空间,只能通 过动态性能视图。 2、PDB简介 2.1、PDB新特点的优势 》可以把多个PDB集成进一个平台。 》可以快速提供一个新的PDB或一个已有PDB的克隆。 》通过拔插技术,可以快速把存在的数据库重新部署到一个新平台上。 》多个PDB数据库补丁或升级一次完成。 》通过把单个PDB拔插到较高版本的不同CDB,可以补丁或升级一个PDB。 》从同一个CDB中众多PDB中分离出某个PDB的内容。 》分离这些PDB应用管理员的责任。 2.2、PDB新特点的功能 》在一个CDB中,你可以拥有很多PDB。 》PDB和12.1之前版本的普通数据库是向后兼容的。 》PDB对应用是透明的——你不需要改变客户端代码或数据库对象。 》RAC中每个实例作为一个整体打开CDB(因此CDB和其中的PDB数据库版本都是相同的)。 》会话仅仅看到它自己连接的那个PDB。 》你可以从一个CDB拔出一个PDB,然后插入另一个CDB。 》你可以在同一个CDB或不同CDB间克隆PDB。 》资源管理器随着PDB的功能得以扩展。 》通过SQL语句实现了实体PDB的操作(创建,拔出,插入,克隆,清除,设置打开模式)。 》当连接到所谓的“根”(root)时,CDB管理员来执行这些操作。 》所有的PDB能被一次备份,但可以分别单独恢复。 2.3、PDB的详解 》每个PDB有自己的私有数据字典用于用户创建的数据库对象;另一方面,CDB作为一个整体也包含Oracle提供系统的数据字典,其中,每个数据字典定义自己的命名空间。换句话说,有全局数据字典(CDB级)和本地数据字典(PDB级)。 》有新的分开的数据字典架构,该架构允许一个PDB被快速从一个CDB拔出并插入一个不同的CDB。 》每个PDB只能看到oracle提供系统的只读定义。 》有全局数据库参数,也有本地数据库参数。PDB参数仅仅属于特定的PDB,并且拔出后,PDB参数也将保持不变。 》数据库用户可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用户一开始就在两级DB中存在。如果你在CDB中创建了一个新用户,那么你在PDB中也能看到这个用户。在PDB中创建的用户只能在该PDB中使用。 》临时表空间可以是全局或本地的。 》Redo日志和Undo表空间都是全局的(CDB级)。 》Data Guard在CDB级作为一个整体发挥作用;RMAN调度的备份也作为一个整体在CDB级完成;任何时候,你可以只备份一个PDB。 》应用连接PDB时,不需做代码修改;系统管理员可以连接CDB;连接串中的服务名确定目标PDB。 》PDB允许更加清晰的声明定义一个应用;一个PDB对同一个CDB里的其他PDB一无所知;每个PDB是个密闭的容器。这保证了新层面DB的独立和安全。 3、日常操作: 3.1、查看当前的容器 SQL> show con_name; CON_NAME ------------------------------ CDB$ROOT ------或: SQL> select Sys_Context('Userenv', 'Con_Name') "current Container" from dual; current Container -------------------------------------------------------------------------------- CDB$ROOT 3.2、查看CDB中的PDB信息: SQL> select con_id, dbid, guid, name , open_mode from v$pdbs; CON_ID DBID GUID NAME OPEN_MODE ---------- ---------- -------------------------------- ------------------------------ ---------- 2 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY 3 1891424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE ---feige就是一个PDB 3.3、创建一个新的PDB: SQL> create pluggable database test_pdb admin user admin identified by admin; SQL> alter pluggable database test_pdb open; ----将test_pdb 打开 SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs; ---查看pdb的状态 CON_ID DBID CON_UID GUID NAME OPEN_MODE CREATE_SCN TOTAL_SIZE BLOCK_SIZE ---------- ---------- ---------- -------------------------------- ------------------------------ ---------- ---------- ---------- ---------- 2 427872663 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY 1594401 838860800 8192 3 1891424478 1891424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE 1753608 865075200 8192 4 2998508999 2998508999 53F376E8715628BCE055000000000001 TEST_PDB READ WRITE 1757024 859832320 8192 (“admin user”子句是必须的,在扩展格式,给新用户赋予了权限和角色,该用户仅在admin内可以创建新会话。在创建完可插拔数据库后,新的PDB处于MOUNTED模式) 3.4、克隆一个pdb SQL> create pluggable database test2_pdb from test_pdb; ---test_pdb必须是打开的,才可以被打开 SQL> alter pluggable database test2_pdb open; ---然后打开这个pdb 3.5、切换到PDB,或切换到CDB SQL> alter session set container=test_pdb; ---切换到pdb中 SQL> alter session set container=cdb$root; ---切换到CDB中 3.6、关闭一个pdb和关闭所有的pdb SQL> alter pluggable database test_pdb close; ---关闭test_pdb这个pdb数据库 SQL> alter pluggable database all close; ---关闭数据库中所有的pdb 3.7、插拔一个pdb数据库 SQL> alter pluggable database feige close; ---先将feige这个pdb关闭 SQL> alter pluggable database feige unplug into '/opt/oracle/oradata/feige.xml'; (feige.xml:文件确定数据文件的名字和全路径等信息。这些信息在插入操作时会用到。注意:PDB还是其从中拔出的CDB的一部分,只是现在状态变为了拔出(UNPLUGGED)而已。) SQL> drop pluggable database feige keep datafiles; ----在当前的容器中删除这个pdb ----如果在这个服务器上,有两个容器,则进入另一个容器,插入这个pdb exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/opt/oracle/oradata/feige.xml'); --查看pdb和这个容器是否兼容,如果报错说明不兼容 ----开始插入pdb,(using关键字后必须跟上PDB描述的绝对路径,即,先前拔出操作时产生的.XML文件) create pluggable database feige using '/opt/oracle/oradata/feige.xml' move file_name_convert = ('/cdb1/', '/cdb2/'); ----最后打开这个pdb alter pluggable database feige open; 3.8、连接pdb数据库: 连接pdb其实和连接正常的单实例数据库是一样的,连接注册的服务名即可,可以通过下面的方式: ①:使用监听注册的服务名连接,如下: [oracle@localhost ~]$ lsnrctl status ---通过这个命令查找注册的服务名 [oracle@localhost ~]$ sqlplus system/oracle@192.168.2.100:1521/feige ---这样连接到PDB数据库 ②:通过tnsnames配置文件连接,如下: feige = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = feige) ) ) [oracle@localhost admin]$ sqlplus system/oracle@feige ----使用这种方式连接 ---至此,cdb与pdb就先总结到这里,一些基础的知识和操作都有介绍 本文转自一个笨小孩51CTO博客,原文链接:http://blog.51cto.com/fengfeng688/1946278 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Oracle12c之 CDB数据库中数据字典架构

数据字典就是元数据的集合,比如创建的表,列,约束,触发器等等这些都是元数据,需要保存到数据库中。除此之外,Oracle自身的一些数据库对象,如目录,PL/SQL代码等等这些都是元数据,都需要存放在数据字典中。随着12c 容器数据的普及,Oracle数据字典发生了哪些变化呢,下文即是具体描述。 一、数据字典及其形成 1、数据字典 数据字典是元数据的集合,从逻辑上和物理上描述了数据库及内容,存储于SYSTEM与SYSAUX表空间内的若干段。 SYS用户拥有所有的数据字典表,数据字典基本一般以结尾,如col,tab$等,这些数据字典存放在system表空间中。 2、数据字典的形成 在数据库创建阶段创建,在使用阶段维护和更新 无法通过DML操作来修改,只能通过相关的命令修改系统,来达到间接修改数据字典。 3、数据字典包括的内容 数据库对象的定义信息 用户定义信息 PL/SQL代码 用户创建的其他对象等 关于数据字典详细介绍可以参考:Oracle 数据字典和数据字典视图 二、CDB数据库中数据字典架构 1、数据字典存放方式的变更 在Oracle 12c之前的数据库版本,系统数据字典和用户数据字典采取了混合存放的处理方式。 在Oracle 12c CDB数据库中采取分离存放的方式,及各个PDB数据字典独立存放。 从用户和应用程序的角度来看,CDB中每个容器中的数据字典是分开的,因为它将在非CDB中。 2、非CDB混用数据字典情形示意图 在新创建的不包含用户数据的非CDB中,数据字典仅包含系统元数据。 例如,TAB$表包含仅描述Oracle提供的表的行,例如TRIGGER$和SERVICE$。 随着用户数据库对象添加到数据库,则用户添加的这些对象信息被混合存放到了系统数据字典(即Oracle提供的数据对象字典) 如下图描绘了二个基础数据字典表 左边图示中黑色条表示描述系统数据字典的行,绿色条的表示用户对象产生的行相间到数据字典表 3、CDB分离数据字典情形示意图 在CDB中,数据字典元数据在根和PDB之间分割。 在下图中,表emp和dept位于PDB中。该用户数据的数据字典也驻留在PDB中。因此,TAB$PDB中的表具有emp表的行和表dept的行。 那对于Oracle提供的系统对象(系统级别数据字典)要如何访问呢,Oracle通过内部指针的方式来实现。 如下图显示PDB中的数据字典包含指向根中数据字典的指针。在内部,Oracle提供的对象(如数据字典表定义和PL / SQL包)仅在根中表示。 这种架构实现了CDB内的两个主要目标: 减少重复 例如,DBMS_ADVISORCDB不是将PL / SQL包的源代码存储在每个PDB中,而是将其存储在CDB$ROOT其中,从而节省了磁盘空间。 易于数据库升级 如果数据字典表的定义存在于每个PDB中,并且如果定义在新版本中更改,则每个PDB将需要单独升级以捕获更改。在根中存储表定义只有一次消除了这个问题。 4、元数据和数据链接 CDB使用内部链接机制来分离数据字典信息。 具体来说,Oracle数据库使用以下自动管理的指针: 元数据链接 Oracle数据库仅在CDB根目录中存储有关字典对象的元数据。例如,数据字典视图下的OBJ$字典表的列定义DBA_OBJECTS仅存在于根目录中。如前一图示,OBJ$在每个PDB表使用称为内部机构的元数据链接指向存储在根定义的OBJ$。 该数据对应于元数据链路驻留在其PDB,而不是在根。例如,如果您在hrpdb上的表mytable中添加行,然后将行存储在PDB数据文件。PDB和根中的数据字典视图包含不同的行。描述表mytable的一个新行被添加到hrpdb的OBJ$,但是不存在于CDB根目录中的OBJ$。因此,查询DBA_OBJECTS在CDB根和DBA_OBJECTS在hrdpb显示出不同的结果。 数据链接 注意: Oracle数据库12 c版本1(12.1.0.2)中的数据链接称为对象链接。 在某些情况下,Oracle数据库将一个对象的数据(不仅仅是元数据)存储在应用程序根目录中。应用程序PDB使用称为数据链接的内部机制来引用应用程序根目录中的对象。创建数据链接的应用程序PDB还存储数据链接描述。数据链接继承其所涉及的对象的数据类型。 扩展数据链接 扩展数据链路是数据链路和元数据链路的混合。像数据链接一样,扩展数据链接引用应用程序根目录中的对象。然而,扩展数据链路也引用PDB中的相应对象。像元数据链接一样,应用程序PDB中的对象从应用程序根目录中的相应对象继承元数据。 在应用程序根目录中查询时,扩展的数据链接对象仅从应用程序根目录中获取行。然而,当在应用程序PDB中查询时,扩展的数据链接对象从应用程序根和应用程序PDB中获取行。 Oracle数据库自动创建和管理元数据和数据链接CDB$ROOT。用户无法添加,修改或删除这些链接。 三、演示非CDB及CDB数据字典 1、基于非CDB数据库数据字典变化演示 SQL> SELECT name, 2 DECODE (cdb, 3 'YES', 'Multitenant Option enabled', 4 'Regular 12c Database: ') 5 "Multitenant Option", 6 open_mode, 7 con_id 8 FROM v$database; --如查询结果所示,为非CDB数据库 NAME Multitenant Option OPEN_MODE CON_ID --------- -------------------------- -------------------- ---------- NOCDB Regular 12c Database: READ WRITE 0 --检查当前数据库数据字典是否存在T1对象 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected --当前数据库总对象数 SQL> select count(*) from obj$; COUNT(*) ---------- 21703 --由于当前的cdb为手工创建,因此,创建一个新用户 SQL> create user leshami identified by pass 2 default tablespace users; --授权 SQL> grant dba,resource,connect to leshami; SQL> conn leshami/pass SQL> create table t1(id number,ename varchar2(20)); SQL> conn / as sysdba --可以查询到对象已经添加到数据字典 SQL> select name,owner#,ctime from obj$ where name='T1'; NAME OWNER# CTIME ---------- ---------- --------- T1 72 01-JUN-17 --相应的总数目也增加了1个 SQL> select count(*) from obj$; COUNT(*) ---------- 21704 2、基于CDB数据库数据字典变化演示 SQL> SELECT name, 2 DECODE (cdb, 3 'YES', 'Multitenant Option enabled', 4 'Regular 12c Database: ') 5 "Multitenant Option", 6 open_mode, 7 con_id 8 FROM v$database; --此查询结果如下,即连接到了CDB数据库 NAME Multitenant Option OPEN_MODE CON_ID --------- -------------------------- -------------------- ---------- CDB1 Multitenant Option enabled READ WRITE 0 --当前CDB数据库下的容器 SQL> select name,con_id,open_mode from v$containers; NAME CON_ID OPEN_MODE ------------------- ---------- ---------- CDB$ROOT 1 READ WRITE PDB$SEED 2 READ ONLY CDB1PDB1 3 MOUNTED --在CDB容器数据字典中查看是否存在表T1,如下结果显示为无 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected --统计当前CDB容器数据字典中obj$的总数目 SQL> select count(*) from obj$; COUNT(*) ---------- 72635 --打开pdb数据库cdb1pdb1 SQL> alter pluggable database cdb1pdb1 open; Pluggable database altered. --切换到pdb容器数据库cdb1pdb1 SQL> alter session set container=CDB1PDB1; --在PDB中查看是否存在表T1 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected --统计PDB容器数据字典中obj$的总数目 SQL> select count(*) from obj$; COUNT(*) ---------- 72648 --开启另外一个session,使用hr账号登陆 $ sqlplus hr/hr@cdb1pdb1 --创建表对象 SQL> create table t1(id number,ename varchar2(20)); --切换到cdb数据库 SQL> conn / as sysdba SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog, 2 '645746311' QQ from dual; AUTHOR BLOG QQ ------- ---------------------------- --------- Leshami http://blog.csdn.net/leshami 645746311 SQL> select name,owner#,ctime from obj$ where name='T1'; no rows selected SQL> select count(*) from obj$; --数据库对象在cdb中不存在,总数也没有增加 COUNT(*) ---------- 72635 --切换到pdb数据库 SQL> alter session set container=CDB1PDB1; SQL> select name,owner#,ctime from obj$ where name='T1'; --数据字典中存在已创建的对象 NAME OWNER# CTIME --------------- ---------- --------- T1 107 01-JUN-17 SQL> select count(*) from obj$; --数据字典总数目增加1条 COUNT(*) ---------- 72649 四、数据字典视图 在启用CDB之后,数据字典相关视图也有一些变化,主要是增加了CDB相关的视图。如下图所示: 转:http://blog.csdn.net/leshami/article/details/72833564 本文转自 张冲andy 博客园博客,原文链接: http://www.cnblogs.com/andy6/p/7527786.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

Oracle12c R2:利用分片技术提升分布式性能

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 Oracle 12c R2最近发布的版本支持数据库分片功能,该功能意在提升Oracle旗舰数据库在云架构环境中的性能,从数据库水平扩展框架中获益。 在云环境中提升数据扩展性对Oracle来说非常重要,因为Oracle在从内部构建环境迁移到云环境的过程中会承担更多负载,同时会要求成本更低。 Oracle分片功能吸取了Cassandra、MongoDB和Amazon DynamoDB这些NoSQL数据库的长处。这些数据库以及其它一些NoSQL数据库都支持分片技术,使得数据库可以水平跨多个服务器部署。 该技术不仅局限在NoSQL,在许多主流关系数据库中也是支持的,例如PostgreSQL和MySQL数据库。 在Oracle 2016年全球大会上的Oracle数据库路线地图讨论会上,Oracle公司负责数据库服务器技术的执行副总裁Andrew Mendelsohn表示:“Amazon采用分片技术已经许多年了”。不过,他指责Amazon的实现需要太多人工干预。 有许多分片方案需要应用程序代码控制很多活动。Mendlesohn说,Oracle使用的是本地数据库分片架构,减少了数据库管理系统的控制工作,节省了开发时间。 他补充说,Oracle最初策略是支持跨一千台服务器分片,但是预计支持能力还要扩展。 服务器场环境分片应用 Facebook运行开源关系型数据库MySQL数据库数据场中大量使用了分片技术。或许这很令人惊讶,不过这家社交媒体巨头也使用Oracle数据库,用于财务和运营应用系统。Sudhi Vijayakumar是Facebook公司数据库系统架构师,他在Oracle全球大会分片技术分会上交流时提到了以上信息。 Vijayakumar曾与Oracle公司工程师一起工作过,一直在准备数据集市的概念验证实施,将实现准实时报表生成。他说:“我们期待Oracle实现分片技术。” 他建议Oracle分片能支持应用增长需求,无需额外人员来管理。通常传统企业比较关注这个目标,像Facebook这种使用云环境的标杆企业关注这方面还是比较少见的。 Oracle创新进退维谷 Oracle分片可以使用公司的RAC(实时应用集群),也可以不用。这些集群使用了共享磁盘的方式提供了我们熟悉的关系型数据一致性,Oracle用这种方式扩展数据库已经有好多年了。 很多人认为RAC方式关联成本过于昂贵,在许多情况下,软件架构师会构建超大规模云。而且,大部分工作可以通过“最终一致性”得以满足。这样公司就可以在打造许多分布式数据技术的同时,比较广泛的使用分片技术。 Guy Harrison是澳大利亚墨尔本的位独立咨询顾问和作家。他认为,对于大规模扩展分片技术是比RAC更好的架构。RAC更多依赖于纵向扩展,而不是横向扩展;RAC需要使用独立于数据库节点的共享磁盘系统。 他说:“使用分片技术,每个节点都有自己的磁盘,磁盘可能直接在商用服务器上。如果你需要添加节点,可以一并添加磁盘、CPU和内存,使用更廉价的商用‘pizza box’服务器。”(pizza box 服务器这里表示普通廉价的服务器。) 他说,节点之间需要的协作较少,当然也取决于应用程序。这种架构缺点是集群范围内的查询效率会较低,一致性稍差,跨集群实现真正的ACID一致性是很难维护的。 Harrison对于现在从内部部署应用和数据库迁移向云环境的整体趋势几乎没有什么疑问。他表示,数据库是***迁移到云端的部分,通常数据库会根据应用的情况进行考虑。 他说:“在许多情况下,人们要构建新东西时,会在内部花大价钱购置大量硬件和从云端获取方便的服务之间做比较。这不是一个太艰难的决定。与你可以在云环境中租用到的环境相比,构建这些基础设施是非常昂贵的。” Harrison说,他对Oracle数据库向云迁移很感兴趣。不过,与其他人一样,他也期望向云迁移能带来相应的经济效益。 “在某种程度上,他们要获得比内部部署更好的收益。如果没有一点利益,想让他们的用户迁移到云环境是很困难的。所以,这是个棘手的问题。”

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat

Apache Tomcat

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。