blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/wangxinsh55/category/33868.htmlzh-cnthu, 21 jul 2011 07:40:43 gmtthu, 21 jul 2011 07:40:43 gmt60oracle 10g备份时主机身份证明验证不通过http://www.blogjava.net/wangxinsh55/archive/2011/07/21/354786.htmlsimonesimonethu, 21 jul 2011 07:10:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/07/21/354786.htmlhttp://www.blogjava.net/wangxinsh55/comments/354786.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/07/21/354786.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/354786.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/354786.html在oracle em中执行备份操作时,需要提供主机身份证明以用于访问目标数据库的操作系统。但是我们在保证用户名密码争取的情况下,可能仍然报错。这个错误可能是:以用户administrator 的身份连接主机失败。error:wrong password for user.



这个错误会很让人费解,因为我们已经确保用户名密码输入正确了。产生这个问题的原因是需要在windows系统中将该用户设置为作为批处理作业登录。即打开【本地安全策略】,在【本地策略】-【用户权限分配】下,将连接主机的用户添加到“作为批处理作业登录”中。


simone 2011-07-21 15:10
]]>
详解:数据库名、实例名、oracle_sid、数据库域名、全局数据库名、服务名 http://www.blogjava.net/wangxinsh55/archive/2011/04/14/348311.htmlsimonesimonethu, 14 apr 2011 11:16:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/04/14/348311.htmlhttp://www.blogjava.net/wangxinsh55/comments/348311.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/04/14/348311.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/348311.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/348311.html数据库名、实例名、数据库域名、全局数据库名、服务名,
这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。

一、数据库名
什么是数据库名?

数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数db_name表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数db_name被写入参数文件之中。格式如下:
db_name=myorcl
...
在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改db_name的值。但是在oracle启动时,由于参数文件中的db_name与控制文件中的数据库名不一致,导致数据库启动失败,将返回ora-01103错误。

数据库名的作用
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。
有很多oracle安装文件目录是与数据库名相关的,如:
winnt: d:\oracle\product\10.1.0\oradata\db_name\...
unix: /home/app/oracle/product/10.1.0/oradata/db_name/...
pfile:
winnt: d:\oracle\product\10.1.0\admin\db_name\pfile\ini.ora
unix: /home/app/oracle/product/10.1.0/admin/db_name/pfile/init$oracle_sid.ora
跟踪文件目录:
winnt: /home/app/oracle/product/10.1.0/admin/db_name/bdump/...
另外,在创建数据时,careate database命令中的数据库名也要与参数文件中db_name参数的值一致,否则将产生错误。
同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。
如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指db_name。
还有在备份或恢复数据库时,都需要用到数据库名。
总之,数据库名很重要,要准确理解它的作用。

查询当前数据名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看参数文件。

修改数据库名
前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。那么现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下:
1.关闭数据库。
2.修改数据库参数文件中的db_name参数的值为新的数据库名。
3.以nomount方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档)

二、数据库实例名
什么是数据库实例名
数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。实例名也被写入参数文件中,该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。
数据库名和实例名可以相同也可以不同。
在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。这一点在第一篇中已有图例说明。

查询当前数据库实例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
方法三:在参数文件中查询。

数据库实例名oracle_sid
虽然两者都表是oracle实例,但两者是有区别的。instance_name是oracle数据库参数。而oracle_sid是操作系统的环境变量。oracld_sid用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过oracle_sid。在winnt不台,oracle_sid还需存在于注册表中。
oracle_sid必须与instance_name的值一致,否则,你将会收到一个错误,在unix平台,是“oracle not available”,在winnt平台,是“tns:协议适配器错误”。

数据库实例名与网络连接
数据库实例名除了与操作系统交互外,还用于网络连接的oracle服务器标识。当你配置oracle主机连接串的时候,就需要指定实例名。当然8i以后版本的网络组件要求使用的是服务名service_name。这个概念接下来说明。

三、数据库域名
什么是数据库域名?

在分布工数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle分布式环境中的复制。举例说明如:
全国交通运政系统的分布式数据库,其中:
福建节点: fj.jtyz
福建厦门节点: xm.fj.jtyz
江西: jx.jtyz
江西上饶:sr.jx.jtyz
这就是数据库域名。
数据库域名在存在于参数文件中,他的参数是db_domain.

查询数据库域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在参数文件中查询。

全局数据库名
全局数据库名=数据库名 数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz

四、数据库服务名
什么是数据库服务名?
oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是service_name。
如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。

查询数据库服务名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:在参数文件中查询。

数据库服务名与网络连接
oracle8i开如的oracle网络组件,数据库与客户端的连接主机串使用数据库服务名。之前用的是oracle_sid,即数据库实例名



simone 2011-04-14 19:16
]]>
ora-01033: oracle 正在初始化或关闭http://www.blogjava.net/wangxinsh55/archive/2011/04/14/348310.htmlsimonesimonethu, 14 apr 2011 11:15:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/04/14/348310.htmlhttp://www.blogjava.net/wangxinsh55/comments/348310.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/04/14/348310.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/348310.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/348310.htmlc:\documents and settings\administrator>sqlplus /nolog

sql*plus: release 10.2.0.1.0 - production on 星期一 7月 5 09:50:36 2010

凯发天生赢家一触即发官网 copyright (c) 1982, 2005, oracle.  all rights reserved.

sql> conn /as sysdba
已连接。
sql> shutdown normal
ora-01109: 数据库未打开


已经卸载数据库。
oracle 例程已经关闭。
sql> startup mount
oracle 例程已经启动。

total system global area  289406976 bytes
fixed size                  1248576 bytes
variable size              83886784 bytes
database buffers          197132288 bytes
redo buffers                7139328 bytes
数据库装载完毕。
sql> alter database open
  2  ;
alter database open
*
第 1 行出现错误:
ora-00600: 内部错误代码, 参数: [kcratr1_lastbwr], [], [], [], [], [], [], []


sql> alter database noarchivelog;

数据库已更改。

sql> alter database open;
alter database open
*
第 1 行出现错误:
ora-00600: 内部错误代码, 参数: [kcratr1_lastbwr], [], [], [], [], [], [], []


sql> shutdown immediate
ora-01109: 数据库未打开


已经卸载数据库。
oracle 例程已经关闭。
sql> startup mount
oracle 例程已经启动。

total system global area  289406976 bytes
fixed size                  1248576 bytes
variable size              83886784 bytes
database buffers          197132288 bytes
redo buffers                7139328 bytes
数据库装载完毕。
sql> recover database;
完成介质恢复。
sql> alter database open;

数据库已更改。

sql> exit



simone 2011-04-14 19:15
]]>
oracle如何附加数据库http://www.blogjava.net/wangxinsh55/archive/2011/04/11/348072.htmlsimonesimonemon, 11 apr 2011 08:28:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/04/11/348072.htmlhttp://www.blogjava.net/wangxinsh55/comments/348072.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/04/11/348072.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/348072.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/348072.html 目的:把数据库里面的数据附加到本地数据库,从而可以查看数据库中的数据,取之应用.
必须了解信息:
原数据库全局数据库名称:oracle,sid:orcl.
原数据库存放路径:e:\oracle\oracdata\
本地数据库的安装路径是d:\oracle\

实现步骤:
一、把数据库相关文件copy到本地e:\oracle\oracdata\下面,(确保文件不能缺少).

二、修改初始化文件init.ora,路径在d:\oracle\admin\oracle\pfile\init.ora
查找control_files = ("d:\oracle\oradata\oracle\control01.ctl", "d:\oracle\oradata\oracle\control02.ctl", "d:\oracle\oradata\oracle\control03.ctl")

