第九次Oralcle课堂笔记程序包与备份恢复.docx
- 文档编号:15478207
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:24
- 大小:21.10KB
第九次Oralcle课堂笔记程序包与备份恢复.docx
《第九次Oralcle课堂笔记程序包与备份恢复.docx》由会员分享,可在线阅读,更多相关《第九次Oralcle课堂笔记程序包与备份恢复.docx(24页珍藏版)》请在冰点文库上搜索。
第九次Oralcle课堂笔记程序包与备份恢复
第八次课Oracle课堂笔记【程序包package和备份恢复】
今天主要讲的是程序包与备份恢复
程序包是一个相关的过程。
程序包=包规范+包主体这两者缺一不可
包规范--->程序的上下文都都使用的公有部分,比如DBMS_OUTPUT.put_line();
包规范中有类型,常量,变量,异常,游标规范,和子程序规范
例如:
包规范的声明
Create[orreplace]packagemypackage1is
typeis;
[publicitemdeclarations]
[subfunction声明]
endmypackage1;
包主体的部分
create[orreplace]packagebodymypackage1is
begin
[初始化的部分,如果没有内容,必须加上null]
endmypackage1;
上面需要注意的是必须要保证包的名称必须一致。
---------------------------------------------------------------------------
我们采用可视化创建包生成的代码是:
/*
包规范自动生成的内容
*/
createorreplacepackagemypackage1is
--Author:
ADMINISTRATOR
--Created:
2011/9/1916:
05:
37
--Purpose:
作为测试使用
--Publictypedeclarations
type
--Publicconstantdeclarations
=
--Publicvariabledeclarations
--Publicfunctionandproceduredeclarations
function
endmypackage1;
/*
包主体自动生成的内容
*/
createorreplacepackagebodymypackage2is
--Privatetypedeclarations
type
--Privateconstantdeclarations
=
--Privatevariabledeclarations
--Functionandprocedureimplementations
function
begin
return(
end;
begin
--Initialization
endmypackage2;
----------------------------------------------------------------------------------------------------
上面我们可以看到所有的声明的区域,在包规范中申明的区域是公有的
下面为了使我们的加深印象,我们采用手写代码的形式
/*
定义了一个包的类型
记得一定要包的规范和包的主体名称要保持一致
*/
createorreplacepackageMP1is
typemycursorisrefcursor;--mycursor是定义的一个游标的类型,这些都是公有的
myvalueconstantnumber:
=1;--myvalue是定义的一个常量的类型,这些都是公有的
mynumbernumber:
=10;--mynumber是定义的一个变量的类型,这些都是公有的
endMP1;
createorreplacepackagebodyMP1is
typemycursor1isrefcursor;
myvalue1constantnumber:
=2;
mynumber1number:
=20;
begin
null;
endMP1;
/*
现在我们看一下如何调用它
*/
declare
mytypecursorMP1.mycursor;--这样我们一点就出来
myconstantnumbernumber;
begin
myconstantnumber:
=MP1.myvalue;
dbms_output.put_line(myconstantnumber);
end;
----------------------------------------------------------------------------------------------------------
如果我们在包里面加上函数,也要现在包的规范里面提前进行申明。
functionmyfunction1(myxhvarchar2)returnnumber;--这个是函数的申明
然后再函数的主体里面写函数的执行的部分
functionmyfunction1(myxhvarchar2)returnnumberis
returnvaluenumber;
begin
selectageintoreturnvaluefromts019studentwherexb=myxh;
returnreturnvalue;
end;
总和起来显示的代码如下:
----------------------------------------------------------------------------------------------------------
createorreplacepackageMP2is
functionmyfunction1(myxhvarchar2)returnnumber;--这个是函数的申明
endMP1;
createorreplacepackagebodyMP2is
functionmyfunction1(myxhvarchar2)returnnumberis
returnvaluenumber;
begin
selectageintoreturnvaluefromts019studentwherexb=myxh;
returnreturnvalue;
end;
begin
null;
endMP1;
/*
现在我们看一下如何调用它
*/
declare
my_agenumber;
begin
my_age:
=MP1.myfunction1('&abc');
dbms_output.put_line(my_age);
end;
----------------------------------------------------------------------------------------------------------------
当然也是可以调用存储过程的:
/*
----------------------------------------------------------------------------------------------------
下面是单独测试存储过程的例子:
*/
createorreplacepackageMP3is
proceduremyprocedure1;--申明一个无参的存储过程,记住无参的时候是没有括号的
proceduremyprocedure2(rvalueoutnumber);--申明一个有参
endMP3;
createorreplacepackagebodyMP3is
mynumber1number:
=100;
proceduremyprocedure1is
begin
null;
end;
proceduremyprocedure2(rvalueoutnumber)is
begin
rvalue:
=mynumber1;--这个是把里面的number的值带出来。
end;
begin
null;
endMP3;
/*
下面是调用的过程
*/
declare
myvaluenumber;
begin
MP3.myprocedure2(myvalue);
dbms_output.put_line('调用存储过程输出的值,利用存储过程得到包主题里面的私有变量的值:
'||myvalue);
end;
----------------------------------------------------------------------------------------------------------
当然包还可以函数之间进行调用,下面我们写一个myfunction3去调用myfunction1:
具体的示例如下:
/*
-----------------------------------------------------------------------------------------------------------
下面测试的是包中的函数调用函数的例子
*/
createorreplacepackageMP4is
functionmyfunction1(myxhvarchar2)returnnumber;--这个是函数的申明
functionmyfunction3(myxbvarchar2,my_ageoutnumber)returnvarchar2;
endMP4;
createorreplacepackagebodyMP4is
functionmyfunction1(myxhvarchar2)returnnumberis
returnvaluenumber;
begin
selectageintoreturnvaluefromts019studentwherexb=myxh;
returnreturnvalue;
end;
functionmyfunction3(myxbvarchar2,my_ageoutnumber)returnvarchar2is
begin
my_age:
=myfunction1(myxb);
return'操作成功!
';
end;
begin
null;
endMP4;
/*
下面是调用的过程
*/
declare
myvalue1number;
myresultvarchar2(20);
begin
myresult:
=MP4.myfunction3('&bcd',myvalue1);
dbms_output.put_line('通过函数调用函数获取值:
'||myvalue1);
dbms_output.put_line(myresult);
end;
----------------------------------------------------------------------------------------------
下面我们再来看包的初始化的部分是什么时候去执行的:
包主体的初始化部分分别是
begin
end
我们之前写的都是null;
现在我们要对我们开始的私有的变量进行赋值,然后再进行输出,看得到的效果是怎么样的。
在初始化的区域,我们可以操作很多的东西,比如操作里面的函数,里面定义的异常等等。
/*
---------------------------------------------------------------------------------------
测试的是包主体的初始化的区域
*/
createorreplacepackageMP5is
functionmyfunction1(myxhvarchar2)returnnumber;--这个是函数的申明
proceduremyprocedure2(rvalueoutnumber);--申明一个有参
endMP5;
createorreplacepackagebodyMP5is
mynumber1number:
=20;
myexceptionexception;
functionmyfunction1(myxhvarchar2)returnnumberis
returnvaluenumber;
begin
selectageintoreturnvaluefromts019studentwherexb=myxh;
returnreturnvalue;
end;
proceduremyprocedure2(rvalueoutnumber)is
begin
rvalue:
=mynumber1;--这个是把里面的number的值带出来。
end;
begin
mynumber1:
=119;
mynumber1:
=myfunction1('0002');--初始化的时候调用我们的函数块
ifmynumber1>16then
raisemyexception;
endif;
exception
whenmyexceptionthendbms_output.put_line('你的值是不是大于16了,不好啦!
出现异常了!
');
endMP5;
/*
下面是调用上面的过程
*/
declare
myvaluenumber;
begin
MP5.myprocedure2(myvalue);
dbms_output.put_line('利用存储过程得到包主体里面的私有变量的值:
'||myvalue);
end;
---------------------------------------------------------------------------------------------------------
当然在包中还可以声明游标类型的。
只不过声明游标发生了变化了。
cursormycursor1returnts019student%rowtypeisselect*fromts019student;
还可以是带参数的游标
cursormycursor2(mysexvarchar2)returnts019student%rowtypeisselect*fromts019student;
在调用的时候就是
begin
open
loop
fetchmycursor1into**;
endloop;
在匿名块中使用包中的mycursor2的游标
open
----------------------------------------------------------------------------------------------------------
下面讲的是oracle的内置程序包。
内置的程序包必须有适当的权限才可以使用。
DBMS_LOB
DBMS_RANDOM--说明这个是产生随机数的
DBMS_SQL
DBMS_XMLDOM--这个是用dom读取xml文件的
我们下面随便写一个例子来测试一下随机数吧
declare
myrandomnumber;
begin
myrandom:
=dbms_random.random;
dbms_output.put_line(myrandom);
end;
++++++++++++++++++++++++++++++++++++++下面是数据备份知识的内容++++++++++++++++++++++++++++++++++++++++++++++
下面主要讲了数据备份
插个小话题:
昨天的课后有同学询问为什么我的oracle只能联网才能使用
其实你不用重新安装oracle你只需要改动一下配置文件就可以了
具体方法是:
1.找到这个文件:
*:
\oracle\product\10.1.0\db_1\NETWORK\ADMIN
在这个文件件里面有一个tnsnames.ora的文件夹,用记事本打开,把你们设置ip的改为localhost就可以使用了。
----------------------------------------------------------------------------------------------------------
下面进入我们今天的课程数据备份;
数据备份分为:
1.冷备2.热备
冷备是最简单的,就是拷贝文件(控制文件,日志文件,数据文件),具体的方法是:
我们必须要终止两个进程,就是PLMNOSMN这个两个进程
这是我们oracle的服务的进程,只要是安装了oracle就会开机启动这两个进程。
我们现在讲冷备的cmd操作的方法:
1.首先配置环境变量到path
*:
\oracle\product\10.1.0\db_1\BIN
2.打开cmd输入的指令如下:
C:
\>sqlplus/nolog---------说明:
这个是以非用户的方式登录
C:
\>connsystem/oriloreassysdba---------说明:
建立连接用户名/密码作为dba用户登录操作
C:
\>shutdownabort---------说明:
这个是关闭oracle的服务的,这样你才可以拷贝文件。
这是的oracle不对外提供服务了。
--------------------------------------------------------------------------------
执行到这上面的指令后,你就可以拷贝文件了。
现在你去:
*:
\oracle\product\10.1.0\oradata\orcl
你把这个文件夹的内容复制到你的U盘里面就可以了。
复制完毕过后,启动oracle就可以启动oracle的服务了。
-------------------------------------------------------------------
C:
\>startup
----------------------------------------------------------------------------------
上面的过程是冷备,谁都会的方式,特别简单。
其实在安装oracle的时候就会涉及到文件归档方式的选择,对数据库的安全性考虑,最好是采用归档方式。
日志文件,是依次记录,三个文件都慢了就会覆盖掉原来的文件。
用浏览器登陆oracle来进行操作可以这样做,
数据库管理--->存储-->归档日志。
归档的日志可以设置为小时来计算。
使用三种方式进行导入导出,我们常用的就是采用命令行的方式。
导入和导出数据库对象的四种模式
导入导出模式
|
——————————————————————————
||||
完全数据库表用户表空间
而上面的我们常常使用的是跟着用户导入导出的。
下面我们来一一进行导入导出试试:
1.还是打开cmd窗口,切换到C盘,我们现在测试的是导出
C:
\>expsystem/orilorefull=yfile=abc---说明:
exp是导出的意思用户名称/密码选择的是完全的导出方式文件的名称为abc这里切换到了c盘,就直接导出成功过后去c盘查找文件就可以了。
C:
\>expscott/oriloretables=(ts019student,ts019class,x_c)file=bcd--说明:
我们导出的scott用户的三张表。
导出到文件bcd中。
C:
\>expscott/oriloretablespaces=ts019tablespacefile=eee--说明:
这个是导出用户scott的命名空间。
-----------------------------------------------------------------------------------------------
有导出就有导入吧!
下面我们看看如何导入呢?
fromuser从哪个用户哪儿得到数据touser准备导入到哪个用户去full是全部的意思table是表rows是行记录ignore是忽略错误tablespaces是表空间的意思
C:
\>impsystem/orilorefromuser=ts019testtouser=scottrows=yignore=yfile=abc
C:
\>impsystem/orilorefromuser=systemtouser=tttrow=yignore=yfile=cde
C:
\>impsystem/orilorefromuser=systemtouser=aaatablespaces=usersrows=yignore=yfile=eee
---------------------------------------------------------------------------------------------------
当然我们还可以写到一个txt的文件里面,把命令,然后进行执行就OK了
比如:
1.导出的写到一个exp.txt的文件里面
userid=system/orilorefile=tttowner=(system)
userid=system/orilorefile=tttfull=y
userid=system/orilorefile=tttta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 Oralcle 课堂 笔记 程序包 备份 恢复