??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区AV无码少妇电影☆,亚洲国产精品嫩草影院久久,亚洲伦理一二三四http://www.tkk7.com/gm_jing/category/16430.html生活之点Ҏ(gu)?/description>zh-cnSat, 14 Aug 2010 05:08:24 GMTSat, 14 Aug 2010 05:08:24 GMT60Some performance considerations for temporary tablespaceshttp://www.tkk7.com/gm_jing/articles/328782.html黎夕黎夕Fri, 13 Aug 2010 06:53:00 GMThttp://www.tkk7.com/gm_jing/articles/328782.htmlhttp://www.tkk7.com/gm_jing/comments/328782.htmlhttp://www.tkk7.com/gm_jing/articles/328782.html#Feedback0http://www.tkk7.com/gm_jing/comments/commentRss/328782.htmlhttp://www.tkk7.com/gm_jing/services/trackbacks/328782.htmlTEMPORARY Tablespaces and TEMPFILES

What are Temporary Tablespaces:

Temporary tablespaces are used to manage space for database sort operations and for storing global temporary tables. For example, if you join two large tables, and Oracle cannot do the sort in memory (see SORT_AREA_SIZE initialisation parameter), space will be allocated in a temporary tablespace for doing the sort operation. Other SQL operations that might require disk sorting are: CREATE INDEX, ANALYZE, Select DISTINCT, ORDER BY, GROUP BY, UNION, INTERSECT, MINUS, Sort-Merge joins, etc.

The DBA should assign a temporary tablespace to each user in the database to prevent them from allocating sort space in the SYSTEM tablespace. This can be done with one of the following commands:

SQL> CREATE USER scott DEFAULT TABLESPACE data TEMPORARY TABLESPACE temp;
SQL> ALTER USER scott TEMPORARY TABLESPACE temp;

Note that a temporary tablespace cannot contain permanent objects and therefore doesn't need to be backed up.

What are TEMPFILES?

Unlike normal data files, TEMPFILEs are not fully initialised (sparse). When you create a TEMPFILE, Oracle only writes to the header and last block of the file. This is why it is much quicker to create a TEMPFILE than to create a normal database file.

TEMPFILEs are not recorded in the database's control file. This implies that one can just recreate them whenever you restore the database, or after deleting them by accident. This opens interesting possibilities like having different TEMPFILE configurations between permanent and standby databases, or configure TEMPFILEs to be local instead of shared in a RAC environment.

One cannot remove datafiles from a tablespace until you drop the entire tablespace. However, one can remove a TEMPFILE from a database. Look at his example:

SQL> ALTER DATABASE TEMPFILE '/oradata/temp02.dbf' DROP INCLUDING DATAFILES;

If you remove all tempfiles from a temporary tablespace, you may encounter error: ORA-25153: Temporary Tablespace is Empty. Use the following statement to add a TEMPFILE to a temporary tablespace:

SQL> ALTER TABLESPACE temp ADD TEMPFILE '/oradata/temp03.dbf' SIZE 100M;

Except for adding a tempfile, as illustrated in the above example, you cannot use the ALTER TABLESPACE statement for a locally managed temporary tablespace (operations like rename, set to read only, recover, etc. will fail).

How does one create Temporary Tablespaces?

Oracle provides various ways of creating TEMPORARY tablespaces (mainly to provide backward compatibility). One should use the most recent method available:

- Prior to Oracle 7.3 - CREATE TABLESPACE temp DATAFILE ...;
- Oracle 7.3 & 8.0 - CREATE TABLESPACE temp DATAFILE ... TEMPORARY;
- Oracle 8i and above - CREATE TEMPORARY TABLESPACE temp TEMPFILE ...;

Oracle 8i and 9i example:

SQL> CREATE TEMPORARY TABLESPACE temp 
TEMPFILE '/oradata/mytemp_01.tmp' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

For best performance, the UNIFORM SIZE must be a multiple of the SORT_AREA_SIZE parameter.

Oracle 9i example using OMF (Oracle Managed Files):

SQL> CREATE TEMPORARY TABLESPACE temp;

Default Temporary Tablespaces:

In Oracle 9i and above, one can define a Default Temporary Tablespace at database creation time, or by issuing an "ALTER DATABASE" statement:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

The default Default Temporary Tablespace is SYSTEM. Each database can be assigned one and only one Default Temporary Tablespace. Using this feature, a Temporary Tablespace is automatically assigned to users. The following restrictions apply to default temporary tablespaces:

- The Default Temporary Tablespace must be of type TEMPORARY
- The DEFAULT TEMPORARY TABLESPACE cannot be taken off-line
- The DEFAULT TEMPORARY TABLESPACE cannot be dropped until you create another one.

To see the default temporary tablespace for a database, execute the following query:

SQL> SELECT * FROM DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';

All new users that are not explicitly assigned a TEMPORARY TABLESPACE, will get the Default Temporary Tablespace as its TEMPORARY TABLESPACE. Also, when you assign a TEMPORARY tablespace to a user, Oracle will not change this value next time you change the Default Temporary Tablespace for the database.

Other Considerations:

Some performance considerations for temporary tablespaces:

- Always use temporary tablespaces instead of permanent content tablespaces for sorting (no logging and uses one large sort segment to reduce recursive SQL and ST space management enqueue contention).
- Ensure that you create your temporary tablespaces as locally managed instead of dictionary managed (Use sort space bitmap instead of sys.fet$ and sys.uet$ for allocating space).
- Always use TEMPFILEs instead of DATAFILEs (reduce backup and recovery time + other advantages as described above)
- Stripe your temporary tablespaces over multiple disks to alleviate possible disk contention and to speed-up sorting operations (user processes can read/write to it directly).

Monitoring Temporary Tablespaces and Sorting:

Unlike datafiles, tempfiles are not listed in V$DATAFILE and DBA_DATA_FILES. Use V$TEMPFILE and DBA_TEMP_FILES instead.

One can monitor temporary segments from V$SORT_SEGMENT and V$SORT_USAGE

DBA_FREE_SPACE does not record free space for temporary tablespaces. Use V$TEMP_SPACE_HEADER instead:

SQL> select TABLESPACE_NAME, BYTES_USED, BYTES_FREE from V$TEMP_SPACE_HEADER;

TABLESPACE_NAME BYTES_USED BYTES_FREE
------------------------------ ---------- ----------
TEMP 52428800 52428800