修改为:
control_files = ("e:\oracle\oradata\oracle\control01.ctl", "e:\oracle\oradata\oracle\control02.ctl", "e:\oracle\oradata\oracle\control03.ctl")

三、重新启动实例.观察e:\oracle\oradata\oracle\下面的控制文件时间是否改变,如如果改变,说明控制文件已经附加成功.

四、修改字符集.
打开注册表查找: [hkey_local_machine\software\oracle\home0]修改
"nls_lang"="american_america.us7ascii",原来"nls_lang"="simplified chinese_china.zhs16gbk",
目的是为了避免中文在数据库里面出现乱码的现象.

五、启动svrmgrl.
svrmgrl>shutdown immediate;
重新启动实例.

六、改变数据库文件.
 引用内容
svrmgr> alter database rename file 'd:\oracle\oradata\oracle\indx01.dbf' to 'e:\oracle\oradata\oracle\indx01.dbf’;
svrmgr> alter database rename file 'd:\oracle\oradata\oracle\dr01.dbf' to 'e:\oracle\oradata\oracle\ dr01.dbf’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\rbs01.dbf' to 'e:\oracle\oradata\oracle\ rbs01.dbf’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\system01.dbf' to 'e:\oracle\oradata\oracle\ system01.dbf’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\temp01.dbf' to 'e:\oracle\oradata\oracle\ temp01.dbf’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\users01.dbf' to 'e:\oracle\oradata\oracle\ users01.dbf’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\tools01.dbf' to 'e:\oracle\oradata\oracle\ tools01.dbf’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\redo01.logf' to 'e:\oracle\oradata\oracle\ redo01.log’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\redo02.logf' to 'e:\oracle\oradata\oracle\ redo02.log’;

svrmgr> alter database rename file 'd:\oracle\oradata\oracle\redo02.logf' to 'e:\oracle\oradata\oracle\ redo02.log’;


七、重新启动数据库实例.
八、修改密码文件.pwdorcl.ora(文件名根据sid名称改变),路径d:\oracle\ora81\database.
一般先备份一下密码文件.然后把改文件删除.
然后用orapwd命令重新生成密码文件.
c:\>orapwd file= d:\oracle\ora81\database\pwdorcl.ora password=oracle entries=5;
说明:file是生成的密码文件的完整的路径名称.password是新密码.

九、重新启动数据库.检查是否可以正常运行,如果运行失败,检查步骤是否全部符合.

simone 2011-04-11 16:28
]]>
oracle的几种启动方式 http://www.blogjava.net/wangxinsh55/archive/2011/04/07/347812.htmlsimonesimonethu, 07 apr 2011 09:08:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/04/07/347812.htmlhttp://www.blogjava.net/wangxinsh55/comments/347812.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/04/07/347812.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/347812.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/347812.html
1、startup nomount

  非安装启动,这种方式启动下可执行:重建控制文件、重建数据库。

  读取init.ora文件,启动instance,即启动sga和后台进程,这种启动只需要init.ora文件。

2、startup mount dbname

  安装启动,这种方式启动下可执行:数据库日志归档、数据库介质恢复、使数据文件联机或脱机、重新定位数据文件、重做日志文件。

  执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,但此时不对数据文件和日志文件进行校验检查。

3、startup open dbname

  先执行“nomount”,然后执行“mount”,再打开包括redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。

4、startup,等于以下三个命令

  startup nomount

  alter database mount

  alter database open

simone 2011-04-07 17:08
]]>
alter database 与 alter tablespace offline的区别 http://www.blogjava.net/wangxinsh55/archive/2011/04/07/347792.htmlsimonesimonethu, 07 apr 2011 07:35:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/04/07/347792.htmlhttp://www.blogjava.net/wangxinsh55/comments/347792.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/04/07/347792.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/347792.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/347792.html阅读全文

simone 2011-04-07 15:35
]]>
oracle 移动数据文件的操作方法 http://www.blogjava.net/wangxinsh55/archive/2011/04/07/347791.htmlsimonesimonethu, 07 apr 2011 07:34:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2011/04/07/347791.htmlhttp://www.blogjava.net/wangxinsh55/comments/347791.htmlhttp://www.blogjava.net/wangxinsh55/archive/2011/04/07/347791.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/347791.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/347791.html

将表空间和数据文件从一个位置移动到另一个位置的操作方法

一. offline

offline 分为alter database 与 alter tablespace offline

他们的区别参看blog

按数据文件来:

1.先将相应的数据文件 offline  

alter database datafile 'd:\oracle\oradata\dba\test01.dbf' offline;
2.把数据文件 copy 到新位置
3. alter database rename file 'd:\oracle\oradata\dba\test01.dbf' to 'd:\test01.dbf';

4. 介质恢复(offline 数据文件必须要介质恢复)

recover datafile 'd:\test01.dbf'
5. 将相应的数据文件 online 

sql>alter database datafile 'd:\test01.dbf' online;

按表空间来:

1.先将相应的表空间 offline  

sql>alter tablespace test offline;  

2.把数据文件 copy 到新位置
3. alter tablespace test  rename datafile 'd:\test01.dbf' to 'd:\oracle\oradata\dba\test01.dbf'

4. 将表空间 online 

sql>alter tablespace test online;   

 

二. shutdown 数据库

1. 关闭数据库 

c:>set oracle_sid=dba

c:>sqlplus /nolog

sql*plus: release 10.2.0.1.0 - production on 星期日 11月 29 11:14:02 2009

凯发天生赢家一触即发官网 copyright (c) 1982, 2005, oracle.  all rights reserved.

sql> conn sys/admin as sysdba

已连接。

sql> shutdown immediate

数据库已经关闭。

已经卸载数据库。

oracle 例程已经关闭。

sql>


2. 把数据文件 copy 到新位置

3. rename datafile

sql> startup mount

oracle 例程已经启动。

total system global area  289406976 bytes

fixed size                  1248576 bytes

variable size              71303872 bytes

database buffers          209715200 bytes

redo buffers                7139328 bytes

数据库装载完毕。

sql> alter database rename file 'd:\oracle\oradata\dba\test01.dbf' to 'd:\test01

.dbf';

数据库已更改。

sql> alter database open;

数据库已更改。

sql> select file#,name,status from v$datafile;

 file# name                                status

-------- -------------------------------------------------------  ---------------

   1  d:\oracle\oradata\dba\system01  system

   2  d:\oracle\oradata\dba\undotbs0  online

   3  d:\oracle\oradata\dba\sysaux01  online

   4  d:\oracle\oradata\dba\users01.   online

   5  d:\test01.dbf                              online



simone 2011-04-07 15:34
]]>
oracle数据库备份删除操作http://www.blogjava.net/wangxinsh55/archive/2010/11/05/337300.htmlsimonesimonefri, 05 nov 2010 03:08:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/11/05/337300.htmlhttp://www.blogjava.net/wangxinsh55/comments/337300.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/11/05/337300.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/337300.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/337300.html 

1、删除多余的归档日志

在oracle10g中,默认的归档路径为$oracle_base/flash_recovery_area。对于这个路径,oracle有一个限制,就是默认只能有2g的空间给归档日志使用,可以使用下面两个sql语句去查看它的限制:
1. select * from v$recovery_file_dest;
2. show parameter db_recovery_file_dest(这个更友好直观一些)
当归档日志数量大于2g时,那么就会由于没有更多的空间去容纳更多的归档日志会报无法继续归档的错误。
如:“ra-19809: limit exceeded for recovery files
ora-19804: cannot reclaim 10017792 bytes disk space from 2147483648 limit
arc0: error 19809 creating archive log file to '/u01/app/oracle/flash_recovery_area/orcl/archivelog/2007_04_30/o1_mf_1_220_0_.arc' ”这时我们可以修改它的默认限制,比如说将它增加到5g或更多,也可以将归档路径重新置到别的路径,就不会有这个限制了。

  更改限制语句如下:
alter system set db_recovery_file_dest_size=5368709102  (这里为5g 5x1024x1024x1024=5g)
alter system set db_recovery_file_dest_size=10737418240



进入

rman target username/password@database

 

执行下边的交叉校验

crosscheck archivelog all;

此时可能会提示校验失败,类似下边的提示:

rman> crosscheck archivelog all;

释放的通道: ora_disk_1

分配的通道: ora_disk_1

通道 ora_disk_1: sid=14 devtype=disk

对归档日志的验证失败

…………….

这时,需要执行exit退出rman

在命令提示符窗口下执行下边的字符集设置

c:>set nls_lang=american_america.zhs16gbk

然后再进入rman  ,再执行crosscheck archivelog all;一般不会再出现这样的问题了。

 

在命令窗口里面执行

delete archivelog all completed before 'sysdate-7';

说明

sysdata-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。

同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库

delete archivelog from time 'sysdate-7';

 

unix/linux下也可以通过find找到7天前的归档数据,使用exec子操作删除

find /oraarchive -xdev -mtime 7 -name "*.dbf" -exec rm -f {} ;

这样做仍然会在rman里留下未管理的归档文件

仍需要在rman里执行下面2条命令

crosscheck archivelog all;

delete expired archivelog all;

所以还不如上面的方法好用,不过用find的好处就是,可以在条件上,和exec子项上做很多操作,实现更复杂的功能

 

2report obsoletedelete obsolete删除过期备份命令

使用report obsolete命令报告过期备份

rman> report obsolete;

rman retention policy will be applied to the command

rman retention policy is set to redundancy 1

report of obsolete backups and copies

type                 key    completion time    filename/handle

-------------------- ------ ------------------ --------------------

backup set           125    01-nov-04

backup piece       125    01-nov-04          /data1/oracle/orabak/full_1_541045804

backup set           131    04-nov-04

backup piece       131    04-nov-04          /data1/oracle/orabak/full_avatar2_20041104_131

....

 

使用delete obsolete命令删除过期备份:

rman> delete obsolete;

rman retention policy will be applied to the command

rman retention policy is set to redundancy 1

using channel ora_disk_1

deleting the following obsolete backups and copies:

type                 key    completion time    filename/handle

-------------------- ------ ------------------ --------------------

backup set           125    01-nov-04

backup piece       125    01-nov-04          /data1/oracle/orabak/full_1_541045804

....

archive log          2704   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

archive log          2703   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

archive log          2702   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf

do you really want to delete the above objects (enter yes or no)? yes

deleted backup piece

backup piece handle=/data1/oracle/orabak/full_avatar2_20041206_173 recid=173 stamp=544156241

.....

 

注:在执行删除的时候,可能会提示下边的报错信息:

ora-19554: 配置设备时出错, 设备类型: sbt_tape, 设备名称:

ora-27211: 未能加载介质管理库

 

解决方法,运行下边的命令:

rman> allocate channel for maintenance type disk;

rman> crosscheck archivelog all;

rman> delete obsolete;

 

 

3oracle rmanshow,list,crosscheck,delete

 

oracle rmanshow,list,crosscheck,delete 命令整理

1show命令:

   显示rman配置: rman> show all;

2report命令:

   2.1rman> report schema                        报告目标数据库的物理结构;

   2.2rman>report need backup days=3;            报告最近3天没有被备份的数据文件;

   2.3rman> report need backup days 3 tablespace users;   users表空间上3天未备份的数据文件;

   2.4rman> report need backup incremental 3;    报告恢复数据文件需要的增量备份个数超过3次的数据文件;

   2.5rman> report need backup redundancy 2 database;           报告备份文件低于2份的所有数据文件;

        rman>report need backup redundancy=2;

   2.6rman> report need backup recovery window of 6 days;    报告文件报表的恢复需要超过6天的归档日志的数据文件;

   2.7rman> report unrecoverable;      报告数据库所有不可恢复的数据文件;

   2.8rman> report obsolete redunndancy 2; 报告备份次数超过2次的陈旧备份;

   2.9rman>report obsolete;          报告多余的备份;

3list命令:列出备份信息

   3.1、列出数据文件备份集

        rman>list backup         列出详细备份;

        rman>list expired backup     列出过期备份;

        rman> list backup of database;     列出所有数据文件的备份集;

        rman> list backup of tablespace user01; 列出特定表空间的所有数据文件备份集;

   3.2rman> list backup of controlfile     列出控制文件备份集;

   3.3rman> list backup of archivelog all      列出归档日志备份集详细信息;

        rman>list archivelog all;      列出归档日志备份集简要信息

   3.4rman> list backup of spfile              列出spfile备份集;

   3.5rman> list copy of datafile 5        列出数据文件映像副本;

   3.6rman> list copy of controlfile           列出控制文件映像副本;

   3.7rman> list copy of archivelog all    列出归档日志映像副本;

   3.8rman> list incarnation of database       列出对应物/列出数据库副本;

   3.9rman>list backup summary;    概述可用的备份;

     b表示backup

     f表示full

     a表示archive log

     0 1表示incremental backup

     s说明备份状态(aavailablex expired )

    

   3.10rman>list backup by file    按备份类型列出备份;

                    按照数据文件备份,归档日志备份,控制文件备份,服务器参数文件备份 列出

4crosscheck命令:校验备份信息

   4.1rman> crosscheck backup             核对所有备份集;  

   4.2rman> crosscheck backup of database      核对所有数据文件的备份集;  

   4.3rman> crosscheck backup of tablespace users      核对特定表空间的备份集;  

   4.4rman> crosscheck backup of datafile 4    核对特定数据文件的备份集;  

   4.5rman> crosscheck backup of controlfile   核对控制文件的备份集;  

   4.6rman> crosscheck backup of spfile    核对spfile的备份集;  

   4.7rman> crosscheck backup of archivelog sequence 3 核对归档日志的备份集;  

   4.8rman> crosscheck copy               核对所有映像副本;  

   4.9rman> crosscheck copy of database       核对所有数据文件的映像副本;  

   4.10rman> crosscheck copy of tablespace users       核对特定表空间的映像副本;  

   4.11rman> crosscheck copy of datafile 6        核对特定数据文件的映像副本;  

   4.12rman> crosscheck copy of archivelog sequence 4  核对归档日志的映像副本;  

   4.13rman> crosscheck copy of controlfile       核对控制文件的映像副本; 

   4.14rman> crosscheck backup tag='sat_backup';

   4.15rman> crosscheck backup completed after 'sysdate - 2'

   4.16rman> crosscheck backup completed between 'sysdate - 5' and 'sysdate -2 '

   4.17rman> crosscheck backup device type sbt;

   4.18rman> crosscheck archivelog all;

   4.19rman> crosscheck archivelog like '%arc00012.001'

   4.20rman> crosscheck archivelog from sequence 12;

   4.21rman> crosscheck archivelog until sequence 522;

5delete:删除备份

   5.1rman> delete obsolete;      删除陈旧备份;

   5.2rman> delete expired backup; 删除expired备份    

   5.3rman> delete expired copy;   删除expired副本;

   5.4rman> delete backupset 19;   删除特定备份集;

   5.5rman> delete backuppiece ''d:\backup\demo_19.bak''   删除特定备份片;

   5.6rman> delete backup      删除所有备份集;

   5.7rman> delete datafilecopy ''d:\backup\demo_19.bak''  删除特定映像副本;

   5.8rman> delete copy   删除所有映像副本;

   5.9rman> delete archivelog all delete input;

        rman> delete backupset 22 format = ''d:\backup\%u.bak'' delete input

                       在备份后删除输入对象;

   5.10rman> delete backupset id;

 

 

