1. 管理数据库的时候经常会遇到UNDOTBS01.DBF占用了巨大的空间,甚至能够达到几十G。
解决办法:(1)以sysdba身份登陆oracle
(2)--创建UNDO TABLESPACE
CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF' SIZE100M REUSEAUTOEXTENDON;
--设置新表空间为UNDO_TABLESPACE
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
--删除旧表空间
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;
--查看所有表空间
SELECT * FROM DBA_TABLESPACES;
完成后删除D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF,也许此时删不掉,需要shutdown数据库后再删除.
Undo表空间据说是数据库的一个撤销表空间,具体情况还不太清楚,呵呵,有待以后研究。
2. 查看表被锁和解锁
这种情况,项目中应该会经常遇到。
解决办法:
--查看被锁的表:
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id
或者
SELECT A.OWNER,
A.OBJECT_NAME,
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID,
B.ORACLE_USERNAME,
B.OS_USER_NAME,
B.PROCESS,
B.LOCKED_MODE,
C.MACHINE,
C.STATUS,
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM
FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, SYS.GV_$SESSION C
WHERE (A.OBJECT_ID = B.OBJECT_ID)
AND (B.PROCESS = C.PROCESS)
ORDER BY 1, 2;
解锁:
alter system kill session '146';(其中146为锁住的进程号)
3. 数据库用户被锁
在登陆时被告知test用户被锁
(1)用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
(2)查看具体的被锁时间
SQL> select username,lock_date from dba_users where username='TEST';
USERNAME LOCK_DATE
------------------------------ -------------------
TEST 2009-03-10 08:51:03
(3)解锁
SQL> alter user test account unlock;
User altered.
(4)查看是那个ip造成的test用户被锁
查看$ORACLE_HOME/network/admin/log/listener.log日志
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49434)) * establish * lhoms * 0
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49435)) * establish * lhoms * 0
这样可知是上面10.69.1.11的ip尝试多次失败登陆造成的被锁
注:
一般数据库默认是10次尝试失败后锁住用户
(1)查看FAILED_LOGIN_ATTEMPTS的值
select * from dba_profiles
(2)修改为30次
alter profile default limit FAILED_LOGIN_ATTEMPTS 30;
(3)修改为无限次(为安全起见,不建议使用)
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
4. 建立表空间自动增长
当准备海量数据的时候,建表空间时又不确定到底该设置多大,就可以将表空间设为自动增长,前提是你有足够的空间来支持。
CREATE TEMPORARY TABLESPACE TBS_CSP_BS_TEMP
TEMPFILE '/local/dev/bs/rlv_dat009' SIZE20M AUTOEXTEND ON NEXT5M MAXSIZEUNLIMITEDEXTENT MANAGEMENT LOCAL UNIFORM. SIZE10M;
自动增长,每次增长5M,增长无限制。
5. 修改表空间为自动增长
--sys用户登录查出名字以'TBS_CSP_CC_'开头的表空间文件
select *from dba_data_files t where t.tablespace_name like 'TBS_CSP_CC_%';
--修改此表空间文件为自动增长
alter database datafile 'D:\APP\ADMINISTRATOR\ADMIN\DEV\RLV_CCDAT002' autoextend on next5M maxsize unlimited;
6. 修改优化器规则
sys用户登录
--修改优化器规则为choose规则
alter system set optimizer_mode=choose scope=spfile;
Oracle11g中是数据库自动选择最优的优化器
7. 远程重启windows机器
cmd
net use \\10.41.24.16\ipc$
shutdown -f -r -m\\10.41.24.16
8. 重启数据库问题
简要描述:数据库被配置成共享数据库模式(shared server)
登陆数据库,然后启动数据库,发生的错误,具体过程如下:
SQL> connect test@wm as SYSDBA
Enter password:
Connected.
SQL> startup;
ORA-00106: cannot startup/shutdown database when connected to a dispatcher
原因:
要启动(STARTUP)/关闭(SHUTDOWN)数据库,必须使用专有服务器连接(Dedicatied Server)。使用共享服务器连接的用户无法启动和关闭数据库。
解决办法:
修改客户端的网络配置文件tnsnames.ora
(1)找到tnsnames.ora文件。
tnsnames.ora文件的位置由环境变量TNS_ADMIN指定,如果没有设置这个环境变量,则默认的位置是:
$ORACLE_HOME/network/admin(unix平台)
或者
%ORACLE_HOME%\network\admin(windows平台)。
其中,ORACLE_HOME表示ORACLE的主目录(ORACLE HOME)。
(2)修改tnsnames.ora中的网络服务名(Net Service Name)WM的配置
把WM由
WM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.33)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = wm)
)
)
改成
WM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.33)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME =wm)
(SERVER=dedicated)
)
)
SERVER=dedicated表示客户端请求的总是专有数据库(dedicated server)连接。
(3)重新登陆数据库,然后启动数据库