黎夕 2010-08-13 14:53 发表评论
]]>
理表空?修改表空?【引用?/title><link>http://www.tkk7.com/gm_jing/articles/328779.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Fri, 13 Aug 2010 06:40:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/328779.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/328779.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/328779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/328779.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/328779.html</trackback:ping><description><![CDATA[<br /> <p>四、修改表I间<br /> 不论是字典管理表I间q是本地理表空_(d)在表I间被创Z后都可以q行修改。可以用ALTER TABALESPACE来修改表I间。相应的Q用?/p> <p>必须拥有ALTER TABLESPACE或ALTER DATABASEpȝ权限才能够修改表I间?/p> <p>(一)扩展表空?br /> 表空间在物理上是׃存在盘上的数据文gl成的。创建数据文件时?x)指定大,因此表空间是有大的。ؓ(f)?jin)给用户提供更大的表I间Q?/p> <p>以便使其可以l箋增加数据Q就必须能够扩展表空_(d)卛_加更多存储空间。通常扩展表空间的Ҏ(gu)有添加数据文件、改变数据文件的大小?/p> <p>允许数据文g自动扩展q三U方式?/p> <p>(1)d数据文g<br /> 因ؓ(f)表空间的大小实际上就是它所包含的各个数据文件的大小和,所以ؓ(f)表空间增加新的数据文件是最常用的扩展表I间的办法?br /> 注意Q不能ؓ(f)大文件表I间增加W二个数据文件?br /> ALTER TABLESPACE mytbs01 ADD DATAFILE 'e:\mytbs01_2.dbf' SIZE 3M;<br /> 与普通表I间不同Q如果要Z(f)时表I间d新的临时数据文gQ就必须使用ALTER TABLESPACE...ADD TEMPFILE语句?br /> ALTER TABLESPACE mytmptbs01 ADD TEMPFILE 'e:\mytmptbs01_2.dbf' SIZE 3M;</p> <p>(2)改变数据文g的大?br /> 通过增加表空间中已有数据文g的大,也可以增加表I间的存储空间?br /> ALTER DATABASE DATAFILE 'e:\mytbs01_2.dbf' RESIZE 4M;<br /> 与普通表I间不同Q如果要改变临时表空间的临时文g的大,必M用ALTER DATABASE TEMPFILE...RESIZE语句?br /> 当数据文件中的可用空间未使用完时Q允许减它的大,卌行压~?/p> <p>(3)允许数据文g自动扩展<br /> 如果在创I间或ؓ(f)表空间增加数据文件时Q没有在数据文g子句中指定AUTOEXTEND选项Q则该数据文件的大小是不?x)自动扩展或增加的?/p> <p>Z(jin)是数据文件可以自动扩展,必L定AUTOEXTEND ON选项。在指定?jin)AUTOEXTEND ON选项后,当表I间被填满时Q数据文件就?x)自动扩?/p> <p>Q从而就间接的增加了(jin)表空间的存储I间?br /> ALTER DATABASE DATAFILE 'e:\mytbs01_2.dbf' AUTOEXTEND ON NEXT 1M MAXSIZE 20M;</p> <p>(?修改属性、状?br /> (1)修改表空间的可用?br /> 新创建的表空间都处于联机(ONLINE)状态。此时该表空间是可以被访问的。但当表I间处于脱机(OFFLINE)状态时Q该表空间就不能被SQL语句</p> <p>讉K?jin)。因此,表空间是否联机,表明?jin)表I间是否可用?br /> 修改表空间可用性的语法?<br /> ALTER TABLESPACE ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER];</p> <p>使表I间脱机<br /> Z(jin)提高数据文g的I/O性能Q可能需要移动特定表I间的数据文件。ؓ(f)?jin)确保表I间中数据文件的一致性,在移动数据文件之前,需要将该表</p> <p>I间修改机状态,以防止其中的数据文g被修攏V?br /> SYSTEM,SYSAUX,TEMP,UNDOTBS1表空间是不能被脱机的Q因为ORACLE要随时用这几个表空间?br /> 当表I间修改机状态后Q与其相关的数据文g的SCN值和内容都不?x)发生Q何变化?br /> ALTER TABLESPACE mytbs01 OFFLINE;<br /> 当表I间处于脱机状态时Q就不能讉K该表I间?jin),否则会(x)有错误的提C?br /> ALTER TABLESPACE mytbs01 ONLINE;<br /> ALTER TABLESPACE mytbs01 OFFLINE TEMPORARY;<br /> ALTER TABLESPACE mytbs01 ONLINE;<br /> 要在ARCHIVELOG模式下执行立卌机模式?/p> <p>使表I间联机<br /> 完成其他对表I间的维护操作后Q应该立卛_表空间{变ؓ(f)ONLINE状态,以便该表I间可以被访问?br /> ALTER TABLESPACE mytbs01 ONLINE;</p> <p>(2)修改表空间的可读写?br /> 修改表空间的可读写包括表空间只d使表I间可读写?/p> <p>使表I间只读<br /> 如果表空间值用于存N(rn)态数据,或者要表I间Ud到其他数据库Q就应该先将表空间修改ؓ(f)只读状态?br /> SYSTEM,SYSAUX,TEMP,UNDOTBS1q几个表I间不能被只读,因ؓ(f)ORACLE要随时向q几个表I间写入数据?br /> 表I间吸怪ؓ(f)只读状态后Q与其相关的数据文g中的SCN值和内容都不?x)发生Q何变化?br /> ALTER TABLESPACE mytbs01 READ ONLY;<br /> 当表I间处于READ ONLY状态时Q就不能对该表空间操作了(jin)Q否则会(x)有错误提C?br /> 当表I间处于只读状态时Q仍然允许执行DROP 操作删除该表I间上的对象?br /> DROP TABLE personal CASCADE CONSTRAINTS;<br /> 表空间的可读写状态在脱机之后仍然保留Q换句话说就是练U后的其可读写性仍然存在?br /> 如果表空间处于脱机状态,׃能修改它的可d状态,否则会(x)有错误提CZ息?/p> <p>使表I间可读?br /> 正常情况下,表空间是可读写的Q即可以在该表空间上执行正常的DDL和DML操作?br /> ALTER TABLESPACE mytbs01 READ WRITE;</p> <p>(3)修改表空间的备䆾模式<br /> 如果执行非RMAN(RON-RECOVERY MANAGER)联机备䆾Q即在ARCHIVELOG模式下的热备份,则需要修改表I间的备份模式?br /> 首先执行ALTER TABLESPACE tablespace_name BEGIN BACKUP语句Q将表空间tablespace_name讄成备份模式,cM于系l给需要备份的表空</p> <p>间加锁,防止在备份过E中用户Ҏ(gu)表空间进行操作。当表空间处于备份模式时Q数据库l箋写数据到数据文g(当检查点出现?Q但q些(g)</p> <p>查点的出C被记录到数据文g的头部块中。这告诉数据库Q图q数据库例程被突然中断,可能需要恢复。如果有必要Q一些附加的信息</p> <p>?x)被写入重做日志文gQ以便有助于恢复?br /> 然后使用一些操作系l的命o(h)E序Q将该表I间中的各个数据文g都备份到某些文g夹中或存储设备上?br /> 最后执行ALTER TABLESPACE tablespace_name END BACKUP语句Q将表空间tablespace_name讄成结束备份模式,cM于系l给正在备䆾的表</p> <p>I间解锁Q以便用户对此空间进行操作。如果忘C(jin)表I间讄成结束备份模式,则下一ơ启动数据库Ӟ数据库将?x)看到控制文件中的检</p> <p>查点h于数据文件头部块中的(g)查好Qƈ提示一个需要进行介质恢复的信息?/p> <p>(4)修改表空间的名称<br /> 通过使用ALTER TABLESPACE的RENAME选项QDBA可以修改表I间的名U。在ORACLE 9I之前Q移动表I间Ӟ如果在目标数据库中存在同名表</p> <p>I间Q那么该表空间将不能被移动到目标数据库;而在ORACLE 10G中,如果目标数据库存在同名表I间Q可以先使用ALTER TABLESPACE命o(h)?/p> <p>Ҏ(gu)数据库或目标数据库的相应表空间名Q然后再Ud表空间?br /> SYSTEM,SYSAUX,TEMP,UNDOTBS1表空间的名称不能被移动?br /> ALTER TABLESPACE mytbs01 RENAME TO mytbs01_new;<br /> 当表I间或其M数据文g׃处于OFFLINE状态时Q不能修改表I间的名U?/p> <p>(5)讄、查询默认表I间<br /> 在创建数据库用户Ӟ如果没有用DEFAULT TABLESPACE选项指定默认表空_(d)则用数据库的默认表I间。如果没有用DEFAULT TEMPORARY</p> <p>TABLESPACE选项指定临时表空_(d)则用数据库的默认(f)时表I间。在ORACLE 10G中,初始的默认(f)时表I间是TEMPQ而默认表I间随用L(fng)</p> <p>不同而不同?/p> <p>讄数据库默认表I间<br /> 可以使用ALTER DATABASE DEFAULT TABLESPACE语句Q修Ҏ(gu)据库的默认表I间?br /> ALTER DATABASE DEFAULT TABLESPACE mytbs01;</p> <p>讄数据库默认(f)时表I间<br /> 可以使用ALTER DATABASE DEFAULT TEMPORARY TABLESPACE语句Q修Ҏ(gu)据库的默认(f)时表I间按?br /> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE mytmptbs01;</p> <p>查询数据库的默认表空?br /> 可以使用以下语句查询当前数据库的默认表空间?br /> SELECT username,default_tablespace,temporary_tablespae FROM DBA_UERS;<br /> 怹表空间与临时表空间是有区别的Q所以如果就׃个一个永久表I间讄为数据库的(f)时表I间׃(x)有错误提C?/p> <img src ="http://www.tkk7.com/gm_jing/aggbug/328779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2010-08-13 14:40 <a href="http://www.tkk7.com/gm_jing/articles/328779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理表空?删除表空?【引用?/title><link>http://www.tkk7.com/gm_jing/articles/328780.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Fri, 13 Aug 2010 06:40:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/328780.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/328780.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/328780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/328780.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/328780.html</trackback:ping><description><![CDATA[五、删除表I间<br /> <div class="fddrvt5" id="blog_text" class="cnt"> <p> 如果不再需要一个表I间?qing)其内?该表I间所包含的段Q或所有的数据文g)Q就可以该表空间中从数据库中删除。ORACLE数据库中的Q?/p> <p>表空_(d)除系l必ȝ表空?SYSTEM,SYSAUX,TEMP)外,都可以被删除?br /> 一旦一个表I间已经被删除,该表I间的数据就不能恢复?jin)。因而,一定要保一个将被删除的表空间所包含的所有数据将来都不再需要了(jin)?/p> <p>另外Q在从数据库删除表空间的前后Q都需要对数据库做一ơ完全备份。这样即佉K误的删除?jin)一个表I间Q如果数据库在删除表I间后遇?/p> <p>问题Q还能够恢复该数据库?br /> 不能删除包含Mzd端的表空间。ؓ(f)?jin)简单,应该是表I间在被删除之间脱机?br /> 要删除一个表I间Q用DROP TABLESPACE tablespace_name语句。用户必L有DROP TABLESPACEpȝ权限才能删除一个表I间?br /> 要删除一个非I的表空_(d)p使用INCLUDING CONTENTS选项Q否则会(x)有错误提C?br /> 以上的语句只?x)从数据字典、控制文件删除表I间信息Q而与其相关的数据文g仍然存在于磁盘上。但是,当表I间一旦被删除Q无论它所?/p> <p>括的数据文g是否被删除,q些数据文g׃都会(x)时区作用?br /> 从ORACLE 9I开始,在删除表I间的同时还可以联机的删除与其相关的数据文g。当?dng)如果在ORACLE删除表空间的同时Q没有只是它删除数据</p> <p>文gQ就必须在以后用合适的操作pȝ命o(h)来删除他们?br /> 要删除一个表I间的同时删除与他相关的数据文gQ就必须使用INCLUDING CONTENTS AND DATAFILES子句?br /> ALTER TABLESPACE mytbs06 OFFLINE;<br /> DROP TABLESPACE mytbs06 INCLUDING CONTENTS AND DATAFILES;</p> </div> <img src ="http://www.tkk7.com/gm_jing/aggbug/328780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2010-08-13 14:40 <a href="http://www.tkk7.com/gm_jing/articles/328780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理表空?创徏表空?【引用?/title><link>http://www.tkk7.com/gm_jing/articles/328778.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Fri, 13 Aug 2010 06:39:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/328778.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/328778.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/328778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/328778.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/328778.html</trackback:ping><description><![CDATA[三、创I间<br /> <div class="p5dz5vd" id="blog_text" class="cnt"> <p> 创徏表空间的步骤因操作系l带的不同而不同。然而,在所有的情况中,用户都应该事先通过操作pȝ的功能创Z个目录结构,以便新?/p> <p>I间的数据文?一个表I间必须要有一个数据文?分配到相应的目录中。在大多数操作系l中Q当通过d数据文g来创Z个新表空间或</p> <p>修改一个表I间Ӟ应该指出大小和完全限定的文g?卛_括目录结构和文g的扩展名)。在每一U情况中Q都由O(jin)RACLE按所指定的信息来?/p> <p>动创建和格式化数据文件?br /> 与表I间对应的物理结构是数据文g。在创徏表空间的q程中要指定它所使用的数据文件的位置和文件名。实际上Q在表空间的创徏中,</p> <p>ORACLE?x)完成以下几个工作?x)<br /> 1.在数据字典和控制文g中记录该新创建的表空_(d)<br /> 2.在操作系l中按指定的位置和文件名创徏指定大小的操作系l文Ӟ作ؓ(f)该表I间对应的数据文Ӟ<br /> 3.在预警文件中记录创徏表空间的信息?/p> <p>CREATE TABLESPACE 创徏(怹)表空?br /> CREATE BIGFILE TABLESPACE 创徏大文件表I间<br /> CREATE TEMPORARY TABLESPACE 创徏临时表空?br /> CREATE UNDO TABLESPACE 创徏撤销表空?/p> <p>用户必须拥有CREATE TABLESPACEpȝ权限才能创徏表空间。(f)时表I间和撤销表空间都是特D表I间Q他们与一般表I间不同的是Q用户ƈ?/p> <p>能在其中创徏Ҏ(gu)对象Q因此,需要在CREATE语句中添加TEMPORARY和UNDO关键词?br /> 在ORACLE 8I以前Q所有的表空间都创徏为字典管理。从ORACLE 8I开始,用户能够创徏本地理的表I间Q他们用位图代替了(jin)数据字典表开</p> <p>跟踪已用的和I闲的空间。因为本地管理的表空间有更好的性能Q而且更加Ҏ(gu)理Q所以,从ORACLE 9I开始,创徏(怹)表空间都是本地管</p> <p>理的?/p> <p>创徏表空间的语法是:(x)<br /> CREATE [SMALLFILE|BIGFILE] [PERMANENT|TEMPORARY|UNDO] TABLESPACE<br /> DATAFILE|TEMPFILE datafile_clause[,datafile_clause]<br /> [EXTENT MANAGEMENT LOCAL]<br /> [AUTOALLOCATE|UNIFORM SIZE integer [K|M]]<br /> [SEGMENT SPACE MANAGEMENT AUTO|MANUAL]<br /> [BLOCKSIZE integer[K|M]]<br /> [MININUM EXTENT integer [K|M]]<br /> [LOGGING|NOLOGGING]<br /> [ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE]];</p> <p>其中Qdatafile_clause子句(数据文g子句)的语法是Q?br /> 'path_filename_suffix' SIZE integer [K|M]<br /> [REUSE]<br /> [AUTOEXTEND OFF|ON]<br /> [NEXT integer [K|M]]<br /> [MAXSIZE UNLIMITED | integer [K|M]]<br /> 在datafile_clause子句中指定数据文件时Q不能用相对\径,只能使用l对路径。ƈ且,如果没有提供文g名的后缀Q则无后~?/p> <p>(一)创徏(怹)表空?br /> 如果不指定PERMANENT,TEMPORARY,UNDO选项Q或指定?jin)PERMANENT选项Q则创徏的是怹表空_(d)x久保存其中的数据库对? 的数据?br /> 有三U创?怹)表空间的Ҏ(gu)Q?br /> (1)使用AUTOALLOCATE区分配方?br /> 如果DBA能够预测到表I间中存攄度喜爱那个所需要的区大会(x)有很大不同,则用AUTOALLOCATE区分配方式是比较好的选择。在q种方式?/p> <p>QORACLE自动按表空间中不同对象的大分配相应大的?有一个表大小与区大小的对应关p,最的Zؓ(f)64KB)? AUTOALLOCATE区分配方</p> <p>式的~点是在表空间中可能?x)造成一些磁盘空间的费Q但是这一点代L(fng)对DBA工作量的减少来说是值得的?br /> CREATE TABLESPACE mytbs01 DATAFILE 'e:\mytbs01.dbf' SIZE 2M AUTOALLOCATE;</p> <p>(2)使用UNIFORM区分配方?br /> 如果DBA能够预测到表I间中存攄大部分对象都要求使用相同大小的区Q那么,使用UNIFORM区分配方式是比较好的选择。在q种情况下,</p> <p>ORACLEؓ(f)表空间中所有对象都分配指定的相? 大小的区(默认大小?MB)。UNIFORM区分配方式的优点是在表空间中不会(x)产生盘片Q节U?/p> <p>盘I间?br /> CREATE TABLESPACE mytbs02 DATAFILE 'e:\mytbs02_1.dbf' SIZE 1M, 'e:\mytbs02_2' SIZE 2M UNIFORM SIZE 128K;</p> <p>(3)在数据字典子句中指定数据文g的扩展方?br /> 可以在数据文件子句中指定数据文g的扩展方式?br /> CREATE TABLESPACE mytbs03 DATAFILE 'e:\mytbs03_1.dbf' SIZE 1M AUTOEXTEND ON NEXT 2M MAXSIZE 11M;<br /> 但是此时׃能再指定表空间的区分配方式了(jin)Q否则会(x)有错误提C?/p> <p>(4)使用AUTOD늮理方?br /> 可以使用SEGMENT SPACE MANAGEMENT子句来指定表I间的段理方式Q即理D中已用数据块和I闲数据块的方式。虽然ORACLE极力推荐为本</p> <p>地管理的怹表空间用AUTOD늮理方式,但在ORACLE 10G中如果不使用SEGMENT SPACE MANAGEMENT子句指定AUTO,则用MANUALD늮理方式?br /> CREATE TABLESPACE mytbs04 DATAFILE 'e:\mytbs04_1.dbf' SIZE 3M REUSE UNIFORM SEGMENT SPACE MANAGEMENT AUTO;</p> <p>(5)使用BLOCKSIZE选项和创建非标准块表I间<br /> 有时候要求数据库支持多个块大的表空?大表的数据存攑֜大块的表I间上更有效)Q即必须创徏有不同于初始化参数DB_BLOCK_SIZE指定?/p> <p>标准的ORACLE块大的表空_(d)此时可以用这个选项。这个选项只适用于永久表I间?br /> 例如现在DB_BLOCK_SIZE参数的值是8KQ则可以创徏BLOCKSIZE选项?K的表I间(如果不用BLOCKSIZE选项指定块的大小Q就 采用DB_BLOCK_SIZE</p> <p>参数指定的大??br /> CREATE TABLESPACE mytbs05 DATAFILE 'e:\mytbs05_1.dbf' SIZE 3M REUSE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO;<br /> 但可能不能创建BLOCKSIZE参数gؓ(f)16K的表I间Q否则会(x)有错误提C:(x)<br /> CRAETE TABLESPACE mytbs06 DATAFILE 'e:\mytbs06_1.dbf' SIZE 3M REUSE BLOCKSIZE 16K SEGMENT SPACE MANAGEMENT AUTO;<br /> 如果要ؓ(f)不同的表I间指定不同的块大小Q就需要先修改初始化参数文件中的数据高速缓存区参数</p> <p>(DB_2K_CACHE_SIZE,DB_4K_CACHE_SIZE,DB_8K_CACHE_SIZE,<br /> DB_16K_CACHE_SIZE,DB_32K_CACHE_SIZE)才行</p> <p>(?创徏大文件表I间<br /> 大文件表I间是ORACLE 10G数据库的新特性,而且仅在本地理的表I间中才支持大文件表I间。这U表I间只能包括一个数据文Ӟ该数?/p> <p>文g可以包含4G个块。能显著提高ORACLE数据库的存储能力q减数据文件的个数?br /> CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'e:\mybigtbs01_1.dbf' SIZE 2M SEGMENT SPACE MANAGEMENT AUTO;<br /> 在创建大文g表空间时可以指定区分配方式,但不能将D늮理方式指定ؓ(f)MANUAL方式?br /> CREATE BIGFILE TABLESPACE mybigtbs02 DATAFILE 'e:\mybigtbs02_1.dbf' SIZE 2M UNIFORM SIZE 128K;<br /> 但是<br /> CREATE BIGFILE TABLESPACE mybigtbs03 DATAFILE 'e:\mybigtbs03_1.dbf' SIZE 2M SEGMENT SPACE MANAGEMENT MANUAL;׃(x)出现错误提示</p> <p>?/p> <p>(?创徏临时表空?br /> 如果指定?jin)TEMPORARY选项Q则创徏的就是(f)时表I间Q即ORACLE?x)用q种表空间来创徏临时D,以便排序操作时用。这个(f)时段是全体用?/p> <p>׃n的,即排序操作l束?jin),ORACLE也不?x)释放这个?f)时段。这可以提高排序操作较多的应用系l的执行性能Q因为ORACLE不必每次遇到一</p> <p>个排序操作就分配一个(f)时段Q可以采用以下方法创Z(f)时表I间:<br /> (1)创徏临时表空?br /> 如果在数据库q行q程中经常有大量排序工作要做Qؓ(f)?jin)提高排序性能应该徏立多个链式表I间?br /> CREATE SMALLFILE TEMPORARY TABLESPACE mytmptbs01 TEMPFILE 'e:\mytmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;<br /> 必须用关键字TEMPFILE代替DATAFILE。另外,临时表空间用(f)时文件而不是数据文件来创徏。(f)时文件只能与临时表空间一起用,不需?/p> <p>备䆾Q也不会(x)把数据修改记录到重做日志中?br /> 在创Z(f)时表I间Ӟ区分配方式不能指定ؓ(f)AUTOALLOCATE方式Q否则会(x)出现错误提示?/p> <p>(2)创徏大文件(f)时表I间<br /> 从ORACLE 10G开始,允许使用CREATE BIGFILE TEMPORARY TABLESPACE命o(h)来创建只包含一个(f)时文件的大文件(f)时表I间?br /> CREATE BIGFILE TEMPORARY TABLESPACE mybigtmptbs02 TEMPFILE 'e:\mybigtmptbs02_1.dbf' SIZE 4M UNIFORM SIZE 64K;<br /> 在创Z(f)时表I间ӞD늮理方式不能指定ؓ(f)AUTO方式Q否则会(x)出现错误提示?/p> <p>(?创徏撤销表空?br /> 撤销表空?UNDO TABLESPACE)用户存储撤销D,该表I间只能使用本地理方式?br /> 当执行CREATE DATABASE语句创徏数据库时Q可以创建UNDO表空_(d)q且DBA可以使用该UNDO表空间来理UNDO数据。创建数据库后,可以使用</p> <p>CREATE UNDO TABLESPACE命o(h)来创建UNDO表空间?br /> CREATE UNDO TABLESPACE myundotbs01 DATAFILE 'e:\myundotbs01_1.dbf' SIZE 4M; AUTOALLOCATE;<br /> CREATE UNDO TABLESPACE myundotbs02 DATAFILE 'e:\myundotbs02_1.dbf' SIZE 4M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;<br /> 创徏UNDO表空间时不能指定l一区大的选项Q否则会(x)有错误提C?/p> <p>如果想用UNDO表空间的理功能Q就需要在初始化参数文件中讄如下参数Q?br /> *.undo_management='AUTO'<br /> *.undo_tablespace='UNDOTBS1'<br /> 其中Qundo_management参数必须讄成AUTOQ否则将使用回退表空?ROLLBACK TABLESPACE)Qundo_tablespace参数用于指定要用哪个UNDO</p> <p>表空间?br /> 很显然可以创建多个UNDO表空_(d)但一ơ只能用一个UNDO表空间?/p> <p>可以用以下的语句修改初始化参数文Ӟq你个当前使用的UNDO表空间切换到另一个UNDO表空间?br /> ALTER SYSTEM SET undo_tablespace='new_undo_tablespace' SCOPE=SPFILE;</p> <p>当一个UNDO表空间切换到另一个UNDO表空间之后,可以在前一个UNDO表空间中的活跃事务全部完成后删除q表空间?br /> 可以修改UNDO表空_(d)如同增加一个数据文件、重新命名表I间、联?脱机数据文g、备份表I间{。与其他表空间一P正在使用的UNDO?/p> <p>I间是不允许被删除的Q即只有在其中已l没有未提交的事务时才能其删除?br /> 可以用V$TRANSACTION视图来检查其中是否还有未提交的事务?/p> </div> <img src ="http://www.tkk7.com/gm_jing/aggbug/328778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2010-08-13 14:39 <a href="http://www.tkk7.com/gm_jing/articles/328778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理表空?前言)【引?/title><link>http://www.tkk7.com/gm_jing/articles/328776.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Fri, 13 Aug 2010 06:38:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/328776.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/328776.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/328776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/328776.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/328776.html</trackback:ping><description><![CDATA[<div class="hv351zd" id="blog_text" class="cnt"> <p>表空?TABLESPACE)是ORACLE数据库中最大的逻辑l构。ORACLE数据 库是׃个或多个表空间组成的。它在物理上与磁盘上的数据文件相对应(一个表I间׃个或多个数据文gl成Q但一个数据文件只能属于一个表I间)。从物理 上说数据库的数据被存攑֜数据文g中,而从逻辑上说是被存放在表I间中的?br /> 数据库的逻辑配置实际上就是指表空间的配置?/p> <p>一、表I间概述<br /> 表空间是ORACLE数据库中最大的逻辑l构。数据库的所有对象和Ҏ(gu)都被逻辑的保存在表空间中?/p> <p>(一)表空间的Ҏ(gu)与作用<br /> 数据库管理系l?DBMS)是徏立在操作pȝ(OS)基础上的Q它的数据也必须存储在各个文件中Q如数据文g、重做日志文件、归档日志文件等?br /> 表不是文Ӟ表不是空间?br /> 表空间是l织l构和分配空间的逻辑l构。除?jin)数据文件之外,控制文g、重做日志文件、归档日志文件等其他文g都不属于M表空间?br /> 表空间的Ҏ(gu)如下:(x)<br /> 1.一个数据库可以有多个表I间。可以在数据库中创徏、删除表I间Q?br /> 2.一个表I间只属于一个数据库Q?br /> 3.一个表I间必须要有一个数据文Ӟ<br /> 4.一个表I间的大等于其中所有数据文件的大小之和。数据库的大等于其中所有表I间的大之和;<br /> 5.表空间可以被联机和脱机。SYSTEM表空间不能被脱机Q?br /> 6.表空间可以在d、只ȝ态之间切换;<br /> 7.每个表空间由一个或多个物理存在的操作系l的数据文gl成。这U数据文件可以具有固定的大小Q或允许其自动变大。可以在表空间中d、删除数据文Ӟ<br /> 8.Ҏ(gu)对象、表、烦(ch)引的数据都被存储在表I间的数据文件中。一个数据文件存储不下,存储在另一个数据文件中Q只要该数据文g是本表空间中的就可以Q?br /> 9.一个用户默认用一个表I间Q但他的不同Ҏ(gu)对象的数据可以被存储在不同表I间中;<br /> 10.一个用户用的表空间的数量是有一定配额的Q不能超?gu)个配额?br /> 11.可以Ҏ(gu)使用目的Q创Z同类型的表空_(d)如永久表I间、(f)时表I间、撤销表空间、大表空间等。不同类型的表空间的格式、用方式及(qing)目的是不同的?/p> <p>表空间的作用Q?br /> 1.控制数据库所占用的磁盘空_(d)<br /> 2.控制用户所占用的表I间配额Q也q于控制用h占用的配额空_(d)<br /> 3.通过不同表的数据、分中不同分区的数据攄C同的表空间中Q可以提高数据库的I/O性能Qƈ有利于进行部分备份和恢复{管理工作;<br /> 4.能够一个表的数据和q个表的索引数据分别防止C同的表空间中Q同样可以提高数据库的I/O性能Q?br /> 5.可以表I间讄成只ȝ态而保持大量的?rn)态数据?/p> <p>(?表空间的cd<br /> 一个数据库通常有SYSTEM,SYSAUX,TEMP三个默认表空_(d)一个或多个临时表空_(d)而且q有一个撤销表空间和几个应用E序专用的应用表I间?br /> q些表空间可以划分ؓ(f)pȝ表空间和非系l表I间两类?br /> pȝ数据(数组字典表及(qing)其数? pȝ表空?br /> 用户数据(表、烦(ch)? 大表I间、小表空?br /> 临时数据 临时表空?br /> 撤销数据 撤销表空?/p> <p>(1)pȝ表空?br /> pȝ表空间包括SYSTEM表空间和SYSAUX表空_(d)其余的表I间是非系l表I间。系l表I间在所有数据库中都是必ȝ。一般存攑ֈORACLE? 数据字典?qing)其数据?/p> <p>(2)临时表空?br /> 撤了(jin)撤销(UNDO)表空间、相对于临时(TEMPORARY)I间而言Q其他表I间是怹(PERMANENT)表空间?br /> 当执行排?ORDER BY)、分l汇?GROUP BY)、烦(ch)?CREATE INDEX){功能的SQL语句Ӟ?x)生大量的临时数据。服务器q程首先(f)时数据存攑ֈ内存l构的PGA区的排序ZQ当排序Z够用Ӟ服务器进E? ׃(x)在(f)时表I间中徏立(f)时段Qƈ这些(f)时数据存攑ֈ临时D中?br /> 如果在创建用h没有为用h定一个(f)时表I间Q那么就?x)用SYSTEM表空间来说创Z(f)时段Q存放(f)时数据。这样做的结果是Q?br /> 1.占用?jin)SYSTEM表空间的存储I间Q可用的存储空间下降;<br /> 2.频繁的分配和释放临时D,?x)在SYSTEM表空间中产生大量的存储碎片,使磁盘的d效率下降?/p> <p>如果在数据运行过E中Q经常有大量的ƈ发排序,那么Z(jin)避免在SYSTEM表空间中存储临时数据Q数据库理员应该在数据库中创徏一个专门的用来? 储(f)时数据的临时表空间?br /> 临时表空间对应的是(f)时文Ӟ它与数据文g是有区别的。数据文件在创徏时就被完全分配和初始化,而(f)时文件不一定保证被分配到指定的盘I间。如Q在 UNIX操作pȝ中,不实际分配临时文g的磁盘空_(d)而是知道某个操作需要(f)时表I间时才Z(f)时文件分配磁盘空间。这Ugq式的分配方法允怏(f)时文件被 快速创建,但如果没有预留出实际q行时所需的磁盘空_(d)可能在q行时发生问题?br /> 临时表空间可以被所有用户共享用,如TEMP表空间可以被所有用户共享用。在ORACLE 8I中可以用其他表I间作ؓ(f)临时表空_(d)而在ORACLE 9I中就开始引入默认(f)时表I间(DEFAULT TEMPORARY TABLESPACE)的设计了(jin)Q用户不能使用其他表空间作Z(f)时表I间?br /> 某个用户使用哪个临时表空间应该是在创用户时指定的。数据库的默认(f)时表I间是在创徏(CREATE DATABASE)数据库时Q由DEFAULT TEMPORARY TABLESPACE子句来指定的?br /> 在(f)时表I间中,同一个例E的所有SQL语句的排序操作将׃n使用一个排序段(SORT SEGMENT)。排序段在执行第一条排序操作的SQL语句时被创徏Q在例程关闭时被释放。可以通过动态性能视图V$SORT_SEGMENT来查询排? D늚使用情况Q通过动态性能视图V$SORT_USAGE来查询用排序段的会(x)话和用户信息?/p> <p>(3)撤销表空?br /> 在ORACLE 9I以前Q对于回退D?ROLLBACK SEGMENT)的设|与理是一十分复杂的工作。从ORACLE 9I开始,引入?jin)一个全新的概念Q即自动撤销理(AUTOMATIC UNDO MANAGEMENT)Q用撤销(UNDO)表空间取代已l用了(jin)20q的回退Dc(din)实际上是将回退D?撤销D?攑օ?jin)撤销表空_(d)而由例程自动处理撤销? I间中的回退Dc(din)用自动撤销理方式后,不仅可以减轻DBA的工作负担,而且q可以获得较好的回退性能。通过查询数据字典视图 DBA_ROLLBACK_SEGSQ可以得到撤销表空间中回退D늚信息?br /> 撤销表空间存储撤销D,撤销D主要用于入下目?<br /> 1.用一条ROLLBACK语句明确的回退一个事务;<br /> 2.隐含的回退一个事务;<br /> 3.重构数据的一个读一致图像;<br /> 4.从逻辑错误中恢复?/p> <p>在ORACLE中可以创建多个撤销表空_(d)但同一时刻值允许激zM个撤销表空间。在初始化参数文件中用UNDO_TABLESPACE指出要激zȝ 撤销表空间。撤销表空间的l织与管理由O(jin)RACLE内部自动完成。当回退D不xQ一个事务可以用多个回退D,不会(x)中止事务的运行。数据库理员只需? 解撤销表空间是否有_的空_(d)而不必ؓ(f)每个事务讄回退Dc(din)?/p> <p>(4)大文件表I间与小文g表空?br /> 大文?BIGFILE)表空间是ORACLE 10G新引q的表空间。大文g表空间只能放|一个数据文?或(f)时文?。但其数据文件可以包?G个数据块?br /> 大文件表I间都是大型数据库设计的。如果一个超大型数据库具有上千个数据文g的话Q更新数据文件头部信息的操作׃(x)p很长旉。如果用了(jin) 大文件表I间Q就可以使用大数据文件来减少数据文g的数量,使更新数据文件头部信息的操作更快一些?br /> 要想创徏一个大文g表空_(d)可以使用CREATE语句中的使用的BIGFILE关键字。CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'e:\mybigtbs01_1.dbf' SIZE 20G SEGMENT SPACE MANAGEMENT AUTO;<br /> 文?SMALLFILE)表空间是以前ORACLE表空间的新命名。在文件表I间中可以放|多个数据文件。一个数据库可以攄多达64K个数据文 件?br /> SYSTEM和SYSAUX表空间L被创Zؓ(f)文件表I间?br /> 惌创徏一个小文g表空_(d)可以在CREATE语句中用SMALLFILE关键?或者不适用此类关键?。CREATE SMALLFILE TEMPORARY TABLESPACE mytmptbs01 TEMPFILE 'e:\mytmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;</p> <p>(?表空间的区、段理方式<br /> ORACLE 10G的表I间是按照区和段I间q行理的?br /> (1)区管理方?br /> 针对区的分配方式不同Q表I间有两U管理方式。ORACLE各个版本所支持的管理方式如下:(x)<br /> 字典理方式 ORACLE 7,ORACLE 8,ORACLE 8I,ORACLE 9I;<br /> 本地理方式 ORACLE 8I,ORACLE 9I,ORACLE 10G;</p> <p>字典理方式(DICTIONARY-MANAGED TABLESPACE,DMT)<br /> 字典理方式是传l的理方式Q是Z(jin)与早期版本兼容而保留的区管理方式。在字典理方式下,使用数据字典来管理存储空间的分配?br /> 当在表空间中分配新的区,或回收已分配的区ӞORACLE对数据字典中的相关“基础?#8221;q行查询、更斎ͼq且在这一q程中,使用单线E搜索方法,速度 较慢。另外,对表的更新操作会(x)产生?x)退信息和重做信息,因此Q在分配区或回收区时Q会(x)在数据库中生会(x)退信息和重做信息。这是字典管理方式的特点Q也是它 的缺炏V?br /> 在创建字典管理方式的表空间时Q可以在DEFAULT STORAGE子句中设|INITIAL,NEXT,MINEXTENTS,MAXENTENTS,PCTINCREASE{参数来为区讄存储理? 式,以指定表I间中区的默认分配方式。这P如果在这U表I间中创、烦(ch)引等Ҏ(gu)对象Ӟ没有使用DEFAULT STORAGE子句Q他们就?x)自动承表I间的存储参数设|?br /> 如果其他表空间要采用字典理方式Q则要求SYSTEM表空间也必须采用字典理方式Qƈ且必dCREATE TABLESPACE语句中显C的使用EXTENT MANAGEMENT DICTIONARY子句q行x。字典管理方式是被淘汰的表空间管理方式,从ORACLE 9I开始不再支持这U方式?/p> <p>本地理方式(LOCAL-MANAGED TABLESPACE,LMT)<br /> 本地理方式是一U新的、改q的理方式。从ORACLE 9I开始,创徏表空间时默认使用本地理方式?br /> 本地理方式下,表空间中分配与区回收的管理信息都被存储在表空间的数据文g中,而与数据字典无关。表I间?x)在每个数据文g中维护一?位图 (BITMAP)"l构Q用于记录表I间中所有区的分配情c(din)?br /> ORACLE为每个可能的区都保留?jin)一位。该位ؓ(f)1?Q表C区正在用或I闲。位囑֛像消?4KB的表I间。当在表I间中分配的区,或回收已分配? 区时QORACLE对数据文g中的"位图"q行更新。因此这U更C是对表的更新操作Q所以不?x)生回退信息和重做信息?br /> 与字典管理方式相比,本地理方式h如下的好处:(x)<br /> 1.因ؓ(f)I间的分配和回收不需要对数据库进行访问,而只是简单的改变数据文g中的位图Q所以能够提高空间存储管理的速度和ƈ发性;<br /> 2.能够避免在字典管理方式中I间分配期间可能出现的递归现象Q所以提高了(jin)I间存储理的性能?br /> 3.允许数据库作ؓ(f)只读的备用数据库(STANDBY DATABASE)。由于不?x)生?x)退信息和重做信息,所以不?x)向数据库中写信息,q样可以将整个数据库设|ؓ(f)只读状态。这U数据库可以作ؓ(f)备用数据 库?br /> 4.化了(jin)I间分配Q以为当指定?jin)AUTOALLOCATE子句ӞORACLE?x)自动选择合适的区大,不再需要用戯行Q何干预;<br /> 5.减少用户Ҏ(gu)据库字典的依赖,因ؓ(f)必要的信息都被存储在数据文g的位图中?jin),而不是保存在数据字典中;<br /> 6.不存在磁盘碎片问题。用位囄Ҏ(gu)L询空闲空_(d)盔R的空闲块被视Z个大的空闲块Q从设计上保证自动合q磁盘碎片,片产生后由pȝ自动消除Q?br /> 7.DBMS_SPACE_ADMIN包对本地理的表I间提供l护q程?/p> <p>在字典管理方式下Q如果对某个表进行了(jin)更新Q这时会(x)产生存储理操作Q而该存储理操作肯定?x)生回退信息和重做信息,D对回退D和重做日志文g q行dQ从而又产生存储理操作QŞ成了(jin)递归现象?br /> 在字典管理方式下Q如果查询操作包含排序,则数据库需要ؓ(f)排序分配临时D,q会(x)引v存储I间的分配操作,也就?x)对数据字典q行更新Q所以数据库必须处于? 写状态,而不能处于只ȝ态?/p> <p>在本地管理方式下Q可以用以下两个选项来指定表I间的区的分配方式:(x)<br /> 1. l一(UNIFORM)Q统一分配Q指定表I间中所有区的大都相同。区的大的默认值是1MBQ也可以指定q个大小。但不能在撤销表空间中使用q个? ;<br /> 2.自动(AUTOALLOCATE或SYSTEM)自动分配Q指定由O(jin)RACLEpȝ来自动管理区的大,q是默认的设|?/p> <p>在自动去的分配方式下Q区的大随表的大小自动动态改变,他们之间的对应关pd下:(x)<br /> 表大?nbsp;                    区大?br /> 64KB(或前16个区)           64KB<br /> 1MB(接下来的63个区)        1MB<br /> 64MB(接下来的120个区)      8MB<br /> 1000MB(以后的区)           64MB</p> <p>当表的大不过64KBӞ表空每个区的大小?4KQ?br /> 当表的大不辑ֈ1MBӞ表中每个区的大小?MBQ?br /> 当表的大超q?4MB且小?000MBӞ区的大小都是8MBQ当表的大小辑ֈ1000MBӞ区的大小?4MB?br /> 也就是ishuoQ这个算法只能ɞ表取小区,大表取大区,避免大表拥有q多的区。所以,自动选项最适合于由表和大表构成的一个多用途的数据库系l。但 是,对于数据过1GB的大表,pȝ在分配磁盘空间时一ơ分?4MBQ如果所插入的数据没有达?4MBQ则可能造成I间的浪贏V?br /> 通常Q用自动是最佳的选择?/p> <p>(2)D늩间管理方?br /> 在本地管理方式的表空间中Q除?jin)可以用UNIFORM和AUTOALLOCATE来指定区的分配方式之外,q可以指定段I间的管理方式。段I间理方式? 要是指ORACLE用来理D中已用数据块和I闲数据块的机制?br /> 在本地管理方式下Q可以用如下两个关键字来指定表空间的D늩间管理方式:(x)<br /> 1.MANUAL(手动)方式Q这时ORACLE用空闲列?FREE LIST)来管理段的空闲数据块。这是ؓ(f)?jin)与以前的版本相兼容而保留的?br /> 2.AUTO(自动)方式Q这时ORACLE用位?BITMAP)来管理段的已用数据块和空闲数据块。即Q通过位图中单元的取值来判断D|ȝ数据 块是否可用?br /> I闲列表(FREELIST)是传l的D늩间管理方式,D中所有的I闲数据块都被放入一个空闲列表中Q在需要存储空间时据在该列表中q行搜烦(ch)。与I闲列表 相比Q用位囄自动方式能够提供更好的存储利用率。因为在自动方式下,用户不需要在创徏Ҏ(gu)对象旉过指定 PCTFREE,PCTUSED,FREELIST,FREELIST GROUP{参数来为段讄存储理方式Q即使设|了(jin)Q也会(x)被忽略?br /> 当SYSTEM表空间的区管理方式是本地理方式时则不可能创建字典管理的表空_(d)但可以创建本地管理的表空间?br /> 另外Q创I间q种修改数据库物理结构的信息?x)同时被记录到预警日志文件中?/p> <p>(?表空间的状?br /> 处于不同状态的表空_(d)其用方式有所不同?br /> SYSTEM表空间不能被讄为只ȝ态或脱机状态,因ؓ(f)在数据库q行q程中始l会(x)使用到SYSTEM表空间中的数据?br /> (1)d状?br /> d(READ-WRITE)<br /> 默认情况下所有的表空间都是读写状态的。Q何具有表I间配额q且h适当权限的用户都可以d该表I间中的数据?br /> 只读(READ-ONLY)<br /> 如果表I间讄为只ȝ态,则Q何用户都无法向表I间中写入数据,也无法修改表I间中已有的数据。这U限制与用户的权限无兟뀂将表空间设|ؓ(f)只读状态的 主要目的是,避免Ҏ(gu)据库q行修改。用户只能查询其中的数据,而不能修改其中的数据。同Ӟ׃只读表空间中的数据不?x)被修改Q因此DBA只需只读表 I间备䆾一ơ即可,不必再次对这个表I间q行备䆾。如果数据库中保存大量的不允许用户修攏V但又允许用戯问的数据?/p> <p>(2)脱机状?br /> 通过某个表I间讄机状态,以该表I间暂时不让用户讉K?br /> 脱机模式有以?U:(x)<br /> 1.正常(NORMAL)Q默认的脱机模式?br /> 2.临时(TEMPORARY):<br /> 3.立即(IMMEDIATE):<br /> 4.用于恢复(FOR RECOVER):</p> <p>二、管理表I间的准?/p> <p>(一)定表空间的大小</p> <p>(1)定表的大小</p> <p>(2)定表空间的大小</p> <p>(?表空间的配置</p> <p>(1)表空间的层次l构</p> <p>(2)表空间的分配</p> <p>(?为用戯|表I间配额和(f)时表I间</p> </div> <img src ="http://www.tkk7.com/gm_jing/aggbug/328776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2010-08-13 14:38 <a href="http://www.tkk7.com/gm_jing/articles/328776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创徏用户q指定默认表I和默认临时表空?/title><link>http://www.tkk7.com/gm_jing/articles/328775.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Fri, 13 Aug 2010 06:37:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/328775.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/328775.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/328775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/328775.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/328775.html</trackback:ping><description><![CDATA[<div class="f5pd535" id="blog_text" class="cnt"> <div id="r33lpxf" class="blogstory"> <p>ORACLE创徏用户q指定默认表I和默认临时表空?/p> <p>//创徏临时表空?/p> <p>create temporary tablespace bocodbtempdbs <br /> tempfile 'D:\oracle\oradata\bocodb\bocodata\bocodbtempdbs01.dbf' <br /> size 32m <br /> autoextend on <br /> next 32m maxsize 2048m<br /> extent management local;</p> <p>//创徏数据表空?br /> create tablespace bocodbdbs<br /> logging<br /> datafile 'D:\oracle\oradata\bocodb\bocodata\bocodbdbs.dbf' <br /> size 32m <br /> autoextend on <br /> next 32m maxsize 2048m<br /> extent management local;</p> <p>//创徏用户q指定表I间<br /> create user bocodb identified by bocodb<br /> default tablespace bocodbdbs<br /> temporary tablespace bocodbtempdbs;</p> <p>//l用h予权?/p> <p>grant connect,resource to bocodb;</p> </div> </div> <img src ="http://www.tkk7.com/gm_jing/aggbug/328775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2010-08-13 14:37 <a href="http://www.tkk7.com/gm_jing/articles/328775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[引]事务的特?/title><link>http://www.tkk7.com/gm_jing/articles/298000.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Mon, 12 Oct 2009 14:55:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/298000.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/298000.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/298000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/298000.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/298000.html</trackback:ping><description><![CDATA[<p class="g_p_center g_t_wrap g_t_left g_t_20 g_c_pdin c07" id="blogtitle_fks_087065093086084065086095081095086080086071083087080074" style="margin: 20px auto 10px"><span style="font-family: '微Y雅黑','黑体',Arial,Helvetica,Sans-Serif">事务的特?UACID)</span></p> <div id="5tf5pzf" class="g_p_left"> </div> <div id="n3zdzzx" class="g_blog_list"> <div id="dtnlpn3" class="g_t_center g_c_pdin g_p_center c07 content" id="blogtext_fks_087065093086084065086095081095086080086071083087080074"> <div id="v5tv355" class="ns_content"> <p style="text-indent: 2em">数据库系l必ȝ护事务的以下Ҏ(gu)?UACID)Q?/p> <p style="text-indent: 2em">  原子?Atomicity)</p> <p style="text-indent: 2em">  一致?Consistency)</p> <p style="text-indent: 2em">  隔离?Isolation)</p> <p style="text-indent: 2em">  持久?Durability)</p> <p style="text-indent: 2em">原子?Atomicity)</p> <p style="text-indent: 2em">事务中的所有操作要么全部执行,要么都不执行Q如果事务没有原子性的保证Q那么在发生pȝ</p> <p style="text-indent: 2em">故障的情况下Q数据库有可能处于不一致状态?/p> <p style="text-indent: 2em">原子?Atomicity)</p> <p style="text-indent: 2em">如果故障发生在write(A)和read(B)之间Q则有可能造成帐户A的余额已l减?0元钱Q?/p> <p style="text-indent: 2em">帐户B的余额却没有改变Q凭I就了(jin)50元钱。值得注意的是Q即使没有故障发生,pȝ在某</p> <p style="text-indent: 2em">一时刻也会(x)处于不一致状态。原子性的要求是q种不一致状态除?jin)在事务执行当中出现外,在其他Q何时刻都是不可见的。保证原子性是DBMS的责任:(x)即事务管理器和恢复管理器的责仅R?/p> <p style="text-indent: 2em">一致?Consistency)</p> <p style="text-indent: 2em">主要的是Q如果在执行事务之前数据库是一致的Q那么在执行事务之后数据库也q是一</p> <p style="text-indent: 2em">致的Q所谓一致性简单地说就是数据库中数据的完整性,包括它们的正性。对于图中的事务Ti来说Q一致性要求就是事务的执行不改变帐户A和帐户B的和。否则的话事务就?x)创造或销毁钱Q?/p> <p style="text-indent: 2em">单个事务的一致性是由对该事务进行编键的应用E序员的责QQ但是在某些情况下利用DBMS中完整性约?如触发器)的自动检查功能有助于一致性的l护?/p> <p style="text-indent: 2em">隔离?Isolation)</p> <p style="text-indent: 2em">即多个事务q发Q同Ӟ(j)执行Q每个事务都感觉不到pȝ中有其他的事务在执行Q因而也p保证数据库的一致性;</p> <p style="text-indent: 2em">事情的v?</p> <p style="text-indent: 2em">即每个事务都能保持一致性和原子性,但如果几个事务ƈ发执行,且访问相同的数据,则它们的操作?x)以Z所不希望的某种方式交叉执行Q结果导致不一致的状态!讉K相同数据的两个事务q发执行</p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">解决办法:</p> <p style="text-indent: 2em">如果几个事务要访问相同的数据,Z(jin)保证数据库的一致性,可以让这几个事务Q?/p> <p style="text-indent: 2em">①串行执行:(x)即一个接着一个地执行事务Q?/p> <p style="text-indent: 2em">②ƈ发执行:(x)卛_时执行多个事务,但用q发</p> <p style="text-indent: 2em">控制机制来解决不同事务间的相互媄(jing)响?/p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">隔离性的保证:</p> <p style="text-indent: 2em">事务的隔L能够确保事务ƈ发执行后的系l状态与q些事务按某U次序串行执行后的状态是{h(hun)的。保证隔L也是DBMS的责任:(x)卛_ƈ发控制管理器的责仅R?/p> <p style="text-indent: 2em">持久?Durability)</p> <p style="text-indent: 2em">事务成功执行后它Ҏ(gu)据库的修Ҏ(gu)怹的,即ɾpȝ出现故障也不受媄(jing)响。持久性的含义是说Q一旦事务成功执行之后,它对数据库的更新是永久的。可以用以下两种</p> <p style="text-indent: 2em">方式中的M一U来辑ֈ持久性的目的Q?/p> <p style="text-indent: 2em">以牺牲应用系l的性能Z?/p> <p style="text-indent: 2em">以多占用盘I间Z?/p> <p style="text-indent: 2em">以牺牲应用系l的性能ZP(x)要求事务Ҏ(gu)据库pȝ所做的更新在事务结束前已经写入盘Q?/p> <p style="text-indent: 2em">以多占用盘I间ZP(x)要求事务已经执行的和已写到磁盘的、对数据库进行更新的信息是充分的Q例</p> <p style="text-indent: 2em">如,数据库日志的信息p够的多)(j)Q得DBMS在系l出现故障后重新启动pȝӞ能够(Ҏ(gu)日志)?/p> <p style="text-indent: 2em">新构造更新。保证持久性也是DBMS的责任:(x)x复管理器的责仅R?/p> <p style="text-indent: 2em">事物的状态有如下几种Q?/p> <p style="text-indent: 2em">⑴中止事务:(x)执行中发生故障、不能执行完成的事务Q?/p> <p style="text-indent: 2em">⑵事务回滚:(x)中止事务对数据库的更新撤消掉;</p> <p style="text-indent: 2em">⑶已提交事务Q成功执行完成的事务?/p> <p style="text-indent: 2em">pȝ的恢复步骤是Q?/p> <p style="text-indent: 2em">1、反向扫描文件日志(即从最后向前扫描日志文Ӟ(j)Q查找该事务的更新操作?/p> <p style="text-indent: 2em">2、对该事务的更新操作执行逆操作。即日志记?#8220;更新前的?#8221;写入数据库。这P如果记录中是插入操作Q则相当于做删除操作Q若记录中是删除操作Q则做插入操作;若是修改操作Q则相当于用修改前的g替修改后的倹{?/p> <p style="text-indent: 2em">3、l反向扫描日志文Ӟ查找该事务的其他更新操作Qƈ做和2一L(fng)同样处理?/p> <p style="text-indent: 2em">4、如此处理下去,直至d此事务的开始标讎ͼ事务的故障恢复就完成?jin)?/p> <p style="text-indent: 2em">事务的隔ȝ?/p> <p style="text-indent: 2em">隔离U别定义?jin)事务与事务之间的隔ȝ度?/p> <p style="text-indent: 2em">隔离U别与ƈ发性是互ؓ(f)矛盾的:(x)隔离E度高Q数据库的ƈ发性越差;隔离E度低Q数据库的ƈ发性越好?/p> <p style="text-indent: 2em"></p> <p style="text-indent: 2em">ANSI/ISO SQL92标准定义?jin)一些数据库操作的隔ȝ?/p> <p style="text-indent: 2em">  未提交读Qread uncommittedQ?/p> <p style="text-indent: 2em">  提交读(read committedQ?/p> <p style="text-indent: 2em">  重复读(repeatable readQ?/p> <p style="text-indent: 2em">  串行读(serializableQ?/p> <p style="text-indent: 2em">隔离U别的效?/p> <p style="text-indent: 2em">更新丢失Qlost updateQ:(x)当系l允怸个事务同时更新同一数据是,发生更新丢失?/p> <p style="text-indent: 2em">脏读Qdirty readQ:(x)当一个事务读取另一个事务尚未提交的修改Ӟ产生脏读?/p> <p style="text-indent: 2em">不可重复dQnonrepeatablereadQ:(x)同一查询在同一事务中多ơ进行,׃其他提交事务所做的修改</p> <p style="text-indent: 2em">或删除,每次q回不同的结果集Q此时发生不可重复读取?/p> <p style="text-indent: 2em">qdQphantom readQ:(x)同一查询在同一事务中多ơ进行,׃其他提交事务所做的插入操作Q每ơ返?/p> <p style="text-indent: 2em">不同的结果集Q此时发生像读?/p> </div> </div> </div> <img src ="http://www.tkk7.com/gm_jing/aggbug/298000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2009-10-12 22:55 <a href="http://www.tkk7.com/gm_jing/articles/298000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>char varchar nvarchar varchar2 nvarchar2的区?/title><link>http://www.tkk7.com/gm_jing/articles/255120.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Tue, 17 Feb 2009 08:04:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/255120.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/255120.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/255120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/255120.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/255120.html</trackback:ping><description><![CDATA[<p>【引】http://hi.baidu.com/zzuhpc/blog/item/b3c5c138f08ebcf53a87cec8.html<br /> 1.char</p> <p><wbr></wbr>char的长度是固定的,最大支?000个字节?/p> <p><wbr></wbr>char的长度是固定的,比如_(d)你定义了(jin)char(20),即你你插入abcQ不二十个字节Q数据库也会(x)在abc后面自动加上17个空|以补二十个字节Q?/p> <p><wbr></wbr>char是区分中英文的,中文在char中占两个字节Q而英文占一个,所以char(20)你只能存20个字母或10个汉字?/p> <p><wbr></wbr><font color="#ff0000">char适用于长度比较固定的Q一般不含中文的情况</font></p> <p><font color="#000000">2.varchar/varchar2</font></p> <p><wbr></wbr>varchar是长度不固定的,最大支?000个字节?/p> <p><wbr></wbr>varchar是长度不固定的,比如_(d)你定义了(jin)varchar(20),当你插入abcQ则在数据库中只?个字节?/p> <p><wbr></wbr>varchar同样区分中英文,q点同char?/p> <p><wbr></wbr>varchar的效率低于char?/p> <p><wbr></wbr>varchar2基本上等同于varcharQ它是oracle自己定义的一个非工业标准varcharQ不同在于,varchar2用null代替varchar的空字符?/p> <p><wbr></wbr><font color="#ff0000">varchar/varchar2适用于长度不固定的,一般不含中文的情况</font></p> <p><font color="#000000">3.nvarchar/nvarchar2</font></p> <p><wbr></wbr>nvarchar和nvarchar2是长度不固定?/p> <p><wbr></wbr>nvarchar不区分中英文Q比如说Q你定义?jin)nvarchar(20),你可以存?0个英文字?汉字或中英文l合Q这?0定义的是字符数而不是字节数</p> <p><wbr></wbr>nvarchar2基本上等同于nvarcharQ不同在于nvarchar2中存的英文字母也占两个字?/p> <p><wbr></wbr>nvarchar/nvarchar2适用于存放中?br /> <br /> <br /> <br /> <hr /> <br /> orcale 中varchar2 和nvarchar2的区?br /> 在sql ref书中介绍?br /> 1 VARCHAR2(size)<br />         [BYTE | CHAR]<br />         Variable-length character string having maximum<br />         length size bytes or characters. Maximum size is<br />         4000 bytes, and minimum is 1 byte or 1 character.<br />         You must specify size for VARCHAR2.<br />         BYTE indicates that the column will have byte<br />         length semantics; CHAR indicates that the column<br />         will have character semantics.<br /> 1 NVARCHAR2(size) Variable-length character string having maximum<br />         length size characters or bytes, depending on the<br />         choice of national character set. Maximum size is<br />         determined by the number of bytes required to store<br />         each character, with an upper limit of 4000 bytes.<br />         You must specify size for NVARCHAR2.<br /> 中文大意Q?br /> VARCHAR2(size)Q可变长度的字符Ԍ其最大长度ؓ(f) size 个字节。size 的最大值是 4000Q而最值是 1。?zhn)必须指定一?VARCHAR2 ?size?<br /> NVARCHAR2(size)Q可变长度的字符Ԍ依据所选的国家字符集,其最大长度ؓ(f) size 个字W或字节。size 的最大值取决于存储每个字符所需要的字节敎ͼ其上限ؓ(f) 4000 个字节。?zhn)必须?NVARCHAR2 指定一?size?<br /> <br /> 相同点:(x)都是可变长度字符?charcd是不变长?Q都必须指定大小<br /> 不同点:(x)VARCHAR2存放的英文字W只占一个字节,而nvarchar2依据所选的字符集,大多Z?br /> </p> <img src ="http://www.tkk7.com/gm_jing/aggbug/255120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2009-02-17 16:04 <a href="http://www.tkk7.com/gm_jing/articles/255120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Union与Union All的区?http://www.tkk7.com/gm_jing/articles/237727.html黎夕黎夕Thu, 30 Oct 2008 17:21:00 GMThttp://www.tkk7.com/gm_jing/articles/237727.htmlhttp://www.tkk7.com/gm_jing/comments/237727.htmlhttp://www.tkk7.com/gm_jing/articles/237727.html#Feedback0http://www.tkk7.com/gm_jing/comments/commentRss/237727.htmlhttp://www.tkk7.com/gm_jing/services/trackbacks/237727.htmlUnionQ对两个l果集进行ƈ集操作,不包括重复行Q同时进行默认规则的排序Q?/p>

