事务级别:ON COMMIT DELETE ROWS
SESSION级别: ON COMMIT PRESERVE ROWS

返回临时表数据时要注意临时表定义的级别!

posted @ 2008-07-03 10:30 ypq 阅读(12) | 评论 (0)编辑
原来Oracle存储过程的的参数类型 中varchar不能指定具体长度

错误 :create or replace Procedure  SP_Test(Param1 varchar(200),Cur_Test sys_refCursor)

正确:create or replace Procedure  SP_Test(Param1 varchar,Cur_Test sys_refCursor)



posted @ 2008-07-02 10:20 ypq 阅读(42) | 评论 (0)编辑

var   a:variant;  
  begin  
                  a:=VarArrayCreate([0,2,0,2],varVariant);  
                  ShowMessage(inttostr(VarArrayDimCount(a)));  
                  VarArrayPut(a,'b',[1,1]);  
                  ShowMessage(String(VarArrayGet(a,[1,1])));  
  end;  
posted @ 2008-06-30 10:32 ypq 阅读(20) | 评论 (0)编辑

--行转列问题
--建立測試環境
Create Table TEST
(DATES Varchar(6),
 EMPNO Varchar(5),
 STYPE Varchar(1),
 AMOUNT Int)
--插入數據
Insert TEST Select '200605',  '02436',     'A',        5
Union All Select '200605',  '02436',     'B',        3
Union All Select '200605',  '02436',     'C',        3
Union All Select '200605',  '02436',     'D',        2
Union All Select '200605',  '02436',     'E',        9
Union All Select '200605',  '02436',     'F',        7
Union All Select '200605',  '02436',     'G',        6
Union All Select '200605',  '02438',     'A',        7
Union All Select '200605',  '02438',     'B',        8
Union All Select '200605',  '02438',     'C',        0
Union All Select '200605',  '02438',     'D',        3
Union All Select '200605',  '02438',     'E',        4
Union All Select '200605',  '02438',     'F',        5
Union All Select '200605',  '02438',     'G',        1
GO
--測試
--如果STYPE固定,可以這麼寫
Select
DATES,
EMPNO,
SUM(Case STYPE When 'A' Then AMOUNT Else 0 End) As A,
SUM(Case STYPE When 'B' Then AMOUNT Else 0 End) As B,
SUM(Case STYPE When 'C' Then AMOUNT Else 0 End) As C,
SUM(Case STYPE When 'D' Then AMOUNT Else 0 End) As D,
SUM(Case STYPE When 'E' Then AMOUNT Else 0 End) As E,
SUM(Case STYPE When 'F' Then AMOUNT Else 0 End) As F,
SUM(Case STYPE When 'G' Then AMOUNT Else 0 End) As G
From TEST
Group By DATES,EMPNO
Order By DATES,EMPNO

