logo资料库

oracle日常运维总结.docx

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
Oracle 日常运维操作
备份
启动和关闭
删除用户和表空间
创建用户和表空间
删除用户和表空间
用户授权
用户解锁
修改用户密码
密码过期处理
查看锁表情况
查看连接数
查看大表有哪些
查看表属于哪个用户
查看表结构
查看字符集
修改字符集
查看表结构及大小
truncate 表操作
查看用户权限
导入和导出
通过 exp 和 imp 导出导入:
Oracle 11g 可以通过expdp/impdp导入导出
修改 undo,temp 表空间
表空间扩展,增加表空间数据文件(ORA-01653)
查看 Oracle 最耗时的 SQL
手动删除归档日志
自动删除归档日志
RMAN 无法删除旧的归档日志解决办法
Oracle 日常运维操作 备份 每台 Oracle 机器都已配置了每天凌晨 03:03 开始自动做备份。 [oracle@oracle-test-001:/home/oracle] $ crontab -l 3 3 * * * sh /data/backup/backup.sh 开发童鞋若需临时备份,在 需要备份的机器上直接跑一次备份脚本即可。 备份示例: su - oracle sh /data/backup/backup.sh 脚本正常执行完毕后,可以到存放备份的目录下在检查一下备份文件。 备份脚本 backup.sh 示例: $ cat /data/backup/backup.sh #!/bin/bash DATE=`date +%d` echo $DATE export ORACLE_APP=/data/app/oracle export ORACLE_BASE=$ORACLE_APP export ORACLE_HOME=/data/app/oracle/product/11.2.0/db_1 export ORACLE_SID=orcl export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/lib:/usr/local /lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 del_date=`date -d "7 days ago" +%d` echo $del_date rm -f /data/backup/*$del_date.dmp exp USER_ONE/USER_ONE owner=USER_ONE exp USER_TWO/USER_TWO owner=USER_TWO file=/data/backup/USER_ONE-$DATE.dmp file=/data/backup/USER_TWO-$DATE.dmp
启动和关闭 启动: su - oracle sqlplus / as sysdba startup 用参数文件启动 Oracle,比如: SQL> startup pfile='/data/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora' 关闭: su - oracle sqlplus / as sysdba shutdown immediate; 启动和关闭监听(oracle 用户下执行): lsnrctl start lsnrctl stop lsnrctl status 删除用户和表空间 user drop drop tablespace wac_tmp including contents cascade constraints; wac_tmp CASCADE; 创建用户和表空间 创建表空间: wac_tmp create tablespace datafile '/data/oradata/orcl/wac_tmp.dbf' size 100M reuse autoextend on next 100M maxsize unlimited; 创建用户:
create user wac_tmp identified by "1" default tablespace wac_tmp; 删除用户和表空间 对于单个 user 和 tablespace 来说, 可以使用如下命令来完成。 1、删除 user : drop user ×× cascade 说明: 删除了 user,只是删除了该 user 下的 schema objects ,是不会删除 相应的 tablespace 的。 2、 删除 tablespace DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES; 用户授权 -- Grant/Revoke role privileges grant connect,resource to 用户名; -- Grant/Revoke system privileges grant create any sequence to 用户名; grant select any table to 用户名; grant update any table to 用户名; grant unlimited tablespace to 用户名; grant select on dba_tables to 用户名; grant read, write on directory data_pump_dir to 用户名; 用户解锁 查看当前被锁账户及锁定时间: select username,account_status,lock_date from dba_users; 若有业务用户被锁定,可以这样解锁: alter user username account unlock; 用户已经被锁住了,一般是用户错误的密码尝试次数太多,我们也可以修改允许 的最大密码输入错误次数,具体修改方法如下:
1、查看当前设置值 select * from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS'; 2、修改为 30 次 alter profile default limit FAILED_LOGIN_ATTEMPTS 30; 3、修改为无限次(为安全起见,不建议使用) alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited; 修改用户密码 ALTER USER user_name IDENTIFIED BY new_password; 密码过期处理 使用 sqlplus 登录管理员账户,查看指定概要文件(如 default)的密码有效期 设置为 180 天: SQL> SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; RESOURCE_NAME RESOURCE PROFILE ------------------------------ -------------------------------- -------- LIMIT ---------------------------------------- DEFAULT 180 PASSWORD_LIFE_TIME PASSWORD 将密码有效期由默认的 180 天修改成无限制,执行: alter profile default limit password_life_time unlimited; 修改之后不需要重启动数据库,会立即生效。这会让密码没有过期限制。 11g 之前的 Oracle 版本的默认 profile 是没有密码过期限制的,而在 Oracle 11g 中,默认情况下 profile 启用的密码过期时间是 180 天。若登录账号的密
码已经超过 180 天没有修改了,就会出现提示密码过期的问题,原来的账户就 不能登录到 Oracle 数据库了。 另 2 种解决办法: 1. 使用 sqlplus 登录出问题账户,会提示设置新密码,此时重新输入密码即 可,新密码可以和原来的密码相同。 2. 使用 sqlplus 登录管理员账户,执行 alter user 账户名 identified by 新密码,新密码可以和原来的密码相同。 查看锁表情况 查看锁表情况: select t2.username, t2.sid,t2.serial#,t2.LOCKWAIT,t2.logon_time,t3.object_name,t1.LOCKED_ MODE from v$locked_object t1, v$session t2, dba_objects t3 where t1.session_id = t2.sid and t1.object_id = t3.object_id order by t2.logon_time; 或 select t2.username,t2.sid,t2.serial#,t1.LOCKED_MODE,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time / 查看锁表语句: 假设 sid 为 1306: sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN SELECT (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),DECODE(sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.sid = '1306') ORDER BY piece ASC; 查出原因后,解除数据库中被锁住的表(SID,SERIAL): SID=39,SERIAL=1390 alter system kill session '39,1390’; 查看连接数
select * from v$session where username is not null select username,count(username) from v$session where username is not null group by username 查看不同用户的连接数: select count(*) from v$session 并发连接数: Select count(*) from v$session where status='ACTIVE' 查看大表有哪些 账户隔离,先切换到用户下,然后查看。 比如:查看 zilingzhi 用户下大于 10000 行的表 SQL> conn SQL> select table_name,num_rows from user_tables where num_rows>10000; zilingzhi/zilingzhi 以此类推。 查看表属于哪个用户 select owner from dba_tables where table_name=upper('表名'); 这个要求当前登录的用户权限为 dba 或有查询这个视图的权限才行。 栗子: SQL> select owner from dba_tables where table_name=upper('G_USERDATA_HISTORY'); OWNER ------------------------------ GENE_ICON2 GENE_ICON1 查看表结构 desc table_name SQL> SET LONG 9999
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','table_name') FROM DUAL; 查看字符集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') SIMPLIFIED CHINESE_CHINA.ZHS16GBK 修改字符集 比如,将数据库的字符集修改为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 1、关闭数据库,修改 oracle 用户的环境变量 shutdown immediate vim /home/oracle/.bash_profile 将 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 修改为: export NLS_LANG="Simplified Chinese_china”.ZHS16GBK 2、让修改的参数生效 source /home/oracle/.bash_profile 3、启动数据库 su - oracle sqlplus / as sysdba startup 查看表结构及大小 查看表结构: desc tablename; 查看表大小(M): select segment_name,bytes/1024/1024 from dba_segments where segment_name
in('G_USERDATA_HISTORY','G_AGENT_STATE_HISTORY','G_CALL_HISTORY','G_I R_HISTORY','G_PARTY_HISTORY'); truncate 表操作 conn usr_tmp1/usr_tmp1 truncate table usr_tmp1.USERDATA_HISTORY; 查看用户权限 查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs; select * from user_sys_privs; 查看角色(只能查看登陆用户拥有的角色)所包含的权限: select * from role_sys_privs; 查看一个用户的所有系统权限(包含角色的系统权限): select privilege from dba_sys_privs where grantee='DATAUSER' union select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' ); 导入和导出 通过 exp 和 imp 导出导入: exp(导出 dmp): exp TMP_USER/1 file=/data/backup/TMP_USER-$DATE.dmp owner=TMP_USER imp(导入 dmp): file=/data/backup/TMP_USER-26.dmp imp TMP_USER/1 EXP 有三种主要的方式(完全、用户、表) A、完全:EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 如果 要执行完全导出,必须具有特殊的权限 B、用户模式:EXP SONIC/SONIC OWNER=SONIC 这样用户 SONIC 的所有对象被输出到文件中。 BUFFER=64000 FILE=C:\SONIC.DMP
分享到:
收藏