Union AllQ对两个l果集进行ƈ集操作,包括重复?/strong>Q?strong>不进行排?/strong>Q?/p>

IntersectQ对两个l果集进行交集操作,不包括重复行Q同时进行默认规则的排序Q?/p>

MinusQ对两个l果集进行差操作Q不包括重复行,同时q行默认规则的排序?/p>

可以在最后一个结果集中指定Order by子句改变排序方式?/p>

黎夕 2008-10-31 01:21 发表评论
]]>
范式http://www.tkk7.com/gm_jing/articles/138797.html黎夕黎夕Thu, 23 Aug 2007 05:03:00 GMThttp://www.tkk7.com/gm_jing/articles/138797.htmlhttp://www.tkk7.com/gm_jing/comments/138797.htmlhttp://www.tkk7.com/gm_jing/articles/138797.html#Feedback0http://www.tkk7.com/gm_jing/comments/commentRss/138797.htmlhttp://www.tkk7.com/gm_jing/services/trackbacks/138797.html
在Q何一个关pL据库中,W一范式Q?NFQ是对关pL式的基本要求Q不满W一范式Q?NFQ的数据库就不是关系数据库?

所谓第一范式Q?NFQ是指数据库表的每一列都是不可分割的基本数据,同一列中不能有多个|卛_体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间ؓ(f)一对多关系。在W一范式Q?NFQ中表的每一行只包含一个实例的信息。例如,对于?-2 中的员工信息表,不能员工信息都攑֜一列中昄Q也不能其中的两列或多列在一列中昄Q员工信息表的每一行只表示一个员工的信息Q一个员工的信息在表中只出现一ơ。简而言之,W一范式是无重复的列?

