一、使用offline数据文件的方法
10余年的奎屯网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整奎屯建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“奎屯网站设计”,“奎屯网站推广”以来,每个客户项目都认真落实执行。
非归档模式使用: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 sys/orcl@orcl 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;来删除一个空数据文件,并且相应的数据字典信息也会清除:
sys@ORCLselect file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- ------------------
4 /u01/app/oracle/oradata/orcl/users01.dbf USERS
sys@ORCLalter tablespace users add datafile
2 '/u01/app/oracle/oradata/orcl/users02.dbf' size 5M autoextend off;
Tablespace altered.
sys@ORCLselect file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- -------------------
4 /u01/app/oracle/oradata/orcl/users01.dbf USERS
9 /u01/app/oracle/oradata/orcl/users02.dbf USERS
sys@ORCLdrop table test;
Table dropped.
sys@ORCLcreate table test tablespace users
2 as
3 select * from dba_objects;
Table created.
sys@ORCLselect SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
2 where file_id=9;
SEGMENT_NAME FILE_ID BLOCKS
------------------------------ ---------- ----------
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 128
TEST 9 128
17 rows selected.
sys@ORCLalter table test move tablespace PERFSTAT; --把表移动到其它表空间
Table altered.
sys@ORCLselect SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
2 where file_id=9;
no rows selected
sys@ORCLalter tablespace users drop datafile
2 '/u01/app/oracle/oradata/orcl/users02.dbf';
Tablespace altered.
sys@ORCLselect file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- ---------------------
4 /u01/app/oracle/oradata/orcl/users01.dbf USERS
三、oracle 10g可以删除临时表空间的文件
alter database tempfile '/home/oracle/temp01.dbf' drop including datafiles;
其实很简单的,在软件界面上就可以执行的,点击删除凭证就可以了,不建议到数据库里操作,这样麻烦而且风险很大,凭证主表是gl_voucher,子表是gl_detail。
用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?
那就是直接注册表清除,步骤如下:
1、 开始-设置-控制面板-管理工具-服务
停止所有Oracle服务。
OracleOraDb11g_home1TNSListener:专门支持远程访问oracle数据库(用Java程序访问oracle,每次启动此服务需要1秒钟左右,) OracleServiceXE:“XE”是数据库名称。是oracle核心服务,关系到oracle数据库的整个运行,必须保证这个服务开启,如果停止就无法连接到oracle服务器。启动这个服务大概需要2分钟,如果是自动启动,你会发现你的电脑会比之前大概慢2分钟。
2、 (忽略)开始-程序-Oracle - OraDb11g_home1-Oracle安装产品- Universal Installer
卸装所有Oracle产品,但Universal Installer本身不能被删除[如果第二步执行失败,跳到第三步,大部份第二步是失败的]
3、 运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。
4、 运行regedit,删除以下这三个位置中的所有Oracle入口。
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\【下】所有Oracle删除
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\【下】所有Oracle删除
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\【下】所有Oracle删除
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\【下】所有Oracle删除
5、 运行regedit,
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\【下】所有Oracle删除,
删除所有Oracle入口。
6、 开始-设置-控制面板-系统-高级-环境变量
删除环境变量CLASSPATH和PATH中有关Oracle的设定
7、 从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标
8、 删除e:/oracleDB目录
9、 【重新启动计算机】,重起后才能完全删除Oracle所在目录
10、 删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入
口目录及所有子目录,并从Windows目录(一般为C:\WINDOWS)下删除oralce文件等等。
11、 在运行框中输入“win.ini”,回车。WIN.INI文件中若有[ORACLE]的标记段,删除该段
12、 【如有必要】,删除所有Oracle相关的ODBC的DSN
13、 到事件查看器中,删除Oracle相关的日志
说明:
如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,
安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了
删除表还是?
如果是删除表,2种方式
delete是行级删除,删除行
truncate tablename是清空表
如果要删除表 drop tablename