AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-10736

sjk's questions

Martin Hope
sjk
Asked: 2017-10-11 04:12:51 +0800 CST

如何限制数据泵登录到本地主机

  • 1

我在 Oracle 12c 数据库中有一个用户将用于运行完整的数据泵导出和导入。我想限制从该用户登录到本地主机。

我试图创建登录触发器:

create or replace trigger logon_trigger 
  after logon on database
declare
  host varchar2(50);
begin 
  host := trim(lower(sys_context('USERENV', 'HOST')));
  if lower(user) = '<data pump user>' then
    if host <> '<hostname>' then
      raise_application_error(-20000, 'Login not allowed');
    end if;
  end if;
end;
/

我可以从审计跟踪中看到此触发器已触发(ORA-20000:不允许登录),但仍允许用户从远程主机登录。

此限制适用于普通用户,但不适用于数据泵用户。我怀疑这与角色 exp_full_database 和 imp_full_database 有关。

有什么方法可以使这个触发器工作,还是我应该使用本地操作系统身份验证?

oracle oracle-12c
  • 1 个回答
  • 158 Views
Martin Hope
sjk
Asked: 2014-04-11 03:21:45 +0800 CST

使用不同物理挂载上的数据文件对 IO 进行条带化

  • 0

我有一台带有三个直接连接的磁盘控制器的服务器。这些中的每一个都可以提供内部冗余和跨磁盘的 IO 条带化,但我想知道配置整个系统的最佳方法是什么。

为每个表空间分配三个数据文件是否明智,每个数据文件都在单个控制器提供的挂载中创建?Oracle 似乎在执行插入时将数据稍微均匀地分布在数据文件中,但这是否足以对查询进行条带化?

我们最关心的是单个聚合查询(数据仓库)的读取性能,并希望从每个控制器并行读取数据。

一种答案是使用 ASM 或 LVM 进行条带化,然后 Oracle 将只看到一个用于存储数据文件的挂载点。我们确实有 ASM + JBOD 磁盘数量的配置;它确实表现不错,但 ASM 有它自己的问题,我们正在考虑替代方案。

oracle oracle-11g-r2
  • 1 个回答
  • 419 Views
Martin Hope
sjk
Asked: 2014-03-29 03:16:04 +0800 CST

使用 NLS_DATE_FORMAT 隐藏零小时和分钟

  • 0

我目前正在使用日期格式:

alter session set nls_date_format = 'DD.MM.YYYY HH24:MI';

(外观)问题是它始终显示时间,即使它为零,例如:“27.03.2014 00:00”。是否可以使用 NLS_DATE_FORMAT 隐藏 00:00,但显示不为零的时间?

我意识到这对于任何类型的自动处理都不是一个好主意,但这仅供交互式使用。我知道我可以格式化查询中的各个列,但我对更通用的解决方案感兴趣。

我确实检查了格式模型文档,但没有找到任何相关参数,所以这可能是不可能的。

oracle oracle-11g-r2
  • 2 个回答
  • 158 Views
Martin Hope
sjk
Asked: 2014-02-04 05:21:09 +0800 CST

ORA-12899 基于数字列创建 varchar 虚拟列

  • 2

我有一个带有数字列的表:

create table test (a number(2,0));

接下来我想根据a列创建一个虚拟列:

alter table test add (b varchar2(3) as ('A:'||to_char(a)));

这会导致错误:

ORA-12899: value too large for column "B" (actual: 12, maximum: 42)

为什么我会收到此错误?如果我用 substr 替换 to_char 这会起作用,但我很好奇 Oracle 如何确定“实际”和“最大值”值?

我怀疑最大值与数字类型的最大精度有关(Oracle 忽略了数据类型精度),但我仍然不太明白这个错误。字符集是 UTF-8。

oracle oracle-11g-r2
  • 2 个回答
  • 2327 Views
Martin Hope
sjk
Asked: 2013-12-20 00:04:36 +0800 CST

如何防止调度程序作业在实例启动时运行

  • 4

我目前正在从 RMAN 备份测试 Oracle 11g 恢复过程。我可以将实例恢复到另一台主机,但我遇到的问题是,一旦我打开恢复的实例,调度程序作业就会立即启动。

我可以通过运行禁用调度程序:

exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','TRUE');

但是在实例启动之前我不能这样做。

有没有办法在启动实例之前禁用作业?

oracle oracle-11g-r2
  • 3 个回答
  • 13457 Views