2 W二范式Q?NFQ?

W二范式Q?NFQ是在第一范式Q?NFQ的基础上徏立v来的Q即满W二范式Q?NFQ必d满W一范式Q?NFQ。第二范式(2NFQ要求数据库表中的每个实例或行必d以被惟一地区分。ؓ(f)实现区分通常需要ؓ(f)表加上一个列Q以存储各个实例的惟一标识。如?-2 员工信息表中加上?jin)员工编Pemp_idQ列Q因为每个员工的员工~号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称Z关键字或主键、主码?

W二范式Q?NFQ要求实体的属性完全依赖于d键字。所谓完全依赖是指不能存在仅依赖d键字一部分的属性,如果存在Q那么这个属性和d键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关pRؓ(f)实现区分通常需要ؓ(f)表加上一个列Q以存储各个实例的惟一标识。简而言之,W二范式是非主属性非部分依赖于主关键字?

3 W三范式Q?NFQ?

满W三范式Q?NFQ必d满W二范式Q?NFQ。简而言之,W三范式Q?NFQ要求一个数据库表中不包含已在其它表中已包含的非d键字信息。例如,存在一个部门信息表Q其中每个部门有部门~号Qdept_idQ、部门名U、部门简介等信息。那么在?-2的员工信息表中列出部门编号后׃能再部门名U、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NFQ也应该构徏它,否则׃(x)有大量的数据冗余。简而言之,W三范式是属性不依赖于其它非d性?