--如果STYPE不固定,用動態語句
Declare @S Varchar(1000)
Set @S=''
Select @S=@S+',SUM(Case STYPE When '''+STYPE+''' Then AMOUNT Else 0 End) As '+STYPE From (Select Distinct STYPE From TEST) A Order By STYPE
Set @S='Select DATES,EMPNO'+@S+' From TEST Group By DATES,EMPNO Order By DATES,EMPNO'
EXEC(@S)
GO
--如果被转置的是数字类型的话,应用下列语句
DECLARE @S VARCHAR(1000)
SET @S='SELECT DATES,EMPNO '
SELECT @S=@S+',['+STYPE+']=SUM(CASE WHEN STYPE='''+STYPE+''' THEN AMOUNT ELSE 0 END)'
FROM (Select Distinct STYPE From TEST) A Order By STYPE
SET @S=@S+' FROM TEST GROUP BY DATES,EMPNO'
EXEC(@S) 

如果是列转行的话直接Union All就可以了

例如 :

city style      color 46 48 50 52
长沙 S6MF01002   152  1  2  2 1
长沙 S6MF01002   201  1  2  2 1
上面到下面的样子
city   style          color size qty
长沙 S6MF01002       152    46  1
长沙 S6MF01002       152    48   2
长沙 S6MF01002       152    50   2
长沙 S6MF01002       152    52  1
长沙 S6MF01002       201    46  1
长沙 S6MF01002       201    48  2
长沙 S6MF01002       201    50  2
长沙 S6MF01002       201    52  1

Select City,Style,Color,[46] From Test
Union all
Select City,Style,Color,[48] From Test
Union all
Select City,Style,Color,[50] From Test
Union all
Select City,Style,Color,[52] From Test

posted @ 2008-05-26 17:35 ypq 阅读(67) | 评论 (0)编辑
一.在第一次安装的时候卡巴斯基会提示你全盘扫描,推荐执行一下.当然最好是在你睡觉的时候.只是会花点时间.初次使用无须任何改动,全盘扫描(一定要有耐心哦.呵呵)
二.设置: (在你升级完最新的病毒库后,重启一次后.我样接来的工作就是优化了)
A./保护/主动防御/ (这里是到卡巴斯基的设置中相应的位置,下面同理就不再描述了.)
  1.除"程序完整性保护"全部打勾 (程序完整性保护太占CPU拖慢机子)
  2."程序活动分析" 设置 除"运行IE浏览器参数"全部打勾
  3."启用注册表防护" 设置 全部打勾
  4."OFFICE防护" 设置 "操作"下"终止"打勾 (宏病毒一出现肯定要终止啦,不用提示操作!)

B./扫描/自定义/1."只扫描新建和改动的文件"打勾 (已全盘扫描过了,没有变化就没必要反复扫)
  2."如果扫描超过指定时间则跳过 修改成" 10"秒
  3."如果扫描对象大小超过指定大小则跳过 修改成"10M"

C.扫描/启动对象 "只扫描新建和改动的文件"打勾.不要勾选扫描压缩文件.另外如果大家有把下载软件设为启动的.比如jones.c当时设定了QQ旋风为跟系统自动启动.那么卡巴斯 就会扫描你qq旋风下载文件存放的那个软件文件夹.要是你下载了很多文件在里面..HO.那就不要怪人家慢啦.我是在这个上面吃了很多次亏.每次他都扫描,郁闷死我了..后面才想了这个方法搞定他. (加快启动速度)
D.扫描/关键区域
  不要修改 (安全第一)
E.扫描/我的电脑
  如B项设置 (前提是已经扫过一次"我的电脑")
F.服务/报告,隔离和备份
  1."删除报告在" 修改为"1"天后
  2."从隔离和备份中删除对象在" 修改为"1"天后
G.卡巴扫描界面中"当CPU使用过高时暂停扫描"勾子去掉

  最后还有一点..就是jones.c希望大家把更新的频率变低一些.比如一天一次.或两天一次..为什么这么做.第一卡巴期基在更新的时候会占用CPU.会变慢的哦...另外一个就是在前一段的时间里大也知道的..卡巴期基大量封杀key的事件..虽然也有解决方法但是这样总是不好...如果有一天都封了那我们大家也就没有免费大餐吃了是吧..

ok了..在上面一堆优化设置之后.我们就可以开始体验卡巴斯基给我们带来什么了..
posted @ 2008-05-23 20:17 ypq 阅读(10) | 评论 (0)编辑
冷备份
1、备份步骤:
冷备份具有很多优良特性,快速,方便,以及高效。一次完整的冷备份步骤是:

  1,首先关闭数据库(shutdown normal)

  2,拷贝相关文件到安全区域(利用操作系统命令拷贝数据库的所有的数据文件、日志文件、控制文件、参数文件、口令文件等(包括路径))

  3,重新启动数据库(startup)

  以上的步骤可以用一个脚本来完成操作:

su -oracle < sqlplus /nolog
connect / as sysdba
shutdown immediate;
!cp 文件 备份位置(所有的日志、数据、控制及参数文件);
startup;
exit;

2、恢复步骤:
恢复的时候,相对比较简单了,我停掉数据库,将文件拷贝回相应位置,重启数据库就可以了,当然也可以用脚本来完成。

热备份
1、备份步骤:
当需要做一个精度比较高的备份,而且我们的数据库不可能停掉(少许访问量)时,这个情况下,我们就需要归档方式下的备份,就是下面讨论的热备份。热备份可以非常精确的备份表空间级和用户级的数据,由于它是根据归档日志的时间轴来备份恢复的,理论上可以恢复到前一个操作,甚至就是前一秒的操作。具体步骤如下:

  1,通过视图v$database,查看数据库是否在Archive模式下:

SQL> select log_mode from v$database;

  如果不是Archive模式

  则设定数据库运行于归档模式下:SQL>shutdown immediate

SQL>startup mount
SQL> alter database archivelog;
SQL> alter database open;

  如果Automaticarchival显示为“Enabled”,则数据库归档方式为自动归档。否则需要手工归档,或者将归档方式修改为自动归档,如:
  正常shutdown数据库,在参数文件中init.ora中加入如下参数

SQL>shutdown immediate

  修改init.ora:

LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(归档日值存放位置可以自己定义)
SQL>startup

  然后,重新启动数据库,此时Oracle数据库将以自动归档的方式工作在Archive模式下。其中参数LOG_ARCHIVE_DEST1是指定的归档日志文件的路径,建议与Oracle数据库文件存在不同的硬盘,一方面减少磁盘I/O竞争,另外一方面也可以避免数据库文件所在硬盘毁坏之后的文件丢失。归档路径也可以直接指定为磁带等其它物理存储设备,但可能要考虑读写速度、可写条件和性能等因素。

  注意:当数据库处在ARCHIVE模式下时,一定要保证指定的归档路径可写,否则数据库就会挂起,直到能够归档所有归档信息后才可以使用。另外,为创建一个有效的备份,当数据库在创建时,必须履行一个全数据库的冷备份,就是说数据库需要运行在归档方式,然后正常关闭数据库,备份所有的数据库组成文件。这一备份是整个备份的基础,因为该备份提供了一个所有数据库文件的拷贝。(体现了冷备份与热备份的合作关系,以及强大的能力)

  2,备份表空间文件:

a,首先,修改表空间文件为备份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;

b,然后,拷贝表空间文件到安全区域 !CP tablespace_name D_PATH;

c,最后,将表空间的备份模式关闭 ALTER TABLESPACE tablespace_name END BACKUP;

  3,对归档日志文件的备份:

停止归档进程-->备份归档日志文件-->启动归档进程

如果日志文档比较多,我们将它们写入一个文件成为一个恢复的参考:$ files `ls <归档文件路径>/arch*.dbf`;export files

  4,备份控制文件:

SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;

  当然,我们也可以将上面的东东写为一个脚本,在需要的时候执行就可以了:

  脚本范例:

su -oracle < sqlplus /nolog
connect / as sysdba
ALTER TABLESPACE tablespace_name BEGIN BACKUP

!CP tablespace_name D_PATH

ALTER TABLESPACE tablespace_name END BACKUP

alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;

!files `ls <归档文件路径>/arch*.dbf`;export files

2、恢复步骤:
  热备份的恢复,对于归档方式数据库的恢复要求不但有有效的日志备份还要求有一个在归档方式下作的有效的全库备份。归档备份在理论上可以无数据丢失,但是对于硬件以及操作人员的要求都比较高。在我们使用归档方式备份的时候,全库物理备份也是非常重要的。归档方式下数据库的恢复要求从全备份到失败点所有的日志都要完好无缺。

恢复步骤:LOG_ARCHIVE_DEST_1
shutdown数据库。
将全备份的数据文件放到原来系统的目录中。
将全备份到失败点的所有归档日志放到参数LOG_ARCHIVE_DEST_1所指定的位置。
利用sqlplus登陆到空实例。(connect / as sysdba)
然后 startup mount
set autorecovery on
recover database;
alter database open;

这样,热恢复就算完工。

Windows平台的oracle备份(Veritas BE)
通过Backup Exec实施Oracle灾难恢复很简单。

1、需要的数据:
1、FULL CLOSED备份

shutdown数据库(不要用shutdown abort强行关闭),实施一个文件级备份,备份全部的Oracle相关文件,包括Windows系统文件,系统状态和Oracle程序文件和数据文件等内容。

这个冷备份对于快速恢复Oracle数据库系统非常关键,如果没有它,系统被破坏后只能重新安装再恢复,这要比直接恢复冷备份慢得多,也更复杂。

每当数据库或表单的物理结构或逻辑结构有变化时都应该重新创建这个冷备份。

2. FULL ONLINE备份

这个备份要通过Backup Exec Agent for Oracle Server来完成,要备份全部表空间,归档日志和控制文件,通过这种方式备份,Oracle会将所有缓存内容写入文件,将online redo log做归档,所以数据库备份中包含的是备份时数据库的即时点信息,完整而且有效。以后做恢复时,可以恢复到最后一次FULL ONLINE备份的状态。

2、恢复过程:
1. 重新安装Windows系统和Remote Agent for Windows Server,为恢复Oracle服务器准备环境。

2. 恢复最后一次FULL CLOSED备份,重新启动计算机。

此时Windows系统,Oracle数据库系统都是完整的,只是Oracle数据库中可能不是最新的数据。Backup Exec Agent for Oracle Server也不用重新安装了。

3. 用SQLPlus用SYS以sysdba身份连接到数据库系统,关闭数据库。

shutdown immediate + < enter >

4. 通过介质服务器恢复最新的FULL ONLINE备份,恢复作业属性的高级选项中,确保选中了“Restore over Existing files(覆盖现存文件)” 选项。

要想成功的恢复数据库,在最后一次FULL CLOSED备份之后的所有redo log必须都已经成功归档并备份。少了哪一个,数据库就无法恢复到最后的FULL ONLI NE备份时的状态。

通过Oracle的alert log可以看到数据库的恢复需要哪些归档日志,以及你应该把它们恢复到什么位置。

5. 恢复完成后,用SYS用户以sysdba身份连接到数据库,将数据库加载到mount阶段:

startup mount + < enter >

6. 数据库mount完成后,执行recover过程:

recover database using backup controlfile + < enter >

数据库会提示你需要哪些日志:

ORA-00279: Change 36579 generated at needed for thread 1

ORA-00289: Suggestion : \Oracle_Home\Oradata\\%SID%T00036579.ARC

ORA-00280: {=Suggested | filename | AUTO | FROM logsource | CANCEL}

最简单的方法是选自动恢复:

auto + < enter >

系统会在init.ora文件中定义的位置上查找所有必需的日志并依次应用它们,最后一个要应用的日志是online redo log,实际上它并不包括任何的transaction,只有一个SCN,可以略过,但是自动恢复过程会因为找不到相应的文件而报错:

ORA-00308: cannot open archived log

E:\ORACLE\ORADATA\KIMSTAD\ARCHIVE\KIMSTADT00036949.ARC'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) The system cannot find the file specified.

为此输入以下命令(until cancel参数使我们可以在需要的时候中止恢复过程):

recover database until cancel using backup controlfile +

这样在数据库恢复的最后阶段再次提示前面的错误时,我们就可以中止恢复过程:

cancel + < enter >

这时除了最后一个online redo log以外,所有的commit transaction都已经提交到数据库之中了,完成后会显示:

Media recovery canceled

实际上恢复过程已经正常完成了。

最后是打开数据库并同步日志序列号:

alter database open resetlogs + < enter >

至此,Oracle数据库被成功恢复到最后一次Full Online备份。

说明:Oracle 8i可以用internal账号完成DBA操作。9i取消了internal账号,SYS账号代替它了。为了以DBA身份登录,启动SQL Plus时应该加nolog参数,进入之后再登录,connect username/password as sysdba。



例子:(网上原资料)
1. 用Oracle的热备份重建数据库
为了检验我为公司开发的Oracle数据库在线自动备份系统,我根据“Oracle数据库在线自动备份系统”产生的备份文件来重建和恢复Oracle数据库。为了让大家共享其方法和步骤(也适合于用其它方式对Oracle做的热备份进行重建数据库)现整理如下。

一、系统环境

本次测试所使用的系统环境如下:

1. 硬件环境

服务器:Dell PowerEdge 1300 (CPU:PⅢ 550MHz 内存:128MB 硬盘:36GB)

2. 软件环境

操作系统:UnixWare 7.1

数据库: Oracle 8.1.6 for Unix 企业版,SID:ora816

Oracle安装路径:/home/oracle

备份文件:所有数据库文件、控制文件、初始化文件、数据库备份以来的所有归档日志文件。

二、恢复步骤

下面根据从用户处带回来的备份数据,在一台新的服务器重建Oracle数据库。其详细步骤如下:

1. 创建数据库恢复使用的环境

在新的Dell服务器上,安装与原来的数据库服务器相同的操作系统UnixWare 7.1;然后安装与原数据库相同版本的Oracle 8.1.6 for Unix 企业版。

2. 删除新服务器上的Oracle实例

启动新数据库服务器上的Oracle,在sqlplus中,查找到数据库文件的路径,并保存在当前路径下的文件file_name.txt中:

$ sqlplus system/manager

SQL> spool file_name.txt

SQL> select file_name from sys.dba_data_files;

SQL> spool end

SQL>exit

关闭新服务器的Oracle,然后根据文件file_name.txt中的路径,删除新装的Oracle实例的所有数据库文件。

注:从本步开始所有操作都是用Oracle用户登录操作系统(Unix)后进行。文中所有的黑色粗体5号字符(标题除外)的语句可以直接执行,黑色倾斜粗体5号字符的语句需要修改后执行。

3. 恢复数据库文件

把备份的所有数据库文件用Ftp上传新的数据库服务器中的相同路径下。如果原来的路径已不存在,可以拷贝到其他路径下,恢复时详细处理方法见步骤7中<2>。

4. 恢复初始化参数文件

把备份的initSID.ora文件用Ftp上传到新数据库服务器中Oracle实例的initSID.ora文件位置,覆盖之。其位置一般在$ORACLE_HOME/dbs目录下。

5. 恢复控制文件

把备份的ControlFile.bak文件用Ftp上传到新数据库服务器中Oracle实例的各个镜像路径下,并按初始化参数文件initSID.ora中的该项的位置和名称命名。

control_files = ("/home/oracle/app/oracle/oradata/ora816/control01.ctl", "/home/oracle/app/oracle/oradata/ora816/control02.ctl","/home/oracle/app/oracle/oradata/ora816/control03.ctl")

其路径如有变动,在初始化参数文件initSID.ora中修改如上内容的路径和名称,使其实际路径与该参数的路径一致。

6. 恢复归档日志文件

把数据库备份后的归档日志用Ftp上传到新数据库服务器的相同路径下。路径如有变动可以根据初始化参数文件initSID.ora中如下位置进行修改,使其实际路径与该参数的路径一致。

log_archive_dest_1 = "location=/home/oracle/app/oracle/admin/ora816/arch"



7. 恢复数据库

经过以上6个步骤,把所有的备份文件已经上传到了新数据库服务器中。下面开始根据这些文件恢复并启动数据库,先在操作系统的提示符下做如下操作:

$svrmgrl

SVRMGR>connect internal

SVRMGR>startup mount

<1> 创建口令文件

如果原来的数据库配置了口令文件,并且在mount数据库时报如下错误:

ORA-01990: error opening password file '/home/oracle/app/oracle/product/8.1.6/dbs/orapw'

可以到/home/oracle/app/oracle/product/8.1.6/dbs/路径下,用以下命令创建口令文件:

orapwd

其用法如下:

Usage: orapwd file= password= entries=

where

file - name of password file (mand),(口令文件的命名方式为:orapwSID)

password - password for SYS and INTERNAL (mand),

entries - maximum number of distinct DBA and OPERs (opt),

There are no spaces around the equal-to (=) character.

例如: orapwd file=orapwora816 password=manager

然后重新执行如下语句mount数据库:

SVRMGR>startup mount。

<2> 修改数据库文件的路径

如果在上述的步骤3中修改了恢复的数据库文件的路径,可以用如下语句对数据库文件重新命名 :

alter database rename file 'old_file' to 'new_file';

如把原来路径/home/oracle/app/oracle/oradata/ora816下的文件system01.dbf改到了/u21/oracle/app/oracle/oradata/ora816下:

SVRMGR>alter database rename file

'/home/oracle/app/oracle/oradata/ora816/system01.dbf'

to '/u21/oracle/app/oracle/oradata/ora816/system01.dbf';

按照上面的方法把所有修改路径的数据库文件重新命名。

<3> 根据控制文件和归档日志文件恢复数据库

下面开始用控制文件和归档日志文件恢复数据库:

SVRMGR>recover database using backup controlfile until cancel;

出现如下提示:

ORA-00279: change 50971 generated at 08/23/2002 09:21:27 needed for thread 1

ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_399.arc

ORA-00280: change 50971 for thread 1 is in sequence #399

Specify log: {=suggested | filename | AUTO | CANCEL}输入:

auto

如果有如下提示,则表示成功。

ORA-00279: change 51007 generated at 08/23/2002 11:23:13 needed for thread 1

ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_400.arc

ORA-00280: change 51007 for thread 1 is in sequence #400

ORA-00278: log file '/home/oracle/app/oracle/admin/ora8/arch/arch_1_399.arc' noy

Log applied.

意外处理:如果其它提示可能是需要的日志文件不存在,检查ORA-00289中该文件是否存在。

直到出现如下提示:

ORA-00279: change 51011 generated at 08/23/2002 11:23:45 needed for thread 1

ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_401.arc

ORA-00280: change 51011 for thread 1 is in sequence #401

ORA-00278: log file '/home/oracle/app/oracle/admin/ora8/arch/arch_1_400.arc' noy

ORA-00308: cannot open archived log '/home/oracle/app/oracle/admin/ora8/arch

/arch_1_401.arc'

ORA-27037: unable to obtain file status

Intel SVR4 UNIX Error: 2: No such file or directory

Additional information: 3

<4> 重置日志

SVRMGR>alter database open resetlogs;

意外处理:如果提示创建日志的路径不存在,按提示路径创建目录。然后再重置日志。

<5> 重启数据库,完成恢复

SVRMGR>shutdown immediate

SVRMGR>startup

ORACLE instance started.

Total System Global Area 123437040 bytes

Fixed Size 69616 bytes

Variable Size 106418176 bytes

Database Buffers 16777216 bytes

Redo Buffers 172032 bytes

Database mounted.

Database opened.

数据库正常打开,数据库重建恢复成功。



2. Oracle9i RMAN 备份及恢复步骤


在这里没有讨论多么深入的RMAN技术,也没有告诉大家这样去编写备份脚本,这并不是我的初衷,我只想把我会的写出来,和大家一起学习,一起进步,谢谢。

1、切换服务器归档模式,如果已经是归档模式可跳过此步:
%sqlplus /nolog (启动sqlplus)
SQL> conn / as sysdba (以DBA身份连接数据库)
SQL> shutdown immediate; (立即关闭数据库)
SQL> startup mount (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)
SQL> exit (退出)

2、连接:
%rman target=rman/rman@mydb (启动恢复管理器)

3、基本设置:
RMAN> configure default device type to disk; (设置默认的备份设备为磁盘)
RMAN> configure device type disk parallelism 2; (设置备份的并行级别,通道数)
RMAN> configure channel 1 device type disk fromat '/backup1/backup_%U'; (设置备份的文件格式,只适用于磁盘设备)
RMAN> configure channel 2 device type disk fromat '/backup2/backup_%U'; (设置备份的文件格式,只适用于磁盘设备)
RMAN> configure controlfile autobackup on; (打开控制文件与服务器参数文件的自动备份)
RMAN> configure controlfile autobackup format for device type disk to '/backup1/ctl_%F'; (设置控制文件与服务器参数文件自动备份的文件格式)

4、查看所有设置:
RMAN> show all

5、查看数据库方案报表:
RMAN> report schema;

6、备份全库:
RMAN> backup database plus archivelog delete input; (备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志)

7、备份表空间:
RMAN> backup tablespace system plus archivelog delete input; (备份指定表空间及归档的重做日志,并删除旧的归档日志)

8、备份归档日志:
RMAN> backup archivelog all delete input;

9、复制数据文件:
RMAN> copy datafile 1 to '/oracle/dbs/system.copy';

10、查看备份和文件复本:
RMAN> list backup;

11、验证备份:
RMAN> validate backupset 3;

12、从自动备份中恢复服务器参数文件:
RMAN> shutdown immediate; (立即关闭数据库)
RMAN> startup nomount; (启动实例)
RMAN> restore spfile to pfile '/backup1/mydb.ora' from autobackup; (从自动备份中恢复服务器参数文件)

13、从自动备份中恢复控制文件:
RMAN> shutdown immediate; (立即关闭数据库)
RMAN> startup nomount; (启动实例)
RMAN> restore controlfile to '/backup1' from autobackup; (从自动备份中恢复控制文件)

13、恢复和复原全数据库:
RMAN> shutdown immediate; (立即关闭数据库)
RMAN> exit (退出)
%mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak (将数据文件重命名)
%mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak (将数据文件重命名)
%mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak (将数据文件重命名)
%mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak (将数据文件重命名)
%rman target=rman/rman@mydb (启动恢复管理器)
RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydb.ora (指定初始化参数文件启动数据库)
RMAN> restore database; (还原数据库)
RMAN> recover database; (恢复数据库)
RMAN> alter database open; (打开数据库)

14、恢复和复原表空间:
RMAN> sql 'alter tablespace users offline immediate'; (将表空间脱机)
RMAN> exit (退出恢复管理器)
%mv /oracle/dbs/users01.dbf /oracle/dbs/users01.bak (将表空间重命名)
%rman target=rman/rman@mydb (启动恢复管理器)
RMAN> restore tablespace users; (还原表空间)
RMAN> recover tablespace users; (恢复表空间)
RMAN> sql 'alter tablespace users online'; (将表空间联机)

15、增量备份与恢复:
第一天的增量基本备份:
RMAN> backup incremental level=0 database plus archivelog delete input;
第二天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第三天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第四天的增量差异备份:
RMAN> backup incremental level=1 database plus archivelog delete input;
第五天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第六天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第七天的增量差异备份:
RMAN> backup incremental level=0 database plus archivelog delete input;

增量恢复:
RMAN> shutdown immediate;
RMAN> exit
%mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak
%mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak
%mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak
%mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak
%rman target=rman/rman@mydb
RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydb.ora
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
posted @ 2008-05-19 11:01 ypq 阅读(25) | 评论 (0)编辑
如果你已经有较多的面向对象开发经验,跳过以下这两步:
  第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET。 ASP.NET是一个全面向对象的技术,不懂OO,那绝对学不下去!
  第二步 对.NET Framework类库有一定的了解 可以通过开发Windows Form应用程序来学习.NET Framework。ASP.NET是建构在.NET Framework之上的技术,你对.NET Framework了解得越深,学习ASP.NET就越快。 举个例子:下面简单列出几个对掌握ASP.NET非常重要的概念: 对象的内存模型,委托,事件,多线程,程序集和应用程序域,安全模型 .NET Framework当然还有许多其它的东西,但不理解与把握清楚上述这些东西,是很难真正把握ASP.NET的。 出于急迫的心情与现实的考虑,不少人没有扎实的面向对象基础就想直接学习ASP.NET,其结果只能是欲速则不达。 在具备了OO基础之后,以下是具体的学习ASP.NET技术步骤。
  第一步:学习HTML与CSS
  这并不需要去学一大堆的诸如Dreamweaver,Firework之类的各种网页设计工具,关键是理解HTML网页嵌套的block结构与CSS的box模型。许多ASP.NET控件最后都必须转化为HTML。而且,div+CSS是当前主流的网页布局模型。 学习这部分时,关键在于理解概念,而不需要将精力花在美化页面的许多技巧上,那是网站美工的工作,不是程序员的工作。
  第二步:学习JavaScript
  JavaScript不是Java,它主要运行于浏览器端。可以完成许多工作,功能也很强大:比如它将客户端网页中的HTML元素看成一棵树,可以编写代码访问并修改树节点,动态生成新的HTML代码,从而达到动态修改网页显示特性的目的。
  JavaScript在目前的网站开发中用得很多,非常重要。
  另外,它也是目前非常流行的AJAX技术的基础。
  第三步:学习计算机网络原理
  找一本大学<计算机网络>教材,重点看看它的有关互联网的部分,了解一些域名解析和HTTP协议等知识。这是进行互联网开发的理论基础。
  第四步:学习ASP.NET表示层技术,会设计Web页面
  需要结合先前打好的面向对象技术的基础,至少掌握以下内容:
  (1) 各种Web控件的使用方法,
  (2) 理解信息在网页中的传送方式,比如Cookie,ViewState,Session等的使用。
  (3) ASP.NET应用程序与网页的生命周期,以及相关对象(比如httpcontext,response,request)的用途。
  (4) ASP.NET实现事件驱动的内幕
  (5) 自定义用户控件
  再次强调一下,没有OO基础,很难掌握上述技术,就只能被这些东东牵着鼻子走了,会很被动。
  第五步 掌握数据库技术
  具体地说,要学习以下内容:
  (1) 学会使用SQL Server 2005:不要求精通它的各种工具与管理配置技术,但至少知道如何连接,如何建表,如何创建存储过程
  (2) 学习ADO.NET,掌握使用代码人工访问数据库(别用VS2005的向导)的方法
  (3) 学习数据绑定控件的使用
  第六步 理解多层架构
  这时,先前在OO学习阶段涉及到的程序集与应用程序域等就派上用场了,现在,网站架构大多采用多层架构:表示层、业务逻辑层、数据存取层以及数据库本身。
  可以先上网找一此多层架构的资料看,再找一个现成的比较复杂的开源ASP.NET项目分析一下其架构就差不多了。基本上都是一个套路,到处应用。
  有的朋友问:学习架构是不是必须学习设计模式。
  我的看法是:不必!当然,你如果学习过设计模式,那当然更好。但在实际开发中,如果只想着机械地套用某种模式,反而起不到好的结果。我的观点:在学习设计模式时要多思多悟,其思想就会渐渐地融入你的大脑,在真实的设计实践中,忘掉所有的写在书上的模式,一切从实际出发,相信你的直觉,只要达到设计要求的方案就是可行的方案,事实上,你这样做了之后,回过头来再看,会发现你的设计往往暗合设计模式的理论。
  第七步 学习XML与Web Service
  先了解XML的基础知识,找本讲XML的书看一下就差不多了,然后,再学习Web Service。Web Service其实可类比为远程方法调用(以XML格式表达的调用信息)。
  学 到了这里,如果你还有兴趣,不妨再去看看SOA,不过SOA的资料都是理论与概念,看起来比较郁闷,而且离实际开发可能比较远。所以,这是可选项。
  第八步 学习AJAX
  学习AJAX的主要目的是创建具有更丰富特性的Web表示层,而经过前面七步的学习,到此再学习AJAX已水到渠成,所有的基础都已具备,不会有太大的问题了。
  在基础未具备的前提下直接学AJAX,就象“浮沙之上筑高台”,所以,将AJAX的学习次序安排在这里。
  第九步 学习RIA技术
  RIA:Rich internet application,可看成是将C/S与B/S优点合二为一的尝试。就具体技术来说,主要指微软的Silverlight(WPF_E),毕竟前头一路行来都是微软路线。
  不过目前学习它主要是为了技术储备。估计此技术的普及需要2到3年的时间,因为预装Vista的机器今年才开始大卖。
posted @ 2008-05-14 08:37 ypq 阅读(20) | 评论 (0)编辑
sqlserver数据导入oracle时发现字符长度不对。。

下面是两个函数的区别:

DATALENGTH 返回任何表达式所占用的字节数。
LEN 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格
posted @ 2008-05-02 15:27 ypq 阅读(28) | 评论 (0)编辑

做反向解析(PTR):
在垃圾邮件泛滥的今天,垃圾邮件给我们的生活、工作、学习带来了极大的危害。由于SMTP服务器之间缺乏有效的发送认证机制,即使采用了垃圾邮件识别阻拦技术效果仍旧一般,再者垃圾邮件识别阻拦技术主要是在收到信件后根据一定条件进行识别的,需要耗费大量服务器资源,如果能在信件到达服务器之前就采取一定手段,这样就能大大提高服务器效率了。因此,目前许多邮件服务器如sina.com,hotmail.com,yahoo.com.cn等等都采用了垃圾邮件识别阻拦技术+IP反向解析验证技术以更好的阻拦垃圾邮件。
我们先来了解一下什么是IP反向解析。其实作过DNS服务器的朋友一定会知道DNS服务器里有两个区域,即“正向查找区域”和“反向查找区域”,反向查找区域即是这里所说的IP反向解析,它的作用就是通过查询IP地址的PTR记录来得到该IP地址指向的域名,当然,要成功得到域名就必需要有该IP地址的PTR记录。
那么IP反向解析是怎么被应用到邮件服务器中来阻拦垃圾邮件的呢?我们来看看下面一个例子:
某天,阿Q到A公司拜访,他递上一张名片,名片上写着他来自“黑道杀人俱乐部”以及电话号码等信息,A公司觉得应该对阿Q的来历做个简单调查,于是打电话到阿Q名片上的电话号码所属电信局进行查实,如果电信局告诉A公司其电话号码不属于“黑道杀人俱乐部”,则A公司将拒绝阿Q的拜访,如果其电话号码的确属于“黑道杀人俱乐部”,A公司可能接受阿Q的拜访也可能进一步查实,于是就打电话到“黑道杀人俱乐部”所属注册机构查询,如果得到的答复确认该俱乐部确有此电话号码,则A公司将接受阿Q的拜访,否则仍将拒绝阿Q的拜访。
这个例子中,阿Q好比是我们的邮件服务器,A公司是对方邮件服务器,“黑道杀人俱乐部”就是我们邮件服务器与对方邮件服务器通信时所使用的HELO域名(不是邮件地址@后的域名),名片上的电话号码就是我们邮件服务器出口的公网IP地址。A公司对阿Q进行调查的过程就相当于一个反向解析验证过程。由此看出,反向解析验证其实是对方服务器在进行的,如果我们没有做反向解析,那么对方服务器的反向解析验证就会失败,这样对方服务器就会以我们是不明发送方而拒收我们发往的邮件,这也就是我们排除其它原因后(如被对方列入黑名单、没有MX记录、使用的是动态IP地址等等)在没做反向解析时无法向sina.com、homail.com发信的原因。
那么我们应当如何顺利做好反向解析?首先要有固定公网IP地址、可用域名(最好不要被其它服务所用),例如您有lunch-time.com的域名,您可以要求您的域名注册商为您添加一个okmail.lunch-time.com的域名  并将其A记录指向您的SMTP服务器出口公网IP地址,如:220.112.20.18,接着请与您的固定IP所属ISP联系要求为您的IP反向解析至okmail.lunch-time.com。完成后别忘了将您的SMTP服务器的HELO域名改为okmail.lunch-time.com,这样才可以达到目的。
另:
1、做好反向解析后发往sina.com的信件有可能会被转至“不明邮件夹”中,此时请您与sina.com联系,要求为您解决该问题。
2、查看反向解析是否成功,可用如下命令:nslookup –qt=ptr yourIP,从返回的信息中您可以看到反向解析的结果。
3、一定要有固定公网IP地址以及真实可用域名。同时要注意反向解析的域名的A记录一定要指向该IP!
4、对于有多个固定公网IP地址的,只要做主要出口IP的反向解析即可,不管您有多少SMTP服务器,只要是通过该IP连接至外网就将这些SMTP服务器的HELO域名改成IP反向解析之域名即可。(和这些SMTP服务器上的地址域是无关的)

 

附:
反向解析不管域名注册商的事。
反向解析只在收邮件时才会用到(发邮件时不用)

比如你在万网注册域名。www.sunwen.net。然后做了一个mx指向某个邮件服务器222.222.222.222。这个叫正向解析。

什 么叫反向解析呢。比如你用 xxx@sunwen.net 这个邮箱给我的邮箱 123@163.com 发了一封信。 163邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个IP地址发出来的。然后根据这个IP地址进行反向解析,如果反 向解析到这个IP所对应的域名是sunwen.net。那么就接受这封邮件。如果反向解析发现这个IP没有对应到sunwen.net,那么就拒绝这封邮 件。


如果不设置DNS反向解析将无法向sina等邮箱发送邮件而且发至yahoo,hotmail等的邮件虽然不会被退回但是可能会被直接送至垃圾邮件箱!      

假设服务器IP是211.147.9.106 1) 首先您要知道这个IP的反向域名解析是由哪台DNS服务器负责的。
您可以用这个网页查询反向域名解析信息 http://www.dnsstuff.com/tools/ptr.ch?ip=211.147.9.106

(把这个ip地址换成你自己的ip地址之后直接粘贴至ie地址栏即可)看最后一段
Details: ns.cnc.ac.cn.(an authoritative nameserver for 147.211.in-addr.arpa.,
which is in charge of the reverse DNS for 211.147.9.106) says that there are no PTR records for 211.147.9.106.
To get reverse DNS set up for 211.147.9.106, you need to speak to your Internet provider.
You could also check with sun@cnnic.cn., who is in charge of the 147.211.in-addr.arpa. zone.

大概意思是您需要跟ns.cnc.ac.cn联系,ns.cnc.ac.cn负责211.147.9.106的反向域名解析。 2) 然后您可以要求您的IP提供商,也就是您的主机托管商,如果你的企业用户有固定IP,你应该找电信。要他们跟ns.cnc.ac.cn联系,给您的这个 IP加上反向域名解析记录,一般将这个IP反向解析成您的邮件服务器对应的mx记录。


PS:
什么叫反向解析呢。比如你用 xxx@31896.net 这个邮箱给我的邮箱 123@163.com 发了一封信。 163邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个IP地址发出来的。然后根据这个IP地址进行反向解析,如果反 向解析到这个IP所对应的域名是31896.net。那么就接受这封邮件。如果反向解析发现这个IP没有对应到31896.net,那么就拒绝这封邮件。 也许说到这里你还不是很明白。
你用过foxmail的特快专递没有?比如你在你的电脑中设置好foxmail的特快专递。注意,foxmail的特快专递是不需要设置smtp服务器的。因为这个时候是用你自己的电脑做smtp服务器。那么你用你自己的电脑,并以 xxx@31896.net的名义给我的邮箱 123@163.com 发了一封信。很显然,这封信的信头显示的IP地址是你电脑的IP地址。那么163的邮件服务器反向解析这个IP。当然你的电脑的IP没有对应到 31896.net。那么163邮件服务器就认为这是一封垃圾邮件并拒收。


如果你做自己建立过Exchange服务器就会知道,完成之后默认情况下可以给163,yahoo之类发邮件。但是发邮件给Sina就不行,这是你联系一 下sina的postmaster,他就会邮件提示告诉你,因为你的邮件服务器没有做反向解析~~~所以邮件在sina服务器无法通过验证。

posted @ 2008-04-21 13:50 ypq 阅读(45) | 评论 (0)编辑

域名”A记录,MX记录,CNAME记录,TTL值,URL转发”解释
大家在注册和使用域名的时候都有下面对域名所有的记录存在过疑问罢?
什么是A记录?什么是MX记录?CNAME记录又是什么?它们都有些什么用途?
好,下面就用我浅陋经验给大家介绍一下:
1,A记录:WEB服务器的IP指向
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。
   说明:用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置自己域名的二级域名。
   就是说:通过A记录,大家可以设置自己的不同域名转到不同的IP上去!如:
   将
   www.cnMonkey.com转到IP 321.32.321.321
   ftp.cnMonkey.com 转到IP 123.12.123.123
   mail.cnMonkeye.com 转到IP 213.21.213.2132,MX记录(Mail Exchange):邮件路由记录
   说明:用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操作控制所有的邮箱设置。您只需在线填写您服务器的主机名或主机IP地址,即可将您域名下的邮件全部转到您自己设定相应的邮件服务器上。
这个大家都明白了吗?就是将你的域名中邮件服务器分开,将它设置到其它的IP去!
比 如同样是 cnMonkey.com ,如果你设置A记录是指向123.12.123.123,而MX记录你设置是指向222.22.222.222,那么你的DNS服务器接收到别人的邮件路 由请求时就将会将它的请求解释到222.22.222.222上去!而别人访问你的网页的时候仍然是访问123.12.123.123。
3,CNAME (Canonical Name)记录,(alias from one domain name to another)通常称别名指向
这是个挺好用记录,它可以将你注册的不同域名统统转到一个主域名上去!与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址!有什么好处?大家想想就知道!
4,URL (Uniform Resource Locator )转发:网址转发
功 能:如果您没有一台独立的服务器(也就是没有一个独立的IP地址)或者您还有一个域名B,您想访问A域名时访问到B域名的内容,这时您就可以通过URL转 发来实现。url转发可以转发到某一个目录下,甚至某一个文件上。而cname是不可以,这就是url转发和cname的主要区别所在
 域名A记录:    A(Address)记录是域名与IP对应的记录。
 域名别名记录:别名(CName,Canonical Name)记录,是域名与域名的别名对应的记录。
 动态域名解析:A记录中域名对应的IP是静态IP,把域名解析到动态IP上,就叫动态域名解析。
                   域名服务商一般只免费提供A记录,不免费提供 动态域名解析。
什么是域名解析?
域名解析就是域名到IP地址的转换过程。IP地址是网路上标识您的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址。域名的解析工作由DNS服务器完成。
什么是A记录?
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的二级域名。
什么是MX记录?
路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。您只需在线填写您服务器的IP地址,即可将您域名下的邮件全部转到您自己设定相应的邮件服务器上。
什么是CNAME记录?
即: 别名记录。这种记录允许您将多个名字映射到同一台计算机。 通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.cnMonkey.com”(A记录)。 它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。 这两个别名的全称就是和“mail.cnMonkey.com”。实际上他们都指向“host.cnMonkey.com”。
什么是TTL值?
TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。要理解TTL值,请先看下面的一个例子:
假 设,有这样一个域名myhost.cnMonkey.com(其实,这就是一条DNS记录,通常表示在abc.com域中有一台名为myhost的主机)对应IP地 址为1.1.1.1,它的TTL为10分钟。这个域名或称这条记录存储在一台名为dns.cnMonkey.com的DNS服务器上。
现在有一个用户键入一下地址(又称URL):http://myhost.cnMonkey.com 这时会发生什么呢?
该 访问者指定的DNS服务器(或是他的ISP,互联网服务商, 动态分配给他的)8.8.8.8就会试图为他解释myhost.cnMonkey.com,当然8.8.8.8这台DNS服务器由于没有包含 myhost.cnMonkey.com这条信息,因此无法立即解析,但是通过全球DNS的递归查询后,最终定位到dns.cnMonkey.com这台DNS服务器, dns.cnMonkey.com这台DNS服务器将myhost.cnMonkey.com对应的IP地址1.1.1.1告诉8.8.8.8这台DNS服务器,然有再由 8.8.8.8告诉用户结果。8.8.8.8为了以后加快对myhost.cnMonkey.com这条记录的解析,就将刚才的1.1.1.1结果保留一段时间,这 就是TTL时间,在这段时间内如果用户又有对myhost.cnMonkey.com这条记录的解析请求,它就直接告诉用户1.1.1.1,当TTL到期则又会重复 上面的过程。
 from:齐天大猴 http://www.linbo.org/?p=270
posted @ 2008-04-17 22:35 ypq 阅读(91) | 评论 (0)编辑