4em控制台对备份的操作

使用sys用户的sysdba权限进入em控制台

在“维护”模块下,点击进入到“管理当前备份”操作选项。

 在“管理当前备份”选项中可以列出所有的备份集

如果要删除备份,可以在下边的列表中选中要删除的备份集,执行“删除”命令,这时会有一个确认提示的页面:

点击“是”按钮,进行删除操作。如果提示操作“删除”失败,可以将上一步要执行的命令在命令提示符下使用rman命令来执行。

 

5、小结

像归档日志之类的备份,备份的文件夹是在一个叫flash_recovery_area的目录下边。

1、归档日志备份在archivelog 这个文件夹下边,上边对归档日志的操作基本上是对这个文件夹下的文件进行操作。

2obsolete删除操作基本上是对autobackup这个文件夹下的文件进行操作。(不是十分的确定)

3delete backup操作基本上是对backupset文件夹和datafile文件夹的内容进行操作的。

4、在em管理后台,最下边有一个“相关链接”模块,下有“作业”选项链接,可以看到所有数据库备份操作历史作业记录,在此可以对相应的备份作业进行修改操作。

另外如果要添加备份操作作业时,需要在“维护”模块下找到“调试备份”链接,推荐使用“oracle 建议的备份”来添加备份操作作业。


linux下查看文件夹大小的命令du -sh docname

 



simone 2010-11-05 11:08
]]>
修改计算机名称导致oracle的em不能用http://www.blogjava.net/wangxinsh55/archive/2010/11/04/337225.htmlsimonesimonethu, 04 nov 2010 06:19:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/11/04/337225.htmlhttp://www.blogjava.net/wangxinsh55/comments/337225.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/11/04/337225.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/337225.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/337225.html 



我是因为修改计算机名称导致oracle不能用,进行了以下的配置,之后就好了。希望对你有用




oracle 安装好后 hostname是不能乱改的.

how to change the hostname of the windows when the10gwith asm being used  
solution  
when changing the hostname, 4 files would be affected.  
1) tnsnames.ora  
2) listener.ora  
3) oraclecsservice  
4) enterprise manager 





1、d:\oracle\product\10.2.0\db_1目录下的 原计算机名.orcl------>修改后的计算机名.orcl

2、d:\oracle\product\10.2.0\db_1\oc4j\j2ee目录下的 oc4j_dbconsole_原计算机名_orcl----->oc4j_dbconsole_修改后的计算机名_orcl

3、d:\oracle\product\10.2.0\db_1\network\admin目录下的 listener.ora、sqlnet.ora、tnsnames.ora文件中的local名称

4、配置em


/*重新配置dbcosole
emca -repos drop
emca -repos create
emca -config dbcontrol db
emctl start dbconsole
*/   基本上是删不干净的,所以使用下面的方法

当安装oracle的机器变了机器名,或者变了ip地址。那么原来的dbconsole就起不来了。当在dos下运行:emctl start dbconsole 的时候报错。
解决办法
 
同样适用于windows,unix,linux其他原因导致dbconsole无法正常启动。

1,修改dbsnmp密码:
重新配置dbconsole,需要输入dbsnmp密码,但任何密码都会显示错误,需要预先修改。
sql>alter user dbsnmp identified by xxx;

2,删除早期dbconsole创建的用户:

sql>drop role mgmt_user;
sql>drop user mgmt_view cascade;
sql>drop user sysman cascade;

3,删除早期dbconsole创建的对象:
sql>drop public synonym mgmt_target_blackouts;
sql>drop public synonym setemviewusercontext;
4.c:documents and settingsadministrator>emca -config dbcontrol db -repos recreat
e -host wanglibo
 
具体步骤如下:
microsoft windows xp [版本 5.1.2600]
(c) 凯发k8网页登录的版权所有 1985-2001 microsoft corp.
c:documents and settingsadministrator>emca -config dbcontrol db -repos recreat
e -host wanglibo
emca 开始于 2009-11-28 12:21:41
em configuration assistant 10.2.0.1.0 正式版
凯发k8网页登录的版权所有 (c) 2003, 2005, oracle。保留所有权利。
输入以下信息:
数据库 sid: breezyor
监听程序端口号: 1521
sys 用户的口令:
dbsnmp 用户的口令:
sysman 用户的口令:
通知的电子邮件地址 (可选):
通知的发件 (smtp) 服务器 (可选):
-----------------------------------------------------------------
已指定以下设置
数据库 oracle_home . d:oracleproduct10.2.0db_2
数据库主机名 . wanglibo
监听程序端口号 . 1521
数据库 sid . breezyor
通知的电子邮件地址 
通知的发件 (smtp) 服务器 
-----------------------------------------------------------------
是否继续? [yes(y)/no(n)]: y
2009-11-28 12:26:21 oracle.sysman.emcp.emconfig perform
信息: 正在将此操作记录到 d:oracleproduct10.2.0db_2cfgtoollogsemcabreezyor
acleemca_2009-11-28_12-21-41-下午.log。
2009-11-28 12:28:00 oracle.sysman.emcp.emreposconfig droprepository
信息: 正在删除 em 资料档案库 (此操作可能需要一段时间)
2009-11-28 12:28:02 oracle.sysman.emcp.emreposconfig invoke
信息: 已成功删除资料档案库
2009-11-28 12:28:02 oracle.sysman.emcp.emreposconfig createrepository
信息: 正在创建 em 资料档案库 (此操作可能需要一段时间)
2009-11-28 12:29:59 oracle.sysman.emcp.emreposconfig invoke
信息: 已成功创建资料档案库
2009-11-28 12:32:40 oracle.sysman.emcp.util.dbcontrolutil startoms
信息: 正在启动 database control (此操作可能需要一段时间)
2009-11-28 12:34:40 oracle.sysman.emcp.emdbpostconfig performconfiguration
信息: 已成功启动 database control
2009-11-28 12:35:08 oracle.sysman.emcp.emdbpostconfig performconfiguration
警告: 无法创建 database control 快捷方式
2009-11-28 12:35:22 oracle.sysman.emcp.emdbpostconfig performconfiguration
信息: >>>>>>>>>>> database control url 为 http://wanglibo:1158/em 
<<<<<<<<<<<
已成功完成 enterprise 
manager 的配置
emca 结束于 2009-11-28 12:35:22
c:documents and settingsadministrator
>





simone 2010-11-04 14:19
]]>
oracle数据库迁移http://www.blogjava.net/wangxinsh55/archive/2010/11/04/337214.htmlsimonesimonethu, 04 nov 2010 04:09:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/11/04/337214.htmlhttp://www.blogjava.net/wangxinsh55/comments/337214.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/11/04/337214.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/337214.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/337214.html之前做了一个项目,使用的是oracle数据库,数据库是建在本地测试服务器上的;现需要将整个数据库数据结构及数据放到正式服务器上,现将整个移动过程做一下记录,以做备用。
1、首先需要在正式数据库上创建和测试数据库相同名称的库名cssp,创建之后可以到$oracle_home$\product\10.2.0\db_1\network\admin\tnsnames.ora这个文件下看到cssp库的端口号。
2、打开浏览器进入http://localhost:1158/em 此处的端口可以到$oracle_home$\product\10.2.0\db_1\install\portlist.ini 下边查看。使用sys用户的超级管理员权限进入em管理,在“管理”模块下的“表空间”处创建测试服务器上相同的表空间名称,这里创建了 csspspace。
3、在客户端机器上使用oracle的客户端工具“net configuration assistant”创建cssp连接。
4、安装pl/sql工具。
5、通过pl/sql工具使用sys用户的sysdba权限连接cssp数据库,找到user模块,创建用户duxiu,并给予connect和resource权限,退出pl/sql程序。
6、使用pl/sql连接测试服务器的数据库,在“tools”-》“export user objects ”选项中,导出所有创建表,索引,主键,自增长序列,函数,存储过程,作业等sql命令。
7、使用pl/sql连接正式数据库,在“file”-》“open”-》“command file”中将上一步导出的脚本导入,并执行;这样数据库的结构都已创建成功了。接下来需要导一些数据进来。
8、使用pl/sql连接测试服务器的数据库,在“tools”-》“export tables”下,选中要导出数据的表,下边导出选项中选择“pl/sql developer”(“oracle export”导出选项试过不知道为什么导出之后,无法将导出的数据再导入进去,也没报任何错误提示;“sql inserts”只是生了插入的sql语句,导出效率等操作太差不推荐使用)。“compress file”,“include storage”,“include privileges”也都选中,在“output file”中选中要导出的文件,点击“export”进行导出。
9、使用pl/sql连接正式服务器的数据库,在“tools”-》“import tables”选项中找到“pl/sql developer”选项,在这里只用勾选“disable triggers”和“disable foreign key constraints”,在“import file”选项中找到刚才导出的数据文件,点击“import”按钮将数据导入。