黎夕 2007-08-23 13:03 发表评论
]]>
触发?/title><link>http://www.tkk7.com/gm_jing/articles/126506.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Wed, 27 Jun 2007 02:47:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/126506.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/126506.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/126506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/126506.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/126506.html</trackback:ping><description><![CDATA[ORACLE产生数据库触发器的语法ؓ(f)Q? <p> </p> <p>    create [or replace] trigger 触发器名 触发旉 触发事g</p> <p>      on 表名</p> <p>      [for each row]</p> <p>      pl/sql 语句</p> <p>    其中Q?/p> <p>    触发器名Q触发器对象的名U。由于触发器是数据库自动执行</p> <p>              的,因此该名U只是一个名Uͼ没有实质的用途?/p> <p>    触发旉Q指明触发器何时执行Q该值可取:(x)</p> <p>              before---表示在数据库动作之前触发器执行;</p> <p>              after---表示在数据库动作之后出发器执行?/p> <p>    触发事gQ指明哪些数据库动作?x)触发此触发器?x)</p> <p>              insertQ数据库插入?x)触发此触发器?/p> <p>              updateQ数据库修改?x)触发此触发器?/p> <p>              deleteQ数据库删除?x)触发此触发器?/p> <p>    ?nbsp;   名:(x)数据库触发器所在的表?/p> <p>    for each rowQ对表的每一行触发器执行一ơ。如果没有这一</p> <p>                  选项Q则只对整个表执行一ơ?/p> <p>    举例Q下面的触发器在更新表auths之前触发Q目的是不允许在</p> <p>          周末修改表:(x)</p> <p>    create trigger auth_secure</p> <p>      before insert or update or delete  //Ҏ(gu)表更新前触发</p> <p>      on auths</p> <p>    begin</p> <p>      if(to_char(sysdate,'DY')='SUN'</p> <p>        RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');</p> <p>      end if;</p> <p>    end<br><br><br><br>Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-<br>create trigger biufer_employees_department_id </p> <p>         before insert or u<a style="COLOR: #000000" target=_blank>pda</a>te </p> <p>                of department_id </p> <p>                on employees </p> <p>         referencing old as old_value </p> <p>                         new as new_value </p> <p>         for each row </p> <p>         when (new_value.department_id<>80 ) </p> <p>  begin </p> <p>         :new_value.commission_<a style="COLOR: #000000" target=_blank>pc</a>t :=0; </p> <p>  end; </p> <p>  / </p> <img src ="http://www.tkk7.com/gm_jing/aggbug/126506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2007-06-27 10:47 <a href="http://www.tkk7.com/gm_jing/articles/126506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储q程http://www.tkk7.com/gm_jing/articles/126039.html黎夕黎夕Mon, 25 Jun 2007 02:21:00 GMThttp://www.tkk7.com/gm_jing/articles/126039.htmlhttp://www.tkk7.com/gm_jing/comments/126039.htmlhttp://www.tkk7.com/gm_jing/articles/126039.html#Feedback0http://www.tkk7.com/gm_jing/comments/commentRss/126039.htmlhttp://www.tkk7.com/gm_jing/services/trackbacks/126039.html存储q程cM与我们编E时的函?常用的或很复杂的工作,预先用SQL语句写好q用一个指定的名称存储h, 那么以后要叫数据库提供与已定义好的存储过E的功能相同的服务时,只需调用execute,卛_自动完成命o(h),跟函数调用差不多 !

