c:>tnsping ora9
c:>sqlplus user/password@SID
SQL>connect system/manager as sysdba
sys/chang_on_install
===========================================================
imp user/pwd file=*.dmp commit=y 回滚段满就提交,不无限扩展回滚段。
imp user/pwd file=*.dmp commit=y full=y
imp user/pwd file=*.dmp commit=y table=*
select username from dba_users;
===========================================================
sco unix中开关数据库
关数据库文件在/etc/rco.d/k100ra
开数据库文件在/etc/rc2.d/sqsora
$sqldba lmode=y
sqldba>connect internal;
sqldba>shutdown immediate;
sqldba>startup;
--------------------------------
svrmgrl
svrmgr>connect internal
svrmgr>shutdown immediate
svrmgr>startup
lsnrctl
lsnrctl>stop
lsnrctl>start
===========================================================
表空间变大的问题!
UNDOTBS1的表空间增大,现已经达到11G,数据并不大,不知道什么原因造成的!
您可以增加回退段storage中的optimal属性,这个属性就是当回退段中没有活动事务时,自动回缩回退段到optimal设定的值,具体语句如下:sql>alter rollback segment 回退段名字 storage (optimal 10M);
另外您还可以手工回缩回退段,sql>alter rollback segment 回退段名字 shrink to 10M;
继续问一下回滚段问题,UNDOTBS设定是2G,最大没限制,现它已增长到了9G,查了一下,数据现占用3G左右,我用命令:sql>alter rollback segment 回退段名字 shrink to 4G;时提示ORA-30019: Illegal rollback Segment operation in Automatic Undo mode,现该怎么缩小它啊?
alter rollback segment 回退段名字 shrink to 4G 只允许在回退段为手动管理模式下使用,自动管理时不可使用。
请查看数据库参数 show parameter undo_
===========================================================
在数据库中,建有100多个库,运行 SELECT * FROM CAT;命令后,大部分库名都运行过去了,只看到最下方的几个,如何全部看到所有的数据库
进入sqlplus环境,执行set pause on,在执行select * from cat;
按回车键就可以分屏看了
===========================================================
表空间使用率
一、如何查看tablespace的空间使用情况
sql>select
a.file_id fileid,
a.file_name 文件名,
a.tablespace_name 表空间名,
a.bytes total_bytes,
(a.bytes-sum(nvl(b.bytes,0))) 已使用,
sum(nvl(b.bytes,0)) 未使用,
sum(nvl(b.bytes,0))/(a.bytes)*100 未使用率
from dba_data_files a, dba_free_space b
where a.file_id=b.file_id
group by a.tablespace_name,a.file_id,a.bytes,a.file_name
order by a.file_id
二、如何查看table的空间使用情况
1、analyze table tablename(你想查的表名) compute
statistics;
2、select table_name,blocks,empty_blocks from dba_tables
where table_name=‘ ’;
===========================================================
用户在进行输
入操作时,输入了两条完全一样的记录。当用户想删除这条记录时,系统出错,提示“多条记录被操作”。无法删除记录。请教高手,如何解决问题。
1、select rowid,其他列名 from tablename;(你想进行删除操作的表名)。
2、记下你想删除的记录所对应的rowid的值
3、delete from tablename where rowid='rowid的值';
应该就可以了。
where 条件加上 rownum=1 就可以删除第一条记录。注意,rownum只能接“=”或“<”,不能接“>”。
其实使用rownum有很大的局限性,比如,只能删除rownum=1的行。
可使用“相关删除”的方法删除重复记录:
SQL>delete tname o wid <>
(select max(rowid) from tname i
lname);
其中:colname为基表tname的列名,可用多列。
===========================================================
我用 select
b.file_id file_id,
b.tablespace_name tablespace_name,
b.bytes/1024 bytes,
(b.bytes-sum(nvl(a.bytes,0)))*1.0/1024 used_spaces,
sum(nvl(a.bytes,0))/1024 free_spaces,
sum(nvl(a.bytes,0))/(b.bytes)*100 free_pict
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id
查看free_space 还有6.26% ,大量删除记录后,查看free_space 仍为6.26% ,不知何故? 如何释放表空间?
举个例子吧:一个表空间大小为10M,它里边有一张表,这张表当前的大小为2M,则不论这张表里有多少数据,哪怕它是一张空表,它仍然占用了这个表空间2M的空间。
至于你说的如何释放表空间,看了你的描述,你是对表空间里的一些表进行了大量的删除操作,对于你这种情况,你可以用以下SQL语句试试:
ALTER TABLE tablename DEALLOCATE UNUSED;(这里的tablename是指你进行过大量删除操作的表)
===========================================================
如何修改ORACLE的字符代码集,如何用SQL语句可以修改(ZHS16GBK)(ZHS16CGB231280)
在sys用户下:
update table props$ set vaules='ZHS16CGB213280' where name='nls_lang';
update props$ set value$='ZHS16CGB231280' where name='NLS_CHARACTERSET';
update props$ set value$='ZHS16CGB231280' where name='NLS_NCHAR_CHARACTERSET';
commit;
===========================================================oracle登录命令
某存储过程被锁死,用drop命令不能删除,如何停止该存储过程?
1 select job,failures from user_jobs;
2 exec ve(the content of job);
3 drop procedure ..;
===========================================================
1.怎么验证监听已经开启?
命令:lsnrctl status
host地址,SERVICE_NAME
3.数据库怎样open?
命令:svrmgrl
svrmgr>connect internal
svrmgr>startup
即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等.在这种情况下,最简单的方法是offline并删除该数据文件,删除表空间并重建表空间以及所有的对象.
svrmgrl> startup mount
svrmgrl> alter database datafile filename offline drop;
svrmgrl> alter database open;
svrmgrl> drop tablespace tablespace_name including contents;
重建表空间及所有对象.
2.用户的表空间不能够被轻易地重建
在大多数情况下,重建表空间是不可能及太辛苦的工作.方法是倒备份及做介质恢复.如果您的系统运行在NOARCHIVELOG模式下,则只有丢失的数据在online redo log中方可被恢复。
步骤如下:
1)Restore the lost datafile from a backup
2)svrmgrl> startup mount
3)svrmgrl> up#,member,sequence#,first_change#
> from v$log v1,v$logfile v2
> up#=v2.group#;
4)如果数据库运行在NOARCHIVELOG模式下则:
svrmgrl> select file#,change# from v$recover_file;
如果 CHANGE# 大于最小的FIRST_CHANGE#则数据文件可以被恢复。
如果 CHANGE# 小于最小的FIRST_CHANGE#则数据文件不可恢复。 恢复最近一次的全备份或采用方案一.
5)svrmgrl> recover datafile filename;
6)确认恢复成功
7)svrmgrl> alter database open resetlogs;
3.只读表空间无需做介质恢复,只要将备份恢复即可.唯一的例外是:
表空间在最后一次备份后被改为read-write 模式
表空间在最后一次备份后被改为read-only 模式
在这种情况下,均需进行介质恢复
二)临时表空间
临时表空间并不包含真正的数据,恢复的方法是删除临时表空间并重建即可.
三)系统表空间
如果备份不可用,则只能采用重建数据库的方法
四)回滚表空间
有两种情况:
1、数据库已经完全关闭(使用shutdown immediate或shutdown命令)
1) 确认数据库完全关闭
2) 修改a文件,注释"rollback-segment"
3) svrmgrl> startup restrict mount
4) svrmgrl> alter database datafile filename offline drop;
5) svrmgrl> alter database open;
基于出现的结果:
"statement processed" 转(7)
"ORA-00604,ORA-00376,ORA-01110"转(6)
6) svrmgrl> shutdown immediate
修改a文件,增加如下一行:
_corrupted_rollback_segments = (,...)
svrmgrl> startup restrict
7) svrmgrl> drop tablespace tablespace_name including contents;
8) 重建表空间及回滚段
9) svrmgrl> alter system disable restricted session;
10) 修改a文件
2、数据库未完全关闭(数据库崩溃或使用shutdown abort命令关闭数据库)
1) 恢复备份
2) svrmgrl> startup mount
3) svrmgrl> select file#,name,status from v$datafile;
svrmgrl> alter database datafile filename online;
4) svrmgrl> up#,member,sequence#,first_change#
> from v$log v1,v$logfile v2
> up#=v2.group#;
5) svrmgrl> select file#,change# from v$recover_file;
见一方
案2-4
6) svrmgrl> recover datafile filename;
7) svrmgrl> alter database open;
3、数据库处于打开状态
1) 删除回滚段和表空间
2) 重建表空间和回滚段
五)控制文件恢复
1.所有的控制文件均被破坏
将备份的控制文件拷贝至原目录下
对于RAW DEVICE,则:
dd if='con.bak' of='/dev/rdrd/drd1' seek=128
2.并非所有的控制文件均被破坏
用其他的控制文件启动数据库
===========================================================
如何限制用户登录使用ORACLE??
我使用的是oracle816,但是在$ORACLE_HOME/network/admin/中
没有a文件,自己生成一个文件,然后怎加两行:
protocol.INVITED_NODES=(10.21.2.51,10.21.72.8,10.21.72.15)
protocol.VALIDNODE_CHECKING=yes
其中10.21.2.51是数据库服务器的地址,10.21.72.8,10.21.72.15是用户机的地址,可是其他机子还是能使用服务器
可能有一些同志对这个话题比较感兴趣,我下面就把具体步骤写一下,希望对大家的工作有所帮助:
对于oracle7:
1、编辑$ORACLE_HOME/network/a文件
tcp.invited_nodes=()(这里的ip必须包括数据库所
在机器的所有地址)
tcp.validnode_checking=yes
2、重启listener
对于oracle8:
1、编辑$ORACLE_HOME/network/admin/.a文件(注意前边
有个点)
tcp.invited_nodes=()(这里的ip不必包括数据库所
在机器的地址)
tcp.validnode_checking=yes
2、重启listener
以后不管在文件中增加或减少ip,修改完文件后,都必须重启listener,改动才能生效。
===========================================================
查看某个表的空间使用情况:
1、analyze table tablename(你想查的表名) compute statistics;
2、select table_name,blocks(已使用的块数),empty_blocks(未使用的块数) from dba_tables where table_name=‘ ’;
查看某个表占表空间的大小:
select segment_name,tablespace_name,bytes,blocks from user_segments where segment_type='';
===========================================================
我们一个服务器的文件系统坏了,oracle的系统文件都不回来了,但是应用程序的数据文件还是好的。
请问能否重新安装oracle后将没有损坏的数据文件加入数据库中?
你所说的应用程序的数据文件还是好的,到底是导出的数据文件,还是oracle的核心文件(Control files,Data files,Redo log files)?如果是导出的数据文件,oracle装好后重新导入即可;如果是核心文件是好的,并且是在oracle关闭时备份出来的,则可对应目录copy回去,重新启动oracle。
Oracle的核心文件Control files,Data files,Redo log files)所在的文件系统/oracle都坏了,只有用户的数据文件是好的(/dbf/cxgl.dbf,/dbf/hygl.dbf)?
用户的表空间数据库文件(/dbf/cxgl.dbf,/dbf/hygl.dbf
)是无法被别的oracle系统open的,如果你没有做导出备份或oracle的冷备份,那你就没办法了。请记住重要数据要做备份!!!
连控制文件都坏了,那就没有什么办法了,这些数据文件已经无法使用了
===========================================================
if rtrim(:cz.yfbz) is not null then
:xck.yfbz:='# = '||''''||rtrim(:cz.yfbz)||'''';
break;message('xck.yfbz='||:xck.yfbz); *我加的跟踪显示*/
end if;
if rtrim(:cz.czjm) is not null then
::='# in (select cz d where jm='''||
rtrim(:cz.czjm)||''')';
end if;
这段程序是由块CZ中的域YFBZ和域CZJM的内容来改变块XCK的查询条件。如当我在CZ.YFBZ中输入A时,执行的结果就是XCK对应的表中YFBZ='A'的记录.而在跟踪信息中显示的是"xck.yfbz=# = 'A'".
我要请教的是在这里"#"是什么意思?如何才能动态改变块的查询、排序条件?
你用的是form30;你可以在你的的触发器中会发现pre_query这个出发期,然后你打开看一下其中的内容,你会发现有#,实际这是一种表示方式,既根据你所输入的cz信息作为查询条件来进行查询。这是一种基于动态的最简单的查询处理的程序编写方式,很实用但很老套。
针对于动态改变块的查询和排序条件可以通过程序设置属性的办法来进行处理;希望你能明白!
简单的方法:使用全局变量来设定动态查询
===========================================================
注:解释快照
ORACLE的表快照特征允许一个主表在分布式数据库的其它结点进行复制。只允许修改主表,而复制只可读。主表达式每一个复制称为一个快照。快照异步的刷新,反映主表的一个最近事务一致状态。
一个快照可为表的完全拷贝或者为表的一个子集,由引用一个或多个主表、视图或其它快照的分布式查询所定义。包含主表的数据库称为主数据库。
快照有简单快照和复杂快照。简单快照的每行是基于单个远程表中的一行。所以定义简单快照的查询中不能有GROUB BY或CONNECT BY子句,或子查询、连接或集合操作。如果在快照定义的查询中包含有上述子句或操作,这种快照称为复杂快照。
在快照建立时,ORACLE在快照的模式中建立几种内部对象:
在快照结点,ORACLE建立一基表用于存储由快照定义的查询所检索的行,然后为该表建立一个只读的视图,并为远程主表建立一视图,该视图用于新快照。
一个快照周期地被刷新,反映它的主表的当前情况。为了刷新一快照,快照定义查询是被发出,其查询结果想在存储在快照中,代替以前的快照数据。
当快照为简单快照时,可以由快照日志来刷新,这样可加快刷新处理。快照日志是在主表数据库中的一表,与主表相关
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论