数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

网友经验:学习oracle快速入门随笔


发布日期:2022年06月22日
 
网友经验:学习oracle快速入门随笔
修改密码方法

SQL>; grant connect to USRNAME identified by USRPWD ;

SQL>; alter user USRNAME identified by USRPWD ;

SQL>; password USRNAME ;

更改 USRNMAE 的口令

旧口令××××××

新口令××××××

重新键入新口令××××××

修改成oracle认证方法

修改参数文件中

remote_login_passwordfile=EXCLUSIVE 或SHARED

修改/home/network/admin/SQLNETORA 文件

增加 sqlnetauthentication_services=(NFS)

ORACLE_SID是操作系统级的参数

INSTANCE_NAME是数据库级的参数

SPFILE 是服务器参数文件

PFILE 是文本参数文件

create pfile=/oracle/testora from spfile ;

show parameter spfile ; 后如果VALUE值是零则没有使用spfile

启动数据库是可以指定是用pfile还是用spfile启动 如下

startup pfile=/oracle/testora

show parameter instance

show parameter db

alter system set job_queue_processes=

comment =temporaty change on

scope = memory|spfile|both ;

alter session set

CONCAT(Good String) GoodString

SUBSTR(String) Str

LENGTH(String)

INSTR(String r)

LPAD(sal*) ******

union

union all

minus 第一个查询减去第二个查询

intersect 交集

SQL>; select replace(itpub oracleoracletraining)itpub from dual

/

ITPUB

itpub training

Translate

SQL>; select translate(This is second trianing of itpub in Beijing!abcde) itpub

from dual;

ITPUB

This is son trining of itpu in Bijing!

Floor

SQL>; select floor() from dual;

FLOOR()

Ceil

SQL>; select ceil() from dual;

CEIL()

ROUND: 入到指定的小数位

ROUND( )

TRUNC: 将值截断到指定的小数位

TRUNC( )

MOD: 返回相除后的余数

MOD( )

select trunc(sysdate D) from dual;

trunc(sysdate D) 截取到本周的第一天(:)

trunc(sysdate M) 截取到本月的第一天(:)

trunc(sysdate DD) 截取到本日的:

trunc(sysdateyyyy)得到今年的第一天的:

十进制与十六进制

EYGLE@vilen>; select to_char(xxxx) from dual;

TO_CH

f

已选择

十六进制与十进制

EYGLE@vilen>; select to_number(fxxxx) from dual;

TO_NUMBER(FXXXX)

SQL>; select enamesal

case job WHEN MANAGER THEN *sal

WHEN ANALYST THEN *SAL

WHEN CLERK THEN *SAL

ELSE sal END NEW_SAL

from emp;

ENAME SAL NEW_SAL

SMITH

ALLEN

WARD

JONES

MARTIN

BLAKE

CLARK

SCOTT

KING

TURNER

ADAMS

JAMES

FORD

MILLER

SQL>; SELECT job sal

DECODE(job ANALYSTSAL*

CLERK SAL*

MANAGER SAL*

SAL)

REVISED_SALARY

FROM emp;

JOB SAL REVISED_SALARY

PRESIDENT

MANAGER

MANAGER

将空值转换为实际的值

数据格式可以是日期字符数字

数据类型必须匹配

NVL(comm)

NVL(hiredateJAN)

NVL(jobNo Job Yet)

NVL(exprexprexpr)

如果expr不为Null返回expr如果expr为Null返回expr

expr可以为任何数据类型

NULLIF(exprexpr)

比较两个表达式如果相等返回空值如果不等返回第一个值

COALESCE(exprexprexprn)

返回表达式列表里的第一个非空表达式

错误:

在启动数据库时出现ORAORA或操作系统级错误例如ORA

在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA

ORA以及操作系统级错误ORA

解决:

以下有两种解决方案:

用户的表空间可以被轻易地重建

即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等在这种情况下最简单的方法是offline并删除该数据文件删除表空间并重建表空间以及所有的对象

svrmgrl>; startup mount

svrmgrl>; alter database datafile filename offline drop;