优点

1.存储q程只在创造时q行~译Q以后每ơ执行存储过E都不需再重新编译,而一般SQL语句每执行一ơ就~译一?所以用存储过E可提高数据库执行速度?
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,DeleteӞ(j)Q可此复杂操作用存储过E封装v来与数据库提供的事务处理l合一起用?
3.存储q程可以重复使用,可减数据库开发h员的工作?
4.安全性高,可设定只有某此用hhҎ(gu)定存储过E的使用?/p>

~点

Q、如果逻辑全部在存储过E中实现Q那么涉?qing)广泛业务逻辑和处理的应用E序可能?x)给服务器带来过重负荗这cd理包括数据传输、数据遍历、数据{换和大计量操作?br>应把q类处理Ud业务q程或数据访问逻辑lg中,与数据库服务器相比,它们h更好的可~放性?br>Q、不要把所有业务逻辑都放在存储过E中。如果必d T - SQL 中修改业务逻辑Q应用程序的l护和灵zL将成ؓ(f)问题。例如,支持多个 RDBMS ?ISV 应用E序不应?br>分别为每个系l维护存储过E?通常Q存储过E的~写与维护是一专门技能,q所有开发h员都能够掌握。这?x)造成目开发计划的瓉?/p>

黎夕 2007-06-25 10:21 发表评论
]]>
存储q程、函数在实际应用中有什么区?/title><link>http://www.tkk7.com/gm_jing/articles/125015.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Mon, 18 Jun 2007 15:18:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/125015.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/125015.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/125015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/125015.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/125015.html</trackback:ping><description><![CDATA[<font face=Verdana>请问存储q程、函数在实际应用中有什么区别?</font> <p><font face="verdana, arial, helvetica" size=2><span id="3tjhjj3" class=javascript id=text49806 style="FONT-SIZE: 12px">A stored procedure does something without returning a value while a function does something with a return value. There's no magic here. Any programming language is like this except some languages use different names from procedure / function.<br><br>In sqlplus,<br>To call a procedure<br>exec myproc(1,2,3)<br>To call a function<br>var a number<br>exec :a := myfunc(1,2,3)<br>assuming it returns a number, and both myproc and myfunc accept 3 arguments of type number<br></span></font></p> <img src ="http://www.tkk7.com/gm_jing/aggbug/125015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2007-06-18 23:18 <a href="http://www.tkk7.com/gm_jing/articles/125015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库优?/title><link>http://www.tkk7.com/gm_jing/articles/124929.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Mon, 18 Jun 2007 05:56:00 GMT</pubDate><guid>http://www.tkk7.com/gm_jing/articles/124929.html</guid><wfw:comment>http://www.tkk7.com/gm_jing/comments/124929.html</wfw:comment><comments>http://www.tkk7.com/gm_jing/articles/124929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/gm_jing/comments/commentRss/124929.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/gm_jing/services/trackbacks/124929.html</trackback:ping><description><![CDATA[<p><span>有什么方法优?/span><span>select</span><span>语句</span></p> <p><span>参考答案:(x)原则是避免全表扫描,</span></p> <p><span> </span><span>如果是有多表兌?/span> <span>把记录数的表放在前面,</span></p> <p><span> </span><span>能把多的记录q虑的条件放?/span><span>where</span><span>从句前面Q?/span></p> <p><span> </span><span>?/span><span>exist</span><span>代替</span><span>in</span><span>条g</span></p> <p><span> </span><span>可能用索引</span></p> <p> </p> <p><span>select</span><span>索引什么时候失?/span></p> <p><span>参考答案:(x)索引的字D在</span><span>sum</span><span>{函C?/span><span> <br /> <br /> ------------------------------------------------<br /> 用exists代替in<br /> SELECT * <br /> FROM EMP (基础? <br /> WHERE EMPNO > 0 <br /> AND DEPTNO IN (SELECT DEPTNO <br /> FROM DEPT <br /> WHERE LOC = ‘MELB') <br /> <br /> 高效exists: <br /> SELECT * <br /> FROM EMP (基础? <br /> WHERE EMPNO > 0 <br /> AND EXISTS (SELECT ‘X' <br /> FROM DEPT <br /> WHERE DEPT.DEPTNO = EMP.DEPTNO <br /> AND LOC = ‘MELB') <br /> </span></p> <img src ="http://www.tkk7.com/gm_jing/aggbug/124929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/gm_jing/" target="_blank">黎夕</a> 2007-06-18 13:56 <a href="http://www.tkk7.com/gm_jing/articles/124929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库中大字D늚处理http://www.tkk7.com/gm_jing/articles/76170.html黎夕黎夕Thu, 19 Oct 2006 07:10:00 GMThttp://www.tkk7.com/gm_jing/articles/76170.htmlhttp://www.tkk7.com/gm_jing/comments/76170.htmlhttp://www.tkk7.com/gm_jing/articles/76170.html#Feedback0http://www.tkk7.com/gm_jing/comments/commentRss/76170.htmlhttp://www.tkk7.com/gm_jing/services/trackbacks/76170.html [引用]http://www.javaeye.com/article/27917

