关系型数据库。
Oracle 13c OEM 安装
关系型数据库。
快速获取schemas 下可以进行shrink 收缩的表。
SELECT dt.owner, dt.table_name, (CASE WHEN NVL (ind.cnt, 0) < 1 THEN 'Y' ELSE 'N' END) AS can_shrink FROM dba_tables dt, ( SELECT table_name, COUNT (*) cnt FROM dba_indexes di WHERE index_type LIKE 'FUNCTION-BASED%' GROUP BY table_name) ind WHERE dt.table_name = ind.table_name(+) AND dt.table_name NOT LIKE 'AQ$%' AND dt.table_name NOT LIKE 'BIN$%' AND dt.owner = '&ownername' ORDER BY 1, 2;
如果无法收缩 Oracle 会提示如下:
ORA-10631: SHRINK clause should not be specified for this object
关键字:EM无法登录,提示ORA-28001: the password has expired (DBD ERROR: OCISessionBegin)
以上提示 参见本文。
Oracle 11g 默认安装 用户密码有180天的过期限制。
测试用库实在有些不便。
--sys DBA 身份连入 sqlplus sys/password@SID as sysdba --查看数据库目前的口令期限 select * from dba_profiles where profile = 'DEFAULT' and resource_name = 'PASSWORD_LIFE_TIME'; --查看用户的状态,发现DBSNMP和SYSMAN两个帐号都已经过期 select username, account_status from dba_users; --修改用户的口令期限为无限制 alter profile default limit password_life_time unlimited; --修改DBSNMP和SYSMAN两个帐号的口令 alter user dbsnmp identified by dbsnmp; alter user sysman identified by sysman;
执行以上操作后,重启计算机、服务器即可。
如果仍然提示无法连接实例,并且dbsnmp sysman 用户被锁定 LOCKED(TIMED)。
极有可能是EM 的配置文件中dbsnmp sysman的密码 与实际的不同。
此时重置EM 配置文件。
--sqlplus 中运行 emca -config dbcontrol db --根据提示 输入各用户名的 密码。
Username | Password | Description | See Also |
CTXSYS | CTXSYS | The Oracle Text account | Oracle Text Reference |
DBSNMP | DBSNMP | The account used by the Management Agent component of Oracle Enterprise Manager to monitor and manage the database | Oracle Enterprise Manager Grid Control Installation and Basic Configuration |
LBACSYS | LBACSYS | The Oracle Label Security administrator account | Oracle Label Security Administrator’s Guide |
MDDATA | MDDATA | The schema used by Oracle Spatial for storing Geocoder and router data | Oracle Spatial User’s Guide and Reference |
MDSYS | MDSYS | The Oracle Spatial and Oracle interMedia Locator administrator account | Oracle Spatial User’s Guide and Reference |
DMSYS | DMSYS | The Oracle Data Mining account. | Oracle Data Mining Administrator’s Guide |
OLAPSYS | MANAGER | The account used to create OLAP metadata structures. It owns the OLAP Catalog (CWMLite). | Oracle OLAP Application Developer’s Guide |
ORDPLUGINS | ORDPLUGINS | The Oracle interMedia user. Plug-ins supplied by Oracle and third party format plug-ins are installed in this schema. | Oracle interMedia User’s Guide |
ORDSYS | ORDSYS | The Oracle interMedia administrator account | Oracle interMedia User’s Guide |
OUTLN | OUTLN | The account that supports plan stability. Plan stability enables you to maintain the same execution plans for the same SQL statements. OUTLN acts as a role to centrally manage metadata associated with stored outlines. | Oracle Database Performance Tuning Guide |
SI_INFORMTN_SCHEMA | SI_INFORMTN_SCHEMA | The account that stores the information views for the SQL/MM Still Image Standard | Oracle interMedia User’s Guide |
SYS | CHANGE_ON_INSTALL | The account used to perform database administration tasks | Oracle Database Administrator’s Guide |
SYSMAN | CHANGE_ON_INSTALL | The account used to perform Oracle Enterprise Manager database administration tasks. Note that SYS and SYSTEM can also perform these tasks. | Oracle Enterprise Manager Grid Control Installation and Basic Configuration |
SYSTEM | MANAGER | Another account used to perform database administration tasks. | Oracle Database Administrator’s Guide |
临时表空间概念
临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大的原因。
临时表空间存储大规模排序操作(小规模排序操作会直接在RAM里完成,大规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地方在于它由临时数据文件(temporary files)组成的,而不是永久数据文件(datafiles)。临时表空间不会存储永久类型的对象,所以它不会也不需要备份。另外,对临时数据文件的操作不产生redo日志,不过会生成undo日志。
创建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大,添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏文件(Sparse File),当临时表空间文件创建时,它只会写入文件头部和最后块信息(only writes to the header and last block of the file)。它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据文件飞快的原因。
另外,临时表空间是NOLOGGING模式以及它不保存永久类型对象,因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace。
临时表空间信息
Oracle 在删除数据后,因为高水位线的问题,并不会 自动释放空间。
所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称为”high water mark”或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。
-- --查看hwm select file_name, ceil((nvl(hwm, 1) * 8192) / 1024 / 1024) as "HWM(MB)" from dba_data_files a, (select file_id, max(block_id + blocks - 1) hwm from dba_extents group by file_id) b where a.file_id = b.file_id(+); --查看hwm 信息全 SELECT * FROM (SELECT /*+ ordered use_hash(a,b,c) */ a.file_id, a.file_name, a.filesize, b.freesize, (a.filesize - b.freesize) usedsize, c.hwmsize, c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm, a.filesize - c.hwmsize canshrinksize FROM (SELECT file_id, file_name, round(bytes / 1024 / 1024) filesize FROM dba_data_files) a, (SELECT file_id, round(SUM(dfs.bytes) / 1024 / 1024) freesize FROM dba_free_space dfs GROUP BY file_id) b, (SELECT file_id, round(MAX(block_id) * 8 / 1024) HWMsize FROM dba_extents GROUP BY file_id) c WHERE a.file_id = b.file_id AND a.file_id = c.file_id ORDER BY unsedsize_belowhwm DESC) WHERE file_id IN (SELECT file_id FROM dba_data_files WHERE tablespace_name = 'DMSB_01') ORDER BY file_id; --释放 alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\D_TEST1' resize 600m;
高水位详解,引自:http://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html
一 设置为归档方式
1 sql> archive log list; #查看是不是归档方式 2 sql> alter system set log_archive_start=true scope=spfile; #启用主动归档 sql> alter system set log_archive_dest='location=/oracle/ora9/oradata/arch' scope=spfile; #设置归档路径 sql> alter system set log_archive_dest_1='location=/oracle/ora9/oradata/arch1' scope=spfile; sql> alter system set log_archive_dest_2='location=/oracle/ora9/oradata/arch2' scope=spfile; #如果归档到两个位置,则可以通过上边方法实现 sql> alter system set log_archive_format='arch_%d_%t_%r_%s.log' #设置归档日记款式 3 sql> shutdown immediate; 4 sql> startup mount; #打开控制文件,不打开数据文件 5 sql> alter database archivelog; #将数据库切换为归档模式 6 sql> alter database open; #将数据文件打开 7 sql> archive log list; #查看此时是否处于归档模式 8 查询以确定数据库位于archivelog模式中且归档过程正在运行 sql> select log_mode from v$database; sql> select archiver from v$instance; 9 日志切换 sql> alter system switch logfile; 10 这次日志切换将归档写到两个目标地, 1,即第二步的/oracle/ora9/oradata/arch1和/oracle/ora9/oradata/arch1,要是要对目录确认 在oracle情况中运行如下查询: sql> select name from v$archived_log; 而后在操作系统中确认查询所列出的文件
二 设置非归档方式
1 sql> archive log list; #查看是否是归档方式 2 sql> alter system set log_archive_start=false scope=spfile; #禁用自动归档 3 sql> shutdown immediate; 4 sql> startup mount; #打开控制文件,不打开数据文件 5 sql> alter database noarchivelog; #将数据库切换为非归档模式 6 sql> alter database open; #将数据文件打开 7 sql> archive log list; #查看此时便处于非归档模式
三 归档相关命令
archive log stop; archive log start; archive log list; show parameters; show parameters log_archive_start; show parameters log_archive_max_process; #归档进程数 alter system set log_archive_max_process=5; #将归档进程数改为5 select * from v$bgprocess; #检察后台进程
客户Oracle服务器进入PL/SQL Developer时报ora-01033:oracle initializationg or shutdown in progress 错误提示,应用系统无法连接Oracle服务。过程如下:
1、进入CMD,执行set ORACLE_SID=fbms,确保连接到正确的SID;
2、运行sqlplus “/as sysdba”
SQL>shutdown immediate 停止服务 SQL>startup 启动服务,观察启动时有无数据文件加载报错,并记住出错数据文件标号 SQL>shutdown immediate 再次停止服务 SQL>startup mount SQL> recover datafile 2 恢复出错的数据文件 SQL>shutdown immediate 再次停止服务 SQL>startup 启动服务,此次正常。
3、进入PL/SQL Developer检查,没有再提示错误。