系统结构概述
首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。
图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构
图 2. DB2 on Linux, UNIX, and Windows 系统结构
回页首
实例
在 Oracle 和 DB2 中,实例 的概念是类似的。在这两者之中,实例都是指后台进程与共享内存的组合。两者之间的主要差别在于,在 Oracle 中每个实例只能有一个数据库,而在 DB2 中多个数据库可以共享一个实例。
在 Oracle 中,由于数据库与实例是一对一的关系,因此用 CREATE DATABASE 命令创建一个数据库的同时便隐式地创建了一个实例。或者,为了在计算机上创建一个 Oracle 实例,也可以使用 Database Configuration Assistant,或者使用 ORADIM 实用程序,后者是 Oracle 9i 通过 NEW 选项提供的。另外还必须提供某些信息,包括系统标识符(System Identifier,SID)或一个服务名称、实例密码、最大用户数、启动模式等等。类似地,为了删除实例,可以使用 ORADIM 实用程序加 DELETE 选项。这里需要提供 SID 或服务名称。除非在安装过程中创建一个新的数据库,否则在以 fresh 方式安装 Oracle 的时候,不会创建缺省的实例。
在 DB2 中,当在 Windows 平台上安装了该产品之后,便缺省地创建了一个实例 "DB2"。在 Linux 和 UNIX 中,缺省的实例名称为 "db2inst1"。若要在同一台计算机上创建另一个实例,只需执行命令 de>db2icrt de>。
图 3 展示了缺省的 DB2 实例 “DB2”(在 Windows 中)和从 DB2 Control Center GUI 中用 db2icrt 命令创建的另外两个实例。
图 3. 显示 DB2 实例的 DB2 Control Center GUI
若要在命令行接口中引用给定的 DB2 实例,可以使用环境变量 DB2INSTANCE。通过这个变量,可以指定当前活动实例,所有命令将应用到此实例。例如,如果 DB2INSTANCE 被设置为 PROD,然后您执行了命令 de>create database MYDB1de>,将创建一个与实例 PROD 关联的数据库。如果要在实例 DB2 上创建该数据库,那么必须首先将 DB2INSTANCE 变量的值改为 DB2。这类似于 ORACLE_SID (System Identifier),当用户想要在不同实例之间进行切换时,也是使用 ORACLE_SID。
还有一种标识要使用的实例的简单方法,那就是使用 DB2 Control Center GUI,如 图 3 所示。要在该工具中看到对应于新实例的条目,需要通过右击 Instances 并选择 Add 来将该实例添加到此工具中。要删除 DB2 中的一个实例,可以执行命令 de>db2idrop de>。
总之,在 Oracle 中,可以使用 Database Configuration Assistant 来创建、修改、启动、停止和删除实例,而在 DB2 中则可以使用 Control Center GUI 做同样的事情。而且,Oracle 实例与数据库只能是一对一的关系,而在 DB2 中却不是这样。一个 DB2 实例中可以同时存在多个数据库,并且可以并发地使用这些数据库。
回页首
数据库
在 Oracle 中,可以用 CREATE DATABASE 命令手动创建数据库,也可以用 Database Configuration Assistant 创建数据库。手动创建数据库时,在执行 CREATE DATABASE 命令之前,需要执行一系列的步骤,包括设置 OS 变量,准备参数文件,以及创建密码文件。
元数据信息在 Data Dictionary 中存储和管理,由基本表和相应的视图组成。基本表是在数据库创建过程中自动创建的,而视图则是通过运行 catalog.sql 和 catproc.sql 脚本构造的。
因此,Oracle 数据库可看作包含 3 种类型的文件的一个集合:
数据文件(Data File) :包含实际的数据,数据库的物理实现。(类似于 DB2 中的容器。)
重做文件(Redo File) :相当于 DB2 中的事务日志(Transaction Log)。
控制文件(Control File) :包含用于维护和验证数据库完整性的信息。
在 DB2 中,一个实例可以包含多个数据库,如 图 2 所示。每个数据库都是一个封闭的、真正独立的单元。每个数据库有其自己的编目表空间、临时表空间和用户表空间,这些表空间是在创建数据库时缺省创建的。DB2 包含一个称为系统数据库目录(system database directory) 的二进制文件,其中包含可从 DB2 机器上连接的所有数据库的条目。这个目录保存在实例级。
当创建一个实例时,缺省情况下不会创建数据库,您需要使用 create database 命令显式地创建一个数据库。此外还可以用 Control Center 创建数据库,如图 4 和图 5 所示。
图 4. 使用 Control Center GUI 创建 DB2 数据库
图 5. 使用 Control Center GUI 创建 DB2 数据库(续)
在 图 5 中,您也可以看看单击 Show Command 时会出现什么情况。所有的 DB2 Control Center GUI 屏幕都会显示实际上在后台执行的 SQL 语句或命令。这些命令可以保存在一个脚本中,以便在以后执行,或者也可以将它们复制到 Command Line Processor(CLP)或 Command Center GUI 工具中,在这些工具中执行。这些工具分别相当于 Oracle 的 SQL*Plus 和 iSQL *Plus。
可以使用 'DROP DATABASE' 命令或者在 DB2 Control Center GUI 中删除一个 DB2 数据库。而在 Oracle 中却不是使用这样的命令。数据库的删除是通过删除所有相关数据文件来完成的。
同一个实例中的数据库通常不会相互进行交互。然而,如果应用程序需要与多个数据库交互,那么通过启用联邦(federation) 支持可以满足这一需求。在参考资料 小节中有一篇关于联邦的文章。
回页首
容器、表空间、缓冲池和页
在 Oracle 中,在物理上数据是存储在被称作数据文件(Data File)的文件中的。这类似于 DB2 的容器(container) ,DB2 的容器也是数据实际存储的地方。每个 Oracle 数据库包含一个名为 SYSTEM 的表空间,这是在创建数据库时由 Oracle 自动创建的。其他用于用户数据、临时数据和索引数据的表空间则需要在创建数据库之后另行创建,并且在使用这些表空间之前,还需要为之指定一个用户。
在 DB2 中,表空间 是逻辑对象,作为逻辑表和物理容器之间的一层。当创建一个表空间时,可以将它与一个特定的缓冲池(数据库缓存)关联起来,并关联到特定的容器。这为性能管理带来了灵活性。例如,如果有一个 "hot" 表,那么可以在一个单独的表空间中定义它,而这个表空间又与一个独立的缓冲池相关联。这有助于确保此表中的数据连续地缓存在内存中。
在 DB2 中,使用 CREATE DATABASE 命令及其缺省值创建数据库时,同时也会自动创建三个缺省的表空间。表 1 描述了缺省的 DB2 表空间:
表 1. 用缺省值创建数据库时,缺省创建的 DB2 表空间
表空间名称
描述
SYSCATSPACE
包含元数据的编目表空间
TEMPSPACE1
用于执行连接和排序等操作的系统临时表空间。这个表空间的名称可以更改
USERSPACE1
这个表空间是可选的,如果在创建表的时候没有显式地指定表空间,那么可以用这个表空间来存储用户表
在 DB2 中,由于数据库是独立的单元,因此表空间不能跨数据库共享。由于表空间只在一个数据库中是可知的,因此两个不同的数据库可以有具有相同名称的表空间。在图 2 中可以看到这一点,其中数据库 MYDB1 有一个名为 MYTBLS 的表空间,而数据库 MYDB2 也有一个同名的表空间。
DB2 表空间可以分为 SMS(系统管理的表空间)与 DMS(数据库管理的表空间)两类。SMS 表空间由操作系统管理,它们只能是目录。SMS 表空间可根据需要自动增长,因此 SMS 可以提供很好的性能,并且需要的管理也很少。DMS 表空间由 DB2 管理,既可以是文件,也可以是原始设备。这种类型的表空间可以提供最佳性能,但是需要进行一些管理。例如,需要预先指定想要为这个表空间分配多大的空间,因为这种表空间不能自动增长。
Oracle 的存储模型中没有 SMS 的概念,但是它的数据文件类似于 DB2 DMS 表空间。也就是说,可以通过增加数据文件的大小,或为表空间添加数据文件,或者通过添加一个新的表空间,来增加数据库的大小。
表 2 显示了 Oracle 数据库或表空间与 DB2 数据库或表空间的对应关系。
表 2. Oracle 数据库与 DB2 数据库和表空间的对应关系
Oracle 数据库或表空间
DB2 数据库或表空间
SYSTEM 是存放编目(数据字典)信息的表空间
SYSCATSPACE(编目表空间);和在 Oracle 中一样,仅在数据库级保存该信息
Data Dictionary(包含表和视图形式的元数据),驻留在 SYSTEM 表空间中
系统编目表(由 SYSIBM 模式标识),系统视图(由 SYSCAT 或 SYSSTAT 模式标识),驻留在 SYSCATSPACE 表空间中
SCOTT 数据库
SAMPLE 数据库
TEMP 表空间
System Temporary 表空间(缺省情况下名为 tempspace1)
UNDO 表空间
N/A
USER 表空间
用户表空间。缺省情况下,USERSPACE1 一般是在数据库创建之后才创建的
前面已指出,Oracle 的数据缓冲区概念相当于 DB2 的缓冲池。但是,DB2 允许多个缓冲池存在。在 DB2 中不需要预先定义可创建的缓冲池的数量,缓冲池的名称可以是任意的。
Oracle 中块(block) 的概念与 DB2 中的页最为相似。一个 DB2 页的大小可以为 4k、8k、16k 或 32k。表中的一个行只能放在一个页中,而不能像 Oracle 中那样跨多个页。
回页首
对象名称
Oracle 中的对象名称形式如下:
de>[Schema_name.]object_name[@database]de>
在 DB2 中,对象名称也是由两部分组成的结构:
de>Schema_name.object_namede>
和在 Oracle 中一样,DB2 模式名称用于在逻辑上组织对象。但是两者之间一个重要差异是,在 DB2 中,模式名称不一定与一个用户 id 相匹配。任何拥有 IMPLICIT_SCHEMA 权限的用户都可以用一个不存在的模式创建对象。例如,假设 “Peter” 具有 IMPLICIT_SCHEMA 权限,他执行以下命令:
de>CREATE TABLE WORLD.TABLEA (lastname char(10))de>
该命令创建表 WORLD.TABLEA,其中 WORLD 是新创建的模式。如果 Peter 没有显式地指定模式,那么该命令就会创建表 PETER.TABLEA,因为缺省情况下是使用连接 ID。
在 DB2 中,在发出与数据库相关的命令之前,总是要连接到数据库。因此,在这种架构下,对象名称不需要包括数据库名称。
回页首
表、视图和索引
在 Oracle 和 DB2 中,表、视图和索引基本上是一样的。
DB2 提供了一个名为 Design Advisor 的实用程序,可以用它来为特定的查询或工作负载推荐索引。Design Advisor 可以从 DB2 Control Center 中调用,也可以从 DB2 CLP 中使用 db2advis 命令来调用。在 DB2 中,索引是直接与表定义绑定的。例如,当使用 DMS 表空间时,可以用下面的语句指定索引存放在哪个表空间:
de>CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2de>
上面的例子表明,表中的数据将存储在表空间 'tbls1' 中,而索引页将存储在表空间 'tbls2' 中。但在 Oracle 语法中,CREATE INDEX 语句有一个选项来指定索引存放在哪个表空间。
此外,在 DB2 中,索引一旦创建好,便不能修改索引定义中的任何子句。为了进行更改,需要删除索引,然后重新创建索引。
和在 Oracle 中一样,不同数据库中的 DB2 表、视图和索引可以有相同的名称。相同数据库中的表和视图则必须使用不同的名称,但是允许使用与已有的表或视图相同的名称创建索引。
回页首
存储过程、触发器和用户定义函数(UDF)
在 Oracle 环境中,有很多方法来创建和访问存储过程、触发器和函数。PL/SQL 是 SQL 的面向对象(OO)过程扩展,支持数据操纵(DML)、流控制、变量和常量的声明、过程和函数定义以及 OO 数据类型,例如嵌套表和变长数组(varray)。Oracle 还将 JVM 并入到它的引擎中。在 Oracle 数据库中,可以使用 SQLJ 将存储过程、函数和触发器,作为类来创建、存储和执行。Oracle 还支持 Type 1 至 4 的 JDBC 驱动程序。
DB2 存储过程可以用 DB2 预编译器支持的任何语言编写,包括 Java、C、C++、REXX、Fortran 和 COBOL。但是,我们推荐您使用 SQL Procedural Language(SQL PL),这种语言非常类似于 Oracle 的 PL/SQL。在开发 SQL PL 存储过程时,需要一个 C 编译器,因为这种存储过程首先要转换成 C。存储过程的 C 实现可以提供性能优势,因为代码只需编译一次(在 unfenced 模式下性能优点尤其明显)。但是,在开发这种存储过程时,开发系统上需要一个额外的 C 编译器。在 DB2 将来的版本中,有望出现不需 C 编译器支持的 SQL PL 存储过程。DB2 存储过程开发还利用 Type 1 至 4 的 JDBC 驱动程序来支持 SQLJ 和 Java。
触发器和函数的开发可以使用内联 SQL/PL,这种方法不需要 C 编译器。这种方法支持 SQL PL 语句的一个子集。另外还可以使用 DB2 Development Center Tool 来简化 DB2 存储过程和用户定义函数的创建、构建、调试和部署。
回页首
配置文件
传统上,Oracle 将所有与会话和系统相关的参数存储在一个文本文件中,这种文件通常被称做 initSID.ora。但是,由于这种文本文件不具有持久性,从 Oracle 9i 开始,Oracle 引入了 Server Parameter File(SPFILE),这是一种存储在服务器上的二进制参数文件。它在实例停止之后到启动之前这个过程中是持久存在的。不过,当 SPFILE 不可用的时候,仍然使用 initSID.ora 文件。引入 SPFILE 之前,任何对参数有影响的 ALTER SYSTEM 和 ALTER SESSION 命令都只能在实例或会话活动期间持久。每当数据库实例需要回弹(rebound)时,DBA 都必须手动修改 initSID.ora 文本文件。对于侦听器,网络访问配置通常存储在 listener.ora 中;对于客户机访问,网络访问配置通常存储在 tnsnames.ora 中。
在 DB2 中,配置参数也是存储在实例级和数据库级,在实例级是数据库管理器(database manager) 配置文件,在数据库级是数据库 配置文件。这些参数大多数都可以动态地更改,也就是说,不需要为了使对参数值的更改生效而停止并重启实例或者重连所有连接。
如果想在 CLP 中手动更改特定的数据库管理器配置参数,可以使用命令 de>UPDATE DBM CFG USING de>。
如果想在 CLP 中手动更改特定的数据库参数,可以使用命令 de>UPDATE DB CFG FOR USING de>。
这两个命令分别相当于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,也可以使用 Control Center 查看和修改这些参数的值。如果右键单击一个给定的实例,并选择Configure Parameters ,那么可以看到图 6 中显示的窗口。
图 6. DB2 Database Manager 配置参数(实例级)
在数据库级,右击一个给定的数据库,并选择 Configure Parameters ,则可以看到 图 7 中显示的窗口。
图 7. 数据库配置参数(数据库级)
DB2 提供了很多用于配置系统的参数。但是,如果想通过一种容易的方法自动配置系统,那么可以使用 de>autoconfigurede> 命令(或者 Configuration Advisor GUI),它会根据您提供的一些信息将数据库管理器配置参数和数据库配置参数设置成最佳值。图 8 显示了 Configuration Advisor。
图 8. DB2 Configuration Advisor
除了配置文件外,DB2 通常还为与平台相关的配置使用 DB2 注册表变量。注意,DB2 注册表变量与 Windows 注册表没有任何关系 。可以使用命令 db2set 查看和更改这些变量。
连接(网络访问)信息存储在 System 数据库目录、本地数据库目录和节点目录中。这些都是二进制文件,只能用 CATALOG 和 UNCATALOG 命令修改。
回页首
内存架构和后台进程
接下来,我们来看看内存架构和后台进程,并且比较一下 Oracle 和 DB2 中内存架构和后台进程的不同之处。
图 9. Oracle 内存架构和后台进程
Oracle 中的 System Global Area (SGA)是一组共享内存块,用于存储与实例有关的信息。其中包括语句缓存、重做日志缓冲区和数据缓冲区缓存。Program Global Area (PGA)和User Global Area (UGA)共享内存块,包含用于服务器进程和用户会话的数据和控制信息。
Oracle 支持在同一台计算机上存在多个实例,但不允许共享后台进程。例如,同一台计算机上的三个实例就需要三组后台进程。因此建议在一台计算机上包含一个数据库、一个实例和多个模式。
图 10. DB2 内存架构和后台进程
DB2 和 Oracle 都使用共享内存块,但是 DB2 与 Oracle 内存架构的实现方式略有不同。由于 DB2 实例可以包含多个数据库,因此存在两个级别的配置。在前一节已经提到,实例级的配置可以在 DBM CFG 文件中完成,而数据库级的配置则可以在 DB CFG 文件中完成。这两个级别上的配置参数都可以进行调整,以调优内存使用情况。后文将更详细地阐述 DB2 的内存结构和不同的后台进程。
Oracle 是在实例和数据库启动时将内存分配给它们的,而 DB2 则是在不同级别上分配内存。这主要是因为 DB2 实例可以包含多个数据库。DB2 中主要有三种内存结构:
实例共享内存 :这是数据库管理器全局共享内存,是在使用 de>db2startde> 命令启动实例时分配给实例的,并且在发出 de>db2stopde> 命令停止实例之前,一直处于已分配状态。
数据库共享内存 :这是数据库全局内存,是在激活数据库或者第一次连接到数据库时分配的。分配的内存包括缓冲池、锁列表、数据库堆、实用程序堆、包缓存和编目缓存。
应用程序共享内存 :这是在应用程序连接到一个数据库时分配的内存,由处理连接到数据库的客户机所请求的工作的代理使用。每个连接到数据库的应用程序都会被分配内存;因此,对会影响应用程序共享内存的参数的正确配置就非常重要。
在 DB2 for Windows 中,服务器活动是以线程的形式进行的,而在 Linux 和 UNIX 环境中,这些活动是以后台进程的形式来实现的。DB2 有以下几种级别的进程:
实例级:这些进程是在实例启动时初始化的:
DB2 Daemon Spawner (db2gds):全局守护处理程序,每个实例都对应一个这样的进程(仅在 UNIX 中)
DB2 System Controller (db2sysc):DB2 主进程。
DB2 Watchdog (db2wdog):所有其他进程的父进程。
DB2 Format Log (db2fmtlg):类似于 Oracle 中的 ARCn 进程,为日志路径中的日志文件预先分配空间。
数据库级:这些进程是在建立到数据库的连接时初始化的:
DB2 Log Reader (db2loggr):类似于 Oracle 的 PMON 进程的一个子集。该进程在回滚、重启恢复和前滚期间读取日志文件。
DB2 Log Writer (db2logw):将日志从日志缓冲区刷新到磁盘上的事务日志文件中。相当于 Oracle 中的 LGWR 进程。
DB2 Page Cleaner (db2pclnr):相当于 Oracle 中的 DBWR 进程,该进程在将页从磁盘上转移到 BP 中之前,清理缓冲池。
DB2 Prefetcher (db2pfchr):将需要用到的页预先从磁盘取出到缓冲池中。
DB2 Deadlock Detector (db2dlock):死锁检测器进程。
应用程序级:每个连接到数据库的应用程序,都具有属于它自己的应用程序级后台进程与之相关联。这些进程有:
DB2 Communication Manager (db2ipccm):进程间通信进程,用于每个本地连接的客户机。
DB2 TCP Manager (db2tcpcm):TCP 通信管理器进程,用于使用 TCP/IP 连接数据库的远程客户机。
DB2 Coordinating Agent (db2agent):代表应用程序处理所有请求的进程。
DB2 Subagent (db2agnta):空闲子代理。
Active Subagent (db2agntp):在启用了 SMP 并行的情况下使用的活动子代理,它使一个任务可以使用多个进程。
要获得对 DB2 进程的完整解释,请参考文章 “DB2 通用数据库进程全接触”。
回页首
锁机制
Oracle 中的锁可以是手动的,也可以是自动的。Oracle Lock Manager 可以在行级隐式地锁定表数据,此外也可以使用以下 SQL 语句在事务或会话级覆盖缺省的锁: de>1. SET TRANSACTION ISOLATION LEVELde> de>2. LOCK TABLEde> de>3. SELECT FOR UPDATEde>
Oracle 支持一种称为 Multi-Version Read Consistency 的机制,这是用 undo 段中的 undo 数据实现的。
DB2 实现 ANSI 标准隔离(Isolation)级别,例如未提交读(Uncommitted Read)、游标稳定性(Cursor stability)、读稳定性(Read stability)和可重复读(Repeatable Read)。除非使用未提交读隔离级别,否则用户只能看到已提交的数据。行锁是根据隔离级别隐式地获得的。可锁定的数据库对象有表空间、表和行,但是,只有表和表空间可以显式锁定。可使用 de>LOCK TABLEde> 命令来锁定一个表,而不是使用缺省的行锁定。
与 Oracle 不同,在 DB2 中,锁是存储在内存中的,而不是存储在数据页中。可以使用 LOCKLIST 数据库配置参数来配置锁可用的内存,而 MAXLOCKS 配置参数则定义用于一个特定应用程序的锁的最大内存。
回页首
安全性
Oracle 和 DB2 都是具有基本的和高级的安全特性的安全数据库。Oracle 中有 4 种不同的用户身份验证方法:
数据库 :数据库执行对用户的识别和身份验证。
外部 :操作系统或网络服务执行身份验证。
全局身份验证和授权 :由 SSL 对用户进行全局身份验证。
代理身份验证和授权 :中间层服务器执行身份验证。
身份验证方法是在使用 de>CREATE USERde> 命令创建用户时指定的。Oracle 中有一些 Data Dictionary 视图,其中包含了关于这些用户的信息。
在 DB2 中,用户不是存在于数据库中,而是由操作系统来管理。没有数据库登录信息存放在数据库表中。任何操作系统用户都有可能访问 DB2;但是,除非他们被授予了给定的 DB2 权限或特权,否则他们能做的事情不多。通过 Control Center GUI 很容易授予和撤销权限和特权。不过首先需要将可用操作系统用户或组中的一个用户或组添加到 Control Center。
在 DB2 中没有 “角色(role)” 这个术语。相反,DB2 使用术语 “权限(authority)”,它类似于 Oracle 的数据库角色,DB2 通过权限将特权授予某些组或用户。DB2 支持的权限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。
不能使用 GRANT SQL 语句授予 SYSADM、SYSCTRL 和 SYSMAINT 权限。这些特殊的权限只能在数据库管理器配置文件中设置。
DB2 还使用术语 “特权(privilege)”,它类似于 Oracle 的系统和模式对象特权。DB2 中有数据库特权 (连接、创建表等)和数据库对象特权 (模式、表、视图等)。图 11 显示了从 Control Center GUI 获得的 DB2 安全性信息。Change User 窗口中显示的大部分选项卡对应了 DB2 所支持的特权。
图 11. DB2 安全性
Oracle 10g 的安全性大体上没有变化,只有部分增强。下面是 Oracle 10g 中的增强的列表:
FGA 的 DML 支持 —— 细粒度审计(fine-grained auditing,FGA)的 SQL 支持得到了增强,现在支持查询和 UPDATE、INSERT 和 DELETE 操作这些粒度上的审计。
SASL 上的通信 —— 该特性为 Oracle Internet Directory(OID)与数据库之间或者两个数据库之间的通信提供了一种安全通道。如果您的企业部署通过密码进行身份验证的用户,那么也就不再需要在公共密钥基础设施(PKI)方面投入资金和管理工作。SASL(Simple Authentication and Security Layer)通信提供了等价的安全通道。
统一用户模型 —— 目录中定义的单点登录(single sign)用户现在可以使用 Enterprise User Security 提供的特性。不需要为供应和凭证管理而执行附加的任务。此外,Enterprise User Security 的管理组现在可以指派一个所有者,这促进了整体上更有力的安全性。
轻松的数据库注册 —— 该特性消除了对 RDBMS_SERVER_DN 参数的需要,使得企业用户的配置更为轻松。
扩展的、统一的审计跟踪 —— 该特性以标准的、细粒度的审计表的形式,为 RDBMS 审计提供了一致的审计跟踪,改进了安全性管理。事务和 SQL 信息也被添加到审计表中,以便进一步提高所有用户的可问责性(accountability)。
Oracle 标签安全性目录集成 —— 现在可以在一个中央 OID/LDAP 储存库中管理 Oracle Label Security 策略和用户标签授权。这节约了管理成本,同时也消除了多个管理点,从而增加了安全性。
DB2 中的身份验证不仅涉及对用户名和密码进行加密,还允许对客户机与服务器之间传输的数据进行加密。身份验证的位置由数据库管理器配置参数 AUTHENTICATION 的值决定。
下面是用于启用 DB2 的身份验证的有效选项:
SERVER_ENCRYPT —— 这个值规定身份验证发生在服务器上。首先加密连接期间指定的用户 id 和密码,然后将它们发送到服务器,在服务器上将它们与服务器端的用户和密码进行比较。如果匹配成功,那么用户就被允许访问数据库。
KRB_SERVER_ENCRYPT —— 规定服务器接受 KERBEROS 身份验证或加密的 SERVER 身份验证模式。
DATA_ENCRYPT —— 规定服务器允许 SERVER 身份验证,并且对客户机与服务器之间通过网络传输的数据进行加密。
DATA_ENCRYPT_CMP —— 规定服务器接受加密的 SERVER 身份验证模式和用户数据的加密。 这种身份验证类型能与不支持 DATA_ENCRYPT 身份验证类型的下级产品兼容。
GSS_SERVER_ENCRYPT —— 规定服务器接受基于 GSS API 的插件身份验证或加密的服务器身份验证模式。
若要更新 AUTHENTICATION 实例参数,例如将它的值设置为 DATA_ENCRYPT,可以使用以下命令:
清单 1. 更新 AUTHENTICATION 实例参数
UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT
db2stop
db2start
DB2 提供了基于标签的访问控制(Label Based Access Control,LBAC)机制,从而进一步扩展了安全性。 LBAC 特性为控制对各行和各列的读写访问提供了更大的粒度。 DB2 中提供了一种新的安全管理员角色(SECADM),用于操纵 LBAC 对象。
试图访问一个对象的用户必须被授予该对象的安全标签。如果安全标签匹配,则允许访问;如果不匹配,则拒绝访问。实现 DB2 中的 LBAC 安全性基本上有三个步骤:
创建安全策略。 安全策略描述用于决定谁可以访问特定数据的凭证。任何一个表只能由一个安全策略来保护,但是不同表可以由不同的安全策略来保护。这是通过使用 CREATE SECURITY POLICY 语句来实现的。安全策略的所有管理都是通过使用 SQL 语句来完成的。
创建安全标签。 一共有三种类型的安全标签:
行安全标签 。与数据库表中的一个数据行或记录相关联的安全标签。
列安全标签 。与数据库表中一个列相关联的安全标签。
用户安全标签 。为数据库用户授予的安全标签。
安全标签由 SECADM 创建,作为策略的一部分。 创建好一个安全标签之后,可以将其与表中各个列和行相关联,以保护存放在那里的数据。
为用户授予安全标签,使他们可以访问数据 。 安全管理员通过为用户授予安全标签来允许他们访问受保护的数据。 当一个用户试图访问受保护的数据时,DB2 将那个用户的安全标签与保护数据的安全标签进行比较。
除了特权和权限外,数据库安全性还包含其他方面。简单地说,Oracle 与 DB2 之间既有不同点,也有相同点:
用户身份验证和授权
Oracle 在创建用户之后,使用存储在目录中的加密密码。DB2 支持用于用户身份验证的密码,并使用底层的操作用户进行身份验证。Oracle 和 DB2 都支持 LDAP (Oracle Internet Directory 与 IBM Directory Server)。Oracle 和 DB2 都支持单点登录(SSO)。
数据加密
Oracle 支持数据加密,它可以对敏感数据,例如信用卡号和一些高度敏感的商业数据进行加密。DB2 允许列级的数据加密。
网络加密
Oracle 通过它的 Oracle Advanced Security 提供网络加密。Oracle 使用 DES、3DES 和 RC4 业界标准加密。DB2 本身不进行网络加密。但可以使用附带的 Tivoli SecureWay 实现网络加密。
审计跟踪
Oracle 允许审计跟踪用户和对象。还可以使用日志挖掘程序调查和分析有疑问的查询。DB2 也提供了类似的审计设施。在 DB2 中,可以使用 db2audit 实用程序进行审计跟踪。
回页首
DB2 9 pureXML 特性
在本节中,我们将 Oracle 对 XML 的支持与 DB2 对 XML 的支持进行比较。 Oracle XML DB 特性随 Oracle 9i Release 2 一起发布,借助该特性,通过定义 XMLTYPE 表和列,将它们存储为 CLOB 或拆分(分解)到关系表中,可以实现对 XML 存储、检索和模式的管理。 Oracle 10g 为管理 XML 文档提供了一些增强。例如,通过映射已有的数据,可以动态地反映模式的更改,而不必重新导入。Oracle 10g 包括一些工具包,例如:
XML-SQL Util(XSU) —— 为 PL/SQL 和 Java 提供的接口。
XML Developer's kits(XDK) —— 用于受支持的语言,例如 PL/SQL、C++ 和 Java。
Oracle 10g 仍然是一种 支持 XML 的 数据库。它提供的所有接口、API 和包,都是为了减轻 XML 与关系表之间的相互转换和映射所带来的负担、复杂性和维护。支持 XML 的数据库,不管是使用 CLOB 还是分解方法,都不能提供良好的性能。例如,在使用 CLOB 的情况下,XML 文档作为镜像文件存储在数据库中。您可能已经知道,镜像文件的管理是很麻烦的。分解方法在性能方面也不如人意。将一个 XML 文档分解成小块并存储在多个表中之后,当需要将 XML 文档组合成原样时,就不得不使用一个 SQL JOIN 操作。SQL 中的 JOIN 是开销很大的,特别是表的数量较多时这一点尤其明显。保持数字签名的保真度同样也是一个挑战。
另一方面,DB2 9 pureXML 技术则是原生存储 XML 文档,也就是说,在内部以树型格式存储 XML 文档。它还允许同时使用 SQL 和 XML 扩展,即 Xquery 和 Xpath 来访问关系数据和 XML 数据。原生存储 XML 文档是一种更好的方法,IBM 的研究表明,使用该方法在 XML 文档的搜索和检索方面可以取得更好的性能,并且能减少某些程序中代码的行数。
要在数据库中使用 pureXML 特性,在创建数据库时要使用 UNICODE(例如使用编码集 UTF-8)。在创建一个表之前,如果没能创建一个 UNICODE 数据库,则会产生如下所示的错误:
SQL1239N XML features can only be used in a Unicode database with a single database partition. SQLSTATE=42997
DB2 与之前版本一样存储关系数据。但是,XML 数据是以分层格式存储的(作为使用 Xquery 数据模型的一棵树)。XML 与关系服务之间是紧密集成的。为了存储 XML 文档,用户需要创建一个表,并指定一个列使用一种新的数据类型,即XML ,如下面的例子所示。
清单 2. 用 XML 数据类型创建表
create table T (i int, doc xml)
下图展示了这两列的显示效果:
图 12. DB2 存储模型
由于 XML 文档是以解析的分层格式存储在 XQuery Data Model (XDM) 中的,因此不需要进行转换或映射。用于存储 XML 文档的格式就是用于处理 XML 文档的格式。这样可以提供更好的性能。
备份、恢复、导入等实用程序对含 XML 列的表的作用与其他表是一样的。可以使用 INSERT 语句或 IMPORT 实用程序(注意:DB2 LOAD 实用程序还不支持 XML)将 XML 数据插入 XML 列。在导入来自第三方的 XML 文档之前,最好根据一个预定义的 XML 模式验证这些文档。为了注册一个 XML 模式,DBA 需要执行REGISTER XML SCHEMA 命令,并以COMPLETE XML SCHEMA 结束,以完成注册过程。 DB2 9 还支持在一个 XML 文档的子集或整个文档上创建索引。在创建索引时,需要指定 XPATH,它将指向被建索引的特定元素/属性。
在 DB2 9 中,有四种方法来访问关系数据和 XML 数据,如 图 13 所示:
纯 SQL(不涉及 XQuery)
SQL/XML,也就是说嵌入在 SQL 中的 XQuery
XQuery 作为独立的语言(不涉及 SQL)
带嵌入式 SQL 的 Xquery
图 13. 可能的 PureXML 查询
表 3 比较了 DB2 9 与 Oracle 10g 的 XML 功能。
表 3. XML 特性比较
XML 功能
Oracle 10g
IBM DB2 9 for Linux, Unix and Windows
支持 XML 的存储
√
不适用
XML 原生存储
×
√
大环境的易维护性
×
√
高度可伸缩性
×
√
将 XML 文档存储为 CLOB
√
√。但是从长远看,鼓励使用 XML 原生存储
分解
√
√。但是从长远看,鼓励使用 XML 原生存储
要看到更深入的讨论,可以在 developerWorks 上找到更多关于 IBM pureXML 功能的文章,例如 使用 XQuery 查询 DB2 XML 数据 和 使用 SQL 查询 DB2 XML 数据。
回页首
表分区
DB2 的表分区(即区域分区)类似于 Oracle 的分区。它基本上允许将一个逻辑表拆分成跨一个或多个表空间的多个物理存储对象。每个对象对应于一个 “分区”,允许每个表空间包含一定范围的、很容易访问的数据。
在 DB2 中,有多种方法对数据进行分区,您可以同时将这些方法应用于相同的数据。为了避免读者感到困惑,下面简单地解释一下提供这种分区的各种不同方法:
DATABASE PARTITIONING —— 按照键散列将数据分布在数据库的多个逻辑节点上(DPF)。
RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根据键区域将数据划分到一个逻辑数据库分区中的多个物理对象上。
MULTI DIMENSIONAL CLUSTERING(MDC) —— 根据多个键值组织表(或一个表中的区域)中的数据。
利用 DB2 9 中新引入的表分区特性,可以根据一个或多个表列中的特定值将表数据划分到不同的表空间。这些分区可以独立地进行备份和恢复,可以提高某些查询的性能,因为 DB2 优化器知道这些分区的存在,并且可以避免对查询中不需要的分区进行扫描。例如,如果按一年的四个季度对表进行分区,并且查询只需要第 4 季度的数据,那么 DB2 将不解析前三个季度,而是直接找到第 4 个季度并解析之。这被称作分区排除(partition elimination)。
如前所述,在 DB2 9 中,数据组织的三种方法,即数据库分区(Database Partitioning)、表分区(Table Partitioning)和多维集群(Multi Dimensional Clustering)可同时使用。
下面的例子创建一个 customer 表,其中 l_shipdate >= '01/01/2006' 且 l_shipdate <= '03/31/2006' 的行存储在表空间 ts1 中,l_shipdate >= '04/01/2006' 且 l_shipdate <= '06/30/2006' 的行存储在表空间 ts2 中,依此类推。更详尽的解释可以参阅 developerWorks 文章Table partitioning in DB2 9。 清单 3. 将一个表按区域分区
CREATE TABLE customer (l_shipdate, l_name CHAR(30))
IN ts1, ts2, ts3, ts4, ts5
PARTITION BY RANGE(l_shipdate)
(STARTING FROM ('01/01/2006')
ENDING AT ('12/31/2006')
EVERY (3 MONTHS))
回页首
行压缩特性
Oracle 提供了两种压缩特性:一种是索引级压缩,另一种是表级压缩。如果对这些特性没有适当的规划,就会对性能产生不良影响。
Oracle 从版本 8i 开始就引入了索引压缩。可以压缩的索引有 bitmap、btree 和索引组织的表。索引压缩使用起来很简单。例如,要用压缩特性创建一个索引,可以使用如下代码:清单 4. 用压缩特性创建索引
CREATE INDEX ord_customer_ix_demo
ON orders (customer_id, sales_rep_id)
COMPRESS 1;
对于不是在内部用压缩特性创建的索引,可以通过修改它们将它们转换成压缩索引。下面显示了一个示例,这个示例展示了如何修改索引,以使其变成压缩索引。
清单 5. 用压缩特性修改索引
alter index ord_customer_ix_demo rebuild compress
目前,Oracle 没有提供任何自动化的建议者程序来指出哪些索引应该被压缩。大多数通过索引压缩获得的好处,都需要拥有娴熟的 Oracle CBO 知识的资深 DBA 经过适当规划才能获得。
另一方面,表压缩是在 Oracle 9i release 2 中引入的。它可以用于压缩整个表、表分区和具体视图。压缩可应用于所有分区或部分分区。虽然表压缩也可以用于未分区的表,但是在 OLTP 工作负载中将表压缩应用于未分区的表并不可取,因为插入和更新性能会受到影响。在 Oracle 表压缩中,数据库块中重复的值将被去除,信息将被存储起来,以便在块中重新创建未压缩的数据。 下面的例子展示了如何用压缩特性创建分区表。清单 6. 用压缩特性创建表
CREATE TABLE costs_demo (
prod_id NUMBER(6), time_id DATE,
unit_cost NUMBER(10,2), unit_price NUMBER(10,2))
PARTITION BY RANGE (time_id)
(PARTITION costs_old
VALUES LESS THAN (TO_DATE('01-JAN-2003', 'DD-MON-YYYY')) COMPRESS,
PARTITION costs_q1_2003
VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),
PARTITION costs_q2_2003
VALUES LESS THAN (TO_DATE('01-JUN-2003', 'DD-MON-YYYY')),
PARTITION costs_recent VALUES LESS THAN (MAXVALUE));
为了将一个表转换成压缩表,可以使用
alter table move compress。但是,压缩表不允许添加或删除列。
至于 DB2,在 DB2 9 之前就有一些压缩方法,但是,行压缩是在 DB2 9 中才引入的。行压缩要求创建一个目录,用于存储重复模式或条目以及数字键。压缩算法足够智能,不会压缩那些对节省磁盘空间帮助不大的行。
DB2 的行压缩不像 Oracle 的键压缩,它不需要指定键。
可以通过 CREATE TABLE 或 ALTER TABLE 命令在表级进行压缩。例如: 清单 7. 用 COMPRESSION YES 创建/修改表
CREATE TABLE Sales COMPRESS YES
ALTER TABLE Sales COMPRESS YES
为了在 DB2 Control Center 中取得相同的效果,在列定义过程中(表创建向导中的第二步),应确保选中面板底端的复选框 Store table data in a compressed format (如下图所示)。
图 14. DB2 Control Center —— 以压缩格式创建表
只有在执行 REORG 的时候才构建表字典,之后便可以压缩表中的数据。在随后的每次 REORG 操作中,表字典随之更新。被压缩的数据同时存放在磁盘上和内存中,DB2 还压缩存储在日志文件中的用户数据,以便减少日志文件大小。
注意,分区表的每个分区可以有不同的压缩字典,在 DPF 中的一个表的每个分区也可以有不同的压缩字典。
除了数据行压缩,DB2 9 提供的其他压缩机制还包括:
NULL 值和缺省值压缩(V8 GA):对变长列中的零长度空数据和系统缺省值进行压缩。
多维集群(V8 GA):使用块索引,数千个记录共用一个索引条目,实现索引压缩。
数据库备份压缩(V8 FP4):通过压缩产生较小的备份镜像。
XML 解析
回页首
自治特性
从 Oracle 9i 到 10g,Oracle 在调优方面作了一些改进。Oracle 将以下方面的调优进行了自动化:
Redo Logfile Sizing Advisor —— 该特性就重做日志文件的最佳大小给出建议,以避免因频繁出现的检查点而导致过多的磁盘 I/O。
Automatic Checkpoint Tuning —— Oracle 数据库现在可以自调优检查点,以取得良好的恢复速度,同时减少对正常吞吐率的影响。 这样便不再需要设置任何与检查点相关的参数。
Automatic Shared Memory Tuning —— Automatic Shared Memory Tuning 通过自调优算法将 System Global Area (SGA) 内存相关参数(缓冲区缓存、共享池)的配置自动化。它简化了数据库的配置,确保可用内存得到最有效的利用,并提高了性能。
Transaction Rollback and Recovery Monitoring —— 该特性便于估计回滚一个事务要花多少时间。还可以监控被恢复的事务的进程,并估计事务恢复的平均速度。
Oracle 还提供了一些 advisor,例如 segment advisor 和 undo advisor。segment advisor 根据对象内的空间拆分程度给出是否可以对一个对象执行新的在线压缩操作的建议。而且,这个 advisor 还给出关于段的历史增长趋势的报告,特别是能为容量规划提供有效的信息。另一方面,Undo Advisor 则帮助管理员在调整 flashback 和非 flashback 中的表空间的大小时作出正确的判断。它为管理员适当地设置 UNDO_RETENTION 提供建议,以避免快照过于陈旧的问题。
DB2 9 引入了一些新的自治增强。例如,DB2 9 引入一种新的自调优内存特性(使用 self_tuning_mem 数据库配置参数),该特性自动地设置一些内存配置参数的值,从而简化了内存配置任务。自动调优器充当调度器的角色,它算出可用的内存资源,动态地将它们分发给数据库的一些内存消费者。
除了自调优内存,DB2 9 还引入了下面提到的其他一些增强。这份列表并不完整,但是其中列出的都是重要的增强。
自动配置
DB2 8 引入了 Configuration Advisor,它可以检测系统和数据库的特征 —— CPU、内存、数据库大小、表的数量等,并为配置参数给出建议的值。DB2 9 则更进一步 —— 它在数据库创建之后自动运行 configuration advisor,并缺省地做出一些基本的调优决定。例如,它配置缺省缓冲池的大小、I/O 清理程序和 I/O 服务器等。 这种初始的自动调优意味着,同使用之前缺省的数据库配置参数值创建的数据库相比,现在的数据库将拥有更好的性能,并且有更好的即开即用性。
自动数据统计信息收集
缺省情况下,DB2 9 还允许对某些进行中的任务进行自动化。通过该特性,DB2 确定需要哪些统计信息,以及哪些统计信息需要更新,然后自动在后台执行 RUNSTATS 实用程序。
自动存储管理
DB2 9 扩展了在 DB2 V8.2.2 中首次引入的自动存储特性。自动存储自动增长跨磁盘和文件系统的数据库的大小,由于它是自动增长数据库大小的,因此 DBA 不需要管理存储容器。当在 DB2 9 中创建数据库时,自动存储管理特性是缺省地启用的。
自动表和索引重组增强
自动重组是从 8.2 版开始引入的。但是,DB9 对其加以增强,从而允许做以下事情:
指定具有适当页宽的系统临时表空间,用于离线表重组。
可限制被重组的表的大小。
指定自动索引重组应该在线运行,并且在在线维护窗口中运行。
指定在重组期间是保留还是重新构建压缩目录。
回页首
工具
我们来看看不同领域的一些工具,例如数据库创建和维护、网络、管理 GUI、性能调优、数据移动和备份恢复工具。图 15 显示了这些 DB2 9 GUI 工具。
图 15. DB2 9 GUI 工具
让我们看看类似的任务在 Oracle 和 DB2 9 中分别是怎样执行的。
数据库创建和维护
Oracle 提供了 Database Configuration Assistant(dbca)作为创建数据库的 GUI 工具。对于数据库维护,Oracle 提供了 Oracle Enterprise Manager。DB2 数据库则可以通过 DB2 Control Center 创建和维护。
网络
Oracle 提供了 Network Configuration Assistant(netca)来进行网络配置。或者,也可以使用 Oracle Network Manager 来配置服务名、侦听器、配置文件和 Oracle 名称服务器。DB2 则使用 CATALOG 命令来编目节点和数据库。此外还可以使用 DB2 命令行或 DB2 Configuration Assistant GUI 进行编目。
管理
Oracle Enterprise Manager 提供了针对管理员日常任务的广泛管理功能。DB2 Control Center 也提供了和 Oracle Enterprise Manager 类似的功能。除了 DB2 Control Center 外,还可以使用 DB2 命令行处理器来发出 DDL 和 DML 语句。该实用程序类似于 Oracle 的 SQLPLUS 实用程序。图 16 显示了 DB2 命令行处理器。
图 16. DB2 命令行处理器
还可以在 Command Center 中发出命令,如 图 17 所示。
图 17. Command Center GUI(DB2 命令行处理器的 GUI 版本)
性能调优
Oracle Enterprise Manager 附带有 Change Management Pack、Tuning Pack 和 Diagnostic Pack。DB2 则提供了 Event Analyzer、Health Center、Indoubt Transaction Manager 和 Memory Visualizer 作为性能调优任务的 GUI 工具。
数据移动
Oracle 提供了 SQL Loader(sqlldr)用于以定界文本格式装载数据。Import(imp)和 export(exp)可用于执行逻辑导入和导出。DB2 提供了类似的导入、导出和装载实用程序。对于跨平台的数据移动,DB2 提供了 db2move 实用程序。
备份和恢复
Oracle 提供了 Recovery Manager 作为热备份的选项。在 DB2 中,可以使用 backup 命令或 DB2 Control Center 备份数据库。
Oracle 10g Enteprise Manager 附带了新的性能概要表。增强的 Oracle Enterprise Manager HTML 界面为所有与数据库性能相关的统计信息提供了一个集中的访问点,为全面的监控和诊断提供了方便。
除了随 DB2 UDB version 8 发布的界面外,DB2 9 还引入了一种全新的免费应用程序开发工具,这个工具叫做 DB2 Developer Workbench(DWB),它是基于 Eclipse 框架的。这个工具可以单独下载,也可通过光盘获得,它替代了 DB2 8 的 Development Center。 DWB 是用于创建、编辑、调试、部署和测试 DB2 存储过程和用户定义函数的一站式中心。此外,还可以使用 DWB 来开发 SQLJ 应用程序,以及创建、编辑和运行 SQL 语句和 XML 查询。
DWB 有一些用于开发 DB2 业务对象的视图,例如:
Database Explorer 视图 —— 显示数据库中有什么对象(表、存储过程、用户定义函数、依赖关系、远程服务器等),并允许在这些对象上执行动作。
Data Project Explorer 视图 —— 在该视图中,可以通过简单的操作,例如拖放、复制粘贴、向导、上下文敏感的完成选项等,进行过程、用户定义函数和 SQL 语句的开发。
Data Output 视图 —— 在该视图中可以看到对数据库的数据开发的报告。
除了 DB2 8 的 Development Center 的功能外,新的 Developer Workbench 还包括对迁移报告、比较例程、XML 函数和使用 XQuery Builder 构建 XQuery 查询等等的支持。现在可以从网站下载DB2 Developer Workbench 。
要了解关于 DB2 Developer Workbench 的更详细的信息,请阅读 developerWorks 中的这篇 教程。要得到更详尽的示例和特性,请参考 developerWorks 中的文章 DB2 9 入门: 应用程序开发方面的增强。
图 18 展示了如何使用 DWB 创建存储过程:
图 18. DB2 Developer WorkBench
回页首
结束语
在本文中,我们借助您当前已有的关于 Oracle 10g Release 2 的知识,对 DB2 9 for Linux, UNIX and Windows 进行了介绍。我们简要地描述了 DB2 9 架构、后台进程、内存模型、安全性、工具等方面。Oracle 与 DB2 9 之间有很多类似之处,我们也指出了它们之间的一些不同之处,以便您能借助已有的知识,在 DB2 9 中获得成功。
表 3 总结了我们讨论过的 Oracle 与 DB2 9 之间的相同点与不同点。
表 3 —— Oracle 与 DB2 9 概念总结
Oracle
DB2 9
注解
实例
实例
一个 DB2 实例可以包含多个数据库
数据库
数据库
initSID.ora 或 SPFILE
DBM CFG 和 DB CFG
DB2 使用两个级别的配置:Database Manager Configuration(DBM CFG)(实例级)和 Database Configuration(DB CFG)(数据库级)。与 Oracle 一样,很多配置参数可以动态更改
表空间
表空间
DB2 支持 SMS 和 DMS 这两类表空间。DMS 表空间与 Oracle 的表空间类似
数据块
页
DB2 支持以下几种页大小:4k、8k、16k 和 32k。一个行必须能够装入其中一种数据页内。它不能像在 Oracle 中那样跨多个页
盘区
盘区
数据文件
DMS 表空间容器
用于 DMS 表空间的容器可以是原始设备,也可以是文件
重做日志文件
事务日志文件
数据缓冲区
缓冲池
DB2 没有一组预定义的缓冲池,但是可以根据需要创建足够多的缓冲池。在创建具有给定页大小的表空间时,必须预先存在一个具有给定页宽的缓冲池
SGA
数据库管理器共享内存和数据库共享内存
数据字典
编目
库缓存
包缓存
大型池
实用程序堆
数据字典缓存
编目缓存
SYSTEM 表空间
SYSCATSPACE 表空间
你可能感兴趣的:(数据库)
MySQL数据库全面学习之(上篇)
一心只为学
数据库 mysql 学习
Windows服务--启动MySQLnetstartmysql--创建Windows服务sccreatemysqlbinPath=mysqld_bin_path(注意:等号与值之间有空格)连接与断开服务器mysql-h地址-P端口-u用户名-p密码SHOWPROCESSLIST--显示哪些线程正在运行SHOWVARIABLES--显示系统变量信息数据库操作--查看当前数据库SELECTDATABA
关于Redis集群同步/持久化/淘汰机制的详解
尾巴尖上的阳光
大数据 redis 数据库
Redis是非常常用的KV数据库,使用内存以及HashMap进行存储的特点带来了高效的查询.本文将围绕Redis的常见开发使用场景,阐述在Redis集群中各个节点是如何进行数据同步,每个节点如何进行持久化以及在长期使用中如何对数据进行更新和淘汰.如果对Redis有更多的兴趣,可以查看我的技术博客:https://dingyuqi.com下面是Redis在开发过程中常用的几种使用场景.集群Redis
用html打开dbf文件,dbf文件怎么打开?dbf是什么文件?
今天也要开心呢
用html打开dbf文件
dbf文件怎么打开?dbf文件是一种数据库格式文件,用于存储数据库的数据。一些用户在工作的过程中,可能会碰到后缀名为dbf的文件,正常双击是无法打开的,我们需要借助软件才能打开dbf文件。下面给大家推荐一些软件来打开dbf文件,具体请看下文。工具/原料:1、Exceldbf是什么文件?dbf文件是一种数据库格式文件,Foxbase,Dbase,VisualFoxPro等数据库处理系统会运用到dbf
html打开本地excel文件夹,html使用excel表格数据库-html读取本地excel文件并展示
睿理
html表格如何导入到excel中在vs里面用添加数据源就可以啊,再使用数据控件,就可以操作.添加数据源可以用odbc数据源,两种方式1,是在控制面板的管理工具里在ODBC里先设置好.2,是使用连接字符串.用vs的添加数据源向导做.html中有没有类似excel表格,可以填数的表格控件?首先html不能读取本地excel文件其次就算是javascript也是不允许的这是为了安全考虑如果前端脚本可以
mysql中必知的sql优化及索引优化
程序员bling
数据库 sql mysql 数据库
文章目录利用联合索引(索引覆盖)减少回表利用索引的有序性减少server层排序使用自增字段作主键优化查询mysql联合索引失效的特殊情况数据库事务的四大特性是如何实现的使用逻辑关联代替物理关联利用联合索引(索引覆盖)减少回表假如我们现在有一个student表,有主键id,name,age,address,sex等字段.其中name字段建了一个普通索引.当我们执行以下sql时:selectname,
主流行架构
rainbowcheng
架构 架构
nexus,gitlab,svn,jenkins,sonar,docker,apollo,catteambition,axure,蓝湖,禅道,WCP;redis,kafka,es,zookeeper,dubbo,shardingjdbc,mysql,InfluxDB,Telegraf,Grafana,Nginx,xxl-job,Neo4j,NebulaGraph是一个高性能的,NOSQL图形数据库
Oracle(125)如何执行不完全恢复?
辞暮尔尔-烟火年年
Oracle oracle 数据库
不完全恢复(IncompleteRecovery)是指将Oracle数据库恢复到一个特定时间点、SCN(系统变更号)或取消点,而不是恢复到最近的备份后的最新状态。以下是详细的步骤和代码示例,展示如何执行不完全恢复。准备工作备份控制文件:确保你有控制文件的备份。备份数据文件:确保你有数据文件的备份。备份归档日志:确保你有最新的归档日志。不完全恢复的基本步骤关闭数据库:确保数据库处于关闭状态。启动数据
【十一】【SQL】外连接(左外连接,右外连接)
妖精七七_
数据库SQL 数据库 sql
数据库中的外连接(OuterJoin)用于连接两个表,并包括两个表中的匹配行以及左表(LEFTJOIN)或右表(RIGHTJOIN)中未匹配的行。外连接分为两种主要类型:左外连接(LEFTOUTERJOIN):返回左表(FROM子句中第一个表)的所有行,即使在右表中没有匹配的行。如果右表中没有匹配的行,则结果集中右表的部分将包含NULL值。右外连接(RIGHTOUTERJOIN):返回右表(JOI
什么是 PHP? 为什么用 PHP? 谁在用 PHP?
m0_37438181
永远学习 php 开发语言
一、什么是PHP?PHP(HypertextPreprocessor,超文本预处理器)是一种广泛应用于Web开发的通用开源脚本语言。PHP主要用于服务器端编程,可以嵌入HTML中,与数据库进行交互,生成动态网页内容。它具有以下特点:简单易学:语法相对简单,容易上手,对于初学者来说是一个不错的选择。跨平台性:可以在多种操作系统上运行,如Windows、Linux、Unix等。丰富的函数库:提供了大量
【YashanDB知识库】数据库获取时间和服务器时间不一致
YashanDB
YashanDB知识库 数据库 运维 崖山数据库 YashanDB yashandb知识库
本文转自YashanDB官网,具体内容可见数据库获取时间和服务器时间不一致【问题分类】功能使用【关键字】服务器时间、数据库时间【问题描述】数据库获取的时间和服务器时间不一致。【问题原因分析】YashanDB并没有时区的概念,数据库的时间以数据库启动时的系统时间为准。出现这个情况有可能是数据库部署时服务器时间为0时区,因此数据库以0时区拉起,后来系统修改为东八区,但是数据库仍然为0时区,导致数据库获
释放“AI+”新质生产力,深算院如何“把大数据变小”?
YashanDB
YashanDB 国产数据库 数据库 数据库 大数据
近期,南都·湾财社推出《新质·中国造》栏目,深入千行百业,遍访湾区企业,解锁湾区新质生产力,共探高质量发展之道。本期对话深圳计算科学研究院YashanDB首席技术官陈志标,探讨国产数据库如何实现创新突围,抢抓数字经济时代的新机遇。以下是专访内容:如何应对AI时代所面临的算力挑战?南都·湾财社:数据、算力和算法是发展人工智能的三要素,深算院做了怎样的前瞻性布局?陈志标:今年,政府工作报告中首次提及开
【YashanDB知识库】YashanDB 开机自启
YashanDB
YashanDB知识库 数据库 数据库系统 崖山数据库 YashanDB oracle
【问题分类】YashanDB开机自启【关键字】开机自启,依赖包【问题描述】数据库所在服务器重启后只拉起monit、yasom、yasom进程,缺少yasdb进程:【问题原因分析】数据库安装的时候未启动守护进程【解决/规避方法】进入数据库之前的安装目录,启动守护进程:Shellcd/home/yashan/install./bin/yasbootmonitstart--clusteryashandb
Java应用的数据库连接池连接池性能测试
微赚淘客机器人开发者联盟@聚娃科技
java 数据库 开发语言
Java应用的数据库连接池连接池性能测试大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库连接池的性能测试是确保Java应用能够高效运行的关键步骤。性能测试可以帮助我们评估连接池在高并发条件下的表现,以及识别可能的性能瓶颈。本文将介绍如何对Java应用中的数据库连接池进行性能测试。性能测试的重要性性能测试对于数据库连接池至关重要,因为它可以:评估性能:确定连接
MyBatis 如何将 Mapper 接口与其 XML 映射文件关联:深入原理与实现
OEC小胖胖
web后端 mybatis xml java web 后端
MyBatis如何将Mapper接口与其XML映射文件关联:深入原理与实现1.概述MyBatis是一个简单、灵活的持久层框架,它通过SQL语句将Java对象与数据库进行映射。MyBatis支持基于XML和注解的配置方式。在实际开发中,XML映射文件与Mapper接口的关联是MyBatis的核心功能之一。通过这种关联,开发者可以在Mapper接口中定义方法,并在XML文件中编写SQL语句,从而实现数
2024上半年软考系统架构设计师-综合知识选择题及答案
不对法
系统架构
1.操作系统先来先服务调度算法2.操作系统多道程序设计,利用率3.操作系统状态流转错误的,执行态到运行态4.数据库2NF每一个非主属性完全依赖主键5.数据库笛卡尔积m*n6.数据库不属于事务的特点,并发性7.数据库交集表达式R-(R-S)8.数据库反规范化属于逻辑设计9.网络没有加密功能,物理层10.网络二层交换机数据,数据链路层11.知识产权专利法是否属于民法12.知识产权商标不属于,其他几个是
oracle数据库安装和配置详细讲解
程序员小羊!
运维 数据库 oracle
大家好,我是程序员小羊!前言:Oracle数据库是全球广泛使用的关系型数据库管理系统(RDBMS),提供高性能、可靠性、安全性和可扩展性,广泛应用于企业关键任务系统。下面详细介绍如何在CentOS系统上安装和配置Oracle数据库。1.前提条件1.1硬件要求内存:最小1GB,推荐2GB以上。硬盘:至少10GB的可用空间,视具体应用需求而定。1.2软件要求操作系统:CentOS7或CentOS8(确
渗透测试的了解
锅盖'awa'
网络安全小白之路 安全性测试 安全
文章目录概述一、渗透测试分类1.黑盒测试/外部测试2.白盒测试/内部测试3.灰盒测试/组合测试二、渗透测试-目标分类1、主机操作系统渗透2、数据库系统渗透3、应用系统渗透4、网络设备渗透三、渗透测试过程(七个阶段)1.前期交互阶段(Pre-EngagementInteraction)2.情报搜集阶段(InformationGathering)3.威胁建模阶段(ThreatModeling)4.漏洞
springboot整合MongoDB时碰到的问题
生产队队长
Database Spring All mongodb spring
1.账号总是不对,导致查不出数据,报错Auth…权鉴错误这次,我也是第一次接触MongoDB,非常的生疏springboot整合MongoDB,要在properties文件中配置账号mongodb基本语法:useDATABASE_NAME;--创建数据库showdbs;--查看我们所有的库,注意,我们刚创建的库,如果没有数据,是不会被显示的showusers;--查看当前库所有拥有的账号db.cr
Mall4j商城实战 - 部署 canal 数据库增量日志解析
yueerba126
Mall4j商城实战 数据库 spring cloud 微服务 架构
Canal简介Canal是基于MySQL数据库增量日志解析的工具,主要用于增量数据的订阅和消费。Canal主要用途基于MySQL数据库增量日志解析详细功能:实时解析MySQL的二进制日志(Binlog)。捕获数据库中的所有增量变更,如插入、更新和删除操作。使用场景:适用于实时监控数据库变化的应用,比如数据复制、数据备份或实时数据分析等。提供增量数据订阅和消费服务
小程序云函数遇到的问题(未安装wx-server-sdk依赖 | errMsg: Environment not found)
甜辣嘟嘟嘟
前端
在学习小程序云开发中的云函数的时候,代码执行方面遇到了一些小小的问题。1.关于未安装wx-server-sdk依赖首先,在云函数中使用wx-server-sdk,需先调用初始化方法init一次,init用于设置接下来在该云函数实例中调用云函数、数据库、文件存储时要访问的环境。例如以下代码中,constcloud=require('wx-server-sdk')cloud.init({env:'te
PostgreSQL | 生成UUID 报错:HINT: No function matches the given name and argument types
慌途L
PostgreSQL postgresql uuid uuid_generate gen_random_uuid
在PG数据库上新建表结构:CREATETABLE"public"."t_test"("guid"uuidNOTNULLDEFAULTuuid_generate_v4(),"data"jsonb,"create_time"timestamptz(6)DEFAULTnow(),CONSTRAINT"test_pkey"PRIMARYKEY("guid"));报错:ERROR:functionuuid_
解决 PostgreSQL的uuid_generate_v4() 不存在异常
这是然少
PostgreSQL postgresql 数据库
详细的异常信息如下所示:>错误:函数uuid_generate_v4()不存在导致这个问题的原因就是,uuid_generate_v4()这个uuid函数默认的是在Postgresql扩展中的,数据库迁移后,extension扩展就没有了,需要重新安装。有3种方法可以让PostgreSQL数据库支持uuid_generate_v4()或uuid_generate_v1()函数。方案一安装uuid-
【网上商城项目结构】
启山智软 商城 源码
小程序 java
文章目录前言一、网站前台二、运营商后台三、商家管理后台四、系统架构五、数据库设计六、关键技术总结前言网上商城项目结构通常包括网站前台、运营商后台和商家管理后台三个子系统,以及多个功能模块,如门户、搜索、购物车、订单、秒杀、个人中心等。在设计网上商城项目结构时,需要从用户需求和企业运营两个维度考虑,确保系统既能为用户提供良好的购物体验,又能满足企业高效管理的需求。以下是对网上商城项目结构的详细介绍:
【爸爸带娃 日更174】吃维生素的计算机思考
蓝色眼镜007
中午,家里人为了有没有给冬冬喂过维生素,而反复确认。问冬冬,她就算吃了,也就是很被动的张口,而且每天都吃,她也不清楚。再问当事人,因为也是每天都喂,也不太确定。好像吃了,好像又没吃。有时,A顺手已喂冬冬吃了,B却并不知道。确认混乱。其实,无非就是没有「中心化数据库」嘛。以后,在墙上贴张表格,不管谁喂完后,就马上在上面打个勾。或者,每天的量都用纸包起来,纸外面写上日期,吃完就扔,这是「分布的思维」。
计算机毕业设计Node.js+Vue基于Java的医院预约挂号系统(程序+源码+LW+部署)
Nodejs洋洋 程序
java vue.js 课程设计
该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:Node.js+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:Express框架+Node.js+Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可
Keras深度学习框架入门及实战指南
司莹嫣Maude
Keras深度学习框架入门及实战指南keraskeras-team/keras:是一个基于Python的深度学习库,它没有使用数据库。适合用于深度学习任务的开发和实现,特别是对于需要使用Python深度学习库的场景。特点是深度学习库、Python、无数据库。项目地址:https://gitcode.com/gh_mirrors/ke/keras一、项目介绍Keras简介Keras是一款高级神经网络
python基于django/flask的NBA球员大数据分析与可视化python+java+node.js
QQ_511008285
python django flask java spring boot 数据分析
前端开发框架:vue.js数据库mysql版本不限后端语言框架支持:1java(SSM/springboot)-idea/eclipse2.Nodejs+Vue.js-vscode3.python(flask/django)--pycharm/vscode4.php(thinkphp/laravel)-hbuilderx数据库工具:Navicat/SQLyog等都可以本文针对NBA球员的大数据进行
Java基于spring boot的国产电影数据分析与可视化python+java+node.js
QQ_511008285
java spring boot 数据分析 python django vue.js flask
前端开发框架:vue.js数据库mysql版本不限后端语言框架支持:1java(SSM/springboot)-idea/eclipse2.Nodejs+Vue.js-vscode3.python(flask/django)--pycharm/vscode4.php(thinkphp/laravel)-hbuilderx数据库工具:Navicat/SQLyog等都可以 该系统使用进行大数据处理和
openGauss 扩展FDW与其他openGauss特性
openGaussMan
数据库 openGauss
扩展FDW与其他openGauss特性openGauss基于PostgreSQL,而PostgreSQL没有内置存储引擎适配器,如MySQL的handlerton。为了使MOT存储引擎能够集成到openGauss中,我们利用并扩展了现有的FDW机制。随着FDW引入PostgreSQL9.1,现在可以将这些外表和数据源呈现为统一、本地可访问的关系来访问外部管理的数据库。和PostgreSQL不同的是
mysql数据库配置环境变量
一只会敲代码的小灰灰
数据库 mysql 数据库
mysql数据库配置环境变量这是我最初学习时记录下来的笔记,有些简陋!1.下载最新版mysql软件,将mysql安装到系统目录中,记录当前安装目录;如安装mysql到C:/programfiles/mysql目录下2.打开win7系统——计算机——系统属性3.点击环境变量,进入环境变量设置菜单4.选中系统变量中的“path”,在path值开头处输入:C:\programfiles\mysql\bi
jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
qiaolevip
每天进步一点点 学习永无止境 跨域 众观千象
XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1
mysql 分区查询优化
annan211
java 分区 优化 mysql
分区查询优化
引入分区可以给查询带来一定的优势,但同时也会引入一些bug.
分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。
所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。
可以通过查看explain执行计划,是否携带 partitions
MYSQL存储过程中使用游标
chicony
Mysql存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08-- BEGINdecla
mysql 和 sqlite 区别
Array_06
sqlite
转载:
http://www.cnblogs.com/ygm900/p/3460663.html
mysql 和 sqlite 区别
SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率
MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率
MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq
pinyin4j使用
oloz
pinyin4j
首先需要pinyin4j的jar包支持;jar包已上传至附件内
方法一:把汉字转换为拼音;例如:编程转换后则为biancheng
/**
* 将汉字转换为全拼
* @param src 你的需要转换的汉字
* @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal
微博发送私信
随意而生
微博
在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面
http://weibo.com/message/history?uid=****&name=****
可以发现其发送提交的Post请求和其中的数据,
让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。
jsp
香水浓
jsp
JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了
JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后
在 Windows 上安装 SVN Subversion 服务端
AdyZhang
SVN
在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号
最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx
现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使
android开发中如何使用 alertDialog从listView中删除数据?
aijuans
android
我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2 是选中的序号,但是我不知道如何继续处理下去 1 2 3
jdk-6u26-linux-x64.bin 安装
baalwolf
linux
1.上传安装文件(jdk-6u26-linux-x64.bin)
2.修改权限
[root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin
3.执行安装文件
[root@localhost ~]# cd /usr/local
[root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs
MongoDB经典面试题集锦
BigBird2012
mongodb
1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?
NoSQL是非关系型数据库,NoSQL = Not Only SQL。
关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。
在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。
在考虑数据库的成熟
JavaScript异步编程Promise模式的6个特性
bijian1013
JavaScript Promise
Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。
在我们开始正式介绍之前,我们想看看Javascript Promise的样子:
var p = new Promise(function(r
[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager
bit1129
zookeeper
ClientWatchManager接口
//接口的唯一方法materialize用于确定那些Watcher需要被通知
//确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path
public interface ClientWatchManager {
/**
* Return a set of watchers that should
【Scala十五】Scala核心九:隐式转换之二
bit1129
scala
隐式转换存在的必要性,
在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:
val button = new JButton
button.addActionListener(
new ActionListener {
def actionPerformed(event: ActionEvent) {
Android JSON数据的解析与封装小Demo
ronin47
转自:http://www.open-open.com/lib/view/open1420529336406.html
package com.example.jsondemo;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
impor
[设计]字体创意设计方法谈
brotherlamp
UI ui自学 ui视频 ui教程 ui资料
从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。
如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
bylijinnan
java 算法 面试题
import java.util.LinkedList;
/*
单调队列 滑动窗口
单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减
题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k.
要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1
问题的另一种描述就
struts2处理一个form多个submit
chiangfai
struts2
web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码:
<s:form action="submit" method="post" namespace="/my">
<s:textfield name="msg" label="叙述:">
shell查找上个月,陷阱及野路子
chenchao051
shell
date -d "-1 month" +%F
以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。
野路子解决:假设当天日期大于15号
mysql导出数据中文乱码问题
daizj
mysql 中文乱码 导数据
解决mysql导入导出数据乱码问题方法:
1、进入mysql,通过如下命令查看数据库编码方式:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------------+
| Variable_name&nbs
SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write
dcj3sjt126com
PHP smarty sae
对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。
官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213
解决方案为:
01
$path
《教父》系列台词
dcj3sjt126com
Your love is also your weak point.
你的所爱同时也是你的弱点。
If anything in this life is certain, if history has taught us anything, it is
that you can kill anyone.
不顾家的人永远不可能成为一个真正的男人。 &
mongodb安装与使用
dyy_gusi
mongo
一.MongoDB安装和启动,widndows和linux基本相同
1.下载数据库,
linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz
2.解压文件,并且放置到合适的位置
tar -vxf mongodb-linux-x86_64-ubun
Git排除目录
geeksun
git
在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。
有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。
1. 针对单一工程排除文件
这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一
Ubuntu 创建开机自启动脚本的方法
hongtoushizi
ubuntu
转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/
Ubuntu 创建开机自启动脚本的步骤如下:
1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限 $ sudo chmod 755
第八章 流量复制/AB测试/协程
jinnianshilongnian
nginx lua coroutine
流量复制
在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发
电商系统商品表设计
lkl
DROP TABLE IF EXISTS `category`; -- 类目表
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category` (
`id` int(11) NOT NUL
修改phpMyAdmin导入SQL文件的大小限制
pda158
sql mysql
用phpMyAdmin导入mysql数据库时,我的10M的
数据库不能导入,提示mysql数据库最大只能导入2M。
phpMyAdmin数据库导入出错: You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
Tomcat性能调优方案
Sobfist
apache jvm tomcat 应用服务器
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。
【适用场景】 任何项目。
二、Java虚拟机调优
应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。
J
SQLServer学习笔记
vipbooks
数据结构 xml
1、create database school 创建数据库school
2、drop database school 删除数据库school
3、use school 连接到school数据库,使其成为当前数据库
4、create table class(classID int primary key identity not null)
创建一个名为class的表,其有一