建立表空间
CREATE TABLESPACE data01
DATAFILE ‘/oracle/oradata/db/DATA01.dbf’ SIZE 500M
UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k
删除表空间
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
修改表空间大小
alter database datafile ‘/path/NADDate05.dbf’ resize 100M
移动表至另一表空间
alter table move tablespace room1;
一、建立表空间
CREATE TABLESPACE data01
DATAFILE ‘/oracle/oradata/db/DATA01.dbf’ SIZE 500M
UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k
二、建立UNDO表空间
CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE ‘/oracle/oradata/db/UNDOTBS02.dbf’ SIZE 50M
# 注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:
ALTER SYSTEM SET undo_tablespace=UNDOTBS02;
三、建立临时表空间
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE [...]
【数据库】分类文章列表
Oracle表空间操作详解-Oracle入门基础
ASP使用MYSQL数据库全攻略
MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实ASP也可以使用MYSQL数据库开发动态页面,小弟我也是刚刚学会,不敢独享,所以特写了这篇文章供大伙参考。
我的环境是WINDOWS98+PWS4.0+mysql-3.23.32-win+PHP4
必要的软件:PWS4.0(呵呵,废话)
mysql-3.23.32-win(这个是最新版的)
myodbc-2.50.36-dll(这个是最重要的,MYSQL ODBC的驱动程序,可以到www.mysql.com下载)
第一步:安装MYSQL ODBD的驱动程序,将下载的myodbd-2.50.46-dll文件复制到windows\system目录下(windows2000
是winnt/system32)然后建立一新文件,扩展名为reg(就是注册表文件),将以下内容复制到该文件中。
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\myodbc driver]
“UsageCount”=dword:00000002
“Driver”=”C:\\WINDOWS\\System\\myodbc.dll”
“Setup”=”C:\\WINDOWS\\System\\myodbc.dll”
“SQLLevel”=”1″
“FileUsage”=”0″
“DriverODBCVer”=”02.50″
“ConnectFunctions”=”YYY”
“APILevel”=”1″
“CpTimeout”=”120″
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
“myodbc driver”=”installed”
保存后双击该文件,将上面代码注册到WINDOWS注册表中。
如果安装在windows2000中,则Driver和Setup主键的值要做相应改变,这里我想就不用多说了。
如果成功,在控制面板/ODBD数据源的驱动程序里将看到myodbd driver这一项!
第二步:建立ASP文件链接数据库。
这里有两种方法,一种是在ODBC数据源中建立一个系统DSN。后来我发现不建立也可以在ASP中使用MYSQL,方法在下文将讲道。
打开控制面板/ODBD数据源,选择系统DSN,然后添加一个新的DSN,驱动程序选择myodbd driver,会出现一个对话框供输入mysql 相关信息。
Windows DSN name: 所要建立DSN的名称
Mysql Host (name or ip):Mysql服务器的名称或者是IP地址,通常填localhost
Mysql database name:需要使用数据库的名称,数据库在Mysql管理程序中建立。这里我们使用一个例子。数据库名:hc188
里面有数据表:user 数据表有两个字段分别是:username和password,随便插入几个数据。
user:链接数据库的用户名,我填的是root超级用户
password:链接数据库用户密码,如果没有,可以不填
Port(if not 3306):Mysql在服务器的端口,如果不填默认为3306
SQL command on connect:使用sql命令链接数据库,这项可以不填
填写完毕后选择OK保存。
下面链接数据库的ASP代码!
<%
strConnection = “dsn=hc188;driver={myodbd driver};server=localhost;uid=root;pwd=;database=hc188″
Set adoDataConn = Server.CreateObject(“ADODB.Connection”)
adoDataConn.Open strConnection
strQuery = “SELECT * FROM user”
Set rs = adoDataConn.Execute(strQuery)
If Not rs.BOF Then
%>
<TABLE>
<TR>
<TD<b>username</b></TD>
<TD><b>password</b></TD>
</TR>
<%
Do While Not rs.EOF
%>
<TR>
<TD><%=rs(“username”)%></TD>
<TD><%=rs(“password”)%></TD>
</TR>
<%
rs.MoveNext
Loop
%>
</TABLE>
<%
Else
Response.Write(“Sorry, no data found.”)
End If
rs.Close
adoDataConn.Close
Set adoDataConn = Nothing
Set rsEmailData = Nothing
%>
第二种方法:我在使用中想过如果不建立系统DSN,是否也可以使用MYSQL数据库呢?结果是可以的。
方法很简单,把上面ASP代码第二行代码改为:
strconnection=”DefaultDir=;Driver={myodbc driver};database=hc188″
我奇怪的发现,这种方法连用户名和密码都不需要就可以使用。是不是MYSQL的一个BUG呢?
以上代码全部经测试通过!
Oracle如何改变listener的端口号 (Linux服务器)
可以参照如下步骤改变listener的端口号:
1. 使用命令lsnrctl stop停止listener的执行
2. 用lsnrctl status命令确认listener已经停止以后,到$ORACLE_HOME/network/admin下找到listener.ora这个文件。
3. 用vi或其他编辑器打开这个文件,将里面listener的端口号修改成你想要的值,这里是由1522改成1521。
4. 保存修改好的文件
5. 启动sqlplus以SYSTEM账户登录数据库,sqlplus SYSTEM/yourpass@localhost
6. 在sqlplus里面执行如下命令:
ALTER SYSTEM SET LOCAL_LISTENER = “(ADDRESS=(PROTOCOL=TCP)(HOST=oraclehost)(PORT=1521))”;
ALTER SYSTEM REGISTER;
7. 执行lsnrctl status验证listener状态。
如果listener状态正常,这端口号就修改成功了,也可以用netstat -an | grep 15来判断一下
SQL Server 2008行数据和页数据压缩解密
SQL Server的性能主要取决于磁盘I/O效率,提高I/O效率某种程序上就意味着提高性能。SQL Server 2008提供了数据压缩功能来提高磁盘I/O。
数据压缩意味着减小数据的有磁盘占用量,所以数据压缩可以用在表,聚集索引,非聚集索引,视图索引或是分区表,分区索引上。
数据压缩可以在两个级别上实现:行级别和页级别。页级别压缩包括行级别压缩。表和索引在创建的同时就可以压缩,也可以使用Alter Table Rebuild With 或是 Alter Index Rebuild With语法压缩已存在表或是索引。当堆(Heap)上的压缩状态改变时,所有的非聚集索引也会重建。
下面让我们看看压缩过程到底都做了些什么。
行压缩:
1.减少元数据头记录数据。
2.所有的数值类型(integer,decimal,float)或基于数值类型的类型都会被压缩(datetime,money)。比如,100被存在一个int型字段中,占4位,但是从0~255只需要1位,压缩后,就节省了3byte空间。
3.Char和NChar都被存放于可变长度的类型中。原因同上。比如,CSDN被存在Char(10)中,但是它只需要Char(4)空间,所以压缩后就释放了Char(6)个空间。
4.所有类型的NULL和0都不占字节了。
页压缩:
1.进行行压缩。
2.前标压缩:每一页中的所有列,在行标头下面,每行都存储着一个行定义值,压缩后,所有行的定义值都被替换成行头值的引用。
3.字典压缩:字典压缩和前标压缩类似。前标压缩中,一个与其他普通值不同的值被定义到每一列上。但是字典压缩中,每一页中所有列的普通值被存在下一行的行头前面。然后,这些值被替换成新行的引用值。
下面我们来看一个例子:
USE tempdb
GO
CREATE TABLE TestCompression (col1 INT, col2 CHAR(50))
GO
INSERT INTO TestCompression VALUES (10, ‘compression testing’)
GO 5000
– Original
EXEC sp_spaceused TestCompression
GO
– DATA_COMPRESSION = ROW
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = ROW);
GO
EXEC sp_spaceused TestCompression
GO
– DATA_COMPRESSION = PAGE
ALTER TABLE TestCompression
REBUILD WITH (DATA_COMPRESSION = PAGE);
GO
EXEC sp_spaceused TestCompression
GO
– DATA_COMPRESSION = NONE
ALTER TABLE [...]
mysql, oracle等常见数据库的分页实现方法
1.Oracle:
select * from ( select row_.*, rownum rownum_ from ( query_SQL ) row_ where rownum =< max) where rownum_ >= min
2.SQL Server:
select top @pagesize * from tablename where id not in (select top @pagesize*(@page-1) id from tablename order by id) order by id
3.MySQL
select * from tablename limit position, counter
4.DB2
select * from (select [...]
sql server中什么是聚集索引和非聚集索引?
(1)非聚集索引
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
典型的桌面数据库使用的是非聚集索引。在这类索引中,索引键值是有序的,而每个索引节点所指向的数据行是无序的。一个SQL Server表最多可以拥有255个非聚集索引。
非聚集索引与聚集索引一样有 B-树结构,但是有两个重大差别:
数据行不按非聚集索引键的顺序排序和存储。
非聚集索引的叶层不包含数据页。
相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 SQL Server中,非聚集索引中的行定位器有两种形式:
如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。
在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:
包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。
不返回大型结果集的查询。
返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。
经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。
在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。
(2)聚集索引
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引在系统数据库表sysindexes 内有一行,其 indid = 1。数据链内的页和其内的行按聚集索引键值排序。所有插入都在所插入行中的键值与排序顺序相匹配时执行。
SQL Server将索引组织为B-树。索引内的每一页包含一个页首,页首后面跟着索引行。每个索引行都包含一个键值以及一个指向较低级页或数据行的指针。索引的每个页称为索引节点。B-树的顶端节点称为根节点。索引的底层节点称为叶节点。每级索引中的页链接在双向链接列表中。在聚集索引内数据页组成叶节点。根和叶之间的任何索引级统称为中间级。
对于聚集索引,sysindexes.root 指向它的顶端。SQL Server 沿着聚集索引浏览以找到聚集索引键对应的行。为找到键的范围,SQL Server 浏览索引以找到这个范围的起始键值,然后用向前或向后指针扫描数据页。为找到数据页链的首页,SQL Server 从索引的根节点开始沿最左边的指针进行扫描.
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
对于聚集索引,人们往往有一些错误的认识。其中,最常见的错误有:
聚集索引会降低insert操作的速度,因为必须要向后移动一半的数据来为新插入的行腾出空间。这种认识是错误的,因为可以利用填充因子控制填充的百分比,从而在索引页上为新插入的数据保留空间。如果索引页填满了,SQL Server将会进行页拆分,在这种情况下只有第一个页才会受到影响。
在使用标识列的主键上创建聚集索引是一种好的设计方法,它可以使对表的操作达到最快速度。这种认识是错误的,它浪费了创建其它更有效的聚集索引的机会。并且,使用这种方法会把每个新插入的记录行都存储到表尾部的同一个的数据页中,这将导致数据库的热点和锁争用。笔者曾经见过采用这种方法设计的数据库,对于每一个新订单,客户服务人员都不得不等待数分钟来加以确认。
聚集索引是具有魔力的。如果哪个查询的速度不够快,那么就在该列上创建聚集索引,对于表的操作速度一定会得到提高。这种认识也是错误的,聚集索引只是比非聚集索引稍稍快了那么一点点。因为在每个表上只能创建一个聚集索引,所以它也是一种宝贵的性能资源,只有在那些经常作为条件查询一组记录行的列上才应该建立聚集索引。
在创建聚集索引之前,应先了解数据是如何被访问的。可考虑将聚集索引用于:
包含大量非重复值的列。
使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
[...]
MySQL创始人寻求中国帮助 开心编程网加入全球拯救MySql行动
MySQL创始人向中国方面求援的邮件。全文如下:
亲爱的拯救MySQL的中国签名支持者:
欧盟可能无法拯救MySQL, 中国和俄罗斯可能是拯救MySQL的希望之所在。中国拥有强大、独立以及自信的反垄断主管机关,因此,我本人在此请求您的帮助。对于您在http://www.helpmysql.org/ru/petition的签名,我们深表感谢。如果可以的话,我们需要您的进一步帮助:
(1)商务部反垄断局是并购反垄断审查的主管机关,包括本次对甲骨文收购太阳微电子的反垄断审查。如果您正在使用MySQL,您的意见将对于商务部反垄断局的审查非常重要。我们不能详细的指示您该如何如何对主管机关反映情况,因为这是不妥当的。但是我们认为,如果您能告诉主管机关您的公司如何使用MySQL (什么项目,什么规模、数据流量以及使用者数量等)以及您认为甲骨文收购MySQL之后会产生什么样的影响,将会非常有用。如果您知道MySQL是昂贵的甲骨文数据库的免费替代品,举例向商务部反垄断局说明将会很有帮助。特别是,您知道或使用MySQL作为筹码,或声称将使用MySQL,以此要求甲骨文数据库降低价格的情况,请一定向商务部说明。我们希望您能直接写信给商务部反垄断局。
商务部反垄断局会保护MySQL以及您作为使用者,客户和消费者的利益。在与商务部的沟通过程中,请您简单明了地说明您具体需要什么样的帮助。
(2)感谢许许多多像您一样支持我们的人,我们在中国已经收集到了650 个签名,请见:http://helpmysql.org/cn/stats。 这是一个很好的开始。但是像中国这样一个支持开源的大国,应该会有更多人的签名。问题可能在于很多人可能认为这是欧盟委员会审查决定的事项,中国可能无法改变什么。事实上,中国商务部反垄断局可以做出自己的决定。
在中国,知道此事的人可能还不多,新闻报道也比较有限。如果您有兴趣,可以帮我们联系中国有影响力IT网站或杂志,告诉他们这次签名活动。
如果有更多的网站参与进来,就会有更多的人签署请愿书,虽然这只是第一步。切记确保文章中或网站中提到helpmysql.org,或者提供一个链接http://helpmysql.org/cn/theissue/customerspaythebill
对于您所做出的任何帮助,我在此预致感谢!
Michael Widenius
Creator of MySQL
广大技术技术编程爱好者,如果你见到了这篇文章,也请你加入到我们的行列,让我们一起拯救MySQL,将开源进行到底!
java数据库设计中的14个技巧
下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的。对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握。并逐步做到:在应用中发展,在发展中应用。
1. 原始单据与实体之间的关系
可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。
〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。
2. 主键与外键
一般而言,一个实体不能既无主键又无外键。在E?R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。
主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。
3. 基本表的性质
基本表与中间表、临时表不同,因为它具有如下四个特性:
(1) 原子性。基本表中的字段是不可再分解的。
(2) 原始性。基本表中的记录是原始数据(基础数据)的记录。
(3) 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。
(4) 稳定性。基本表的结构是相对稳定的,表中的记录是要长期保存的。
理解基本表的性质后,在设计数据库时,就能将基本表与中间表、临时表区分开来。
4. 范式标准
基本表及其字段之间的关系, 应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。
〖例2〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。
在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和“数量”这样的列被称为“数据列”。
表1 商品表的表结构
商品名称 商品型号 单价 数量 金额
电视机 29? 2,500 40 100,000
5. 通俗地理解三个范式
通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余.
没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。
6. 要善于识别与正确处理多对多的关系
若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处理多对多的关系。
[...]
SQL Server 2008中的格式化日期
我们都知道不同的国家要求不同的日期格式。不同的应用程序要求不同的日期格式。SQL Server数据库管理员和开发人员将函数convert()和其它日期函数例如datepart()、datename()等等一起使用来操纵输出的格式。这篇文章介绍怎样创建一个普通函数来获得不同国家和应用程序所要求的大多数格式。
MySql数据库 使用一条INSERT语句完成多表插入
这是一条颠覆常规的插入方法,一条INSERT语句可以完成向多张表的插入任务。小小地展示一下这种插入方法。
1.创建表T并初始化测试数据,此表作为数据源。
sec@ora10g> create table t (x number(10), y varchar2(10));
sec@ora10g> insert into t values (1,’a’);
sec@ora10g> insert into t values (2,’b’);
sec@ora10g> insert into t values (3,’c’);
sec@ora10g> insert into t values (4,’d’);
sec@ora10g> insert into t values (5,’e’);
sec@ora10g> insert into t values (6,’f’);
sec@ora10g> commit;
2.查看表T的数据
sec@ora10g> select * from t;
X Y
———- ———-
1 a
2 b
3 c
4 d
5 [...]