ORACLE数据库实操培训汇编.docx
《ORACLE数据库实操培训汇编.docx》由会员分享,可在线阅读,更多相关《ORACLE数据库实操培训汇编.docx(19页珍藏版)》请在冰豆网上搜索。
ORACLE数据库实操培训汇编
1.使用tnsnames.ora文件配置本地服务名
步骤:
1)切换到oracle用户
su-oracle
2)进入配置目录
cd$ORACLE_HOME/network/admin
3)配置本地服务名
tnsnames.ora配置文件用于配置本地服务名,可以手工修改文件配置,也可以通过netca工具配置。
打开tnsnames.ora文件:
vitnsnames.ora
拷贝样例连接串:
YXDB=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=james)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=yxdb)
)
)
配置新的服务名连接串:
NEW_YXDB=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=james)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=yxdb)
)
)
4)测试新的服务名连接串的可用性
在oracle用户下,执行tnspingnew_yxdb
如下表示正常状态:
[oracle@jamesadmin]$tnspingnew_yxdb
TNSPingUtilityforLinux:
Version11.2.0.4.0-Productionon18-MAY-201611:
51:
32
Copyright(c)1997,2013,Oracle.Allrightsreserved.
Usedparameterfiles:
/oracle/app/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
UsedTNSNAMESadaptertoresolvethealias
Attemptingtocontact(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.101)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yxdb)))
OK(0msec)
注释:
2.根据需求输出相应结果集(groupby,多表链接等)
例1:
分组函数groupby
计算按照工作职位分类最高平均工资和最低平均工资数。
SQL>SELECTMAX(AVG(sal)),MIN(AVG(sal))FROMEMPGROUPBYJOB;
例2:
多表链接
查询职员名称,组织编号,组织名称,公司位置。
selecte.ename,d.deptno,d.dname,d.locfromdeptd,empewhered.deptno=e.deptno;
3.根据要求编写存储过程,函数,视图
例1:
编写存储过程:
创建一个存储过程,查询员工姓名,员工岗位,雇佣日期和薪水。
CREATEORREPLACEPROCEDUREselectemp(employeenoININTEGER)
IS
employeenamevarchar2(20);
employeejobvarchar2(9);
employeehiredatedate;
employeesalnumber(7,2);
BEGIN
selectename,job,hiredate,sal
INTOemployeename,employeejob,employeehiredate,employeesal
FROMemp
WHEREempno=employeeno;
DBMS_OUTPUT.put_line('员工姓名'
||employeename
||'员工岗位'
||employeejob
||'雇佣日期'
||employeehiredate
||'薪水'
||employeesal);
EXCEPTION
WHENOTHERS
THEN
DBMS_OUTPUT.put_line('ERRORS!
!
!
');
END;
/
例2:
编写函数:
创建一个函数,返回3.14*(f*f)的值。
CREATEORREPLACEFUNCTIONarea(ffloat)
RETURNfloat
IS
BEGIN
RETURN3.14*(f*f);
ENDarea;
例3:
编写视图:
创建一个视图,可以查询员工的姓名,工作,雇佣日期,工资,组织名称。
createviewaccounting_viewas
select
e.ename"employee_name",
e.job"job",
e.hiredate"hiredate",
e.sal"salary",
d.dname"dep_name"
fromdeptd,empe
wheree.deptno=d.deptno;
4.数据库存储管理操作
步骤:
假设存在表空间TEST,要求给该表空间添加数据文件。
1)确认表空间TEST已存在的数据文件路径和大小
SQL>createtablespacetestadddatafile‘/oracle/app/oracle/oradata/yxdb/test01.dbf’size2M;
SQL>selectfile_name,tablespace_name,bytes/1024/1024fromdba_data_fileswheretablespace_name='TEST';
FILE_NAMETABLESPACE_NAMEBYTES/1024/1024
------------------------------------------------------------------------------------------
/oracle/app/oracle/oradata/yxdb/test01.dbfTEST2
2)按照需求添加数据文件,大小为2M,不开启自动扩展
SQL>altertablespacetestadddatafile'/oracle/app/oracle/oradata/yxdb/test02.dbf'size2Mautoextendoff;
Tablespacealtered
5.数据库闪回操作
步骤:
假设数据表被误删除,利用闪回恢复特性恢复误删数据表。
1)确认是否已经开启闪回
SQL>selectflashback_onfromv$database;
FLASHBACK_ON
------------------
NO
2)开启闪回功能
SQL>shutdownimmediate;
SQL>startupmount;
SQL>alterdatabaseflashbackon;
SQL>alterdatabaseopen;
SQL>selectflashback_onfromv$database;
3)确认闪回路径和空间大小
NAMETYPEVALUE
----------------------------------------------------------------------------
db_recovery_file_deststring/oracle/app/oracle/fast_recovery_area
db_recovery_file_dest_sizebiginteger4182M
4)模拟用户误删除数据库表,利用闪回特性恢复误删数据表,并重新命名
SQL>createusertestidentifiedbytestdefaulttablespacetest;
Usercreated.
SQL>grantdbatotest;
Grantsucceeded.
SQL>conntest/test;
Connected.
SQL>createtabletestasselect*fromdba_objectswhererownum<18000;
SQL>droptabletest;
Tabledropped.
SQL>selectobject_name,original_name,ts_name,createtime,droptimefromrecyclebin;
OBJECT_NAMEORIGINAL_NAMETS_NAMECREATETIMEDROPTIME
----------------------------------------------------------------------------------------------------------------------------------
BIN$Mxf36aYJUX7gU2U4qMAgfA==$0TESTTEST2016-05-18:
13:
16:
192016-05-18:
13:
17:
05
SQL>select*fromtest;
select*fromtest
*
ERRORatline1:
ORA-00942:
tableorviewdoesnotexist
SQL>flashbacktable"BIN$Mxf36aYJUX7gU2U4qMAgfA==$0"tobeforedroprenametotest1;
Flashbackcomplete.
SQL>selectcount(*)fromtest1;
COUNT(*)
----------
17999
6.Impdp/expdb导入导出数据操作
假设需求是导出用户test的表t1,并导入到用户test1中。
步骤:
1)创建模拟数据环境,并创建数据泵目录,以及授权。
SQL>createtabletest.t1tablespacetestasselect*fromdba_objectswhererownum<1000;
Tablecreated.
SQL>createusertest1identifiedbytest1defaulttablespacetest;
Usercreated.
SQL>grantdbatotest1;
Grantsucceeded.
SQL>!
---创建dump目录
[oracle@james~]$mkdirdump
[oracle@james~]$pwd
/home/oracle
[oracle@james~]$cddump
[oracle@jamesdump]$pwd
/home/oracle/dump
[oracle@jamesdump]$exit
exit
---创建数据泵目录,并授权
SQL>createorreplacedirectorydumpas'/home/oracle/dump';
Directorycreated.
SQL>grantread,writeondirectorydumptopublic;
Grantsucceeded.
2)导出用户test的数据表t1
expdp\"/assysdba\"directory=dumpdumpfile=t1.dmptables=test.t1logfile=t1.log
3)导入用户test的数据表t1到用户test2里
impdp\"/assysdba\"directory=dumpdumpfile=t1.dmpremap_schema=test:
test1logfile=test1.log
7.数据文件损坏的恢复操作(rman)
假设数据文件损坏,需利用备份进行恢复。
前提是使用RMAN进行全备份,确保备份集的完整。
步骤:
1)全备数据库
mkdir-p/home/oracle/backup
rmantarget/catalogrman/rman@catalog
run{
backupascompressedbackupsetfulldatabase
format'/home/oracle/backup/full_bk_%u%p%s.rmn'
includecurrentcontrolfile;
backupascompressedbackupsetarchivelogall
format'/home/oracle/backup/arch_bk_%u%p%s.rmn'
deleteallinput;
}
2)模拟数据文件损坏
[oracle@james~]$cd/oracle/app/oracle/oradata/yxdb
[oracle@jamesyxdb]$ls
control01.ctlredo01.logredo03.logsystem01.dbftest01.dbftest03.dbfundotbs01.dbf
example01.dbfredo02.logsysaux01.dbftemp01.dbftest02.dbftest04.dbfusers01.dbf
[oracle@jamesyxdb]$>test01.dbf(直接清空数据文件)
SQL>shutdownimmediate
ORA-01115:
IOerrorreadingblockfromfile6(block#1)
ORA-01110:
datafile6:
'/oracle/app/oracle/oradata/yxdb/test01.dbf'
ORA-27072:
FileI/Oerror
Additionalinformation:
4
Additionalinformation:
1
3)利用RMAN备份恢复数据库
SQL>shutdownabort
ORACLEinstanceshutdown.
SQL>startupmount
ORACLEinstancestarted.
[oracle@jamesbackup]$rmantarget/
RMAN>restoredatabase;
RMAN>recoverdatabase;
SQL>alterdatabaseopen;
8.重做日志文件损坏的恢复操作(rman)
假设重做日志文件损坏,恢复重做日志需根据实际情况,采用非常规的方式进行修复。
RMAN的备份集只用于恢复数据和归档。
步骤:
1)全备数据库
mkdir-p/home/oracle/backup
rmantarget/catalogrman/rman@catalog
run{
backupascompressedbackupsetfulldatabase
format'/home/oracle/backup/full_bk_%u%p%s.rmn'
includecurrentcontrolfile;
backupascompressedbackupsetarchivelogall
format'/home/oracle/backup/arch_bk_%u%p%s.rmn'
deleteallinput;
}
2)模拟当前重做日志文件损坏
SQL>selectgroup#,members,statusfromv$log;
GROUP#MEMBERSSTATUS
------------------------------------
11INACTIVE
21CURRENT
31INACTIVE
[oracle@james~]$cd/oracle/app/oracle/oradata/yxdb
[oracle@jamesyxdb]$ls
control01.ctlredo01.logredo03.logsystem01.dbftest01.dbftest03.dbfundotbs01.dbf
example01.dbfredo02.logsysaux01.dbftemp01.dbftest02.dbftest04.dbfusers01.dbf
[oracle@jamesyxdb]$echo"">redo02.log(直接清空日志文件)
SQL>startup
ORACLEinstancestarted.
TotalSystemGlobalArea313159680bytes
FixedSize2252824bytes
VariableSize171970536bytes
DatabaseBuffers134217728bytes
RedoBuffers4718592bytes
Databasemounted.
ORA-00313:
openfailedformembersofloggroup2ofthread1
ORA-00312:
onlinelog2thread1:
'/oracle/app/oracle/oradata/yxdb/redo02.log'
ORA-27048:
skgfifi:
fileheaderinformationisinvalid
Additionalinformation:
13
3)恢复重做日志
---设置隐含参数
SQL>altersystemset"_allow_resetlogs_corruption"=truescope=spfile;
Systemaltered.
SQL>shutdownimmediate
ORA-01109:
databasenotopen
Databasedismounted.
ORACLEinstanceshutdown.
SQL>startup
ORACLEinstancestarted.
TotalSystemGlobalArea313159680bytes
FixedSize2252824bytes
VariableSize176164840bytes
DatabaseBuffers130023424bytes
RedoBuffers4718592bytes
Databasemounted.
ORA-00313:
openfailedformembersofloggroup2ofthread1
ORA-00312:
onlinelog2thread1:
'/oracle/app/oracle/oradata/yxdb/redo02.log'
ORA-27048:
skgfifi:
fileheaderinformationisinvalid
Additionalinformation:
13
SQL>showparameterreset
NAMETYPEVALUE
----------------------------------------------------------------------------
_allow_resetlogs_corruptionbooleanTRUE
---进行不完全恢复
SQL>recoverdatabaseuntilcancel;
ORA-00279:
change739425generatedat05/20/201611:
48:
48neededforthread1
ORA-00289:
suggestion:
/home/oracle/flash/YXDB/archivelog/2016_05_20/o1_mf_1_50_%u_.arc
ORA-00280:
change739425forthread1isinsequence#50
Specifylog:
{=suggested|filename|AUTO|CANCEL}
ORA-00308:
cannotopenarchivedlog
'/home/oracle/flash/YXDB/archivelog/2016_05_20/o1_mf_1_50_%u_.arc'
ORA-27037:
unabletoobtainfilestatus
Linux-x86_64Error:
2:
Nosuchfileordirectory
Additionalinformation:
3
ORA-01547:
warning:
RECOVERsucceededbutOPENRESETLOGSwouldgeterrorbelow
ORA-01194:
file1needsmorerecoverytobeconsistent
ORA-01110:
datafile1:
'/oracle/app/oracle/oradata/yxdb/system01.dbf'
SQL>alterdatabaseopen;
alterdatabaseopen
*
ERRORatline1:
ORA-01589:
mustuseRESETLOGSorNORESETLOGSoptionfordatabaseopen
SQL>alterdatabaseopenresetlogs;
alterdatabaseopenresetlogs
*
ERRORatline1:
ORA-01092:
ORACLEinstanceterminated.Disconnectionforced
ORA-00600:
internalerrorcode,arguments:
[2662],[0],[739432],[0],
[740004],[4194432],[],[],[],[],[],[]
ProcessID:
9525
SessionID:
125Serialnumber:
5
SQL>!
[oracle@james~]$ps-ef|greppmon
oracle271910