在数据库中,l常需要用到大字段cdQ如oracle中long/blob/clob,sqlserver中text/imageQmysql中的text/longtext/clob/blob?
存储的信息大概主要是两类Q一cL长文本,如大D늚文字Q普通的varchar最长只能存?000个汉字,已经不能满要求Q另一cL存储二进制信息,如上传的文g{?
那么假如现在有一个表Q记录某人发布的文档信息Q字D包括:(x)发布人,发布旉Q文档标题,文档内容(实际中还?x)有其它字?Q一般徏表如?sqlserver)Q?
create table document(
id int identity(1,1) not null,
createuser_id int,
document_title varchar(255),
document_context text);

q张表的l构Q表面上看v来,从数据库设计角度和对应的JAVAcȝ设计来讲Q都是没有问题的?/p>

但实际上Q这里面隐藏着两个比较严重的问题!

一、不能完全跨数据?/b>
why?问题出在需要查?distinct)的时候?
在需要查重时Q采用纯jdbc技术,则可以自定义要查重的字段Q如select distinct id,createuser_id,document_title from document。而当采用hibernateӞ若不惌已创q个新的Pojo或者用Object[]方式来处理数据,则只能用select distinct d from document as dq样的语句,而hibernate?x)将其解析?f)cMQselect distinct id,createuser_id,document_title,document_context from document?
问题出在这个document_context字段上!
对于oracle/mysql来讲Qhibernate生成的sql是可以执行的。但对于sqlserver来讲Q是不允许在text/image列上q行distinct查询的!
因此pȝ在sqlserver上部|时Q当需要查重时则会(x)出错?
我也是在开发一个系l即完成的时候,在sqlserver上部|才发现的该问题Q最后修改了(jin)所有类似的Pojo和表l构以及(qing)DAOQ相关的昄层代码也q行?jin)修攏V工E量可谓不小。当然如果你用不到查重语句,是一点不受媄(jing)响的?
二、严重媄(jing)响列表显C和l计的效?/b>
影响一张表的查询速度的,除了(jin)行数Q还包括表所占的物理I间的大。此表在数据量较?yu)时Q在查询斚w感觉不到明显的差异。但是如果document_context字段所存储的数据都是大D|本或较大的文件时Q会(x)D表的物理I间q速变大,该字D|占用的空间有可能辑ֈ整表所占空间的90%以上。在此基上,如果行数再增加到数十万、上百万U时Q整个表所占的I间达C个惊人的数字?
保守估计Q一条记录占用的I间q_?0K的话Q一万条记录占?00M的空_(d)一百万条记录将占用10GQ在此表上的CRUD操作Q亦变慢,查询的速度亦会(x)受到非常大的影响 。当焉过提高服务器本w的g性能和优化烦(ch)引,可以提高查询速度Q但面对无法预知的巨大洪_(d)单纯加固堤坝是不保险的?/p>

解决的方式?
曄处理q公司内的一个老系l,表的行数辑ֈ十万左右Q由于采用上面的设计方式Q虽然已l尽可能优化?jin)?ch)引,但查询分|Q仍焉要十U左叟뀂我单独Z(jin)一个新表,document_contextq个字段Ud新表中,在原表中加一个对应的外键列,l过处理后,分页昄响应旉降到毫秒U以内。(二进制数据的转移是无法用普?的数据导入导出方式的Q我的方法是复制该表Q然后再修改复制后的表结构)(j)
因ؓ(f)q个大字D,在最常用的列表显CZ是根本不需要关?j)的Q仅当用户需要查看某一记录的具体信息时Q才需要调入该字段信息。因此分表后Q显著提高了(jin)分页性能?/p>

在我现在开发的所有的pȝ中,我都采用?jin)上q的方式Q这样做属于未雨l缪Q一旦系l部|后再修改,可能来不及(qing)?jin)?/p>

黎夕 2006-10-19 15:10 发表评论
]]>
վ֩ģ壺 Ļ뾫ƷԴ| ҹѸƬ| 337Pձŷ޴ͼ| Ļվ | Ļۺ234| Ʒһ߹ۿ | ssswwwձվƬ| ͼƬ| ޾Ʒպרsilk| 999þþѾƷ| Ƶ߲| Ƶ| ۺɫAPP| smһ| Ƶ| þҹ޾Ʒ| ۺϾþþƷ| Ůվѹۿ| ޾Ʒ˳3d| ƷƵ| þ޹vwww | ҹƵ| ѿAVƬ| ŷ޾Ʒ˾þԻ| ޹Ʒþ | ŷ޾Ʒþ| õƵƵ| ѸһëƬ| ޾Ʒþþþ| һһƬƵ| Ƶվ| պһëƬ| Ļaѿ| ޾ƷѹۿƵ| ߾ƷƵ | 7x7x7x߹ۿ| ޾Ʒ| ѹƵվ| Ƶۿ| ɬɬɬƵ߹ۿ| Ƶ߹ۿ|