Oracle雕虫小技集(一)
1. Oracle数据文件丢失导致启动停止不了解决办法:
SQL> startup mount;
SQL> alter database datafile '/dev/datafile/rsdp01_ib_conf_data_0001' offline drop;
SQL> recover database;
SQL> alter database open;
2. 用sqlplus连接其它单板Oracle数据库命令:
SQL> conn user/password@IP/ORACLE_SID;
如: SQL> conn sysdb/[email protected]/mdspdb;
3. 表空间使用率查询:
用sysdba登录数据库执行:
select a.tablespace_name "tablespace", a.file_name "physical device file",trunc(a.total) "allocated
(M)",ceil((1-b.free/a.total)*100) "Usage %",
trunc(b.free) " free space(M)" from
(select tablespace_name,file_name, sum(nvl(bytes,0))/1024/1024 total from dba_data_files group
by tablespace_name,file_name,file_id) a,
(select tablespace_name, sum(nvl(bytes,0))/1024/1024 free from dba_free_space group by
tablespace_name) b
where a.tablespace_name=b.tablespace_name order by 3 desc;
4. 创建表空间及扩充表空间语句:
1). 创建新表空间:
create tablespace model_tablespace datafile '/opt/oracle/oradata/seedb/model_tablespace.dbf' size
30g reuse;
表空间数据文件大于32G时,需要增加BigFile参数才能创建成功:
create BigFile tablespace model_tablespace datafile '/opt/oracle/oradata/seedb/model_tablespace.dbf'
size 60g reuse;
2). 增加表空间大小:
ALTER TABLESPACE tablespacename ADD DATAFILE '/dev/datavg01/rdata8g_007' SIZE xxxxxM;
5. 表空间数据文件移动位置:
1).alter tablespace tablespace_name offline;
2).os下copy /home/oracle/oradata/datafilename to /opt/oracle/oradata/datafilename;
3).sqlplus执行:
alter tablespace tablespace_name rename datafile '/home/oracle/oradata/datafilename' to
'/opt/oracle/oradata/datafilename';
recover datafile '/opt/oracle/oradata/datafilename';
alter tablespace tablespace_name online;
Oracle雕虫小技集(二)
1. Oracle数据库最大连接数和当前用了的连接数查询:
1).查询和修改processes的值:
sqlplus / as sysdba
SQL> show parameter processes
SQL> alter system set processes=1500 scope=spfile;
然后重启数据库实例;
2).当前使用的连接数个数统计:select count(*) from v$session;
2. 锁表进程清除:
1).select t1.sid,t1.serial#,t1.username,t1.logon_time from v$session t1,v$locked_object t2 where
t1.sid=t2.session_id order by t1.logon_time;
2).alter system kill session '1550,4'; //后面数字为查询到的sid+servial#
3)还是失败的话:
select spid,s.osuser,s.program from v$session s,v$process p where s.paddr=p.addr and s.sid =1550,
用root用户执行kill -9 spid删除进程。
3. 数据库多国语言字符集检查:
SQL> select * from nls_database_parameters;
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8ISO8859P1 --(Please check with the HQ, if this should be
"AL32UTF8")
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.1.0.6.0
4. 取消Oracle11g数据库用户密码180天过期默认设置:
1)、查看用户的proifle是哪个,一般是default:
sql>SELECT username,PROFILE FROM dba_users;
2)、查看指定概要文件(如default)的密码有效期设置:
sql>SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND
s.resource_name='PASSWORD_LIFE_TIME';
如果查询结果为180天,则6个月后数据库密码过期,业务进程一旦重启会提示连接失败
3)、将密码有效期由默认的180天修改成“无限制”:
sql>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
修改之后不需要重启动数据库,会立即生效。
4)、修改后,还没有被提示ORA-28002警告的帐户不会再碰到同样的提示;
已经被提示的帐户必须再改一次密码,举例如下:
$sqlplus / as sysdba
sql> alter user smsc identified by <原来的密码> ----不用换新密码
oracle11g启动参数resource_limit无论设置为false还是true,密码有效期都是生效的,所以必须通过以上方式进行修改。以上的帐户名请根据实际使用的帐户名更改。
5. 取消Oracle11g数据库用户输入密码错误次数最大为10次配置:
1)、查看用户的proifle是哪个,一般是default:
sql>SELECT username,PROFILE FROM dba_users;
2)、查看指定概要文件(如default)的密码有效期设置:
sql>SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND
s.resource_name='FAILED_LOGIN_ATTEMPTS';
3)、将尝试登录失败次数由默认的10次修改成“无限制”:
sql>ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
4)、修改后,还没有被提示ORA-28000警告的用户不会再碰到同样的提示;
已经被锁定的帐户必须解除锁定,举例如下:
$sqlplus / as sysdba
sql> alter user smsc identified by oracle account unlock;
5)、修改后default profile应该如下:
sql> select * from dba_profiles WHERE dba_profiles.profile='DEFAULT';
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
------------------------------ -------------------------------- ------------- ----------------------
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
修改之后不需要重启动数据库,会立即生效。
6. 让oracle随linux开机自动启动:
修改Oracle系统配置文件/etc/oratab
/etc/oratab 格式为: SID:ORACLE_HOME:AUTO
把AUTO域设置为 Y (大写),只有这样,oracle 自带的dbstart和dbshut才能够发挥作用
在/etc/rc.local文件中加入
su - oracle -c "lsnrctl start"