您的位置:
首页 >> 资讯资料 >> IT培训 >> 正文:Oracle数据库常见问题答疑[1]

Oracle数据库常见问题答疑[1]

 Oracle数据库以其强大的功能和稳定性而著称,但同时,在开发和管理方面也存在很多困难,笔者在此总结了一些Oracle数据库开发和管理的常见问题,希望能对大家有所帮助。 

问:如果发现表中有坏块,如何检索其它未坏的数据? 

答:首先需要找到坏块的ID(可以运行dbverify实现),假设为1234。运行下面的查询查找段名: 

select segment_name, segment_type, block_id, blocks 
 

from dba_extents 

where (1234 between block_id and (block_id + blocks - 1)); 

一旦找到坏段名称,若段是一个表,则最好建立一个临时表,存放好的数据。若段是索引,则删除它,再重建。 

create table good_table 

as 

select � from bad_table where rowid not in 

( select /�+index(bad_table, any_index)�/ rowid 

from bad_table where substr( rowid, 1, 8 ) = 1234) 

问:如请问如何关闭FORM调用REPORT时的小窗口? 

答:在利用Oracle数据库的Develop 2000设计开发界面的过程中,当FORM调用REPORT时,会显示一个背景窗口REPORT BACKGROUD ENGINE,等待FORM对REPORT的调用,当FORM调用其它REPORT时,也使用这个后台服务器,不论调用多少个REPORT,这个后台服务器存在且只有一个。但当FORM与REPORT全部退出后,该窗口仍处于等待状态,不会关闭,这时,我们需要手工将其关闭。 

我们可以使用以下参数在FORM调用REPORT时不显示这个小窗口: 

Add_Parameter( pl_id, 'ORACLE_SHUTDOWN',TEXT_Parameter, 'Yes' ); 

需要注意的是,该参数必须加在所有参数的前面,即它必须为第一个参数。
问:请问如何根据查询条件在REPORT中动态显示记录? 

答:1. 在REPORT的“数据模型”下面的“用户参数”中,创建用户自定义参数W_CLAUSE,W_CLAUSE为从FORM传递过来的查询条件,数据类型为字符型,缺省值为NULL。 

2. 修改查询Q_1,将SQL查询语句修改为select � from dept &&w_clause。 

3. 在运行报表时,报表会自动将符合&&w_clause的查询条件记录显示出来。 
 

如果从FORM传递过来的w_clause为where dept=1,本报表的SQL查询自动转换为select � from dept where dept=1,并在报表运行结果中显示符合该查询条件的记录,如果从FORM传递过来的w_cluase为where to_char(年度,'YYYY.MM')='2000.03',则在报表运行结果中自动显示2000年3月份的记录。 

问:在Oracle中,我们如何查看某表上的约束? 

答:我们可以使用下面语句从all_constraints视图中查看某表上的约束: 

SELECT constraint_name, table_name, r_owner, r_constraint_name 

FROM all_constraints 

WHERE table_name = 'table_name' and owner = 'owner_name'; 

另一个视图ALL_CONS_COLUMNS也包括组成表上约束列的信息。 

问:如何将数据库从noarchivelog方式改变为archivelog方式? 

答:首先打开Init.ora文件,确保存档日志目标指向一有效目录。 

然后启动Server Manager 

svrmgrl〉 shutdown immediate 

svrmgrl〉 startup mount 

svrmgrl〉 alter database archivelog; 

svrmgrl〉 alter database open; 

svrmgrl〉 archive log list; 

在init.ora中设置参数archive_log_start=TRUE,它设置存档日志为自动启动。在Oracle 8i中支持多个存档日志的目标,因此参数修改为log_archive_dest[n],其中n为1到5。 

问:在Oracle数据库中,我们如何增加表空间的大小? 

答: 在开发Oracle数据库中,我们有两种方法增加表空间的大小: 

1.增加额外的数据文件到表空间中 

例如:alter tablespace users add datafile '/u01/oradata/orcl/users02.dbf' size 25m; 

2.修改表空间当前的数据文件 

例如:alter database datafile 

'/u01/oradata/orcl/users01.dbf' resize 50M; 
问:请问如何在REPORT中设置动态显示域? 

答:在REPORT中设置动态显示域的方法如下: 

1. 在REPORT的“数据模型”下面的“用户参数”中,创建用户自定义参数,如RQ,RQ是从FORM传递过来的显示日期,数据类型为字符型。 

2. 在布局模型中,创建一个显示域F_1,在属性选项板中修改该显示域的源为用户自定义参数RQ,并且设为“不可见的”。 

3. 在动态预览中,创建一个文本域D_1,调整该文本域的位置和宽度,在该域的内容中输入&&F_1,则该域会动态显示用户定义参数RQ的值。
问:有关口令 

我在Solaris系统上运行 Oracle8i 8.1.7企业版。我创建了两个数据库:SUGAR和TestDb。将两者的remote_login_passwordfile都设置为 “独占(exclusive)”。我试图以SYSDBA身份连接到TestDb,但未能成功。下面是我的做法: 

$sqlplus /nolog 

SQL> conn sys/change_on_install@testdb 
 

Connected.(已连接) 

SQL> select * from v$pwfile_users; 

username sysdb sysop 

internal true true 

sys true true 

SQL> conn sys/change_on_install@testdb as 

sysdba 

ERROR(错误) 

ORA-01017: invalid username/password; logon 

denied(无效的用户名/口令,登录被拒绝) 

Warning: You are on longer connected to 

ORACLE(警告:你已经与ORACLE断开连接) 

我为什么不能以SYSDBA身份连接到TestDb? 

答:通常Oracle中的SYS口令与INTERNAL口令是同步的,SYS口令存储于口令文件中。在上述情况下你建立了包含有一个口令的口令文件,而不是使用缺省的 “change_on_install,”这就是问题之所在。 

希望下面的方法对你有所帮助。首先,建立一个口令文件,其中包含一个口令,这个口令不要与系统口令匹配: 

$ orapwd file=orapw password=foobar 

entries=40 

然后,进入服务器,启动数据库: 

$ svrmgr 

SVRMGR> connect internal 

Connected.(已连接) 

SVRMGR> startup 

ORACLE instance started.(ORACLE 实例已启动) 

Total System Global Area (系统全局区域大小) 

193073136 bytes 

Fixed Size (固定大小) 

69616 bytes 

Variable Size (可变大小) 

141639680 bytes 

Database Buffers (数据库缓冲区) 

45056000 bytes 
【编辑:本站编辑┊来源:培训资讯网┊2006-09-28】TAGS:
评论与咨询 内容报错
姓名: 电话: 邮箱: 地址:

  • ·本咨询平台是部分培训机构与本站指定的网上报名、咨询的专用平台,您可以通过此处提交您的信息,我们或该机构会根据您所提交的信息及时给予回复;
  • ·为了更好的问您服务,请填写您真实的姓名和相关联系方式,以便我们能及时给您答复;
  • ·不得提交有关违反国家互联网规定的不良信息,对于违规者我们有权追究你的法律责任!若有任何问题请 联系我们
关于我们 | 服务条款 | 广告服务 | 客服中心 | 网站导航 - 设为首页 - 收藏本站
Copyright © 2006-2008 www.0513edu.com.cn All Rights Reserved
南通培训资讯网 版权所有
Powered By:AspArticle2.0 在远方