以下是小编为大家准备的删除Oracle 9i数据库数据库教程(共含8篇),仅供参考,大家一起来看看吧。同时,但愿您也能像本文投稿人“mark62999”一样,积极向本站投稿分享好文章。
(1)启动【数据库配置助手】,一直到出现如图6.44所示的【操作】界面,
删除Oracle 9i数据库数据库教程
。(2)出现如图6.45所示的【数据库】界面,
(3)出现如图6.46所示的【概要】界面。
(4)出现如图6.47所示的【删除确认】界面。
(5)成功删除数据库后出现如图6.48所示的【成功境】界面。单击“否”按钮?br>
oracle|window|优化
我们使用的系统是windows,经过优化后,oracle数据库出现了问题,本地客户端不能连接.但远程连接是没有问题的.
经过检查,原来是oracle的TNSListener服务没有起动.用“服务”起动,或者net start 起动均失败,检查结果是注册表中
的TNSListener的执行文件路径已经被删除了.所以我们只要从其它安装oracle服务器的电脑上将部分注册表文件导出,
然后导入到本机就OK了.
下面是我本机的导入的注册表内容.
----------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE YSTEM\ControlSet001 ervices\OracleOraHome92TNSListener]
“Type”=dword:00000010
“Start”=dword:00000002
“ErrorControl”=dword:00000001
“ImagePath”=hex(2):44,00,3a,00,5c,00,6f,00,72,00,61,00,63,00,6c,00,65,00,5c,00,\
6f,00,72,00,61,00,39,00,32,00,5c,00,42,00,49,00,4e,00,5c,00,54,00,4e,00,53,\
00,4c,00,53,00,4e,00,52,00,20,00,00,00
“DisplayName”=“OracleOraHome92TNSListener”
“ObjectName”=“LocalSystem”
[HKEY_LOCAL_MACHINE YSTEM\ControlSet001 ervices\OracleOraHome92TNSListener ecurity]
“Security”=hex:01,00,14,80,a0,00,00,00,ac,00,00,00,14,00,00,00,30,00,00,00,02,\
00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
00,00,02,00,70,00,04,00,00,00,00,00,18,00,fd,01,02,00,01,01,00,00,00,00,00,\
05,12,00,00,00,00,00,00,00,00,00,1c,00,ff,01,0f,00,01,02,00,00,00,00,00,05,\
20,00,00,00,20,02,00,00,00,00,00,00,00,00,18,00,8d,01,02,00,01,01,00,00,00,\
00,00,05,0b,00,00,00,20,02,00,00,00,00,1c,00,fd,01,02,00,01,02,00,00,00,00,\
00,05,20,00,00,00,23,02,00,00,00,00,00,00,01,01,00,00,00,00,00,05,12,00,00,\
00,01,01,00,00,00,00,00,05,12,00,00,00
[HKEY_LOCAL_MACHINE YSTEM\ControlSet001 ervices\OracleOraHome92TNSListener\Enum]
“0”=“Root\\LEGACY_ORACLEORAHOME92TNSLISTENER\\0000”
“Count”=dword:00000001
“NextInstance”=dword:00000001
----------
将上面的内容拷贝到.txt文件中,然后将.txt改成.reg文件,双击该文件即可.
注意:我oracle执行文件安装在D盘.如果不一样的话,要将注册表中的键值修改成正确就可以的了.
oracle
14,点”OK”后继续进行安装
15,填写数据库访问名和密码
16,出现Oracle9i数据库安装完全画面
以上是oracle9i数据库,全部的安装过程,
四,启动和测试
1,因为数据库刚刚安装完成,所以数据库服务已经起来,所以只启动测试监听就可以了,以oracle用户,输入lsnrctl start
2, 进行监听测试,以oracle用户输入以下命令
netca
这样会出现一个画面,对监听进行配置,然后选择local net service name configuration,然后选择text,然后更改用户密码,把安装时写的密码添加进去,就OK了!然后回车,一直到完成.
3,如果从新启动linux,那系统不会自动启动oracle9i服务,需要以oracle用户身份,进行启动服务,如:
su C oracle
sqlplus /nolog
进入sqlplus后,再输入:
connect / as sysdba
进去后,输入:
startup
然后等待数据库启动完成,
以上是启动oracle服务,然后启动 的时候,需要重复1的动作就可以了。
数据
在这篇文章里我要描述一下如何从表格里删除列,要删除的这些列同时还要依赖于其他表格的标准,跟我学SQL:(七)从子表里删除数据数据库教程
。要解决这个问题就需要一个很聪明而且完全遵守SQL92子查询声明的应用程序。我必须提醒读者的是,尽管查询可能会遵守SQL的标准,但是众多的数据库生产商会以不同的句法支持实现SQL。以下这个解决方案应该适合于大多数数据库;但是,如果你的结果有出入,就还是应该查看一下文档。同时,由于这个查询要处理DELETE声明,所以你应该在将其应用于真实的生产环境以前在实验数据上进行测试。
需要更多的背景信息?
查看这些文章就能快速上路:
《SQL基础I查数据查询》涉及到了DELETE查询的使用。
《使用SQL子选项来合并查询》说明子选项查询能够减少对数据库请求的数量,并提供了例子。
《SQL基础:查询多个表》提供了更多关于子选项的信息,还讲到了使用单个查询就能访问多个表格的多种其他方法。
宠物店的例子
要解释如何进行这种类型的列删除,我会使用如下这个数据库的表格,该数据库叫做PetStore,并包含有清单(inventory)信息。在叫做“品种(breed)”的表A里,我存储有每种动物的信息和宠物店库存的信息。在叫做“清单”的表B里,包含有商店里特定动物的信息。
在这个例子里,我们先假设商店把整窝Shitzu小狗都卖完了。我可以使用breed表格里的breed_id字段来删除Shitzu清单里的所有项目,就像这样:
DELETE FROM inventory WHERE breed_id IN
(SELECT breed_id FROM breed WHERE breed_name = ‘Shitzu’);
首先,我要指定需要删除记录的表格,在这里是清单表格。然后再将识别字段breed_id同子选项子句的结果反复比对,
我知道要找的是Shitzus,所以就能直接删掉他们,而不用再在单独的请求里查询breed_id。
我必须要警告你的是,以这种方式使用DELETE声明是危险的,只有在你对数据库的结构很熟悉的情况下才能使用这些声明。DELETE查询会从受影响的表格里删除掉全部列,你应该知道这对你所管理着的数据意味着什么。有个好办法是使用SELETE *这个短语替代DELETE关键字来对DELETE声明的子查询结果进行测试,这样就能保证结果里含有你要删除的所有东西,就像这样:
SELECT * FROM inventory WHERE breed_id IN
(SELECT breed_id FROM breed WHERE breed_name = ‘Shitzu’);
DELETE和JOIN联用
有人问到了解决这个问题另一个可能的办法:把JOIN子句和DELETE声明联合使用。由于以前没有使用过这种方法,我就研究了一下,发现SQL Server的文档声明支持这个方法,尽管它不符合SQL92。在经过测试和询问各种数据库平台的老手之后,我发现把DELETE和JOIN声明联合使用在我测试过的任何平台上都行不通。
从多个表格里一次删除
以上的解决方案还没有解释如何使用父表从多个子表里删除信息。但是SQL92规范里没有提供完成这项任务的标准解决方案。
DELETE的声明不能把多个表格作为一个参数接受。作为一个具有破坏性的查询,这能保证在命令要被执行的地方不会出现歧义。此外,这个限制防止了在单个声明内将AND和多个子查询联用。如果测试SELECT声明的结果用以检查DELETE查询将要影响到的是哪些数据,你会发现SELECT会返回多个表格的清单,DELETE不会影响到的多个子查询不在其中。
有很多可能的方法能够满足你的需求,例如在表格里创建一个字段,用以指明该项目是否为活动的。或者,你可以使用一些数据库里的预存程序在每个所需的DELETE查询里迭代。
一般来讲,序列在实际开发过程中是经常用到的一种对象,通过它来生成主键是非常方便的,但是有些时候我们需要将其重新置零,通常采用的方式就是删除后重新创建,
下面我们来看一下另外一种方式:
SQL>create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;
序列已创建。SQL>create or replace procedure seq_reset(v_seqname varchar2) as 2 n number(10); 3 tsql varchar2(100); 4 begin 5 execute immediate 'select '||v_seqname||'.nextval from dual' into n; 6 n:=-(n-1); 7 tsql:='alter sequence '||v_seqname||' increment by '|| n; 8 execute immediate tsql; 9 execute immediate 'select '||v_seqname||'.nextval from dual' into n; 10 tsql:='alter sequence '||v_seqname||' increment by 1'; 11 execute immediate tsql; 12 end seq_reset; 13 /
过程已创建,
SQL>select seq_1.nextval from dual;
NEXTVAL--------- 2
SQL>/
NEXTVAL--------- 3
SQL>/
NEXTVAL--------- 4
SQL>/
NEXTVAL--------- 5
SQL>exec seq_reset('seq_1');
PL/SQL 过程已成功完成。
SQL>select seq_1.currval from dual;
CURRVAL--------- 1
SQL>
这样可以通过随时调用此过程,来达到序列重置的目的。
此存储过程写的比较仓促,还可以进一步完善,在此就不再进一步讲述。
数据
删除a表中和b表相同的数据
软件环境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:ORANT
问题提出:
在做数据转储业务的时候,如果发生操作错误,有可能出现主表和副表中都有同一种数据,这样结算的结果就有可能发生错误,
实现方法:
SQL>create table a (
2 bm char(4), --编码
3 mc varchar2(20) --名称
4 )
5 /
表已建立.
SQL>insert into a values('1111','1111');
SQL>insert into a values('1112','1111');
SQL>insert into a values('1113','1111');
SQL>insert into a values('1114','1111');
SQL>insert into a values('1115','1111');
SQL>create table b as select * from a where 1=2;
表已建立.
SQL>insert into b values('1111','1111');
SQL>insert into b values('1112','1111');
SQL>insert into b values('1113','1111');
SQL>insert into b values('1114','1111');
SQL>commit;
完全提交.
SQL>select * from a;
BM MC
---- --------------------
1111 1111
1112 1111
1113 1111
1114 1111
1115 1111
SQL>select * from b;
BM MC
---- --------------------
1111 1111
1112 1111
1113 1111
1114 1111
方法一:exists子句
SQL>delete from a where exists (select 'X' from b where a.bm=b.bm and a.mc=b.mc);
删除4个记录.
where条件:如果两个表中都拥有相同字段的主键(primary key),则只需比较两个主键就可以了
方法二:in子句
SQL>delete from a where (bm,mc) in (select bm,mc from b);
删除4个记录.
SQL>select * from a;
BM MC
---- --------------------
1115 1111
实际测试结论:
在表不是很大时,用in子句速度还可以忍受,而如果记录量很多时(十万条以上),in子句简直让人难以人忍受,速度奇慢,
在Windows 操作系统下安装Oracle 9i时会安装很多服务――并且其中一些配置为在Windows 启动时启动,在Oracle 运行在Windows 下时,它会消耗很多资源,并且有些服务可能我们并不总是需要。你会发现不使用Windows 图形界面就可以快速、完全地关闭数据库会很有用。
只要拥有管理员权限就可以通过net start 启动一个服务,或者通过net stop 命令停止一个服务,从而控制以下服务中的任何一个。在Windows XP 中,可以通过在控制面板的服务中改变想要禁用的服务(OracleOraHome...)的启动类型(Startup Type)参数,双击某个服务查看其属性,然后将启动类型属性从自动改为手动。
使数据库在本地工作唯一需要运行的服务是OracleServiceORCL 服务(其中ORCL 是SID)。这个服务会自动地启动和停止数据库(使用shutdown 中断)。如果安装了一个数据库,它的缺省启动类型为自动。如果主要是访问一个远程数据库,那么可以把启动类型由自动改为手动。
OracleOraHome92HTTPServer 服务(OraHome92 是Oracle Home 的名称)是在安装Oracle 时自动安装的Apache 服务器。一般情况下我们只用它来访问Oracle Apache 目录下的Web 页面,比如说JSP 或者modplsql 页面。
OracleOraHome92TNSListener 服务只有在数据库需要远程访问时才需要(无论是通过另外一台主机还是在本地通过 SQL*Net 网络协议都属于远程访问)。不用这个服务就可以访问本地数据库。
OracleOraHome92ClientCache 服务缓存用于连接远程数据库的Oracle Names 数据。正常情况下该服务的启动类型是配置为手动的。然而,除非有一台Oracle Names 服务器,否则没有必要运行这个服务。
有四个服务是Oracle 企业管理器所必须的(Oracle Enterprise Manager),这个服务分别为:OracleOraHome92Agent(智能代理),该服务监视数据库和企业管理器请求,缺省启动类型为自动。OracleOraHome92SNMPPeerEncapsulator 和OracleOraHome92SNMPPeerMasterAgent,处理安全网络管理协议服务。OracleOraHome92PagingServer 通过一个使用调制解调器的数字传呼机或者电子邮件发出警告。
OracleMTSRecoveryService 是可选的,该服务允许数据库充当一个微软事务服务器、COM/COM+对象和分布式环境下的事务的资源管理器。
如果只是偶尔使用一下数据库,那么可以创建一个简单的脚本任务来启动和关闭服务器,这样每次只要双击脚本就可以了,可以不使用图形界面。
1. 保存一个快捷方式自动地装载这些文件。
2. 将Oracle 服务设为手动避免在Windows 启动时启动。
REM “dbstart.cmd” @echo off set RAHOME=“OraHome92” set RASID=“ORCL” net start OracleService%ORASID% REM net start Oracle%ORAHOME%HTTPServer REM net start Oracle%ORAHOME%TNSListener REM net start Oracle%ORAHOME%ClientCache REM net start Oracle%ORAHOME%Agent REM net start Oracle%ORAHOME%SNMPPeerEncapsulator REM net start Oracle%ORAHOME%SNMPPeerMasterAgent REM net start Oracle%ORAHOME%PagingServer REM net start OracleMTSRecoverService REM “dbshut.cmd” @echo off set RAHOME=“OraHome92” set RASID=“ORCL” net stop OracleService%ORASID% REM net stop Oracle%ORAHOME%HTTPServer REM net stop Oracle%ORAHOME%TNSListener REM net stop Oracle%ORAHOME%ClientCache REM net stop Oracle%ORAHOME%Agent REM net stop Oracle%ORAHOME%SNMPPeerEncapsulator REM net stop Oracle%ORAHOME%SNMPPeerMasterAgent REM net stop Oracle%ORAHOME%PagingServer REM net stop OracleMTSRecoverService
DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, 而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针,DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。
DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作,而DataTable中又包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则可以调用DataAdapter的Update方法。
DataSet的操作:
DataSet ds=new DataSet();
DataTable dt=new DataTable(“newTable”);
ds.Tables.Add(dt);DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add(“newTable”);
上述两种方法都可以在DataSet中添加一个DataTable,看需要而进行选择。添加DataTable后,需向其中添加行和列。
DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add(“newTables”);
DataColumn col=dt.Columns.Add(“newColumn”,typeof(int));
col.AllowDBNull=false;
col.MaxLength=4;
col.Unique=true;
上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最大长度为4和唯一性为真的列。
dt.PrimaryKey=new DataColumn[]{dt.Columns[“ID”]}
这段代码是继续上面代码的,为一个DataTable中添加一个主键列,主键列是一个数据组,如有多个主键,只需在数组中添加一个列即可。如下:
dt.PrimaryKey=new DataColumns[]{dt.Columns[“OrderID”],dt.Columns[“ProductID”]}
添加外键:
ForeignKeyConstraint fk;
fk=new ForeignKeyConstraint(ds.Tables[“Customers”].Columns[“CustomerID”],ds.Tables[“Orders”].Columns[“CustomerID”]);
ds.Tables[“Orders”].Constraints.Add(fk);
//上述代码假如已经为Cusomers表和Orders创建了主键,此句为添加外键约束,
上述是根据Customers表和Orders表的CustomerID来创建约束。
下面介绍修改DataRow中的内容:
DataRow dr=ds.Tables[“Customer”].Rows.Find(“ANTON”);
if(dr==null)
else
{
dr.BeginEdit();
dr[“CompanyName”]=“newValue”;
dr[“ContactName”]=“newValue2”;
dr.EndEdit();
}
//上面代码通过Row集合的Find方法来在DataTable中的行进行定位,找到“ANTON”行,再修改“ANTON”行中CompanyName列和ContactName列的值。通过BeginEdit和EndEdit来缓存对行的修改,还可调用 CancelEdit为取消修改。
判断某列是否为空值:
DataRow dr=ds.Tables[“Customers”].Rows.Find(“aaa”);
if(dr.IsNull(“ContactName”);
..
else
dr[“ContactName”]=DBNull.Value
//这里判断ContactName列是否为空,如果不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。
删除DataRow:
有两种方法可以删除DataRow,Delete方法和Remove方法和RemoveAt方法。其区别是Delete方法实际上不是从DataTable中删除掉一行,而是将其标志为删除,仅仅是做个记号,而Remove方法则是真正的从DataRow中删除一行,RemoveAt方法是根本行的索引来删除。列:
DataRow dr=ds.Tables[“table”].Rows.Find(“a”);
ds.Tables[“table”].Remove(dr);
或
ds.Tables[“table”].Remove(index);
//dr 为“a”所在的行,查出后将其删除,index为 “a”所在的索引号。关于DataSet中的其用法,参照MSDN