Martin Hope
sjk
Asked: 2013-10-18 22:21:16 +0800 CST

审核指定用户对指定表的选择查询

  • 1

我需要审核指定用户针对指定表的所有 SELECT 查询(通过访问)。

据我所知,这不能通过正常的审计来完成;它只支持审计指定用户的所有查询或对指定表的所有查询(任何用户)。这是一个问题,因为有些系统帐户会产生过多的审计,需要从审计中排除。

这留下了细粒度的审计,可以通过在dbms_fga.add_policy中为audit_condition参数指定适当的谓词来做到这一点。但是,当使用并行查询时,FGA 会在审计跟踪中写入重复行,这很不幸。当目标是最小化审计信息时是不可取的。

目前,我打算使用 FGA 并经常删除重复的行。有没有更好的方法来实施这种审计策略?

oracle oracle-11g-r2
  • 1 个回答
  • 2442 Views
Martin Hope
sjk
Asked: 2013-09-27 22:24:23 +0800 CST

在实例运行时备份 Oracle 主目录

  • 2

当使用主目录的实例正在运行时,我可以在升级前备份 Oracle 主目录(使用 cp -r)还是需要先关闭实例?

跟踪文件/警报日志位于不同的目录结构中,所有数据文件、重做日志文件、控制文件和 spfile 都在 ASM 中。

oracle oracle-11g-r2
  • 1 个回答
  • 688 Views
Martin Hope
sjk
Asked: 2012-12-14 02:02:43 +0800 CST

使用多个日期列进行分区修剪

  • 5

我在 Oracle 11g 数据库中有一个大表,其中包含几年的历史数据,所以我想按年份对其进行分区。问题是该表有多个日期列并且它们都用于查询,所以我不能只选择一个日期列并将其用作分区键。

大多数时间日期彼此接近,因此我为每一年创建了分区,加上一个“溢出”分区,其中包含跨越年份边界的行。这是一个简化的示例:

create table t (
  start_year int,
  end_year int,
  partition_year int as (case when start_year=end_year then start_year else 0 end),
  data blob 
)
partition by range(partition_year) (
  partition poverflow values less than (1000),
  partition p2000 values less than (2001),
  partition p2001 values less than (2002),
  partition p2002 values less than (2003),
  partition p2003 values less than (2004),
  partition p2004 values less than (2005)
);

这种方法的问题是 partition_year 必须在查询中显式引用,否则分区修剪(非常可取,因为表很大)不会生效。该表用于多个用户的即席聚合查询;我不能指望他们都记得这个逻辑。

这可以通过视图来解决

create or replace view v as
select *
from t
where partition_year=start_year 
  and partition_year=end_year 
  and partition_year>1000
union all
select *
from t partition (poverflow);

现在像这样的查询

select * from v where start_year >= 2003 and end_year <= 2004;

使用正确的分区(下面计划中的 5-6 + 1):

---------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |      |     1 |  4030 |     2   (0)| 00:00:01 |       |       |
|   1 |  VIEW                      | V    |     1 |  4030 |     2   (0)| 00:00:01 |       |       |
|   2 |   UNION-ALL                |      |       |       |            |          |       |       |
|   3 |    PARTITION RANGE ITERATOR|      |     1 |  2041 |     2   (0)| 00:00:01 |     5 |     6 |
|*  4 |     TABLE ACCESS FULL      | T    |     1 |  2041 |     2   (0)| 00:00:01 |     5 |     6 |
|   5 |    PARTITION RANGE SINGLE  |      |     1 |  2041 |     2   (0)| 00:00:01 |     1 |     1 |
|*  6 |     TABLE ACCESS FULL      | T    |     1 |  2041 |     2   (0)| 00:00:01 |     1 |     1 |
---------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - filter("START_YEAR">=2003 AND "END_YEAR"<=2004 AND "END_YEAR">=2003 AND 
              "START_YEAR"<=2004 AND "PARTITION_YEAR"<=2004 AND "PARTITION_YEAR"="START_YEAR" AND 
              "PARTITION_YEAR"="END_YEAR")
   6 - filter("START_YEAR">=2003 AND "END_YEAR"<=2004)

问题是,如果我用日期替换 int 类型,这将不再起作用。我试图从日期中提取年份组件并向视图添加相应的约束,但未修剪分区。迄今为止更改 partition_year 的类型也没有帮助。

有什么办法可以在一个表中有多个日期列并且仍然能够使用分区修剪?

oracle database-design
  • 3 个回答
  • 5688 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve