还有个方法就是主动联系客服,申请删除你的数据库。
管理页面上我也没有发现删除数据库的功能。
问题二:怎么删除oracle的数据文件 一、使用offline数据文件的方法
非归档模式使用:alter database datafile '...' offline drop
归档模式使用: alter database datafile '...' offline
说明:
1) 以上命令只是将该数据文件OFFLINE,而不是在数据库中删除数据文件。该数据文件的信息在控制文件种仍存在。查询v$datafile,仍显示该文件。
2) 归档模式下offline和offline drop效果是一样的
3) offline后,存在此datafile上的对象将不能访问
4) noarchivelog模式下,只要online redo日志没有被重写,可以对这个文件recover后进行online *** 作
实际使用案例:
直接删除数据文件后无法进入系统的解决方案
正常情况下,删除表空间的正确方法为:
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES
如果没有通过以上命令删除而直接删除了数据文件,将导致数据库无法打开。
如果直接删除了数据文件
普通用户登录时,则报错:
ORA-01033: ORACLE initialization or shutdown in progress
sys用户可以正常登录
但进行 *** 作时(SELECT count(1) FROM user_tables),则会报错:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
如果执行命令alter database open以打开数据库时,又报如下错:
ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 12: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TSTEST001.DBF'
说明数据库没找到这个数据文件
因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败.
通过以下方法即可解决
解决方法:
sqlplus [email protected] as sysdba
SQL>alter database datafile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TSTEST001.DBF' offline drop
SQL>alter database open
SQL>drop tablespace CTBASEDATA
二、Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name来删除一个空数据文件,并且相应的数据字典信息也会清除:
[email protected] >select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS'
FILE_ID FILE_NAME ......>>
问题三:怎么用SQL语句删除数据库中多个文件 REMOVE FILE 只有在文件为空时才能删除。
正常 *** 作步骤:
以下 *** 作在查询分析器上执行即可:
--转到要处理的数据库:
use 库名
go
--查看该库所有的文件:
select [name],[filename] from sysfiles
go
--对指定的文件进行数据移除:
dbcc shrinkfile (上面查询得到的“逻辑文件名”(定Name那列), EMPTYFILE)
go
--将一定移除了数据的指定文件删除:
ALTER DATABASE 库名 REMOVE FILE 上面查询得到的“逻辑文件名”
Go
问题四:如何删除sql数据库的日志文件 其中database为你的库名 --压缩日志1:截断事务日志:BACKUP LOG 数据库名 WITH NO_LOG2:清空日志DUMP TRANSACTION 库名 WITH NO_LOG再:企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了3: 删除LOG1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库2:删除LOG文件3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库此法生成新的LOG,大小只有500多K再将此数据库设置自动收缩或用代码:下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。EXEC sp_detach_db @dbname = 'pubs'EXEC sp_attach_single_file_db @dbname = 'pubs',@physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf'4: 如果想以后不让它增长企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)5.设置为自动收缩
问题五:oracle中如何删除数据库的实例 想彻底删除的话,建议你还是用DBCA,这样删除的比较彻底,
跟这个实例相关的内容都会被删除的!
开始――程序――Oracle10g――配置和移植工具―DBCA
进入DBCA后,选择删除数据库,就会显示你机器上的
所有实例数据库,选择要删除的就OK
问题六:如何删除outlook数据文件 “开始”---进入“控制面板”,然后找到“邮件”,打开,然后有个“配置文件”,点击“显示配置文件”。把里面有的所有配置文件都删除就行了 一般是只有一个。删除就OK了。这样 outlook2012所有数据都会删除,跟你刚装完是一样的,再打开 就会提醒你重新配置了。
问题七:怎么修改或删除mdb数据库文件里面的东西呀? mdb是access数据库的文件,你可以安装office专业版(2003以上的版本),就可以打开这些文件对其进行修改或删除,但是由于其原先是网站后台数据,可能会有密码否则是无法打开的。
问题八:sql数据库我把表删除了,为什么数据库文件还是那么大?请问怎么才能彻底把数据库文件弄小? create database dbName
on( ...
size=10mb,
...)
是不是建库的时候初始设置大了?
----------
数据库在使用过程中会因需要而不断扩张,你删除表或者大量数据,数据库虽然内容少了,但占用的资源不会少.需要使用数据库收缩命令.
DBCC SHRINKDATABASE(dbName)
或者右键:
企业管理器--目标数据库--所有任务--收缩数据库--收缩文件 --选择数据文件
问题九:如何从表空间中“删除”数据文件 存在两种情况可能需要从表空间中“移走”数据文件。1. 你不小心给一个表空间增加了一个数据文件,或者你把文件大小设得过大,所以想把它删掉。2. 你正在进行恢复,因为丢失了一个数据文件所以不能启动数据库。本文主要处理第一种情况,有别的文章来讲述由于丢失数据文件而不能使用数据库的恢复问题。在我们详细介绍之前,我们必须说清楚一点:Oracle不提供如删除表。视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。在对表空间/数据文件进行任何脱机、删除之前,首先对数据库进行一个全备份。 如果数据文件是所在表空间的唯一的数据文件,你只要简单地删除表空间即可:DROP TABLESPACE INCLUDING CONTENTS你可以运行下面的命令来查询表空间包含多少数据文件。select file_name, tablespace_namefrom dba_data_fileswhere tablespace_name =''DROP TABLESPACE命令从Oracle数据字典删除表空间、数据文件和表空间的内容。Oracle不会再访问该表空间中的任何内容。物理地删除文件需要使用 *** 作系统命令(Oracle从不物理地删除文件注:本文是针对8i或者之前,9i可以使用including datafile选项来删除物理文件>),依赖你的 *** 作系统平台,有的 *** 作系统需要Oracle完全关闭才才可以删除(例如在WINDOWS NT 中需要关闭数据库,停掉相应的服务,在有的情况下Oracle还可能持有文件锁)。如果你的表空间有多个数据文件,而你不需要表空间中的内容,或者你可以很容易重新生产表空间的内容,你可以使用DROP TABLESPACE INCLUDING CONTENTS命令来从Oracle数据字典删除表空间、数据文件和表空间的内容。Oracle不会再访问该表空间中的任何内容。然后重新创建表空间并重新导入数据。如果你的表空间有多个数据文件,而你还需保留该表空间中的其它数据文件中的内容,则你必须首先export出该表空间中的所有内容。为了确定表空间中包含那些内容,运行:select owner,segment_name,segment_typefrom dba_segmentswhere tablespace_name=''export出你想保留的内容。如果export结束,你可以使用DROP TABLESPACE tablespace INCLUDING CONTENTS. , 这样永久删除表空间的内容,使用 *** 作系统命令物理删除数据文件,按所需数据文件重新创建表空间,把数据import至表空间。注意:ALTER DATABASE DATAFILE OFFLINE DROP命令不能允许你删除数据文件,它的目的是脱机该数据文件以删除表空间。如果在归档模式下,使用ALTER DATABASE DATAFILE OFFLINE DROP来代替OFFLINE DROP。一旦数据文件脱机,Oracle不会再访问该数据文件的内容,但它仍然是表空间的一部分。这个数据文件在控制文件中标记OFFLINE,在数据库启动时不会对它与控制文件进行SCN的比较。在控制文件中保留这个数据文件的入口是方便以后的恢复。如果你不想按照上述方法来删除表空间,还有其它一些解决方法。1. 如果你想删除数据文件的原因是因为分配了不合适的文件大小,你可以考虑RESIZE命令。2. 如果你不小心增加......>>
问题一:数据库满了怎么删除 首先看数据库文件所在硬盘的空间足不足,可以扩容解决这个问题;第二,什么数据库MS-SQL的话可以删除日志文件,如果是ORACEL的话看看表空间足不足,不足的话扩表空间。
你的问题太笼统了。
问题二:如何删除sql数据库的日志文件 其中database为你的库名 --压缩日志1:截断事务日志:BACKUP LOG 数据库名 WITH NO_LOG2:清空日志DUMP TRANSACTION 库名 WITH NO_LOG再:企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了3: 删除LOG1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库2:删除LOG文件3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库此法生成新的LOG,大小只有500多K再将此数据库设置自动收缩或用代码:下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。EXEC sp_detach_db @dbname = 'pubs'EXEC sp_attach_single_file_db @dbname = 'pubs',@physname = 'c:/Program Files/Microsoft SQL Server/MSSQL/Data/pubs.mdf'4: 如果想以后不让它增长企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)5.设置为自动收缩
问题三:怎么用SQL语句删除数据库中多个文件 REMOVE FILE 只有在文件为空时才能删除。
正常 *** 作步骤:
以下 *** 作在查询分析器上执行即可:
--转到要处理的数据库:
use 库名
go
--查看该库所有的文件:
select [name],[filename] from sysfiles
go
--对指定的文件进行数据移除:
dbcc shrinkfile (上面查询得到的“逻辑文件名”(定Name那列), EMPTYFILE)
go
--将一定移除了数据的指定文件删除:
ALTER DATABASE 库名 REMOVE FILE 上面查询得到的“逻辑文件名”
Go
问题四:如何删除数据库中所有数据 你租用数据库时,提供商会给你提供数据库连接IP、登陆用户和密码。你在本地sql数据库管理平台(企业管理器)中远程连接你的数据库,然后进入删除所有表或视图、存订过程等资料。光留一个空库,也没啥大碍。
还有个方法就是主动联系客服,申请删除你的数据库。
管理页面上我也没有发现删除数据库的功能。
问题五:怎么删除数据库中SQL文件。 数据库上传sql文件,不是太理解。你是不是说你导入了一份sql文件五次。而这份sql文件是执行插入命令。如果是这样,你可以通过编写存储过程加上带条件的删除语句对重复的数据进行处理。
问题六:sql数据库我把表删除了,为什么数据库文件还是那么大?请问怎么才能彻底把数据库文件弄小? create database dbName
on( ...
size=10mb,
...)
是不是建库的时候初始设置大了?
----------
数据库在使用过程中会因需要而不断扩张,你删除表或者大量数据,数据库虽然内容少了,但占用的资源不会少.需要使用数据库收缩命令.
DBCC SHRINKDATABASE(dbName)
或者右键:
企业管理器--目标数据库--所有任务--收缩数据库--收缩文件 --选择数据文件
问题七:数据库文件被人为删除,怎么办? 数据库删除后,普通的软件是无法找回的了。比如网上下载的软件,最好别尝试,尝试还是浪费时间的。我们公司之前也是由于误删除MDF,找了多家公司修复,附加都置疑,最后联系了广州拓飞,那里的工程师专业做数据库修复,我们公司的数据库后来在拓飞修复好了。“请注意,最好不要往那个分区(误删除的那个分区),如果覆盖数据会很麻烦,甚至无法修复了。”,在百度搜索广州拓飞数绩恢复“,可以找到他们的电话,地址,祝你们成功
问题八:怎么删除oracle的数据文件 一、使用offline数据文件的方法
非归档模式使用:alter database datafile '...' offline drop
归档模式使用: alter database datafile '...' offline
说明:
1) 以上命令只是将该数据文件OFFLINE,而不是在数据库中删除数据文件。该数据文件的信息在控制文件种仍存在。查询v$datafile,仍显示该文件。
2) 归档模式下offline和offline drop效果是一样的
3) offline后,存在此datafile上的对象将不能访问
4) noarchivelog模式下,只要online redo日志没有被重写,可以对这个文件recover后进行online *** 作
实际使用案例:
直接删除数据文件后无法进入系统的解决方案
正常情况下,删除表空间的正确方法为:
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES
如果没有通过以上命令删除而直接删除了数据文件,将导致数据库无法打开。
如果直接删除了数据文件
普通用户登录时,则报错:
ORA-01033: ORACLE initialization or shutdown in progress
sys用户可以正常登录
但进行 *** 作时(SELECT count(1) FROM user_tables),则会报错:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
如果执行命令alter database open以打开数据库时,又报如下错:
ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 12: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TSTEST001.DBF'
说明数据库没找到这个数据文件
因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败.
通过以下方法即可解决
解决方法:
sqlplus [email protected] as sysdba
SQL>alter database datafile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/TSTEST001.DBF' offline drop
SQL>alter database open
SQL>drop tablespace CTBASEDATA
二、Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name来删除一个空数据文件,并且相应的数据字典信息也会清除:
[email protected] >select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS'
FILE_ID FILE_NAME ......>>
问题九:怎么修改或删除mdb数据库文件里面的东西呀? mdb是access数据库的文件,你可以安装office专业版(2003以上的版本),就可以打开这些文件对其进行修改或删除,但是由于其原先是网站后台数据,可能会有密码否则是无法打开的。
它将冗余数据选择到一个游标中 并根据(LastName FirstName)来分组(在我们这个方案中) 然后打开游标然后循环地取出每一行 然后用与先前的取出的键值进行比较 如果这是第一次取出这个值 或者这个值不是冗余键 那么跳过这个记录然后取下一个 不然的话 这就是这个组中的冗余记录 所以删掉它.
让我们运行一下这个存储过程
BEGIN
DeleteDuplicates
END
/
SELECT LastName FirstName COUNT(*)
FROM Customers
GROUP BY LastName FirstName
HAVING COUNT(*) >
最后一个查询语句没有返回值 所以冗余数据没有了从表中取冗余数据的过程完全是由定义在csr_Duplicates 这个游标中的SQL语句来实现的 PL/SQl只是用来实现删除冗余数 那么能不能完全用SQL语句来实现呢?
二.SQL解决方案 使用RANK()删除冗余数据Oracle i分析函数RANK()来枚举每一个组中的元素 在我们的方案中 我们应用这个方案 我们使用这个函数动态的把冗余数据连续的排列起来加上编号 组由Partintion by 这个语句来分开 然后用Order by 进行分组SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName
FirstName ORDER BY ID) SeqNumber
FROM Customers
ORDER BY LastName FirstName
SQL
Listing Output of single SQL statement that uses RANK()
显示的是根据记录的条数的个数来显示尤其对于冗余数据
ID LASTNAME FIRSTNAME SEQNUMBER
Blake Becky
Blue Don
Bradley Tom
Chang Jim
Griffith David
Hill Larry
King Chuck
Krieger Jeff
Krieger Jeff
Krieger Jeff
Loney Julie
Lord Don
Mason Paul
Monroe John
Simon Michael
Simon Michael
Stone Tony
Stone Tony
Stone Tony
Stone Tony
Stone Tony
我们可以看一到 SeqNumber这一列中的数值 冗余数据是根据ID号由小到大进行的排序 所有的冗余数据的SqlNumber都大于一 所有的非冗余数据都等于一 所以我们取自己所需 删除那么没用的SELECT ID LastName FirstName
FROM
(SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName
FirstName ORDER BY ID) AS SeqNumber
FROM Customers)
WHERE SeqNumber >
SQL
Listing 冗余键的键值
有七行必须被删除
ID LASTNAME FIRSTNAME
Krieger Jeff
Krieger Jeff
Simon Michael
Stone Tony
Stone Tony
Stone Tony
Stone Tony
rows selected 这显示有七行需要删除 还是用上一个表我测试了一下这个代码 它用了77秒种就删除了所有的数据准备好了用Sql语句来删除冗余数据 版本一它执行了 秒
DELETE
FROM CUSTOMERS
WHERE ID IN
(SELECT ID
FROM
(SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName
FirstName ORDER BY ID) AS SeqNumber
FROM Customers)
WHERE SeqNumber >)
我们可以看到最后的两行语句对表中的数据进行了排序 这不是有效的 所以我们来优化一下最后一个查询语句 把Rank()函数应用到只含有冗余数据的组 而不是所有的列下面这个语句是比较有效率的 虽然它不像上一个查询那样精简SELECT ID LastName FirstName
FROM
(SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName
FirstName ORDER BY ID) AS SeqNumber
FROM
(SELECT ID LastName FirstName
FROM Customers
WHERE (LastName FirstName) IN (SELECT LastName FirstName
FROM Customers
GROUP BY LastName FirstName
HAVING COUNT(*) >)))
WHERE SeqNumber >
选择冗余数据只用了26秒钟 这样就提高了 %的性能 这样就提高了将这个作为子查询的删除查询的效率
DELETE
FROM Customers
WHERE ID IN
(SELECT ID
FROM
(SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName
FirstName ORDER BY ID) AS SeqNumber
FROM
(SELECT ID LastName FirstName
FROM Customers
WHERE (LastName FirstName) IN (SELECT LastName FirstName
FROM Customers
GROUP BY LastName FirstName
HAVING COUNT(*) >)))
WHERE SeqNumber >)
现在只用了 秒钟的就完成的上面的任务 比起上一个 秒 这是一个很大的进步 相比之下 存储过程用了 秒 这样存储过程有些慢了使用PL/SQL语句我们和我们以上的代码 会得到更好的更精确的代码 和提高你代码的执行效率 虽然对于从数据库中枚举数据PL/SQL对于Sql两者没有什么差别 但是对于数据的比较上 PL/SQL就比SQL要快很多 但是如果冗余数据量比较小的话 我们尽量使用SQL而不使用PL/SQL如果你的数据表没有主键的话 那么你可以参考其它技术
Rank()其它的方法
使用Rank()函数你可以对选择你所保留的数据 (或者是小ID的或者是大ID 的 就由RECDate这个列来决定这种情况下 你可以把REcdate加入到(Orderby )子句中 倒序或者正序
这是一种保留最大Id的一种解决方案
DELETE
FROM Customers
WHERE ID IN
(SELECT ID
FROM
(SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName FirstName ORDER BY RecDate DESC ID) AS SeqNumber
FROM
(SELECT ID LastName FirstName RecDate
FROM Customers
WHERE (LastName FirstName) IN (SELECT LastName FirstName
FROM Customers
GROUP BY LastName FirstName
HAVING COUNT(*) >)))
WHERE SeqNumber >)
这种技术保证了你可以控制每一个表中的保留的组 假设你有一个数据库 有一个促销或者有一个折扣信息 比如一个团体可以使用这种促销5次 或者个人可以使用这个折扣三次 为了指出要保留的组的个数 你可以在where 和having子句中进行设置 那么你将删除所有大于你
设置有数的冗余组
DELETE
FROM Customers
WHERE ID IN
(SELECT ID
FROM
(SELECT ID LastName FirstName RANK() OVER (PARTITION BY LastName
FirstName ORDER BY ID) AS SeqNumber
FROM
(SELECT ID LastName FirstName
FROM Customers
WHERE (LastName FirstName) IN (SELECT LastName FirstName
FROM Customers
GROUP BY LastName FirstName
HAVING COUNT(*) >)))
WHERE SeqNumber >)
As you can see using the RANK() function allows you to eliminate duplicates in a
single SQL statement and gives you more capabilities by extending the power of
your
queries
lishixinzhi/Article/program/Oracle/201311/18979
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)