svrmgrl>; alter database open;

svrmgrl>; drop tablespace tablespace_name including contents;

重建表空间及所有对象

用户的表空间不能够被轻易地重建

在大多数情况下重建表空间是不可能及太辛苦的工作方法是倒备份及做介质恢复如果您的系统运行在NOARCHIVELOG模式下则只有丢失的数据在online redo log中方可被恢复

步骤如下:

)Restore the lost datafile from a backup

)svrmgrl>; startup mount

)svrmgrl>; select vgroup#membersequence#first_change#

>; from v$log vv$logfile v

>; where vgroup#=vgroup#;

)如果数据库运行在NOARCHIVELOG模式下则:

svrmgrl>; select file#change# from v$recover_file;

如果 CHANGE# 大于最小的FIRST_CHANGE#则数据文件可以被恢复如果 CHANGE# 小于最小的FIRST_CHANGE#则数据文件不可恢复 恢复最近一次的全备份或采用方案一

)svrmgrl>; recover datafile filename;

)确认恢复成功

)svrmgrl>; alter database open resetlogs;

只读表空间无需做介质恢复只要将备份恢复即可唯一的例外是:

表空间在最后一次备份后被改为readwrite 模式

表空间在最后一次备份后被改为readonly 模式

在这种情况下均需进行介质恢复

临时表空间

临时表空间并不包含真正的数据恢复的方法是删除临时表空间并重建即可

系统表空间

如果备份不可用则只能采用重建数据库的方法

回滚表空间

有两种情况:

数据库已经完全关闭(使用shutdown immediate或shutdown命令)

) 确认数据库完全关闭

) 修改initora文件注释rollbacksegment

) svrmgrl>; startup restrict mount

) svrmgrl>; alter database datafile filename offline drop;

) svrmgrl>; alter database open;

基于出现的结果:

statement processed 转()

ORAORAORA转()

) svrmgrl>; shutdown immediate

修改initora文件增加如下一行:

_corrupted_rollback_segments = ()

svrmgrl>; startup restrict

) svrmgrl>; drop tablespace tablespace_name including contents;

重建表空间及回滚段

) svrmgrl>; alter system disable restricted session;

) 修改initora文件

数据库未完全关闭(数据库崩溃或使用shutdown abort命令关闭数据库)

) 恢复备份

) svrmgrl>; startup mount

) svrmgrl>; select file#namestatus from v$datafile;

svrmgrl>; alter database datafile filename online;

) svrmgrl>; select vgroup#membersequence#first_change#

>; from v$log vv$logfile v

>; where vgroup#=vgroup#;

) svrmgrl>; select file#change# from v$recover_file;

见一方案

) svrmgrl>; recover datafile filename;

) svrmgrl>; alter database open;

数据库处于打开状态

) 删除回滚段和表空间

) 重建表空间和回滚段

控制文件恢复

.所有的控制文件均被破坏

将备份的控制文件拷贝至原目录下

对于RAW DEVICE则:

dd if=conbak of=/dev/rdrd/drd seek=

.并非所有的控制文件均被破坏用其他的控制文件启动数据库

数据文件上所存储的表

select asegment_name from dba_extents adba_data_files b

where afile_id = bfile_id

and bfile_name = 文件名全路径

and asegment_type = TABLE

job不能自动运行

check db parameters

job_queue_processes

if it set to

then set it larger than

job_queue_processes=

问题描述

执行如下语句

select session_idobject_name from v$locked_object adba_objects b

where aobject_id=bobject_id

error: ora Temporary Segment cannt be cteated in locallymanaged tablespace

更改为sys 用户 以dba登录可以查询

SHUTDOWN IMMEDIATE

STARTUP MOUNT

RECOVER DATABASE

ALTER DATABASE OPEN

查看表大小!

select segment_name(bytes/)/||M 大小

((BLOCKS*DB_BLOCK_SIZE)/)/||M占用空间

from dba_segments

wheresegment_name =

db_block_size 是参数

查询未提交事务

