﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-duduli-随笔分类-数据库</title><link>http://www.blogjava.net/duduli/category/37765.html</link><description>linux java 数据库 Ajax 设计模式。。。</description><language>zh-cn</language><lastBuildDate>Mon, 17 Jan 2011 21:23:58 GMT</lastBuildDate><pubDate>Mon, 17 Jan 2011 21:23:58 GMT</pubDate><ttl>60</ttl><item><title>比较好的Sybase操作</title><link>http://www.blogjava.net/duduli/archive/2011/01/17/343089.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Mon, 17 Jan 2011 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2011/01/17/343089.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/343089.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2011/01/17/343089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/343089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/343089.html</trackback:ping><description><![CDATA[安装：FRO LINUX<br />
1.用sybase身份安装：CD20045-55-1252-01.tgz<br />
&nbsp;&nbsp;&nbsp; 建立sybase，家目录在/opt/sybase,加密码。解压到/tmp/inst/。修改/etc/hosts:ip&nbsp; tank<br />
2.用sybase登录，启动xwindow，运行/tmp/inst/setup进行图形安装。<br />
3。查看SYBASE服务命令：<br />
$showserver<br />
4.停止sybase服务：<br />
$isql -Usa -STANK<br />
&gt;shutdown SYB_BACKUP&nbsp; ---&gt;停backupserver<br />
&gt;go<br />
&gt;shutdown -------&gt;停dataserver<br />
&gt;go<br />
&gt;quit<br />
5.启动sybase服务：<br />
$cd ~ASE_125/install/<br />
$startserver -f RUN_TANK<br />
$startserver -f RUN_TANK_BS<br />
$showserver<br />
<br />
安装 FOR WIN<br />
类似一般程序安装；在WIN服务管理里设置启动。<br />
win下的SYBASE客户端sql advantage和dsedit等无法启动（本机LAN原因）解决方法：<br />
修改本机X:\sybase\locales\locales文件里NT选项的locale = zh_CN, us_english, iso_1，加入本机LAN即可（如zh_CN）<br />
<br />
<br />
常用操作：<br />
1.su - sybase -c "isql -Usa -STANK"<br />
2.修改SA的密码(SA默认密码为空):<br />
用ISQL连接上后<br />
&nbsp;sp_password null,"新密码" or&nbsp; sp_password "旧密码","新密码"<br />
3.开始和确认事务(注意：有些命令不可以在事务里运行，见附录)<br />
begin transaction和commit transaction可将任意数目的SQL语句封装起来，这两名的简单语法为：<br />
begin transaction<br />
commit transaction<br />
or<br />
begin tran<br />
commit<br />
&nbsp; ps:只有执行了commit数据才是真正写入库里。<br />
4. 回退事务<br />
在commit transaction命令提交前任何时候可取消或回退事务，该命令的简单语法为：<br />
rollback transaction<br />
or<br />
rollback<br />
5．检查事务状态<br />
全局变量@@transtate记录了事务当前的状态。在执行一个语句后SQL Server通过记录所有事务变化来确定返回何种状态。<br />
@@transtate可包含下列值：<br />
值&nbsp; 意义<br />
0事务进行中：一个显式或隐式事务有效；上一语句执行成功<br />
1事务完成：事务完成并提交其变化<br />
2语句异常中止：上一语句异常终止；对事务无影响<br />
3事务异常中止：事务异常中止并回退所有变化<br />
举例：在事务中，可在一个语句（如insert）后使用@@transtate确定该语句成功或失败对事务的影响。commit transaction<br />
Begin transaction<br />
Insert into publishers(pub_id)values(&#8216;9999&#8217;)<br />
(1 row affected)<br />
select @@transtate<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
0<br />
commit transaction<br />
select @@transtate<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
0<br />
(1 row affected)<br />
<br />
6.备份系统数据<br />
SYBASE 系统的备份与恢复机制保证了在系统失败时重新获取数据的可能性。SQL Server 提供了两种不同类型的恢复机制：一类是系统自动完成的恢复，这种措施在每次系统启动时都自动进行，保证了在系统瘫痪前完成的事务都写到数据库设备上，而未完成的事务都被回退；另一类是人工完成的恢复，这是通过 DUMP 和 LOAD 命令来执行人工备份和恢复工作。因此定期备份事务日志和数据库是一项十分重要的日常维护工作。 <br />
7、备份数据库<br />
每一个数据库都应在创建之后卸出，从而提供一个装入基点。在此之后按排定的时间周期表卸出。比如每周五卸出数据库。对一般数据库系统卸出数据库周期建议为每周一次。<br />
除了按计划周期卸出数据库之外，还需在每次运行没有日志的操作后卸出数据库。例如：<br />
&#183;每次强制地运行了 DUMP TRAN WITH NO_LOG （因为数据库的磁盘空溢出）；<br />
&#183;每次用 sp_dboption 允许 select into/bulkcopy 做快速拷贝，或用 SELECT INTO 命令创建一个永久性的表，或使用了 WRITETEXT 命令。<br />
卸出数据库的命令为：<br />
DUMP DATABASE database_name<br />
TO dump_device<br />
database_name 是要卸出的数据库名称，dump_device 是卸出设备的名称。用系统过程 sp_helpdevice 可以获得设备的信息。<br />
下面一条命令用来卸出数据库 my_db ：<br />
DUMP DATABASE my_db<br />
TO db_bk_dev<br />
默认导出到C:\WINDOWS\SYSTEM32\下了。也可以指定路径。<br />
8、备份事务日志<br />
如果事务日志与数据库放在同一个设备上，则事务日志不应与数据库分开备份。master 数据库和小于 4M 的用户数据库就是这种情况。一般数据库系统的数据库和日志分别放在不同的设备上，因此，可以用 DUMP TRAN 命令单独备份日志。<br />
备份事务日志的周期直接影响数据的恢复程度，因此建议每天备份。<br />
备份事务日志的命令格式为：<br />
DUMP TRANsaction database_name<br />
[TO dump_device]<br />
[WITH TRUNCATE_ONLY|WITH NO_LOG|WITH NO_TRUNCATE]<br />
其中 database_name 是要备份事务的数据库名称，dump_device 是备份设备名称，仅当包含了 WITH TRUNCATE_ONLY 或 WITH NO_LOG 子句时，才可以备份到设备。<br />
注意：如果总是用 DUMP DATEBASE （备份数据库及其日志），而不用 DUMP TRAN ，事务日志将不会刷新，而变得非常庞大。<br />
对于 master 数据库和小型数据库每次运行 DUMP DATEBASE 之后应当运行 DUMP TRANsaction 命令刷新日志 。<br />
下面一条命令备份数据库 db160 的事务日志到备份设备上：<br />
DUMP TRANsaction db160<br />
TO db_log_bk_dev<br />
WITH TRUNCATE_ONLY<br />
9、备份数据库及其日志间的相互作用<br />
在至少卸出一次数据库前，卸出事务日志是毫无意义的。下图显示了备份数据库及其日志间的关系<br />
如果在星期二下午5：01出现非硬件故障，需要做的所有工作是装入磁带5（参见下一节：数据恢复），由于磁带5是下午5：00刚备份的，因此只有备份和装入之间的一分钟内的数据损失。<br />
但是，如果在星期二下午4：49失效会怎么样呢？在这种情况下，要装入磁带1（在星期五下午5：00的卸出）。然后，依次装入磁带2，3以及4。这样，系统将恢复到星期二上午10：00点的状态，星期二的大部分工作丢失了。此例显示了经常卸出事务的重要性。<br />
10、万一系统失败时恢复数据库系统<br />
如果用户数据库存储的设备失效，从而数据库被破坏或不可存取，通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。假设当前的事务日志存在于一个并没有毁坏的设备上，带着 WITH NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出它。<br />
要恢复数据库按如下步骤去做：<br />
1）、如果日志存在于一个分离的设备上，用带着 NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出被毁坏的或者不可存取的用户数据库事务日志。<br />
2）、用下面的查询检查设备分配已毁坏数据库的设备使用情况。必须为同一目的赋同样的空间块。<br />
下面的查询显示了分配给数据库 mydb 设备使用和尺寸情况：<br />
SELECT segmap，size FROM　sysusages<br />
WHERE dbid =<br />
（ SELECT dbid FROM sysdatabases WHERE name = &#8220;mydb&#8221;）<br />
3）、检查查询的输出。在 segmap 列的 &#8216;3&#8217;代表数据分配，&#8216;4&#8217;代表日志分配。size 列代表 2K 数据块的数目。注意此信息的次序、使用和尺寸部分。例如，输出为：<br />
4）、用 DROP DATABASE 命令删除毁坏设备上的数据库。如果系统报错，用DBCC DBREPAIR 命令的 DROPDB 选项。<br />
5）、删除数据库后，用 sp_dropdevice 删除毁坏了的设备。<br />
6）、用 DISK INIT 初始化新的数据库设备。<br />
7）、重建数据库。用 CREATE DATABASE 命令从老的 sysusages 表拷贝所有的行，并包含第一逻辑设备。<br />
对上例，命令为：<br />
CREATE DATABASE mydb<br />
ON datadev1=20，datadev2=10<br />
LOG ON logdev1=10<br />
8）、用 ALTER DATABASE 命令重建其余入口。在此例中，在datadev1上分配更多的空间，命令为：<br />
ALTER DATABASE mydb ON datadev1=2<br />
9）、用 LOAD DATABASE 重新装入数据库，然后用 LOAD TRAN 装入前面卸出的日志。<br />
LOAD DATABASE 命令语法是：<br />
LOAD DATABASE database_name<br />
FROM dump_device<br />
<br />
LOAD TRANsaction 命令的语法是：<br />
LOAD TRANsaction database_name FROM dump_device<br />
<br />
卸出数据库和事务日志的缺省权限归数据库所有者，且可以传递给其他用户；装载数据库和事务的权限也归数据库所有者，但不能传递。<br />
<br />
11、产生用户信息表，并为信息表授权；<br />
系统维护人员的另一个日常事务是为用户创建新的信息表，并为之授权。创建表以及为表授权的方法已经在讲过，在此只将有关命令语法写出来。<br />
&#183;创建表的命令为：<br />
CREATE TABLE table_name<br />
（ column_1 datatype [NULL | NOT NULL | IDENTITY]，<br />
column_2 &#8230;&#8230;<br />
）<br />
go<br />
<br />
ALTER TABLE table_name<br />
ADD PRIMARY KEY （column_list）<br />
go<br />
<br />
&#183;删除表的命令格式为：<br />
DROP TABLE table_name<br />
go<br />
<br />
&#183;为表授权的命令格式为：<br />
GRANT {ALL|permission_list}<br />
ON table_name TO user_name<br />
go<br />
<br />
&#183;收回权限的命令格式为<br />
REVOKE {ALL|permission_list}<br />
ON table_name FROM user_name<br />
go<br />
<br />
12、监视系统运行状况，及时处理系统错误；<br />
系统管理员的另一项日常工作是监视系统运行情况。主要有以下几个方面：<br />
1）、监视当前用户以及进程的信息<br />
使用系统过程：sp_who<br />
说明：该命令显示当前系统所有注册用户及进程信息，如下表是某系统的信息。<br />
SpidStatusLoginamehostnameblkdbnamecmd<br />
---------------------------------------------------------------<br />
1RunningSascosysv0MasterSELECT<br />
2SleepingNULL0MasterNETWORK HANDLE<br />
3SleepingNULL0MasterDEADLOCK TUNE<br />
4SleepingNULL0MasterMIRROR HANDLER<br />
5SleepingNULL0MasterHOUSEKEEPER<br />
6SleepingNULL0MasterCHECKPOINT SLEEP<br />
从左向右依次显示：进程号、当前状态、注册用户名、主机名、占用块数、数据库名以及当前命令。<br />
如果监视时发现进程总数接近最大连接数（用系统过程：sp_configure &#8220;user conn&#8221; 查看）时，应下掉不活动或无关进程，以保证系统正常运做；另外亦可监视非法用户或用户使用不属于自己使用范围的数据库等情况。<br />
2）、监视目标占用空间情况<br />
使用系统过程：sp_spaceused<br />
说明：该过程显示行数、数据页数以及当前数据库中由某个目标或所有目标所占用的空间。如下表是某数据库日志表的信息：<br />
<br />
NameRow_totalreserveddataIndex_sizeunused<br />
------------------------------------------------------------<br />
SyslogsNot avail32KB32KB0KBNot avail<br />
<br />
日常要监视的主要目标有：用户数据库、数据库日志表（syslogs）以及计费原始数据表等。如果发现占用空间过大，对日志表要进行转储；对其他目标则应扩充空间或清楚垃圾数据。<br />
3）、监视 SQL Server 统计数字<br />
使用系统过程：sp_monitor<br />
说明：sp_monitor 显示SQL Server 的历史统计数字，下表是某系统的统计数字：<br />
<br />
Last_runCurrent_runSeconds<br />
---------------------------------------------------------------<br />
May 13 2000 1:27PMMay 13 2000 3:01PM5678<br />
CPU_busyIO_busyIdle<br />
---------------------------------------------------------------<br />
16(6)-0%0(0)-0%5727(5672)-99%<br />
Packets_receivedPackets_sentPacket_errors<br />
---------------------------------------------------------------<br />
21(17)100(97)0(0)<br />
Total_readTotal_writeTotal_errorsConnections<br />
--------------------------------------------------------<br />
785(366)311(113)0(0)3(2)<br />
<br />
上表依次给出该系统本次运行统计的上一次时间、本次时间、间隔秒数、CPU占用、IO占用、收发包情况、系统读入写出情况等信息<br />
<br />
13、保证系统数据安全，周期更改用户口令；<br />
为保证系统数据的安全，系统管理员必须依据系统的实际情况，执行一系列的安全保障措施。其中，周期性的更改用户口令是比较常用且十分有效的措施。<br />
更改用户口令是通过调用系统过程sp_password 来实现的。Sp_password 的语法为：<br />
sp_password caller_password,new_password [,loginame]<br />
其中caller_password 是登录口令（老口令），new_password是新口令，loginame是登录名称。<br />
<br />
14.如何修改IP地址改变后的interfaces文件？<br />
A.安装SYBASE Adapive Server的机器IP地址改变后, 应修改 interfaces 文件及有关的设置。<br />
如果 interfaces 文件中使用的是机器名而不是 IP 地址, 则不需要变动。 但如果客户端联结服务器使<br />
用的是服务器的 IP 地址而不是机器名,那么客户端需修改联结服务器的 IP 地址.。<br />
如果 interfaces 文件中使用的是 IP 地址, 那么需要修改 interfaces 文件中和地址有关的部分,<br />
可使用dscp 或 dsedit 进行修改。 如果客户端联结服务器使用的是服务器的地址而不是机器名,那么客<br />
户端也需修改。<br />
15。实现开机时自动装载Sybase数据库<br />
　　原先要使Sybase SQL Server启动，一般需要先以sybase用户登录，然后运行$SYBASE/install目录下的startserver命令启动SYBASE_XXXX服务进程和SYB_BACKUP_XXXX备份服务进程。<br />
　　要实现Unix系统启动时就能在后台装载Sybase的功能,我们可在/etc/rc2.d/目录下新建一文件S99sybase,内容如下:<br />
　　SYBASE=/usr/sybase<br />
　　PATH=$PATH:$SYBASE/bin<br />
　　export $SYBASE $PATH<br />
　　$SYBASE/install/startserver -f $SYBASE/install/RUN_SYBASE_XXXX &gt; /dev/null<br />
　　$SYBASE/install/startserver -f $SYBASE/install/RUN_SYB_BACKUP_XXX &gt;/dev/null<br />
　　然后修改Sybase的权限，重启系统即可。<br />
16.实现关机时自动卸载Sybase数据库<br />
为保证Sybase系统的正常运行，每次在关闭Unix系统时要先结束Sybase SQL Server 的服务进程，从减轻系统管理人员操作的角度出发建立一用户halt，修改/etc/passwd文件，将halt用户的uid改为0（或其他可运行 shutdown的用户id），在/usr/halt/.profile中添加以下语句：<br />
　　SYBASE=/usr/sybase<br />
　　DSQUERY=SYBASE_XXXX<br />
　　PATH=$PATH:$SYBASE/bin<br />
　　export SYBASE DSQUERY PATH<br />
　　isql -Usa -Pabcabc -ihalt.sql &gt; /dev/null<br />
　　shutdown -y -g0<br />
　　其中&#8220;abcabc&#8221;为sa用户的口令,halt.sql是一简单的文本文件，内容如下：<br />
　　shutdown<br />
　　go<br />
　　这样每次只要以halt用户登录，就实现了自动卸下Sybase数据库，然后关闭Unix系统。<br />
17. Sybase UTF-8中文字符集设置<br />
(这里SYBASE的安装路径为c:\sybase) <br />
&nbsp;1.c:\&gt;cd \sybase\charsets\cp936<br />
&nbsp;2.c:\sybase\charsets\cp936&gt; charset -U用户名 -P密码 -S数据库服务器名称 binary.srt cp936<br />
&nbsp;更改默认字符集为cp936<br />
&nbsp;3.在SQL环境中<br />
&nbsp;1&gt;select name,id from syscharsets(会列出字符集对应的id号)<br />
&nbsp;2&gt;go<br />
&nbsp;找到name为cp936对应的id(假设为171)<br />
&nbsp; 1&gt;sp_configure "default character set id",171<br />
&nbsp; 2&gt;go<br />
&nbsp;5.重启server两次<br />
（注:第一次启动后，server会自动宕掉，需要第二次重启后才能使用）<br />
<br />
18.创建用户数据库<br />
以下通过一个建立数据库的脚本说明建立数据库的过程：<br />
//创建数据库设备，设备大小以页（2K）为单位<br />
disk init<br />
name="test_dbdev",<br />
physname="/home/bk/test_dbdev.dat",<br />
vdevno=5,<br />
size=10240<br />
go<br />
disk init<br />
name="test_logdev",<br />
physname="/home/bk/test_logdev.dat",<br />
vdevno=6,<br />
size=5120<br />
go<br />
//创建数据库TEST_DB，其大小为20M，日志大小为10M<br />
create database TEST_DB<br />
on test_dbdev=20<br />
log on test_logdev=10<br />
go<br />
//打开数据库<br />
use TEST_DB<br />
go<br />
-----------<br />
举例说明：<br />
DISK INIT<br />
Name=&#8217;My_Device&#8217;,<br />
Physname=&#8217;D:\database\My_device.dat&#8217;,<br />
Vdevno=3<br />
Size=5000<br />
注释：逻辑名、物理名、设备虚拟号、设备大小<br />
------------------------<br />
创建用户数据库<br />
Create Database 数据库名<br />
&nbsp; On 设备_1=Size_1,//单位：M<br />
&nbsp;&nbsp;&nbsp;&nbsp; 设备_2=Size_2,<br />
&#8230;&#8230;<br />
log on 日志设备=Log_Size<br />
[With Override]//在同一设备上创建数据库和事务日志时使用该选项<br />
[For Load]&nbsp;&nbsp;&nbsp; //禁止用户访问直到数据库的装入或恢复操作完成为止<br />
举例：<br />
&nbsp;&nbsp;&nbsp; Create Database test_db<br />
&nbsp;&nbsp;&nbsp; On data_dev=100,//单位：M<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Index_dev=50<br />
&nbsp;&nbsp;&nbsp; Log on log_dev=30<br />
说明：<br />
（1）将日志放在单独的设备上，有利于数据库性能的提高；<br />
（2）如果将数据库和日志放在同一设备上，就不能实现增量备份；<br />
（3）通常将System和Default段缩减范围到一个设备上，如删除设备Index_dev上的System段和Default段，创建新的段，用来存放专门的数据库对象<br />
19.备份和恢复DB数据<br />
dump database mydb to '/u01/mydb_full.bk'<br />
go<br />
<br />
dump tranaction mydb to '/u01/mydb_tran.bk'<br />
go<br />
<br />
load database mydb from '/u01/mydb_full.bk'<br />
load transaction mydb from '/u01/mydb_tran.bk'<br />
online database mydb<br />
go<br />
&nbsp;ps:采用增量备份后，严禁日志截断! 即禁止使用：dump transaction sctf truncate_only&nbsp; 命令!<br />
增量备份必须是在完整备份后的或上一次增量备份后，中间若遇到日志截断，后续的增量备份均告失败！<br />
增量备份可以根据需要，如每小时备份一次，每次备份所需时间约2－5秒，所以时间极快。<br />
&nbsp;ps: 单引号和双引号都能关闭shell对特殊字符的处理。不同的是，双引号没有单引号严格，单引号关闭所有有特殊作用的字符，而双引号只要求shell忽略大多数，具体的说，就是①美元符号②反引号③反斜杠，这3种特殊字符不被忽略。 不忽略美元符号意味着shell在双引号内部也进行变量名替换。<br />
<br />
<br />
*********************************************<br />
下面资料来自SYBASE白皮书<br />
1。客户端字符集修改 locales.dat<br />
2.可以通过设置CHARSET驱动程序属性指定在应用程序中使用的字符集。<br />
&nbsp; 或者设置jconnect字符集的方法来设置。<br />
3。查看字符集：<br />
SERVER：sp_helpsort<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; go<br />
CLIENT：select @@client_csname<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; go<br />
4.段+阀值：<br />
默认是三个段: system default logsegment<br />
system段: 数据库系统表存放处<br />
default段: 未指明段的对象都存放在这里<br />
logsegment段:数据库的事务日志存放处<br />
<br />
阀值(threshold) : <br />
建立阀值: sp_addthreshold 库名,段名,自由空间,存储过程名字<br />
删除阀值: sp_dropthreshold 库名,段名,自由空间页 <br />
显示阀值: sp_helpthreshold<br />
管理阀值: sp_dboption<br />
显示段空间信息:sp_helpsegment<br />
阀值管理的流程如下:<br />
先建存储过程:(下面的是日志的存储过程,原因:日志增长具有不可预见性,相比之下,数据增长具有可预见性,所以一般都建logsegment的阀值管理,default的阀值管理可不建) <br />
create procedure szjj<br />
@dbname varchar (30),<br />
@segmentname varchar (30),<br />
@space_left int,<br />
@status int<br />
as<br />
dump transaction @dbname to "/tmp/bb.dat"<br />
go<br />
&nbsp; ps:上面是日志的存储过程,如果是数据的存储则用dump database...<br />
<br />
查看当前日志自由空间情况: <br />
sp_helpsegment logsegment<br />
go<br />
查看当前数据库数据自由空间情况: <br />
sp_helpsegment default<br />
go<br />
<br />
查看当前阀值情况: <br />
sp_helpthreshold<br />
go<br />
<br />
查看当前段情况: <br />
sp_helpsegment<br />
go<br />
<br />
然后根据自由空间来定阀值参数:<br />
sp_addthreshold test_db,logsegment,200,szjj<br />
go<br />
<br />
&nbsp;ps:当日志段的最后机会阀值被超越后,试图往该日志段上记日志的用户进程默认是被挂起.用下面的命令修改MASTER库参数,让阀值被超越后事务就会滚.<br />
use master<br />
go<br />
sp_dboption test_db,"abort tran on log full",true<br />
go<br />
<br />
5.维护<br />
1）对各ASE用户担当的角色和特权进行分派。<br />
2）管理和监视磁盘空间的使用情况。<br />
3）数据库空间：<br />
&nbsp;&nbsp;&nbsp;&nbsp; sp_helpdb 查看各库情况<br />
&nbsp;&nbsp;&nbsp;&nbsp; alter database 扩充空间<br />
&nbsp;&nbsp;&nbsp;&nbsp; dump tran&nbsp; 截断日志<br />
4）日常数据备份和恢复<br />
5）SYBASE默认的服务器：<br />
&nbsp;&nbsp;&nbsp;&nbsp; adaptive server:管理整个数据库系统，包括用户 数据 资源等的管理和控制。<br />
&nbsp;&nbsp;&nbsp;&nbsp; backup server: 在备份和恢复时执行数据库的dump or load<br />
&nbsp;&nbsp;&nbsp;&nbsp; xp server:执行扩展存储过程<br />
&nbsp;&nbsp;&nbsp;&nbsp; monitor server:为性能调试分析采集数据。<br />
&nbsp;&nbsp;&nbsp;&nbsp; historical server:保存来自monitor server的数据，以备将来分析。<br />
6。单模式启动SYBASE<br />
&nbsp; 1）停止ASE数据库服务<br />
&nbsp; 2）*/install/startserver -f RUN_servername -m <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ps:windows下在服务的属性里加-m。<br />
7.license序列号<br />
&nbsp; 验证许可软件是否执行:*/bin/lmutil lmstat -c<br />
&nbsp; 手工启动:*/bin/lmgrd -c $lm_license_file&amp;<br />
&nbsp; 启动许可管理器：*/bin/lmgr<br />
&nbsp; 运行：*/bin/lmutil lmreread<br />
8.查看逻辑页大小<br />
&nbsp; select @@maxpagesize<br />
9.启动关闭SYBASE<br />
&nbsp; 启动：*/startserver -f RUN_servername<br />
&nbsp; 关闭：登录后shutdown关数据库服务&nbsp; shutdown SYB_BACKUP关备份服务器<br />
10。帐户管理<br />
SA帐户初始口令为空，具有SA和SSO角色。具有SSO的登录帐户可以添加其他登录帐户。<br />
1）创建登录帐户<br />
&nbsp;&nbsp; sp_addlogin login_name,password<br />
&nbsp;&nbsp; go<br />
2)修改帐户密码<br />
&nbsp;&nbsp; sp_password caller_password,new_password,login_name<br />
&nbsp;&nbsp; go<br />
3)设置登录帐户的缺省数据库(如果不指定,默认是master库)<br />
&nbsp;&nbsp; sp_addlogin login_name,password,default_db<br />
&nbsp;&nbsp; go<br />
or<br />
&nbsp;&nbsp; sp_modifylogin login_name,"defdb",db_name<br />
&nbsp;&nbsp; go<br />
4）为登录帐户授予系统角色<br />
&nbsp; sp_role "grant",role_name,login_name<br />
&nbsp; go<br />
or <br />
&nbsp; grant role role_name to login_name<br />
&nbsp; go<br />
5)查看登录帐户的信息<br />
&nbsp; sp_displaylogin login_name<br />
&nbsp; go<br />
6)SYBASE常用角色：sa sso oper<br />
7)修改登录密码<br />
&nbsp;sp_password caller_passwd,new_passwd[,login_name]<br />
8)删除sa_role的口令<br />
&nbsp; alter role sa_role drop passwd<br />
9）创建数据库用户<br />
&nbsp; sp_adduser loginname[,name_in_db[,grpname]]<br />
&nbsp; go<br />
10)添加用户并授予查询权限<br />
&nbsp; sp_adduser 权限 on 表名 to 用户名<br />
11）删除别名<br />
&nbsp; sp_dropalias loginname<br />
12)创建用户自定义组<br />
&nbsp; sp_addgroup grpname<br />
&nbsp; go<br />
13)找回SA密码<br />
&nbsp;&nbsp; 停止SYBASE服务--〉修改RUN_xxx,在命令行的最后加上-psa--〉startserver -f RUN_xxx--&gt;启动信息的最后会出来密码。<br />
<br />
11。数据库管理<br />
1）数据库选项的设置<br />
&nbsp; sp_dboption[dbname,optname,{,true|false}]<br />
2)建库<br />
&nbsp; create database dbname on data_device_name=size log on log_device_name=size<br />
&nbsp; go<br />
&nbsp;ps:size default is M<br />
3)查看库大小 sp_helpdb dbname<br />
4)改变库的属主 sp_changedbowner loginname[,true]<br />
5)扩展数据库<br />
&nbsp; 扩展数据空间：alter database db_name on device_name<br />
&nbsp; 扩展日志空间: alter database db_name log on device_name<br />
6)设置数据库为单用户模式/可以在用户表中自动添加序号生成器/自动截断事务日志模式<br />
use master<br />
go<br />
sp_dboption db_name,"signle user",true<br />
go<br />
sp_dboption db_name,"trunc log on chkpt",true <br />
go<br />
sp_dboption db_name,"auto identity",true<br />
use db_name<br />
go<br />
checkpoint<br />
go<br />
7)查看当前库的进程信息<br />
sp_who<br />
<br />
附录=====================================<br />
Explanation <br />
SQL commands are grouped into the following categories:<br />
SQL commands that are not allowed in transactions at all.<br />
SQL commands, such as Data Definition Language (DDL) commands, that are allowed in transactions only if the required database option (ddl in tran) is set to TRUE.<br />
<br />
SQL commands that are allowed only if the transaction affects some other database. These commands include create table, drop table, and other commands that are run across databases to create or drop objects in another database when the database in which the objects are being created or dropped has the database option ddl in tran set to TRUE.<br />
<br />
Error 226 occurs when Adaptive Server detects a command that is not allowed in a multi-statement transaction. A multi-statement transaction is a set of commands prefaced with the begin transaction command.<br />
The following commands are never allowed in multi-statement transactions:<br />
alter database <br />
create database <br />
dbcc reindex, dbcc fix_text <br />
disk init <br />
drop database <br />
dump database, dump transaction <br />
load database, load transaction <br />
select into <br />
set transaction isolation level <br />
truncate table <br />
update statistics <br />
setuser <br />
<br />
The following commands are not normally allowed in multi-statement transactions but you can use them if you use sp_dboption to set ddl in tran to TRUE first:<br style="color: #ff0102" />
<br />
create default<br />
create index<br />
create procedure<br />
create rule<br />
create schema<br />
create table<br />
create trigger<br />
create view <br />
drop default<br />
drop index<br />
drop procedure<br />
drop rule<br />
drop table<br />
drop trigger<br />
drop view <br />
grant <br />
revoke <br />
Action <br />
<br />
If the command is allowed in a multistatement transaction when ddl in tran is set to TRUE, set ddl in tran to TRUE before running the transaction. Setting ddl in tran to TRUE causes locks on system tables and this can affect performance. You can check the current setting of ddl in tran with sp_helpdb. <br />
<br />
If the command is never allowed in a multi-statement transaction, execute it outside the multi-statement transaction. <br />
<img src ="http://www.blogjava.net/duduli/aggbug/343089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2011-01-17 13:33 <a href="http://www.blogjava.net/duduli/archive/2011/01/17/343089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle在redhat as 5支持</title><link>http://www.blogjava.net/duduli/archive/2010/07/03/325126.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 03 Jul 2010 04:29:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/07/03/325126.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/325126.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/07/03/325126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/325126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/325126.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle 在redhat as5安装字体乱码或无显示解决方法&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2010/07/03/325126.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/325126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-07-03 12:29 <a href="http://www.blogjava.net/duduli/archive/2010/07/03/325126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sybase和sql server为什么都是用transact-sql？</title><link>http://www.blogjava.net/duduli/archive/2010/06/29/324741.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Tue, 29 Jun 2010 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/06/29/324741.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/324741.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/06/29/324741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/324741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/324741.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: sybase和sql server为什么都是用transact-sql&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2010/06/29/324741.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/324741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-06-29 10:19 <a href="http://www.blogjava.net/duduli/archive/2010/06/29/324741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle得到建表语句</title><link>http://www.blogjava.net/duduli/archive/2010/04/22/319093.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Thu, 22 Apr 2010 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/04/22/319093.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/319093.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/04/22/319093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/319093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/319093.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 得到数据库建表语句&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2010/04/22/319093.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/319093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-04-22 12:52 <a href="http://www.blogjava.net/duduli/archive/2010/04/22/319093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中的archivelog和noarchivelog模式转换（总结）</title><link>http://www.blogjava.net/duduli/archive/2010/04/22/319061.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Thu, 22 Apr 2010 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/04/22/319061.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/319061.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/04/22/319061.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/319061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/319061.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle 开启归档或非归档模式&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2010/04/22/319061.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/319061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-04-22 09:22 <a href="http://www.blogjava.net/duduli/archive/2010/04/22/319061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle的sql生成日历（转自http://space.itpub.net/519536/viewspace-618320）</title><link>http://www.blogjava.net/duduli/archive/2010/04/18/318632.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sun, 18 Apr 2010 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/04/18/318632.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/318632.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/04/18/318632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/318632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/318632.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;LPAD&nbsp;(</span><span style="color: #ff00ff;">Month</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">-</span><span style="color: #000000;">&nbsp;(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">-</span><span style="color: #000000;">&nbsp;LENGTH&nbsp;(</span><span style="color: #ff00ff;">month</span><span style="color: #000000;">))&nbsp;</span><span style="color: #808080;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)&nbsp;</span><span style="color: #ff00ff;">month</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Su",<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Mo",<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Tu",<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"We",<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Th",<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Fr",<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Sa"<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmMonthfm&nbsp;YYYY</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #ff00ff;">month</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">case</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">when</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmMonthfm&nbsp;YYYY</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">like</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Dec%</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">and</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt&nbsp;</span><span style="color: #808080;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">iw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">01</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">then</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">53</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">when</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmMonthfm&nbsp;YYYY</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">like</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Jan%</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">and</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt&nbsp;</span><span style="color: #808080;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">iw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">53</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">then</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">.5</span><span style="color: #ff0000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TO_CHAR&nbsp;(dt&nbsp;</span><span style="color: #808080;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">iw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">end</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;week,<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">1</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Su",<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">2</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Mo",<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">3</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Tu",<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">4</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"We",<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">5</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Th",<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">6</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Fr",<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff00ff;">MAX</span><span style="color: #000000;">(DECODE&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">d</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">7</span><span style="color: #ff0000;">'</span><span style="color: #000000;">,&nbsp;LPAD&nbsp;(TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmdd</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">2</span><span style="color: #000000;">)))<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Sa"<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">select</span><span style="color: #000000;">&nbsp;TRUNC&nbsp;(SYSDATE,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">y</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">+</span><span style="color: #000000;">&nbsp;ROWNUM&nbsp;dt<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;all_objects<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">where</span><span style="color: #000000;">&nbsp;ROWNUM&nbsp;</span><span style="color: #808080;">&lt;=</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD_MONTHS&nbsp;(TRUNC&nbsp;(SYSDATE,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">y</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;</span><span style="color: #800000; font-weight: bold;">12</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">-</span><span style="color: #000000;">&nbsp;TRUNC&nbsp;(SYSDATE,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">y</span><span style="color: #ff0000;">'</span><span style="color: #000000;">))<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">group</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">by</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">fmMonthfm&nbsp;YYYY</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;TO_CHAR&nbsp;(dt&nbsp;</span><span style="color: #808080;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">iw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">order</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">by</span><span style="color: #000000;">&nbsp;TO_CHAR&nbsp;(dt&nbsp;</span><span style="color: #808080;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">iw</span><span style="color: #ff0000;">'</span><span style="color: #000000;">))<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">order</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">by</span><span style="color: #000000;">&nbsp;TO_DATE&nbsp;(</span><span style="color: #ff00ff;">month</span><span style="color: #000000;">,&nbsp;</span><span style="color: #ff0000;">'</span><span style="color: #ff0000;">Month&nbsp;YYYY</span><span style="color: #ff0000;">'</span><span style="color: #000000;">),&nbsp;TO_NUMBER&nbsp;(week)</span></div>
<img src ="http://www.blogjava.net/duduli/aggbug/318632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-04-18 09:58 <a href="http://www.blogjava.net/duduli/archive/2010/04/18/318632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle procedurce很基础（转自：http://space.itpub.net/519536/viewspace-571504）</title><link>http://www.blogjava.net/duduli/archive/2010/04/16/318527.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Fri, 16 Apr 2010 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/04/16/318527.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/318527.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/04/16/318527.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/318527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/318527.html</trackback:ping><description><![CDATA[<font size="2"><span style="font-family: Courier New;">本文通过一个最简单的<a href="javascript:;" onclick="javascript:tagshow(event, 'oracle');" target="_self"><u><strong>oracle</strong></u></a><a href="javascript:;" onclick="javascript:tagshow(event, '%B4%E6%B4%A2%B9%FD%B3%CC');" target="_self"><u><strong>存储过程</strong></u></a>"proc_helloworld"的实验，展现一下
存储过程的开发和维护过程，适合超超超级初学小牛(like me)。</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">1.编写。编写一个最最简单的存储过程，给它起个名字叫做
proc_helloworld</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New; color: #990102;">CREATE OR
REPLACE <a href="javascript:;" onclick="javascript:tagshow(event,
'PROCEDURE');" target="_self"><u><strong>PROCEDURE</strong></u></a>
proc_helloworld</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">IS</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">BEGIN</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">&nbsp;&nbsp;
DBMS_OUTPUT.put_line ('Hello World!');</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">END;</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">/</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">2.创建。在sqlplus命令行界面创建该存储过程</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sys@ora10g&gt; conn sec/sec</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Connected.</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; CREATE OR REPLACE PROCEDURE proc_helloworld</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 2&nbsp; IS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 3&nbsp; BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello World!');</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 5&nbsp; END;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 6&nbsp; /</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Procedure created.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">3.运行。两种方法运行存储过程</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">1).需要在屏幕上显示出"DBMS_OUTPUT.put_line"的输出字符串，需要做一个小小的设置</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; show serveroutput</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">serveroutput OFF</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt;<span style="color: #990102;">set
serveroutput on</span></span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; show serveroutput</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">2).在sqlplus命令行界面使用"EXECUTE"命令（简写
做"EXEC"）执行</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt;<span style="color: #990102;">exec proc_helloworld</span></span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Hello World!</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">PL/SQL procedure successfully completed.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">3).在一个无名PL/SQL块内运行存储过程</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New; color: #990102;">BEGIN</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">&nbsp;&nbsp; proc_helloworld;</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">END;</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">/</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; proc_helloworld;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 3&nbsp; END;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 4&nbsp; /</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Hello World!</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">PL/SQL procedure successfully
completed.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">4.修改。修改一个存储过程只需要将修改好的存储过程在sqlplus界面先重新执行一下即可，因为在创建过
程中使用的是"CREATE OR REPLACE PROCEDURE"，也就是说如果没有就创建，如果已经存在了这个存储过程，就替换它</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New; color: #990102;">CREATE OR REPLACE PROCEDURE proc_helloworld</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">IS</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">BEGIN</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">&nbsp;&nbsp;
DBMS_OUTPUT.put_line ('Hello World! '||chr(10)||'I am a Happy DBA
Secooler!');</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">END;</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">/</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #0001ff;">或者</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">CREATE OR
REPLACE PROCEDURE proc_helloworld</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">IS</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">BEGIN</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello World!</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">I am a Happy
DBA Secooler!');</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">END;</span><br style="font-family: Courier New; color: #990102;" />
<span style="font-family: Courier New; color: #990102;">/</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; CREATE OR REPLACE
PROCEDURE proc_helloworld</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 2&nbsp; IS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 3&nbsp; BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello World! '||chr(10)||'I am a
Happy DBA Secooler!');</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 5&nbsp; END;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 6&nbsp; /</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Procedure created.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">看一下执行效果：</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; exec proc_helloworld;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Hello World!</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">I am a Happy DBA Secooler!</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">PL/SQL procedure successfully
completed.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">5.调试。对于非常复杂的存储过程的调试是真正体现个人魅力和能力的地方，往往需要很多的经验，这个急不得，
只能慢慢来 Take it easy.</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">在sqlplus下调试存储过程时，如果出现错误，时刻使用"show
errors"命令查看哪里出错了，例如：</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; CREATE OR REPLACE
PROCEDURE proc_helloworld</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 2&nbsp; IS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 3&nbsp; BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello World!');</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 5&nbsp;<span style="color: #ff0102;">END</span></span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 6&nbsp; /</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Warning: Procedure created with compilation errors.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; show errors</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Errors for PROCEDURE PROC_HELLOWORLD:</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">LINE/COL ERROR</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">--------
-----------------------------------------------------------------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">5/3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PLS-00103: Encountered the symbol "end-of-file" when
expecting</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; one of the following:</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; &lt;an identifier&gt; &lt;a double-quoted
delimited-identifier&gt;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete exists prior &lt;a
single-quoted <a href="javascript:;" onclick="javascript:tagshow(event,
'SQL');" target="_self"><u><strong>SQL</strong></u></a> string&gt;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The symbol ";" was substituted for "end-of-file" to
continue.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">通过提示，问题出现在END后面没有分号结束符号，修改后问题得到处理</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt;
CREATE OR REPLACE PROCEDURE proc_helloworld</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 2&nbsp; IS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 3&nbsp; BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello World!');</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 5&nbsp; END;</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; 6&nbsp; /</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Procedure created.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">6.删除。使用drop语句删除存储过
程</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; select object_name,object_type,status from
user_objects where OBJECT_TYPE='PROCEDURE';</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">OBJECT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
OBJECT_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STATUS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">------------------------------
------------------- -------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">PROC_HELLOWORLD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
PROCEDURE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALID</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt;<span style="color: #990102;">DROP PROCEDURE
proc_helloworld;</span></span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Procedure dropped.</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt; select object_name,object_type,status from
user_objects where OBJECT_TYPE='PROCEDURE';</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">no rows selected</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">7.获取。在维护存储过程的过程中往往
需要快速的获取存储过程的SQL创建语句，我经常使用的有如下两种方法</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">1).使用DBMS_METADATA包获得</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt;<span style="color: #990102;">SELECT
DBMS_METADATA.get_ddl ('PROCEDURE', 'PROC_HELLOWORLD') from dual;</span></span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">DBMS_METADATA.GET_DDL('PROCEDURE','PROC_HELLOWORLD')</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">--------------------------------------------------------------------------------</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp; CREATE OR REPLACE PROCEDURE
"SEC"."PROC_HELLOWORLD"</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">IS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello World!');</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">END;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">2).使用"<a href="javascript:;" onclick="javascript:tagshow(event,
'USER_SOURCE');" target="_self"><u><strong>USER_SOURCE</strong></u></a>"
视图获得，本人推荐使用这种方法查看，格式标准，内容也全面</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">sec@ora10g&gt;<span style="color: #990102;">SELECT text FROM user_source WHERE NAME =
'PROC_HELLOWORLD';</span></span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">TEXT</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">------------------------------------------------------------------------------------------------------------------------------</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">PROCEDURE proc_helloworld</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">IS</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">BEGIN</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">&nbsp;&nbsp; DBMS_OUTPUT.put_line ('Hello
World!');</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">END;</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New; font-weight: bold;">8.小结</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">上面的实验，我通过编写、创建、运行、修改、调试、删除和获取七个内容描述了一个存储过程的开发和维护过程。</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">试验，实验还有实践，技术工作者永远不变的途径！</span><br style="font-family: Courier New;" />
<span style="font-family: Courier New;">Goodluck Friends!</span><br style="font-family: Courier New;" />
<br style="font-family: Courier New;" />
<span style="font-family: Courier New;">-- The End --</span></font>
<img src ="http://www.blogjava.net/duduli/aggbug/318527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-04-16 15:40 <a href="http://www.blogjava.net/duduli/archive/2010/04/16/318527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 10g flashback总结（转：http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4677378.aspx）</title><link>http://www.blogjava.net/duduli/archive/2010/03/17/315680.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Wed, 17 Mar 2010 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/03/17/315680.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/315680.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/03/17/315680.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/315680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/315680.html</trackback:ping><description><![CDATA[<div>Flashback 技术是以Undo segment中的内容为基础的， 因此受限于UNDO_RETENTON参数。要使用flashback 的特性，必须启用自动撤销管理表空间。</div>
<div>在Oracle 10g中， Flash back家族分为以下成员： Flashback Database， Flashback Drop，Flashback Query(分Flashback Query,Flashback Version Query， Flashback Transaction Query 三种) 和Flashback Table。</div>
<div>&nbsp;</div>
<div>一． Flashback Database</div>
<div><br />
Flashback Database 功能非常类似与RMAN的不完全恢复， 它可以把整个数据库回退到过去的某个时点的状态， 这个功能依赖于Flashback log 日志。 比RMAN更快速和高效。 因此Flashback Database 可以看作是不完全恢复的替代技术。 但它也有某些限制：</div>
<div><br />
1. Flashback Database 不能解决Media Failure， 这种错误RMAN恢复仍是唯一选择</div>
<div>2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小，这时不能用Flashback Database技术回退到改变之前的状态，这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来， 然后利用Flashback Database 执行剩下的Flashback Datbase。</div>
<div>3. 如果控制文件是从备份中恢复出来的，或者是重建的控制文件，也不能使用Flashback Database。</div>
<div>4. 使用Flashback Database锁能恢复到的最早的SCN， 取决与Flashback Log中记录的最早SCN。</div>
<div>&nbsp;</div>
<div>Flashback Database 架构</div>
<div><br />
Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程，Flashback Database Log日志 和Flash Recovery Area。一旦数据库启用了Flashback Database， 则RVWR进程会启动，该进程会向Flash Recovery Area中写入Flashback Database Log， 这些日志包括的是数据块的 " 前镜像(before image)"， 这也是Flashback Database 技术不完全恢复块的原因。</div>
<div><br />
[oracle@dba ~]$ ps -ef|grep rvw</div>
<div>oracle&nbsp;&nbsp; 12620 12589&nbsp; 0 13:21 pts/1&nbsp;&nbsp;&nbsp; 00:00:00 grep rvw</div>
<div>&nbsp;</div>
<div>启用Flashback Database</div>
<div>数据库的Flashback Database功能缺省是关闭的，要想启用这个功能，就需要做如下配置。</div>
<div>1. 配置Flash Recovery Area</div>
<div>&nbsp; 要想使用Flashback Database， 必须使用Flash Recovery Area，因为Flashback Database Log只能保存在这里。 要配置的2个参数如下，一个是大小，一个是位置。如果数据库是RAC，flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式.</div>
<div>&nbsp;</div>
<div>启用Flash Recovery Area：</div>
<div>SQL&gt;ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH;</div>
<div>SQL&gt;ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/DBA/FB' SCOPE=BOTH;</div>
<div><br />
禁用Flash Recovery Area：</div>
<div>SQL&gt;ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;</div>
<div>&nbsp;</div>
<div>对于Flash Recovery Area，Oracle 是这样建议的，flash recovery area 设置的越大，flashback database 的恢复能力就越强，因此建议flash recovery area 能够放的下所有的数据文件，增量备份，以及所有尚未备份的归档文件，当然还有它自己产生的flashback logs。</div>
<div>在数据库运行过程中，oracle 自动向该区域写入文件，当剩余空间不足15%的时候，它就会在alert 中增加警告，提示你空间不足。但此时不会影响数据库的正常运转，直到所有空间统统被用掉之后，oracle 首先尝试删除寻些过期的文件，冗余文件或备份过的文件，如果这些做完了，还是没有空闲空间的话，数据库就被hang 住了。</div>
<div><br />
对于因Flash Recovery Area导致的数据库hang的处理，请参考：</div>
<div><a href="http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668991.aspx" target="_blank">http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668991.aspx</a></div>
<div>或者</div>
<div><a href="http://user.qzone.qq.com/251097186/blog/1244650673" target="_blank">http://user.qzone.qq.com/251097186/blog/1244650673</a></div>
<div>&nbsp;</div>
<div>2. 启用数据库Flashback 功能</div>
<div><br />
1). 数据库启动到mount状态</div>
<div>SQL&gt; startup mount；</div>
<div>2). 检查Flashback 功能， 缺省时功能是关闭的。</div>
<div>SQL&gt; select name, current_scn, flashback_on from v$database;</div>
<div>NAME&nbsp;&nbsp;&nbsp; CURRENT_SCN&nbsp; FLASHBACK_ON</div>
<div>--------&nbsp;&nbsp;&nbsp; -----------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------</div>
<div>DBA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 945715&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NO</div>
<div>&nbsp;</div>
<div>3). 启动Flashback功能</div>
<div>SQL&gt;&nbsp; alter database flashback on;</div>
<div>数据库已更改。</div>
<div><br />
SQL&gt;&nbsp; select name, current_scn, flashback_on from v$database;</div>
<div>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CURRENT_SCN FLASHBACK_ON</div>
<div>--------- ----------- ------------------</div>
<div>DBA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 YES</div>
<div><br />
4). 设置初始化参数：DB_FLASHBACK_RETENTION_TARGET：</div>
<div><br />
SQL&gt;alter system set db_flashback_retention_target=1440 scope=both;</div>
<div><br />
该参数用来控制flashback log 数据保留的时间，或者说，你希望flashback database 能够恢复的最早的时间点。默认值是1440，单位是minute，即24 小时，需要注意的是该参数虽然未直接指定flash recovery area大小，但却受其制约，举个例子假如数据库每天有10%左右的数据变动的话，如果该初始化参数值设置为1440，则flash recovery area 的大小至少要是当前数据库实际容量的10%，如果该初始化参数设置为2880，则flash recovery area 的大小就至少是数据库所占容量的20%。</div>
<div><br />
5). 启动数据库</div>
<div>SQL&gt;alter database open;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Flashback Database操作示例</div>
<div><br />
做操作前先备份数据库</div>
<div>RMAN&gt; backup database;</div>
<div><br />
1. 检查是否启动了flash recovery area:&shy;</div>
<div>SQL&gt; show parameter db_recovery_file</div>
<div>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE</div>
<div>------------------------------------&nbsp; ----------- ------------------------------</div>
<div>db_recovery_file_dest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tring&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D:\oracle/flash_recovery_area</div>
<div>db_recovery_file_dest_size&nbsp; big integer 1G</div>
<div><br />
2. 检查是否启用了归档&shy;</div>
<div>SQL&gt; archive log list;</div>
<div>数据库日志模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存档模式</div>
<div>自动存档&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启用</div>
<div>存档终点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USE_DB_RECOVERY_FILE_DEST</div>
<div>最早的联机日志序列&nbsp; 9</div>
<div>下一个存档日志序列&nbsp; 11</div>
<div>当前日志序列&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11</div>
<div><br />
3. 检查是否启用了flashback database </div>
<div>SQL&gt; select flashback_on from v$database;</div>
<div>FLASHBACK_ON&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;------------------ </div>
<div>YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div><br />
4. 查询当前的scn&shy;</div>
<div>SQL&gt; SELECT CURRENT_SCN FROM V$DATABASE;</div>
<div><br />
CURRENT_SCN</div>
<div>-----------</div>
<div>947921</div>
<div><br />
5. 查询当前的时间</div>
<div>SQL&gt; select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;</div>
<div><br />
TIME</div>
<div>-----------------</div>
<div>09-10-14 14:37:05</div>
<div><br />
6. 删除表A</div>
<div>SQL&gt; select * from A;</div>
<div><br />
ID&nbsp; NAME</div>
<div>---------- ----------</div>
<div>1&nbsp; tianle</div>
<div>2&nbsp; dave</div>
<div><br />
SQL&gt; drop table A;</div>
<div>表已删除。</div>
<div>SQL&gt; commit;</div>
<div><br />
7. Flashback Database 实际是对数据库的一个不完全恢复操作，因为需要关闭数据库重启到mount状态。</div>
<div>SQL&gt; shutdown immediate</div>
<div>数据库已经关闭。</div>
<div>已经卸载数据库。</div>
<div>ORACLE 例程已经关闭。</div>
<div>SQL&gt; startup mount</div>
<div>ORACLE 例程已经启动。</div>
<div><br />
Total System Global Area&nbsp; 209715200 bytes</div>
<div>Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1248116 bytes</div>
<div>Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 79692940 bytes</div>
<div>Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 121634816 bytes</div>
<div>Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7139328 bytes</div>
<div>数据库装载完毕。</div>
<div><br />
8. 执行恢复：分timestamp 或者SCN两种</div>
<div><br />
SQL&gt; Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd</div>
<div>hh24:mi:ss');</div>
<div>闪回完成。</div>
<div><br />
或者：</div>
<div>SQL&gt; Flashback database to scn 947921;</div>
<div>闪回完成。</div>
<div><br />
9. 打开数据库：</div>
<div>在执行完flashback database 命令之后，oracle 提供了两种方式让你修复数据库：</div>
<div>1). 直接alter database open resetlogs 打开数据库，当然，指定scn 或者timestamp 时间点之后产生的数据统统丢失。</div>
<div>2). 先执行alter database open read only 命令以read-only 模式打开数据库，然后立刻通过逻辑导出的方式将误操作涉及表的数据导出，再执行recover database 命令以重新应用数据库产生的redo，将数据库修复到flashback database 操作前的状态，然后再通过逻辑导入的方式，将之前误操作的表重新导入，这样的话对现有数据的影响最小，不会有数据丢失。</div>
<div><br />
这里演示，就以resetlogs方式打开：</div>
<div>SQL&gt; alter database open resetlogs;</div>
<div>数据库已更改。</div>
<div><br />
验证数据：</div>
<div>SQL&gt; select * from A;</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID NAME</div>
<div>---------- ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 tianle</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 dave</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>和Flashback Database 相关的2个视图：</div>
<div>1. V$database</div>
<div>&nbsp;这个视图可以查看是否启用了Flashback database功能</div>
<div>SQL&gt; select flashback_on from v$database;</div>
<div>FLASHBACK_ON</div>
<div>------------------</div>
<div>YES</div>
<div><br />
2. V$flashback_database_log</div>
<div>&nbsp;Flashback Database 所能回退到的最早时间，取决与保留的Flashback Database Log 的多少， 该视图就可以查看许多有用的信息。</div>
<div>Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复到最早的时点</div>
<div>Flashback_size: 记录了当前使用的Flash Recovery Area 空间的大小</div>
<div>Retention_target: 系统定义的策略</div>
<div>Estimated_flashback_size: 根据策略对需要的空间大小的估计值</div>
<div>SQL&gt; select oldest_flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh2</div>
<div>4:mi:ss') ot, retention_target rt,flashback_size fs, estimated_flashback_size es</div>
<div>&nbsp;from v$flashback_database_log;</div>
<div><br />
OS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ES</div>
<div>----------&nbsp; -----------------&nbsp;&nbsp;&nbsp;&nbsp; ----------&nbsp; ----------&nbsp;&nbsp;&nbsp; ----------</div>
<div>946088&nbsp; 09-10-14 13:49:59&nbsp; 1440&nbsp;&nbsp;&nbsp;&nbsp; 16384000&nbsp; 350920704</div>
<div><br />
3. V$flashback_database_stat</div>
<div>这个视图用来对Flashback log 空间情况进行更细粒度的记录和估计。 这个视图以小时为单位记录单位时间内数据库的活动量，Flashback_Data 代表Flashback log产生数量，DB_Date 代表数据改变数量，Redo_Date代表日志数量，通过这3个数量可以反映出数据的活动特点，更准确的预计Flash Recovery Area的空间需求</div>
<div><br />
SQL&gt; alter session set nls_date_format='hh24:mi:ss';</div>
<div><br />
会话已更改。</div>
<div><br />
SQL&gt; select *from v$flashback_database_stat;</div>
<div><br />
BEGIN_TI END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE</div>
<div>-------- -------- -------------- ---------- ---------- ------------------------</div>
<div>14:43:10 15:15:28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6455296&nbsp;&nbsp; 29310976&nbsp;&nbsp;&nbsp; 3898368&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Flashback DROP</div>
<div><br />
Flashback Drop 是从Oracle 10g 开始出现的， 用于恢复用户误删除的对象(包括表，索引等)， 这个技术依赖于Tablespace Recycle Bin(表空间回收站)，这个功能和windows的回收站非常类似。</div>
<div><br />
Flashback 不支持sys用户. system表空间下的对象，也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时， show recyclebin 为空。</div>
<div>&nbsp;</div>
<div>1. Tablespace Recycle Bin</div>
<div><br />
从Oracle 10g 开始， 每个表空间都会有一个叫作回收站的逻辑区域，当用户执行drop命令时， 被删除的表和表的关联对象( 包括索引， 约束，触发器，LOB段，LOB index 段) 不会被物理删除， 这些对象先转移到回收站中，这就给用户提供了一个恢复的可能。</div>
<div>&nbsp;</div>
<div>初始化参数recyclebin 用于控制是否启用recyclebin功能，缺省是ON， 可以使用OFF关闭。</div>
<div><br />
SQL&gt; show parameter recycle</div>
<div><br />
NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE</div>
<div>------------------------------------ ----------- ------------------------------</div>
<div>buffer_pool_recycle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string</div>
<div>db_recycle_cache_size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; big integer 0</div>
<div>recyclebin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on</div>
<div><br />
禁用该功能：</div>
<div>SQL&gt; alter system set recyclebin=off;</div>
<div>SQL&gt; alter system set recyclebin=on;</div>
<div><br />
SQL&gt; alter session set recyclebin=off;</div>
<div>SQL&gt; alter session set recyclebin=on;</div>
<div><br />
禁用后删除的对象将直接删除，不会写到Recycle中，当然在删除时，指定purge 参数，表也将直接删除，不会写到recyclebin中。<br />
SQL&gt; drop table name purge;</div>
<div><br />
查看recyclebin中的对象列表：</div>
<div>SQL&gt; select * from A;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>SQL&gt; drop table A;</div>
<div>表已删除。</div>
<div>SQL&gt; show recyclebin</div>
<div>ORIGINAL NAME&nbsp;&nbsp;&nbsp; RECYCLEBIN NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJECT TYPE&nbsp; DROP TIME</div>
<div>----------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -------------------</div>
<div><br />
A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BIN$RWXQQcTPRde0ws4h9ewJcg==$0&nbsp; TABLE&nbsp;&nbsp;&nbsp;&nbsp; 2009-10-15:12:44:33</div>
<div><br />
查看recyclebin中对象：</div>
<div>SQL&gt; select original_name,object_name from recyclebin;</div>
<div><br />
ORIGINAL_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJECT_NAME</div>
<div>-------------------------------- ------------------------------</div>
<div>A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BIN$RWXQQcTPRde0ws4h9ewJcg==$0</div>
<div><br />
查看recyblebin对象里的内容：</div>
<div>SQL&gt; select * from "BIN$RWXQQcTPRde0ws4h9ewJcg==$0";</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div><br />
表空间的Recycle Bin 区域只是一个逻辑区域，而不是从表空间上物理的划出一块区域固定用于回收站，因此Recycle Bin是和普通对象共用表空间的存储区域，或者说是Recycle Bin的对象要和普通对象抢夺存储空间。当发生空间不够时，Oracle会按照先入先出的顺序覆盖Recycle Bin中的对象。也可以手动的删除Recycle Bin占用的空间。</div>
<div>1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin</div>
<div>2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象</div>
<div>3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象</div>
<div>4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象，该命令要sysdba权限</div>
<div>5). Drop table table_name purge:&nbsp; 删除对象并且不放在Recycle Bin中，即永久的删除，不能用Flashback恢复。</div>
<div>6). Purge index recycle_bin_object_name： 当想释放Recycle bin的空间，又想能恢复表时，可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引是可以重建的。</div>
<div>2. Flashback Drop 实例操作</div>
<div>SQL&gt; select original_name,object_name from recyclebin;</div>
<div>ORIGINAL_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJECT_NAME</div>
<div>-------------------------------- ------------------------------</div>
<div>A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BIN$RWXQQcTPRde0ws4h9ewJcg==$0</div>
<div>SQL&gt; flashback table a to before drop;</div>
<div>闪回完成。</div>
<div>SQL&gt; select * from a;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div><br />
当我们删除表A后，在新建表A，这时在恢复的时候就会报错，此时我们在闪回时，对表重命名就可以了：</div>
<div>SQL&gt; drop table a;</div>
<div>表已删除。</div>
<div>SQL&gt; create table a</div>
<div>&nbsp; 2&nbsp; (id number(1));</div>
<div>表已创建。</div>
<div>SQL&gt; flashback table a to before drop ;</div>
<div>flashback table a to before drop</div>
<div>*</div>
<div>第 1 行出现错误:</div>
<div>ORA-38312: 原始名称已被现有对象使用</div>
<div><br />
SQL&gt; flashback table a to before drop rename to B;</div>
<div>闪回完成。</div>
<div>SQL&gt; select * from B;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div><br />
当我们删除表A，在新建表A，在删除它，这是在Recycle Bin中就会有2个相同的表明，此时恢复我们就要指定object_name才行.</div>
<div><br />
SQL&gt; select * from B;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>SQL&gt; drop table B;</div>
<div>表已删除。</div>
<div>SQL&gt; create table B(name varchar(20));</div>
<div>表已创建。</div>
<div>SQL&gt; drop table B;</div>
<div>表已删除。</div>
<div>SQL&gt; select original_name,object_name from recyclebin;</div>
<div>ORIGINAL_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJECT_NAME</div>
<div>--------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------</div>
<div>B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BIN$vYuv+g9fTi2exYP9X2048Q==$0</div>
<div>B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BIN$geQ9+NekSjuRvzG+TqDVWw==$0</div>
<div>SQL&gt; flashback table "BIN$vYuv+g9fTi2exYP9X2048Q==$0" to before drop;</div>
<div>闪回完成。</div>
<div>SQL&gt; select * from B;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>一旦完成闪回恢复，Recycle Bin中的对象就消失了. Flashback Drop 需要注意的地方：</div>
<div>1). 只能用于非系统表空间和本地管理的表空间</div>
<div>2). 对象的参考约束不会被恢复，指向该对象的外键约束需要重建。</div>
<div>3). 对象能否恢复成功，取决与对象空间是否被覆盖重用。</div>
<div>4). 当删除表时，信赖于该表的物化视图也会同时删除，但是由于物化视图并不会被放入recycle bin，因此当你执行flashback table to before drop 时，也不能恢复依赖其的物化视图，需要dba 手工介入重新创建。</div>
<div>5). 对于Recycle Bin中的对象，只支持查询.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Flashback Query</div>
<div>Flashback 是ORACLE 自9i 就开始提供的一项特性，在9i 中利用oracle 查询多版本一致的特点，实现从回滚段中读取表一定时间内操作过的数据，可用来进行数据比对，或者修正意外提交造成的错误数据，该项特性也被称为Flashback Query。</div>
<div><br />
一、Flashback Query<br />
正如前言中所提，Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据！</div>
<div><br />
什么是多版本读一致性<br />
Oracle 采用了一种非常优秀的设计，通过undo 数据来确保写不堵塞读，简单的讲，不同的事务在写数据时，会将数据的前映像写入undo 表空间，这样如果同时有其它事务查询该表数据，则可以通过undo 表空间中数据的前映像来构造所需的完整记录集，而不需要等待写入的事务提交或回滚。</div>
<div><br />
flashback query 有多种方式构建查询记录集，记录集的选择范围可以基于时间或基于scn，甚至可以同时查询出记录在undo 表空间中不同事务时的前映象。用法与标准查询非常类似，要通过flashback query 查询undo 中的撤销数据，最简单的方式只需要在标准查询语句的表名后面跟上as of timestamp(基于时间)或as of scn(基于scn)即可。as of timestamp|scn 的语法是自9iR2 后才开始提供支持。</div>
<div><br />
1、As of timestamp 的示例：</div>
<div><br />
SQL&gt;&nbsp; alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss';</div>
<div>会话已更改。</div>
<div>SQL&gt; select sysdate from dual;</div>
<div>SYSDATE</div>
<div>-------------------</div>
<div>2009-10-15 19:04:16</div>
<div><br />
SQL&gt; select * from A;</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div><br />
模拟用户误操作，删除数据</div>
<div>SQL&gt; delete from A;</div>
<div>已删除4行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select * from A;</div>
<div>未选定行</div>
<div>查看删除之前的状态：<br />
假设当前距离删除数据已经有5 分钟左右的话：<br />
SQL&gt; select * from A as of timestamp sysdate-5/1440;</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div>或者：</div>
<div>SQL&gt;select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div>用Flashback Query恢复之前的数据：</div>
<div>SQL&gt;Insert into A select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');</div>
<div>已创建4行。</div>
<div>SQL&gt; COMMIT;</div>
<div><br />
提交完成。</div>
<div><br />
SQL&gt; select * from A;</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div>如上述示例中所表示的，as of timestamp 的确非常易用，但是在某些情况下，我们建议使用as of scn 的方式执行flashback query，比如需要对多个相互有主外键约束的表进行恢复时，如果使用as of timestamp 的方式，可能会由于时间点不统一的缘故造成数据选择或插入失败，通过scn 方式则能够确保记录的约束一致性。</div>
<div><br />
2. As of scn 示例</div>
<div><br />
查看SCN:<br />
SELECT dbms_flashback.get_system_change_number FROM dual;<br />
SELECT CURRENT_SCN FROM V$DATABASE;</div>
<div><br />
SQL&gt; SELECT CURRENT_SCN FROM V$DATABASE;</div>
<div>CURRENT_SCN</div>
<div>-----------</div>
<div>1095782</div>
<div><br />
删除数据：<br />
SQL&gt; delete from A;</div>
<div>已删除4行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>&nbsp;</div>
<div>查看删除之前的状态：</div>
<div>SQL&gt; select * from A as of scn 1095782;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div><br />
用Flashback Query恢复之前的数据：</div>
<div>SQL&gt; insert into A select * from A as of scn 1095782;</div>
<div>已创建4行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select * from A;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div><br />
事实上，Oracle 在内部都是使用scn，即使你指定的是as of timestamp，oracle 也会将其转换成scn，系统时间标记与scn 之间存在一张表，即SYS 下的SMON_SCN_TIME</div>
<div><br />
SQL&gt; desc sys.smon_scn_time</div>
<div>&nbsp;名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否为空? 类型</div>
<div>&nbsp;----------------------------------------- --------&nbsp;&nbsp;&nbsp; ---------------------------</div>
<div><br />
&nbsp;THREAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div>&nbsp;TIME_MP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div>&nbsp;TIME_DP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATE</div>
<div>&nbsp;SCN_WRP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div>&nbsp;SCN_BAS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div>&nbsp;NUM_MAPPINGS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div>&nbsp;TIM_SCN_MAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RAW(1200)</div>
<div>&nbsp;SCN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div>&nbsp;ORIG_THREAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</div>
<div><br />
每隔5 分钟，系统产生一次系统时间标记与scn 的匹配并存入sys.smon_scn_time 表，该表中记录了最近1440个系统时间标记与scn 的匹配记录，由于该表只维护了最近的1440 条记录，因此如果使用as of timestamp 的方式则只能flashback 最近5 天内的数据（假设系统是在持续不断运行并无中断或关机重启之类操作的话）。</div>
<div>注意理解系统时间标记与scn 的每5 分钟匹配一次这句话，举个例子，比如scn:339988,339989 分别匹配08-05-3013:52:00 和2008-13:57:00，则当你通过as of timestamp 查询08-05-30 13:52:00 或08-05-30 13:56:59 这段时间点<br />
内的时间时，oracle 都会将其匹配为scn:339988 到undo 表空间中查找，也就说在这个时间内，不管你指定的时间点是什么，查询返回的都将是08-05-30 13:52:00 这个时刻的数据。</div>
<div>查看SCN 和 timestamp 之间的对应关系：<br />
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;</div>
<div>&nbsp;</div>
<div>Flashback version Query</div>
<div><br />
相对于Flashback Query 只能看到某一点的对象状态， Oracle 10g引入的Flashback Version Query可以看到过去某个时间段内，记录是如何发生变化的。 根据这个历史，DBA就可以快速的判断数据是在什么时点发生了错误，进而恢复到之前的状态。</div>
<div><br />
先看一个伪列 ORA_ROWSCN.&nbsp; 所谓的伪列，就是假的，不存在的数据列，用户创建表时虽然没有指定，但是Oracle为了维护而添加的一些内部字段，这些字段可以像普通文件那样的使用。</div>
<div><br />
最熟悉的伪列就是 ROWID， 它相当于一个指针，指向记录在磁盘上的位置。ORA_ROWSCN 是Oracle 10g 新增的，暂且把它看作是记录最后一次被修改时的SCN。 Flashback Version Query 就是通过这个伪列来跟踪出记录的变化历史。</div>
<div><br />
举个例子：</div>
<div>SQL&gt; select * from A;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div>SQL&gt; insert into A values(5);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; select * from A;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5</div>
<div><br />
SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select ora_rowscn, id from A;</div>
<div>ORA_ROWSCN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>----------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp; 1098443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp; 1098443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp; 1098443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>&nbsp;&nbsp; 1098443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</div>
<div>&nbsp;&nbsp; 1098443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5</div>
<div><br />
获取更多的历史信息</div>
<div>SQL&gt;Select versions_xid,versions_startscn,versions_endscn,</div>
<div>&nbsp;&nbsp; DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Original') "Operation", id from A versions between scn minvalue and maxvalue;</div>
<div>或者</div>
<div>SQL&gt;select xid,commit_scn,commit_timestamp,operation,undo_sql </div>
<div>from flashback_transaction_query q where q.xid in(select versions_xid from B versions between scn 413946 and 413959);</div>
<div><br />
VERSIONS_XID&nbsp;&nbsp;&nbsp;&nbsp; VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio&nbsp;&nbsp;&nbsp; ID</div>
<div>---------------- ----------------- --------------- -------- ----------</div>
<div>05001A0054020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1099482&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>05001A0054020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1099482&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div>05001A0054020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1099482&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>05001A0054020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1099482&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>0400150005020000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1098443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insert&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5</div>
<div><br />
下面我们来讲下伪列， Flashback Version Query 技术其实有很多伪列，但是ORA_ROWSCN是最重要。它记录的是最后一次被修改时的SCN， 注意是被提交的修改。如果没有提交，这个伪列不会发生变化。</div>
<div>&nbsp;</div>
<div>ORA_ROWSCN 缺省是数据块级别的，也就是一个数据块内的所有记录都是一个ORA_ROWSCN，数据块内任意一条记录被修改，这个数据库块内的所有记录的ORA_ROWSCN都会同时改变。上例的查询结果以证明。</div>
<div><br />
不过我们可以在建表时使用关键字 rowdependencies， 可以改变这种缺省行为，使用这个关键字后，每条记录都有自己的ORA_ROWSCN。 </div>
<div><br />
举例：</div>
<div>SQL&gt; create table B (id number(2)) rowdependencies;</div>
<div>表已创建。</div>
<div>SQL&gt; insert into B values(1);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; insert into B values(2);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; insert into B values(3);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select ora_rowscn, id from B;</div>
<div>ORA_ROWSCN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>---------- ----------</div>
<div>&nbsp;&nbsp; 1100560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp; 1100560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp; 1100560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div><br />
此处SCN一样，一定很奇怪，这正好说明是最后一次被修改时的SCN，如果没有提交，是不会变的，我们重做一下就清楚了。</div>
<div><br />
SQL&gt; analyze table B compute statistics;</div>
<div>表已分析。</div>
<div>SQL&gt; select ora_rowscn, id from B;</div>
<div>ORA_ROWSCN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>---------- ----------</div>
<div>&nbsp;&nbsp; 1100560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp; 1100560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp; 1100560&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div><br />
SQL&gt; delete from B;</div>
<div>已删除4行。</div>
<div>SQL&gt; select ora_rowscn, id from B;</div>
<div>未选定行</div>
<div>SQL&gt; insert into B values(1);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; insert into B values(2);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select ora_rowscn, id from B;</div>
<div>ORA_ROWSCN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>---------- ----------</div>
<div>&nbsp;&nbsp; 1100723&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp; 1100729&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Flashback Transaction Query</div>
<div>Flashback Transaction Query也是使用UNDO信息来实现。利用这个功能可以查看某个事务执行的所有变化，它需要访问flashback_transaction_query 视图，这个视图的XID列代表事务ID，利用这个ID可以区分特定事务发生的所有数据变化。</div>
<div>示例：</div>
<div>SQL&gt; insert into B values(3);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select * from B;</div>
<div><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</div>
<div><br />
查看视图，每个事务都对应相同的XID</div>
<div><br />
SQL&gt;Select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in (</div>
<div>Select versions_xid from B versions between scn minvalue and maxvalue);</div>
<div>或者</div>
<div>SQL&gt;select xid,commit_scn,commit_timestamp,operation,undo_sql </div>
<div>from flashback_transaction_query q where q.xid in(select versions_xid from B versions between scn 413946 and 413959);</div>
<div><br />
XID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OPERATION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMMIT_SCN</div>
<div>---------------- -------------------------------- ----------</div>
<div>UNDO_SQL</div>
<div>--------------------------------------------------------------------------------</div>
<div><br />
03001C006A020000 DELETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1100723</div>
<div>insert into "SYS"."B"("ID") values ('4');</div>
<div><br />
03001C006A020000 DELETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1100723</div>
<div>insert into "SYS"."B"("ID") values ('3');</div>
<div><br />
03001C006A020000 DELETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1100723</div>
<div>insert into "SYS"."B"("ID") values ('2');</div>
<div>&nbsp;</div>
<div>Flashback Table</div>
<div><br />
注意SYS用户不支持闪回，这点前面已经说明过。</div>
<div><br />
Flashback Table也是使用UNDO tablespace的内容来实现对数据的回退。该命令相对简单，输入：flashback table table_name to scn(to timestamp) 即可。</div>
<div><br />
注意：如果想要对表进行flashback，必须允许表的row movement.</div>
<div>Alter table table_name row movement;</div>
<div>&nbsp;</div>
<div>要查看某表是否启用row movement，可以到user_tables 中查询(或all_tables,dba_tables)，</div>
<div>例如：<br />
SQL&gt; select row_movement from user_tables where table_name='C';<br />
ROW_MOVE<br />
--------<br />
ENABLED</div>
<div><br />
要启用或禁止某表row movement，可以通过下列语句：</div>
<div><br />
--启用<br />
JSSWEB&gt; ALTER TABLE table_name ENABLE ROW MOVEMENT;<br />
表已更改。<br />
--禁止<br />
JSSWEB&gt; ALTER TABLE table_name DISABLE ROW MOVEMENT;<br />
表已更改。</div>
<div><br />
举例：</div>
<div><br />
SQL&gt; create table C (id number(2));</div>
<div>表已创建。</div>
<div>SQL&gt; insert into C values(1);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; insert into C values(2);</div>
<div>已创建 1 行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; select * from c;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div><br />
SQL&gt; alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss";</div>
<div>会话已更改。</div>
<div>SQL&gt; select sysdate from dual;</div>
<div>SYSDATE</div>
<div>-------------------</div>
<div>2009-10-15 21:17:47</div>
<div>SQL&gt; select current_scn from v$database;</div>
<div><br />
CURRENT_SCN</div>
<div>-----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1103864</div>
<div><br />
删除数据并恢复</div>
<div>SQL&gt; delete from C;</div>
<div>已删除2行。</div>
<div>SQL&gt; commit;</div>
<div>提交完成。</div>
<div>SQL&gt; alter table c enable row movement;</div>
<div>表已更改。</div>
<div>SQL&gt; flashback table c to scn&nbsp; 1103864;</div>
<div>闪回完成。</div>
<div>或者：</div>
<div>SQL&gt; flashback table c to timestamp to_timestamp('2009-10-15 21:17:47','yyyy-mm-</div>
<div>dd hh24:mi:ss');</div>
<div><br />
SQL&gt; select * from c;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID</div>
<div>----------</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</div>
<div><br />
Flashback table 命令支持同时操作多个表，表名中间以逗号分隔即可，如果你执行一条flashback table命令时同时指定了多个表，要记住单个flashback table 是在同一个事务中，因此这些表的恢复操作要么都成功，要么都失败。</div>
<div>如：</div>
<div>flashback table a,b ,c to scn 1103864;</div>
<div>&nbsp;</div>
<div>一些注意事项</div>
<div>1. 基于undo 的表恢复，需要注意DDL 操作的影响<br />
第三个就是修改并提交过数据之后，对表做过DDL 操作，包括：<br />
drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition，这些操作会另undo 表空间中的撤销数据失效，对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录，但有可能因表结构修改导致undo 中重做记录无法应用的情况，比如对于增加了约束，而flashback query 查询出的undo 记录已经不符合新建的约束条件，这个时候直接恢复显然不可能成功，你要么暂时disable 约束，要么通过适当逻辑，对要恢复的数据进行处理之后，再执行恢复。<br />
另外，flashback query 对v$tables,x$tables 等动态性能视图无效，不过对于dba_*,all_*,user_*等数据字典是有效的。同时该特性也完全支持访问远端数据库，比如select * from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#98;&#108;&#64;&#100;&#98;&#108;&#105;&#110;&#107;" target="_blank">tbl@dblink</a> as of scn 360;的形式。 </div>
<div>&nbsp;</div>
<div>2. 基于undo 的表恢复，flashback table 实际上做的也是dml 操作(会在被操作的表上加dml 锁)，因此还需要注意triggers 对其的影响，默认情况下，flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers，如果你希望在此期间trigger 能够继续发挥做用，可以在flashback table 后附加<br />
ENABLE TRIGGERS 子句。</div>
<div>&nbsp;</div>
<div>补充：</div>
<div><br />
什么是Automatic Undo Management( 自动撤销管理表空间)<br />
提到自动撤销管理表空间，就不得不提手动管理的回滚段。在9i 之前，回滚段的管理和监控是需要dba手工介入的，创建合适的回滚段是件非常耗费dba 精力的事情，你可能需要不断关注oracle 运行状况很长一阵子时间后，通过不断的调整才能基本确认一段时期内回滚段的大小，一旦回滚段创建的不合适，就极有可能引起性能问题甚至错误，比如ora-1555 就是典型的回滚段设置不合适触发的。<br />
9i 之后呢(含9i)，oracle 为了清晰它的整个概念，取消了回滚段这个说法(实际上并未取消回滚段)，而完全以undo 来代替，这也它正好与redo 相对应，一个重做，一个撤销。回滚段可以不再由dba 手工介入，而是完全由它自己在运行时自动分配，这在一定程度上即解放了dba，也确实起到了提高性能的作用，比如采用自动管理表空间就可以最大程序的降低ora-1555发生的机率(注意是降低，不是避免，我们不可能创建一个无限大的回滚段，ora-1555 也并不完全是回滚段造成的，关于ora-1555 的问题这里就不深入讨论了，互联网上已经有太多文章描述和介绍该问题及解决方案)</div>
<div>是否起用自动管理的撤销表空间由二个初始化参数决定：<br />
UNDO_MANAGEMENT：值为AUTO 表示使用了自动撤销管理表空间，MANUAL 则表示手动管理<br />
UNDO_TABLESPACE：当UNDO_MANAGEMENT 值为AUTO 时，该参数用来指定当前的undo 表空间名称。<br />
undo 表空间的大小，直接影响到flashback query 的查询能力，因为多版本查询所依赖的undo 数据都存储在undo 表空间中，该表空间越大，所能够存储的undo 数据自然也越多，如果该表空间可用空间非常小，别说flashback 了，恐怕正常查询都有可能触发ora-1555 吧。</div>
<div><br />
初始化参数UNDO_RETENTION<br />
该参数用来指定undo 记录保存的最长时间，以秒为单位，是个动态参数，完全可以在实例运行时随时修改通常默认是900 秒，也就是15 分钟。<br />
一定要注意，undo_retention 只是指定undo 数据的过期时间，并不是说，undo 中的数据一定会在undo表空间中保存15 分钟，比如说刚一个新事务开始的时候，如果undo 表空间已经被写满，则新事务的数据会自动覆盖已提交事务的数据，而不管这些数据是否已过期，因此呢，这就又关联回了第一点，当你创建<br />
一个自动管理的undo 表空间时，还要注意其空间大小，要尽可能保证undo 表空间有足够的存储空间。<br />
同时还要注意，也并不是说，undo_retention 中指定的时间一过，已经提交事务中的数据就立刻无法访问，它只是失效，只要不被别的事务覆盖，它会仍然存在，并可随时被flashback 特性引用。如果你的undo表空间足够大，而数据库又不是那么繁忙，那么其实undo_retention 参数的值并不会影响到你，哪怕你设置成1，只要没有事务去覆盖undo 数据，它就会持续有效。因此呢，这里还是那句话，要注意undo 表空间的大小，保证其有足够的存储空间。</div>
<div><br />
只有在一种情况下，undo 表空间能够确保undo 中的数据在undo_retention 指定时间过期前一定有效，就是为undo 表空间指定Retention Guarantee，指定之后，oracle 对于undo 表空间中未过期的undo 数据不会覆盖，</div>
<div>例如：<br />
SQL&gt; Alter tablespace undotbs1 retention guarantee;<br />
如果想禁止undo 表空间retention guarantee，</div>
<div>例如：<br />
SQL&gt; Alter tablespace undotbs1 retention noguarantee;<br />
<br />
</div>
<br />
<br />
本文转载于：<a href="http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4677378.aspx" target="_blank">http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4677378.aspx</a>
<img src ="http://www.blogjava.net/duduli/aggbug/315680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-03-17 15:33 <a href="http://www.blogjava.net/duduli/archive/2010/03/17/315680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作中oracle记录</title><link>http://www.blogjava.net/duduli/archive/2010/03/14/315367.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sun, 14 Mar 2010 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/03/14/315367.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/315367.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/03/14/315367.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/315367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/315367.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle 时间操作，对分钟，小时，月，日，秒钟加减操作，本地备份脚本，sqlplus输出txt,html,excel报表&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2010/03/14/315367.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/315367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-03-14 10:18 <a href="http://www.blogjava.net/duduli/archive/2010/03/14/315367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 数据库导出(exp)/ 导入(imp)</title><link>http://www.blogjava.net/duduli/archive/2010/03/12/315302.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Fri, 12 Mar 2010 10:45:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2010/03/12/315302.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/315302.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2010/03/12/315302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/315302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/315302.html</trackback:ping><description><![CDATA[<p>简说Oracle 数据库导出(exp)/ 导入(imp)
<div>exp</div>
<div>将数据库内的各对象以二进制方式下载成dmp 文件，方便数据迁移。<br />
buffer ：下载数据缓冲区，以字节为单位，缺省依赖操作系统<br />
consistent ：下载期间所涉及的数据保持read only，缺省为n<br />
direct ：使用直通方式，缺省为n<br />
feeback ：显示处理记录条数，缺省为0，即不显示<br />
file：输出文件，缺省为expdat.dmp<br />
filesize：输出文件大小，缺省为操作系统最大值<br />
indexes：是否下载索引，缺省为n，这是指索引的定义而非数据，exp 不下载索引数据<br />
log：log 文件，缺省为无，在标准输出显示<br />
owner：指明下载的用户名<br />
query：选择记录的一个子集<br />
rows：是否下载表记录<br />
tables：输出的表名列表<br />
导出整个实例</div>
<div>exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y</div>
<div>user 应具有dba 权限</div>
<div>导出某个用户所有对象</div>
<div>exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000</div>
<div>导出一张或几张表</div>
<div>exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000<br />
feedback=10000</div>
<div>导出某张表的部分数据</div>
<div>exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000</div>
<div>query=\&#8221;where col1=\&#8217;&#8230;\&#8217; and col2 \&lt;&#8230;\&#8221;</div>
<div>不可用于嵌套表</div>
<div>以多个固定大小文件方式导出某张表</div>
<div>exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,&#8230; filesize=1000m tables=emp buffer=4096000</div>
<div>feedback=10000</div>
<div>这种做法通常用在：表数据量较大，单个dump 文件可能会超出文件系统的限制</div>
<div>直通路径方式</div>
<div>direct=y，取代buffer 选项，query 选项不可用</div>
<div>有利于提高下载速度</div>
<div>consistent 选项</div>
<div>自export 启动后，consistent=y 冻结来自其它会话的对export 操作的数据对象的更新，这样可以保证</div>
<div>dump 结果的一致性。但这个过程不能太长，以免回滚段和联机日志消耗完</div>
<div>imp</div>
<div>将exp 下载的dmp 文件上载到数据库内。<br />
buffer：上载数据缓冲区，以字节为单位，缺省依赖操作系统<br />
commit：上载数据缓冲区中的记录上载后是否执行提交<br />
feeback ：显示处理记录条数，缺省为0，即不显示<br />
file：输入文件，缺省为expdat.dmp<br />
filesize：输入文件大小，缺省为操作系统最大值<br />
fromuser：指明来源用户方<br />
ignore：是否忽略对象创建错误，缺省为n，在上载前对象已被建立往往是一个正常现象，所以此选项建<br />
议设为y<br />
indexes：是否上载索引，缺省为n，这是指索引的定义而非数据，如果上载时索引已建立，此选项即使为<br />
n 也无效，imp 自动更新索引数据<br />
log：log 文件，缺省为无，在标准输出显示<br />
rows：是否上载表记录<br />
tables：输入的表名列表<br />
touser：指明目的用户方<br />
导入整个实例</div>
<div>imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y<br />
feedback=10000</div>
<div>导入某个用户所有对象</div>
<div>imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000<br />
commit=y ignore=y feedback=10000</div>
<div>导入一张或几张表</div>
<div>imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser<br />
touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000</div>
<div>以多个固定大小文件方式导入某张表</div>
<div>imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,&#8230;\) filesize=1000m tables=emp fromuser=dbuser<br />
touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000</div>
<div>&nbsp;</div>
<div><strong>Oracle 数据库的备份与恢复</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<p>oracle数据库有三种标准的备份方法,它们分别是导出／导入（exp/imp）.热备份与冷备份.导出备件是一种逻辑备份,冷备份与热备份是物理备份.
<p>利用export可将数据从数据库中提取出来,利用import则可将提取出来的数据送回到oracle数据库中去.<br />
一. 导出／导入（export／import）<br />
oracle支持三种方式类型的输出: <br />
１. 简单导出数据（export）与导入数据（import）
<p>&nbsp;（１）.表方式（t方式）,将指定表的数据导出.<br />
&nbsp;（２）.用户方式（u方式）,将指定用户的所有对象及数据导出.
<p>&nbsp;（３）.全库方式（full方式）,瘵数据库中的所有对象导出.
<p>
<p>数据导入（import）的过程是数据导出（export）的逆过程,分别将数据文件导入数据库与将数据库数据导出到数据文件.
<p>２. 增量导出／导入
<p>增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为system来导出.在进行此种导出时,系统不要求回答任何问题.导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名.
<p>增量导出包括三种类型:</p>
</div>
<div>（１）.&#8220;完全&#8221;增量导出（complete）exp system/manager inctype=complete file=040731.dmp</div>
<p>&nbsp;即备份三个数据库,比如:
<p>&nbsp;备份上一次备份后改变的数据,比如:
<p>&nbsp;（２）.&#8220;增量型&#8221;增量导出
<p>&nbsp;exp system/manager inctype=incremental file=040731.dmp
<p>&nbsp;（３）.&#8220;累积型&#8221;增量导出
<p>&nbsp;累计型导出方式是导出自上次&#8220;完全&#8221;导出之后数据库中变化了的信息.比如:
<p>&nbsp;exp system/manager inctype=cumulative file=040731.dmp
<p>&nbsp;数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成.
<p>&nbsp;比如数据库的被封任务可以做如下安排:
<p>
<p>&nbsp;星期一:完全备份（a）<br />
&nbsp;星期二:增量导出（b）
<p>&nbsp;星期三:增量导出（c）
<p>&nbsp;星期四:增量导出（d）
<p>&nbsp;星期五:累计导出（e）
<p>&nbsp;星期六:增量导出（f）
<p>&nbsp;星期日:增量导出（g）</p>
 <img src ="http://www.blogjava.net/duduli/aggbug/315302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2010-03-12 18:45 <a href="http://www.blogjava.net/duduli/archive/2010/03/12/315302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很久以前的一个错误</title><link>http://www.blogjava.net/duduli/archive/2009/10/31/300505.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 31 Oct 2009 11:22:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/10/31/300505.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/300505.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/10/31/300505.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/300505.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/300505.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: mysql中的脚本执行。&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/10/31/300505.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/300505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-10-31 19:22 <a href="http://www.blogjava.net/duduli/archive/2009/10/31/300505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql权限控制，建立用户</title><link>http://www.blogjava.net/duduli/archive/2009/10/31/300489.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 31 Oct 2009 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/10/31/300489.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/300489.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/10/31/300489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/300489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/300489.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 数据库对用户建立的相关操作。&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/10/31/300489.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/300489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-10-31 16:18 <a href="http://www.blogjava.net/duduli/archive/2009/10/31/300489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql中一些简单的对表结构进行的操作</title><link>http://www.blogjava.net/duduli/archive/2009/10/30/300404.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Fri, 30 Oct 2009 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/10/30/300404.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/300404.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/10/30/300404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/300404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/300404.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 数据库的基本alter操作。&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/10/30/300404.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/300404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-10-30 18:56 <a href="http://www.blogjava.net/duduli/archive/2009/10/30/300404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql中的一些常识</title><link>http://www.blogjava.net/duduli/archive/2009/10/29/300282.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Thu, 29 Oct 2009 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/10/29/300282.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/300282.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/10/29/300282.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/300282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/300282.html</trackback:ping><description><![CDATA[发现自己sql基础很不牢固，今天就体现出来了。<br />
通配符的问题：<br />
sql中用&#8220;_&#8221;代表一个字符，用&#8220;%&#8221;代表任意多个字符，<br />
但是如果想要查找一个带_或%的字符时，就得使用ESCAPE了，<br />
如：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #808080">like</span><span style="color: #000000">&nbsp;"</span><span style="color: #808080">%/</span><span style="color: #000000">_</span><span style="color: #808080">%</span><span style="color: #000000">"&nbsp;</span><span style="color: #0000ff">ESCAPE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">/</span><span style="color: #ff0000">'</span></div>
<br />
还有一个就是涉及到多表的update，及把A表中的一个字段，赋值到B表中去。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">UPDATE</span><span style="color: #000000">&nbsp;A&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;A.NAME</span><span style="color: #808080">=</span><span style="color: #000000">B.NAME&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;A,B&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;A.ID</span><span style="color: #808080">=</span><span style="color: #000000">B.ID</span></div>
<img src ="http://www.blogjava.net/duduli/aggbug/300282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-10-29 23:26 <a href="http://www.blogjava.net/duduli/archive/2009/10/29/300282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle的decode使用</title><link>http://www.blogjava.net/duduli/archive/2009/10/29/300259.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Thu, 29 Oct 2009 12:59:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/10/29/300259.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/300259.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/10/29/300259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/300259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/300259.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle的decode方法&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/10/29/300259.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/300259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-10-29 20:59 <a href="http://www.blogjava.net/duduli/archive/2009/10/29/300259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中将字典管理表空间转换为本地管理表空间</title><link>http://www.blogjava.net/duduli/archive/2009/08/01/289338.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 01 Aug 2009 00:12:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/08/01/289338.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/289338.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/08/01/289338.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/289338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/289338.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle表空间(字典管理和本地管理)之间进行转换的两种方法.&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/08/01/289338.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/289338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-08-01 08:12 <a href="http://www.blogjava.net/duduli/archive/2009/08/01/289338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中数据库数据块尺寸的定义</title><link>http://www.blogjava.net/duduli/archive/2009/07/02/285066.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Thu, 02 Jul 2009 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/07/02/285066.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/285066.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/07/02/285066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/285066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/285066.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle数据库数据块大小的选择&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/07/02/285066.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/285066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-07-02 09:29 <a href="http://www.blogjava.net/duduli/archive/2009/07/02/285066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>4种方法加强实体-关系模型中的数据库完整和业务规则</title><link>http://www.blogjava.net/duduli/archive/2009/07/01/284874.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Wed, 01 Jul 2009 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/07/01/284874.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/284874.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/07/01/284874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/284874.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/284874.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 加强实体-关系模型中的数据库完整和业务规则&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/07/01/284874.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/284874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-07-01 09:23 <a href="http://www.blogjava.net/duduli/archive/2009/07/01/284874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的面向对象数据库db4o</title><link>http://www.blogjava.net/duduli/archive/2009/06/09/280903.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Tue, 09 Jun 2009 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/06/09/280903.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/280903.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/06/09/280903.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/280903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/280903.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对象性数据库db4o。&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/06/09/280903.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/280903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-06-09 13:34 <a href="http://www.blogjava.net/duduli/archive/2009/06/09/280903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>书籍推荐《oracle 10g数据库管理艺术》</title><link>http://www.blogjava.net/duduli/archive/2009/05/20/271802.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Wed, 20 May 2009 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/05/20/271802.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/271802.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/05/20/271802.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/271802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/271802.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 书籍推荐《oracle 10g数据库管理艺术》&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/05/20/271802.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/271802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-05-20 21:29 <a href="http://www.blogjava.net/duduli/archive/2009/05/20/271802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>显示表结构oralce，mysql</title><link>http://www.blogjava.net/duduli/archive/2009/05/12/270170.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Tue, 12 May 2009 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/05/12/270170.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/270170.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/05/12/270170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/270170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/270170.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 数据库描述表结构的几种方法&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/05/12/270170.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/270170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-05-12 11:35 <a href="http://www.blogjava.net/duduli/archive/2009/05/12/270170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fedora 安装后磁盘空间不断减少以及oracle 10G安装出现的一些问题</title><link>http://www.blogjava.net/duduli/archive/2009/05/09/269826.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 09 May 2009 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/05/09/269826.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/269826.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/05/09/269826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/269826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/269826.html</trackback:ping><description><![CDATA[自己安装fedoea后剩下了5.8G的磁盘空间，<br />
最近空间不断减少，到现在只有1.4G了，到网络上查看原因，<br />
其中不少都是没用信息，都是tmp文件的问题。<br />
其实最主要的问题是自己开了更新，所以下载了很多更新包。<br />
只要你删除它就可以了，当然如果你的磁盘空间大的话，那就没必要了。<br />
切换到 /var/cache/yum目录下，然后使用rm * -fr命令把所在文件夹下的东西全部删除。<br />
<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
oracle 10G安装，<br />
下载了oracle XE 10G版本的rpm包。<br />
使用命令 rpm -ivh 进行安装，发现其依赖于一个libaio.0.3.96的rpm包。到网络上去找吧。<br />
http://rpm2html.osmirror.nl/white-box-linux/3.0/en/obsolete-updates/libaio-0.3.96-5.i386.html<br />
此处就可以下。<br />
先安装libaio的包，然后安装oracle包。<br />
oracle的安装不像在windows下，有东西可以看的，安装很快的。<br />
然后终端提示：<br />
You must run '/etc/init.d/oracle-xe configure' as the root user to <br />
configure the database.<br />
大家大概意思还是懂吧。<br />
学计算机的吗，那就执行吧。<br />
确认oracle http的port，监听端口，然后输入sys密码。再次输入（这里都不会显示的）。<br />
安装完成之后，提示是不是开启启动监听y是的N不是。<br />
ok打开，http://127.0.0.1:8080/apex 就可以连接数据库了。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/duduli/aggbug/269826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-05-09 22:14 <a href="http://www.blogjava.net/duduli/archive/2009/05/09/269826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate无主键表查询及数据库连接回顾</title><link>http://www.blogjava.net/duduli/archive/2009/04/10/264915.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Fri, 10 Apr 2009 11:51:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/04/10/264915.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/264915.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/04/10/264915.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/264915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/264915.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 还有什么好方法查询吗？&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/04/10/264915.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/264915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-04-10 19:51 <a href="http://www.blogjava.net/duduli/archive/2009/04/10/264915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>困扰了自己一天的问题居然这样简单</title><link>http://www.blogjava.net/duduli/archive/2009/03/28/262534.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Fri, 27 Mar 2009 16:44:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2009/03/28/262534.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/262534.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2009/03/28/262534.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/262534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/262534.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: hibernate报nested exception is org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update。居然是数据库中字段与sql关键字有关。&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2009/03/28/262534.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/262534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2009-03-28 00:44 <a href="http://www.blogjava.net/duduli/archive/2009/03/28/262534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql中数据并非乱码，而在command line client中乱码问题解决方法</title><link>http://www.blogjava.net/duduli/archive/2008/12/08/245036.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Mon, 08 Dec 2008 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2008/12/08/245036.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/245036.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2008/12/08/245036.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/245036.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/245036.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: mysql中数据并非乱码，而在command line client中乱码问题解决方法。&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2008/12/08/245036.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/245036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2008-12-08 15:25 <a href="http://www.blogjava.net/duduli/archive/2008/12/08/245036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql中各种join的笔记</title><link>http://www.blogjava.net/duduli/archive/2008/10/31/237892.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Fri, 31 Oct 2008 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2008/10/31/237892.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/237892.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2008/10/31/237892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/237892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/237892.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: sql join&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2008/10/31/237892.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/237892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2008-10-31 20:43 <a href="http://www.blogjava.net/duduli/archive/2008/10/31/237892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oralce, DB2 , sql server , mysql各数据库字段总结</title><link>http://www.blogjava.net/duduli/archive/2008/10/18/235158.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 18 Oct 2008 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2008/10/18/235158.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/235158.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2008/10/18/235158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/235158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/235158.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;Oralce                                    字段                                    注意事项                                                    Date            ...&nbsp;&nbsp;<a href='http://www.blogjava.net/duduli/archive/2008/10/18/235158.html'>阅读全文</a><img src ="http://www.blogjava.net/duduli/aggbug/235158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2008-10-18 13:58 <a href="http://www.blogjava.net/duduli/archive/2008/10/18/235158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中大数据存储问题</title><link>http://www.blogjava.net/duduli/archive/2008/09/13/228753.html</link><dc:creator>duduli</dc:creator><author>duduli</author><pubDate>Sat, 13 Sep 2008 10:01:00 GMT</pubDate><guid>http://www.blogjava.net/duduli/archive/2008/09/13/228753.html</guid><wfw:comment>http://www.blogjava.net/duduli/comments/228753.html</wfw:comment><comments>http://www.blogjava.net/duduli/archive/2008/09/13/228753.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/duduli/comments/commentRss/228753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/duduli/services/trackbacks/228753.html</trackback:ping><description><![CDATA[近日遇到了个很棘手的问题。<br />
题目是将文本文件录入数据库中。<br />
这个题目看似简单，其实很难的(对于我来说啦)。<br />
自己很少做关于文件操作的题目，所以感到有点困难。<br />
正如大家认为的那样，<br />
无非是为见读写以及数据库的操作罢了。<br />
可是大家有没有想过如果数据的字节大于4000怎么办？<br />
用varchar2类型的肯定不行。<br />
在网上查到关于大数据存储用clob类型的。<br />
我尝试着用clob类型的。<br />
但是clob类型该怎么使用呢？<br />
以前就从来没遇到过的。<br />
麻烦～～～<br />
现在卡在这了。<br />
下次做好。<br />
把源代码一起弄上来
<img src ="http://www.blogjava.net/duduli/aggbug/228753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/duduli/" target="_blank">duduli</a> 2008-09-13 18:01 <a href="http://www.blogjava.net/duduli/archive/2008/09/13/228753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>