到此整个迁移过程已完成。


simone 2010-11-04 12:09
]]>
查看oracle 用户执行的sql语句历史记录http://www.blogjava.net/wangxinsh55/archive/2010/10/18/335420.htmlsimonesimonemon, 18 oct 2010 02:50:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/10/18/335420.htmlhttp://www.blogjava.net/wangxinsh55/comments/335420.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/10/18/335420.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/335420.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/335420.html

select * from v$sqlarea t order by t.last_active_time desc

注意 :执行此语句等等一些相关的语句 必须具有dba 的权限 虽然这条语句很普通 但是需要的时候很管用 能够及时查出一个人执行sql语句情况

-------oracle 查看已经执行过的sql 这些是存在共享池中的 --------->
select * from v$sqlarea t order by t.last_active_time desc

-----------查看oracle会话----------------------------》

select * from v$session   t order by t.last_active_time desc

-------------查看oracle的权限角色------------------------------>
select   *   from   dba_role_privs;    授予用户和其他角色的角色  
select   *   from   dba_sys_privs;     授予用户和其他角色的系统权限  
select   *   from   dba_tab_privs;     数据库中对象的所有授权
select * from user_role_privs;         查看当前用户的角色



simone 2010-10-18 10:50
]]>
oracle数据库热备份文件过大收缩方法http://www.blogjava.net/wangxinsh55/archive/2010/04/21/319007.htmlsimonesimonewed, 21 apr 2010 09:36:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/04/21/319007.htmlhttp://www.blogjava.net/wangxinsh55/comments/319007.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/04/21/319007.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/319007.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/319007.html

ora-00257: archiver error. connect internal only, until freed.

oracle 10g数据库物理空间管理方式与以前oracle发生了变化,对归档日志所在的flash_recovery_area空间进行了另外限制

flash_recovery_area空间缺省安装时比较小,只有2gb,容易用完

解决过程

  根据数据库目前可用存储空间情况、flash_recovery_area空间为2gb的实际情况,把flash_recovery_area的空间修改为20gb()

sql> alter system set db_recovery_file_dest_size=20g;

系统已更改。

(其实问题的本质是归档日志的使用已经达到了spfile等启动参数文件中指定的最大值。oracle 10g中归档日志默认的存放地是闪回目录,即%oracle_base%/flash_recovery_area的相应实例名下面,这个位置的大小在参数文件中有个限制,解决空间不足的问题可以通过两种方式来实现,一个修改这个大小限制,还有一个就是修改归档日志存放位置。)

如果不要这些archivelog的话,可以删除一些

rman>delete noprompt archivelog until time 'sysdate-3'; 直接运行这条 这样会只保留三天的归档

sql> select * from v$flash_recovery_area_usage;

file_type                percent_space_used    percent_space_reclaimable   number_of_files

------------------------------- -------------------------------------      -----------------------------------------------------   -------------------------------

controlfile                    0                                                           0                                        0

onlinelog                        0                                                          0                                        0

archivelog                 6.11                                                          0                                        3

backuppiece                   0                                                          0                                        0

imagecopy                     0                                                         0                                         0

flashbacklog                0                                                        0                                         0

还可参考:

rman crosscheck删除失效归档

当手工删除了归档日志以后,rman备份会检测到日志缺失,从而无法进一步继续执行。

所以此时需要手工执行crosscheck过程,之后rman备份可以恢复正常。

1.crosscheck日志

    $ rman target /

    recovery manager: release 9.2.0.4.0 - 64bit production

    凯发天生赢家一触即发官网 copyright (c) 1995, 2002, oracle corporation. all rights reserved.

    connected to target database: avatar2 (dbid=2480694409)

    rman> crosscheck archivelog all;

    using target database controlfile instead of recovery catalog

    allocated channel: ora_disk_1

    channel ora_disk_1: sid=25 devtype=disk

    validation failed for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659

    validation failed for archived log

   archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268

    ...........

    validation failed for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2985.dbf recid=2973 stamp=545399327

    validation succeeded for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2986.dbf recid=2974 stamp=545400820

    validation succeeded for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2987.dbf recid=2975 stamp=545401757

    validation succeeded for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2988.dbf recid=2976 stamp=545402716

    validation succeeded for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2989.dbf recid=2977 stamp=545403661

    validation succeeded for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2990.dbf recid=2978 stamp=545404946

    validation succeeded for archived log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2991.dbf recid=2979 stamp=545406220

    crosschecked 278 objects

    rman>

2.使用delete expired archivelog all 命令删除所有过期归档日志:

    rman> delete expired archivelog all;

    released channel: ora_disk_1

    allocated channel: ora_disk_1

    channel ora_disk_1: sid=12 devtype=disk

    list of archived log copies

    key    thrd seq    s low time name

    ------- ---- ------- - --------- ----

   376    1    2714    x 23-nov-04 =/opt/oracle/oradata/avatar2/archive/1_2714.dbf

    .....

3.简要介绍一下report obsolete命令

使用report obsolete命令报告过期备份

    rman> report obsolete;

    rman retention policy will be applied to the command

    rman retention policy is set to redundancy 1

    report of obsolete backups and copies

    type                key    completion time    filename/handle

    -------------------- ------ ------------------ --------------------

    backup set          125    01-nov-04      

      backup piece      125    01-nov-04          /data1/oracle/orabak/full_1_541045804

    backup set          131    04-nov-04      

      backup piece      131    04-nov-04          /data1/oracle/orabak/full_avatar2_20041104_131

   ....

    backup set          173    06-dec-04      

      backup piece      173    06-dec-04          /data1/oracle/orabak/full_avatar2_20041206_173

    backup set          179    11-dec-04      

      backup piece      179    11-dec-04          /data1/oracle/orabak/arch544588206.arc

    .....

      backup piece      189    17-dec-04          /data1/oracle/orabak/arch545106606.arc

    backup set          190    17-dec-04      

      backup piece      190    17-dec-04          /data1/oracle/orabak/arch545106665.arc

    backup set          191    20-dec-04      

      backup piece      191    20-dec-04          /data1/oracle/orabak/arch_avatar2_20041220_194

    archive log          2973 20-dec-04          /opt/oracle/oradata/avatar2/archive/1_2985.dbf

    archive log          2971 20-dec-04          /opt/oracle/oradata/avatar2/archive/1_2984.dbf

    .....

    archive log          2705 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2717.dbf

    archive log          2704 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

    archive log          2703 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

    archive log          2702 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf

4.使用delete obsolete命令删除过期备份:

    rman> delete obsolete;

    rman retention policy will be applied to the command

    rman retention policy is set to redundancy 1

    using channel ora_disk_1

    deleting the following obsolete backups and copies:

    type                key    completion time    filename/handle

    -------------------- ------ ------------------ --------------------

    backup set          125    01-nov-04      

      backup piece      125    01-nov-04          /data1/oracle/orabak/full_1_541045804

    ....

    archive log          2704 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

    archive log          2703 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

    archive log          2702 17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf

    do you really want to delete the above objects (enter yes or no)? yes

    deleted backup piece

    backup piece handle=/data1/oracle/orabak/full_avatar2_20041206_173 recid=173 stamp=544156241

    .....

    deleted archive log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268

    deleted archive log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659

    deleted 286 objects

    rman> crosscheck archivelog all;

    released channel: ora_disk_1

    allocated channel: ora_disk_1

    channel ora_disk_1: sid=19 devtype=disk

    specification does not match any archive log in the recovery catalog

-the end-



simone 2010-04-21 17:36
]]>
oracle归档日志删除http://www.blogjava.net/wangxinsh55/archive/2010/04/21/318986.htmlsimonesimonewed, 21 apr 2010 07:14:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/04/21/318986.htmlhttp://www.blogjava.net/wangxinsh55/comments/318986.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/04/21/318986.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/318986.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/318986.html
我们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在os下把这些物理文件delete掉后,在我们的

controlfile中仍然记录着这些archivelog的信息,在oracle的oem管理器中有可视化的日志展现出,当我们手工清除 archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要 做手工的清除的话,下面我经过实验,可以尝试这种方法:

1. 进入rman 

2. connect target /

3. crosscheck archivelog all;

4. delete expired archivelog all;

这时候我们再去oem中看就一定看不到,如果你的从来没有做过这个动作的话,我们可以比较从这个动作前的controlfile后动作后的 controlfile的大小!

oracle正确删除归档并回收空间的方法

oracle正确删除归档并回收空间的方法

一个oracle归档日志经常满,表现为/oraarchive 这个文件空间占用100%大家一定抱怨oracle为何没有归档维护工具,很多人直接删除了事,错了,oracle有,而且很智能,可以正确的删除归档和 flashback,不过切记,oracle归档日志对于oracle的数据恢复和备份非常重要,不到万不得已不要删除归档日志。

删除归档日志的过程

以oracle用户身份登录到数据库服务器主机或通过网络连接

进入oracle数据备份工具

rman target/

或rman target/@orcl

在命令窗口里面执行

delete archivelog all completed before 'sysdate-7';

说明

sysdata-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。

同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库

delete archivelog from time 'sysdate-7';



unix/linux下也可以通过find找到7天前的归档数据,使用exec子操作删除



find /oraarchive -xdev -mtime 7 -name "*.dbf" -exec rm -f {} ;

这样做仍然会在rman里留下未管理的归档文件

仍需要在rman里执行下面2条命令

crosscheck archivelog all;

delete expired archivelog all;

所以还不如上面的方法好用,不过用find的好处就是,可以在条件上,和exec子项上做很多操作,实现更复杂的功能

3.简要介绍一下report obsolete命令



使用report obsolete命令报告过期备份

rman> report obsolete;

rman retention policy will be applied to the command

rman retention policy is set to redundancy 1

report of obsolete backups and copies

type                 key    completion time    filename/handle

-------------------- ------ ------------------ --------------------

backup set           125    01-nov-04

backup piece       125    01-nov-04          /data1/oracle/orabak/full_1_541045804

backup set           131    04-nov-04

backup piece       131    04-nov-04          /data1/oracle/orabak/full_avatar2_20041104_131

....

backup set           173    06-dec-04

backup piece       173    06-dec-04          /data1/oracle/orabak/full_avatar2_20041206_173

backup set           179    11-dec-04

backup piece       179    11-dec-04          /data1/oracle/orabak/arch544588206.arc

.....

backup piece       189    17-dec-04          /data1/oracle/orabak/arch545106606.arc

backup set           190    17-dec-04

backup piece       190    17-dec-04          /data1/oracle/orabak/arch545106665.arc

backup set           191    20-dec-04

backup piece       191    20-dec-04          /data1/oracle/orabak/arch_avatar2_20041220_194

archive log          2973   20-dec-04          /opt/oracle/oradata/avatar2/archive/1_2985.dbf

archive log          2971   20-dec-04          /opt/oracle/oradata/avatar2/archive/1_2984.dbf

.....

archive log          2705   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2717.dbf

archive log          2704   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

archive log          2703   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

archive log          2702   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf



4.使用delete obsolete命令删除过期备份:



rman> delete obsolete;



rman retention policy will be applied to the command

rman retention policy is set to redundancy 1

using channel ora_disk_1

deleting the following obsolete backups and copies:

type                 key    completion time    filename/handle

-------------------- ------ ------------------ --------------------

backup set           125    01-nov-04

backup piece       125    01-nov-04          /data1/oracle/orabak/full_1_541045804

....

archive log          2704   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

archive log          2703   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

archive log          2702   17-dec-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf



do you really want to delete the above objects (enter yes or no)? yes

deleted backup piece

backup piece handle=/data1/oracle/orabak/full_avatar2_20041206_173 recid=173 stamp=544156241

.....

deleted archive log

archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268

deleted archive log

archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659

deleted 286 objects





rman> crosscheck archivelog all;



released channel: ora_disk_1

allocated channel: ora_disk_1

channel ora_disk_1: sid=19 devtype=disk

specification does not match any archive log in the recovery catalog





5 在rman中用crosscheck检查归档日志,2个归档日志都是失败的:

rman> crosscheck archivelog all;



释放的通道: ora_disk_1

分配的通道: ora_disk_1

通道 ora_disk_1: sid=14 devtype=disk

对归档日志的验证失败

存档日志文件名 =d:oracleoradatatestarchive1_47.dbf 记录 id=1 时间戳 =572866

683

对归档日志的验证失败

存档日志文件名 =d:oracleoradatatestarchive11_48.dbf 记录 id=2 时间戳 =57286

6931

已交叉检验的 2 对象



6 试着同步一下,看行不行,结果不行,crosscheck还是失败:

rman> resync catalog;



正在启动全部恢复目录的 resync

完成全部 resync



rman> crosscheck archivelog all;



释放的通道: ora_disk_1

分配的通道: ora_disk_1

通道 ora_disk_1: sid=14 devtype=disk

对归档日志的验证失败

存档日志文件名 =d:oracleoradatatestarchive1_47.dbf 记录 id=1 时间戳 =572866

683

对归档日志的验证失败

存档日志文件名 =d:oracleoradatatestarchive11_48.dbf 记录 id=2 时间戳 =57286

6931

已交叉检验的 2 对象



7 用list expired看看是否有失效的archive log,证明没有失效的archive log:

rman> list expired archivelog all;



说明与恢复目录中的任何存档日志均不匹配



8 更改语言环境试试,结果再次crosscheck,2个archive log 都成功了:

rman> exit





恢复管理器完成。



c:>set nls_lang=american_america.zhs16gbk



c:>rman catalogrman/rman@safetarget /



recovery manager: release 9.2.0.1.0 - production



凯发天生赢家一触即发官网 copyright (c) 1995, 2002, oracle corporation. all rights reserved.



connected to target database: test (dbid=1870953724)

connected to recovery catalog database



rman> crosscheck archivelog all;



allocated channel: ora_disk_1

channel ora_disk_1: sid=9 devtype=disk

validation succeeded for archived log

archive log filename=d:oracleoradatatestarchive1_47.dbf recid=1 stamp=57286