select username SID|||| SERIAL# ses TSTATUS START_TIME RNNAME USED_UBLK USED_UREC

from v$transaction T v$session S v$rollstat RS v$rollname RN

where TSES_ADDR = SSADDR

and TXIDUSN = RSUSN

and RNUSN = RSUSN

order by USED_UBLK;

我们在操作数据库的时候有时候会由于操作不当引起数据库表被锁定这么我们经常不知所措不知怎么给这些表解锁在pl/sql Developer工具的的菜单tools里面的sessions可以查询现在存在的会话但是我们很难找到那个会话被锁定了想找到所以被锁的会话就更难了下面这叫查询语句可以查询出所以被锁的会话如下

SELECT snusername mSIDsnSERIAL# mTYPE

DECODE (mlmode

None

Null

Row Share

Row Excl

Share

S/Row Excl

Exclusive

lmode LTRIM (TO_CHAR (lmode ))

) lmode

DECODE (mrequest

None

Null

Row Share

Row Excl

Share

S/Row Excl

Exclusive

request LTRIM (TO_CHAR (mrequest ))

) request

mid mid

FROM v$session sn v$lock m

WHERE (snSID = mSID AND mrequest != ) 存在锁请求即被阻塞

OR ( snSID = mSID 不存在锁请求但是锁定的对象被其他会话请求锁定

AND mrequest =

AND lmode !=

AND (id id) IN (

SELECT sid sid

FROM v$lock s

WHERE request != AND sid = mid

AND sid = mid)

)

ORDER BY id id mrequest;

通过以上查询知道了sid和 SERIAL#就可以开杀了

alter system kill session sidSERIAL#;

在SQLPLUS里

不显示 行头

set heading off pages

不显示行数信息

set feedback off

不在屏幕上显示结果

set termout off

由于该问题由oarcle工程师定位为无法恢复并在网上进行了求助也每人能解决所以

我可以方下包袱去大胆的尝试新办法按照我对数据库的框架理解去寻求办法

因为无法联机的表空空间为用户表空间所以不影响数据库系统的启动所以

通过 SQL>;startup mount;

SQL>;alter database open;启动数据库

我查看了l#sysobj#表想从表中得到关于datafile的信息但没有能找

到我认为需要的信息

后来我查看了sysfile#发现了所有数据文件的记录然后我找到对应的file的记录

想通过删除该记录来屏蔽表空间启动时的数据文件的完整性检测于是现对sysfile#进

行了备份然后删除了file对应的记录

此时执行SQL>;alter database tablespace ts_user online;

提示数据库已被修改我惊喜的发现表空间被联机成功了

由于相应的数据文件在这之前已经损坏而且该数据文件已经被设置成了offline并且局方在数据库关闭后在mount状态下直接对该文件所在表空间进行了offline操作所以现在如果再通过alter database datafile filename offline drop已经不起作用因为此时的表空间默认的状态为offline该数据文件与其所在表空间(联机或脱机)具有一致性所以此时如果想启动该表空间只能通过屏蔽数据文件的完整性检查! 数据库业务表空间联机失败 数据库业务表空间联机失败

由于该问题由oarcle工程师定位为无法恢复并在网上进行了求助也每人能解决所以我可以方下包袱去大胆的尝试新办法按照我对数据库的框架理解去寻求办法因为无法联机的表空空间为用户表空间所以不影响数据库系统的启动所以通过 SQL>;startup mount;SQL>;alter database open;启动数据库我查看了l#sysobj#表想从表中得到关于datafile的信息但没有能找到我认为需要的信息后来我查看了sysfile#发现了所有数据文件的记录然后我找到对应的file的记录想通过删除该记录来屏蔽表空间启动时的数据文件的完整性检测于是现对sysfile#进行了备份然后删除了file对应的记录此时执行SQL>;alter database tablespace ts_user online;提示数据库已被修改我惊喜的发现表空间被联机成功了

/dev/rlvdata文件需要介质恢复表空间联机失败!

上一篇:在oracle中进行列行转换

下一篇:PL/SQL程序结构(组图)