DBA_USERS中Profile总为DEFAULT是因为Oracle默认用户建库时即指定DEFAULT,需显式CREATE USER...PROFILE才变更;Profile修改仅对新会话生效,不自动刷新旧连接。
查 DBA_USERS 时 Profile 总是 DEFAULT?
不是数据错了,是 profile 名没生效——oracle 默认用户(如 scott、hr)建库时直接指定的 profile 就是 default,除非你显式用 create user ... profile xxx 指定过。别急着怀疑视图或权限,先确认你改过 profile 吗?
实操建议:
SELECT username, profile, default_tablespace, temporary_tablespace FROM DBA_USERS WHERE username = 'YOUR_USER';- 如果
profile是DEFAULT,但你想验证它实际限制,得查DBA_PROFILES:比如SELECT * FROM DBA_PROFILES WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME'; - 注意:Profile 修改后**不自动生效**,只对新会话或下次登录起作用;已存在的连接仍按旧 Profile 运行
DBA_USERS 里表空间字段为空或显示 SYSTEM?
常见于用户被创建时没指定 DEFAULT TABLESPACE,Oracle 就 fallback 到 SYSTEM——这很危险,SYSTEM 表空间不该存业务对象。
实操建议:
- 检查创建语句是否漏了
DEFAULT TABLESPACE users(推荐用USERS或自定义业务表空间) - 修改已有用户:执行
ALTER USER your_user DEFAULT TABLESPACE users;(注意:不会迁移已有对象,只影响后续新建表) -
TEMPORARY TABLESPACE字段为空?说明用了数据库级默认临时表空间(查SELECT property_value FROM DATABASE_PROPERTIES WHERE property_name = 'DEFAULT_TEMP_TABLESPACE';)
没有 DBA_USERS 权限,普通用户怎么查自己配置?
非 DBA 用户看不到 DBA_USERS,但能通过 USER_USERS 和 USER_RESOURCE_LIMITS 看到自身信息,只是字段少些。
实操建议:
-
SELECT username, default_tablespace, temporary_tablespace FROM USER_USERS;(只返回当前用户一行) -
SELECT resource_name, limit FROM USER_RESOURCE_LIMITS;(对应 Profile 中的资源限制,比如SESSIONS_PER_USER) - 无法看到 Profile 名?对,
USER_USERS不含PROFILE字段——这是有意设计,防止普通用户探知系统级安全策略
为什么 SELECT * FROM DBA_USERS 返回大量账号,但很多根本没用过?
Oracle 安装或升级时会预建一堆用户(ANONYMOUS、XDB、ORDSYS…),它们 Profile 是 DEFAULT,但账户状态常为 EXPIRED & LOCKED,属于“存在但不可用”。
实操建议:
- 加过滤条件看活跃用户:
SELECT username, account_status, profile FROM DBA_USERS WHERE account_status = 'OPEN'; - 别误删预建用户——比如
XDB被删会导致 XML DB 功能异常;APPQOSSYS影响资源管理器 - 想清理?优先用
ALTER USER xxx ACCOUNT LOCK PASSWORD EXPIRE;,而不是DROP USER
Profile 和表空间不是写进用户记录就一劳永逸的配置,它们和会话生命周期、对象创建时机、甚至数据库版本都有关联。最容易被忽略的是:Profile 变更后老连接不刷新、表空间变更不迁移旧数据、预建用户状态和用途混在一起查——这些点卡住一次,比重跑十次查询还耗时间。

