6683

validation succeeded for archived log

archive log filename=d:oracleoradatatestarchive11_48.dbf recid=2 stamp=5728

66931

crosschecked 2 objects


====================================
oracle隐藏参数字典 x$ksppi x$ksppstvl 
oracle的隐藏参数字典是 x$ksppi,x$ksppstvl基表中,有关隐含参数说明,可以查询这个基表

sql> desc x$ksppi
名称 是否为空? 类型
------    -----
addr      raw(4)
indx      number
inst_id   number
ksppinm   varchar2(64)
ksppity   number
ksppdesc  varchar2(64)
ksppiflg  number

sql>

sql> desc x$ksppcv
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

addr raw(4)
indx number
inst_id number
ksppstvl varchar2(512)
ksppstdf varchar2(9)
ksppstvf number
ksppstcmnt varchar2(255)

sql>

比如我现在要查询隐含参数
_allow_resetlogs_corruption /// 这个参数说明允许数据库在不一致的条件下,进行数据库打开


查看隐含参数的值,方式是


sql> col ksppinm format a30
sql> col ksppstvl format a30
sql> select ksppinm,ksppstvl from x$ksppcv cv,x$ksppi pi where cv.indx=pi.indx a
nd pi.ksppinm like '_allow%';

ksppinm ksppstvl
------------------------------ ------------------------------
_allow_error_simulation false
_allow_resetlogs_corruption false
_allow_terminal_recovery_corru false
ption

_allow_read_only_corruption false

sql>

这个参数一般在数据库正常无法恢复了,可以用它来强行打开数据库,把数据文件先备份出来,这是
一个比较好的办法。

simone 2010-04-21 15:14
]]>
oracle 10g schedule job的常用操作http://www.blogjava.net/wangxinsh55/archive/2010/01/27/310972.htmlsimonesimonewed, 27 jan 2010 08:58:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2010/01/27/310972.htmlhttp://www.blogjava.net/wangxinsh55/comments/310972.htmlhttp://www.blogjava.net/wangxinsh55/archive/2010/01/27/310972.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/310972.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/310972.html>进入      oracle数据库10g schedule job的常用操作:

-- job 权限

grant create job to somebody;

-- job 创建

begin

dbms_scheduler.create_job (

job_name => 'agent_liquidation_job',

job_type => 'stored_procedure',

job_action => 'agent_liquidation.liquidation', --存储过程名

start_date => sysdate,

repeat_interval => 'freq=monthly; interval=1; bymonthday=1;byhour=1;byminute=0;bysecond=0', -- 按月,间隔为1个(月),每月1号,凌晨1点

comments => '执行代理商清分程序'

);

end;

/

-- job 执行时间测试

declare

start_date date;

return_date_after date;

next_run_date date;

begin

start_date := sysdate;--to_timestamp_tz('10-oct-2004 10:00:00','dd-mm-yyyy hh24:mi:ss');

return_date_after := start_date;

for i in 1..10 loop

dbms_scheduler.evaluate_calendar_string('freq=monthly; interval=1; bymonthday=1;byhour=1;byminute=0;bysecond=0',start_date, return_date_after, next_run_date);

dbms_output.put_line('next_run_date: ' || to_char(next_run_date,'yyyy-mm-dd hh24:mi:ss'));

return_date_after := next_run_date;

end loop;

end;

/

-- job 查询

select owner, job_name, state from dba_scheduler_jobs;

select job_name, state from user_scheduler_jobs; 
        select * from all_jobs;

-- job 启用

begin

dbms_scheduler.enable('backup_job');

end;

/

-- job 运行

begin

dbms_scheduler.run_job('cola_job',true); -- true代表同步执行

end;

/

-- job 停止(不太好用)

begin

dbms_scheduler.stop_job(job_name => 'cola_job',force => true);

end;

/

-- job 删除(对停job来说好用)

begin

dbms_scheduler.drop_job(job_name => 'cola_job',force => true);)

end;

/



simone 2010-01-27 16:58
]]>
在oracle存储过程中创建临时表http://www.blogjava.net/wangxinsh55/archive/2009/02/26/256856.htmlsimonesimonethu, 26 feb 2009 09:29:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2009/02/26/256856.htmlhttp://www.blogjava.net/wangxinsh55/comments/256856.htmlhttp://www.blogjava.net/wangxinsh55/archive/2009/02/26/256856.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/256856.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/256856.html在oracle存储过程中创建临时表

存储过程里不能直接使用ddl语句,所以只能使用动态sql语句来执行

--on commit delete rows 说明临时表是事务指定,每次提交后oracle将截断表(删除全部行)
--on commit preserve rows 说明临时表是会话指定,当中断会话时oracle将截断表。


create or replace procedure temptest
(p_searchdate in date)
is
v_count int;
str varchar2(300);
begin
v_count := 0;
str:='drop table sett_dailytest';
execute immediate str;
str:='create global temporary table sett_dailytest (
naccountid number not null,
nsubaccountid number not null)
on commit preserve rows';
execute immediate str; ----使用动态sql语句来执行
str:='insert into sett_dailytest (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
execute immediate str;
end temptest;

上面建立一个临时表的存储过程

下面是执行一些操作,向临时表写数据。

create or replace procedure pr_dailycheck
(
p_date in date,
p_office in integer,
p_currency in integer,
p_check in integer,
p_countnum out integer)
is
v_count int;
begin
v_count := 0;
if p_date is null then
dbms_output.put_line('日期不能为空');
else
if p_check = 1 then
insert into sett_dailytest (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_date);

select
count(sd.naccountid) into v_count
from sett_subaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
and sa.nofficeid = p_office and sa.ncurrencyid = p_currency
and rownum < 2;
commit;
p_countnum := v_count;
dbms_output.put_line(p_countnum);
end if;
if p_check = 2 then
insert into sett_dailytest (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_date);

select
count(sd.naccountid) into v_count
from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
and sa.nofficeid = p_office and sa.ncurrencyid = p_currency
and rownum < 2;
commit;
p_countnum := v_count;
dbms_output.put_line(p_countnum);
end if;
end if;
end pr_dailycheck;



需要创建一个临时表,请举例说明,谢谢!      
  ---------------------------------------------------------------      
     
  是temporary      
  create     global     temporary     table     flight_schedule     (      
            startdate     date,          
            enddate     date,          
            cost     number)      
     
  ---------------------------------------------------------------      
     
  create     proecdure     name_pro      
  as      
  str     varchar2(100);      
  begin      
  str:='create     global     temporary     table     tablename     on     commit     preserve     rows     as     select     *     from     others_table';      
  execute     immediate     str;      
  end;      
  /  
   
   
   
  可以把临时表指定为事务相关(默认)或者是会话相关:  
  on   commit   delete   rows:指定临时表是事务相关的,oracle在每次提交后截断表。  
  on   commit   preserve   rows:指定临时表是会话相关的,oracle在会话中止后截断表。  
   
  =================  
  可以创建以下两种临时表:  
  1。会话特有的临时表  
        create   global   temporary     ()  
        on   commit   preserve   rows;  
  ========  
  对全局临时表的总结  
   
  在临时表上的操作比在一般的表上的操作要快。因为:  
  1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。  
  2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。  
  3如果指定not   logged选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。  
  declare   global   temporary   table   tt(c1   int,   c2   char(20));  
  在connect   reset命令后,临时表不再存在。  
  建临时表是动态编译的,所以对临时表的使用也必须放在declare   curser   后面  
  create   procedure   instt2(p1   int,   p2   char(20))  
  begin  
      declare   global   temporary   table   tt(c1   int,   c2   char(20))   %  
      insert   into   session.tt   values(p1,   p2);  
      begin  
          declare   c1   cursor   with   return   for   select   *   from   session.tt;  
      end;  
  end   %  
   
  2。事务特有的临时表  
        create   global   temporary     ()  
        on   commit   delete   rows;  
       
      在oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与ms和sybase不一样。实际上在断开数据库连接时,临时 表中数据自动清空,不同的session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用on   commit   delete   rows使数据仅在事物内部有效。

3建立临时表  
        临时表的定义对所有会话session都是可见的,但是表中的数据只对当前的会话或者事务有效.    
        建立方法:  
  1)   on   commit   delete   rows   定义了建立事务级临时表的方法.  
  create   global   temporary   table   admin_work_area  
                  (startdate   date,  
                    enddate   date,  
                    class   char(20))  
              on   commit   delete   rows;  
  example:  
  sql>   create   global   temporary   table   admin_work_area  
      2                     (startdate   date,  
      3                       enddate   date,  
      4                       class   char(20))  
      5                 on   commit   delete   rows;  
  sql>   create   table   permernate(   a   number);  
  sql>   insert   into   admin_work_area   values(sysdate,sysdate,'temperary   table');  
  sql>   insert   into   permernate   values(1);  
  sql>   commit;  
  sql>   select   *   from   admin_work_area;  
  sql>   select     *   from   permernate;  
    a  
  1  
  2)on   commit   preserve   rows   定义了创建会话级临时表的方法.  
  create   global   temporary   table   admin_work_area  
                  (startdate   date,  
                    enddate   date,  
                    class   char(20))  
            on   commit   preserve   rows;  
  example:  
   
  会话1:  
  sql>   drop   table   admin_work_area;  
  sql>   create   global   temporary   table   admin_work_area  
      2                     (startdate   date,  
      3                       enddate   date,  
      4                       class   char(20))  
      5               on   commit   preserve   rows;  
  sql>   insert   into   permernate   values(2);  
  sql>   insert   into   admin_work_area   values(sysdate,sysdate,'session   temperary');  
  sql>   commit;  
  sql>   select   *   from   permernate;  
   
                    a  
  ----------  
                    1  
                    2  
   
  sql>   select   *   from   admin_work_area;  
   
  startdate     enddate         class  
  ----------   ----------   --------------------  
  17-1ôâ   -03   17-1ôâ   -03   session   temperary  
   
  会话2:  
   
  sql>   select   *   from   permernate;  
   
                    a  
  ----------  
                    1  
                    2  
   
  sql>   select   *   from   admin_work_area;  
   
    未选择行.  
   
  会话2看不见会话1中临时表的数据.  

 



simone 2009-02-26 17:29
]]>
在hibernate中实现oracle的自动增长[转]http://www.blogjava.net/wangxinsh55/archive/2008/08/19/222956.htmlsimonesimonetue, 19 aug 2008 03:43:00 gmthttp://www.blogjava.net/wangxinsh55/archive/2008/08/19/222956.htmlhttp://www.blogjava.net/wangxinsh55/comments/222956.htmlhttp://www.blogjava.net/wangxinsh55/archive/2008/08/19/222956.html#feedback0http://www.blogjava.net/wangxinsh55/comments/commentrss/222956.htmlhttp://www.blogjava.net/wangxinsh55/services/trackbacks/222956.html在hibernate中实现oracle的自动增长

http://kuangbaoxu.javaeye.com/blog/192434

关键字: hibernate oracle sequence native
根据hibernate的文档,有两种方式实现实体对象的主键自动增长。
第一种:设置id的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同ms-sql,my-sql中的自动增长一样,不需要创建触发器,具体的oracle数据库脚本及hibernate配置文件如下:


[1]oracle数据表的创建脚本:
java代码
create table department (  
    id number(19,0) default '0' not null,  
    name varchar2(255) not null,  
    description clob  
);  
alter table department add constraint primary_0 primary key(id) enable;  
alter table department add constraint uk_department_1 unique (name);  
 
create sequence department_id_seq minvalue 10000 maxvalue 999999999999999999999999 increment by 1 nocycle; 

创建department表,并为department表创建一个单独的sequence,名字为sequence_id_seq,并不需要创建触发器。

[2]hibernate映射文件的配置:
java代码

  
      "-//hibernate/hibernate mapping dtd 3.0//en" 
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  
      
          
              
                department_id_seq  
           
  
       
  
          
          
   
  
 

在hibernate映射文件中,对id的生成策略选择sequence,指定sequence的名字department_id_seq就可以了,当你 保存新对象的时候,hibernate会自动取得department_id_seq.nextval作为新对象的id保存到数据库,所以不需要再使用触 发器再来生成新记录的id。


第二种:设置id的增长策略是native,但是需要创建一个名字为hibernate_sequence(这个名字好像是hibernate默认的 sequence名字,不创建会出错的)的全局使用的sequence,然后再对每一个表的id生成的时候,使用触发器,取得 hibernate_sequence.currval作为新记录的id,具体的oracle数据库脚本及hibernate配置文件如下:


[1]oracle数据表的创建脚本:
java代码


create table staff (  
    id number(19,0) default '0' not null,  
    name varchar2(255) not null,  
    age number(3,0) not null,  
    birthday date not null,  
    salary number(10,2) not null,  
    levelness float not null,  
    createtime timestamp not null,  
    enable char(2) default 'y' not null,  
    status varchar2(64) not null,  
    department_id number(19,0)  
);  
alter table staff add constraint primary_1 primary key(id) enable;  
alter table staff add constraint staff_ibfk_0 foreign key(department_id) references department(id) enable;  
alter table staff add constraint uk_staff_1 unique (name);  
create index idx_staff_status on staff(status);  
 
create sequence hibernate_sequence minvalue 90000 maxvalue 999999999999999999999999 increment by 1 nocycle;  
 
create or replace trigger staff_id_trg before insert on staff  
for each row  
begin  
    if inserting and :new.id is null then  
        select hibernate_sequence.currval into :new.id from dual;  
    end if;  
end; 

创建staff表,但是并没有为staff创建相应的主键sequence,而是创建了一个名字为hibernate_sequence的 sequence,然后创建一个触发器staff_id_trg,当执行insert操作时,hibernate会先执行一次 hibernate_sequence.nextval,所以在触发器中只需要取得hibernate_sequence.currval作为新记录的 id。

[2]hibernate映射文件的配置:
java代码


  
      "-//hibernate/hibernate mapping dtd 3.0//en" 
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  
      
          
              
       
  
          
          
          
          
          
          
          
          
          
   
  
 

在hibernate映射文件中,对id的生成策略选择native,hibernate会根据你数据库的触发器来生成新记录的id。

比 较两种做法,第二种做法也就是hibernate在代码中,实现了oracle中的触发器功能。对于不同的情况,选择不懂的做法。如果新的系统,新建的 oracle数据库,推荐使用第一种做法,简单,容易移植到其他支持自动增长的数据库;如果是老的系统,需要把其他数据库转换为oracle的,那就要用 第二种了,使用native的方式,可以不改动配置文件,兼容oracle和mysql之类带有自动增长的数据库。




安装有oracle数据库,创建数据库,总是要创建一个主键id,唯一标示各条记录,但oracle不支持自动编号,所以还得创建一个sequence(序列)语句如
    
create sequence bign nocycle maxvalue 9999999999 start with1;//增加数据

insertintotable (id,..) values(bign.nextval,..)

     在hibernate中的映射文件可这么写
   <id name="id" type="java.lang.long" column="id">
            
<generator class="sequence">
                 
<param name="sequence">bignparam>
            
generator>
   
id>



<id name="id" type="java.lang.long" column="id">
            
<generator class="increment">
  
id>


(increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)



simone 2008-08-19 11:43
]]>
网站地图