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-1669

Martin's questions

Martin Hope
Martin
Asked: 2014-10-30 13:27:13 +0800 CST

以不同于模式用户的 Oracle 用户身份登录并仍然看到所有表,...模式的最简单方法?

  • 1

以用户 X 身份登录并查看模式 Y 的所有表...的最简单方法是什么,就好像它们属于 X 一样?

对于 Oracle 11g 数据库,我想使用用户登录数据库,X但所有数据(表、视图、过程等)都将存储在 Schema 中Y。

所有访问表的代码都保证使用非限定名称(TBL_NAME, not Y.TBL_NAME)

搜索“模式别名”指向CREATE SYNONYM,但必须为每个 DML 对象完成,对吗?而且由于我只有不合格的呼叫,似乎登录触发器ALTER SESSION SET CURRENT_SCHEMA = ...;应该可以解决问题吗?

还有其他选择吗?

oracle schema
  • 1 个回答
  • 133 Views
Martin Hope
Martin
Asked: 2014-10-10 11:49:15 +0800 CST

ID 反模式是什么以及如何?

  • 3

什么是ID 反模式以及为什么/在什么情况下它被视为反模式?

id 反模式在每个表中都有一个唯一的 ID 列。为每条新记录生成 ID。为什么这是反模式?– 安德鲁·沃尔夫 11 分钟前

normalization primary-key
  • 2 个回答
  • 1835 Views
Martin Hope
Martin
Asked: 2014-10-10 02:34:26 +0800 CST

执行“删除归档日志”时,“副本”是什么意思?

  • 0

免责声明:我不是 DBA,也没有完整地阅读RMAN 文档,所以这可能涵盖得很好,但我找不到它。

问题很简单,这两个命令有什么区别:

  • delete copy of archivelog all completed before 'SYSDATE-7';
  • delete archivelog all completed before 'SYSDATE-7';

从 RMAN 运行这些时在什么情况下从哪里删除了什么?



可能相关的信息:(?)

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     5785
Next log sequence to archive   5787
Current log sequence           5787
SQL> select * from v$recovery_file_dest;

NAME             SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
---------------- ----------- ---------- ----------------- -----
e:\oracle\backup 2.1475E+11  4.7820E+10 4.6097E+10        1246

-

RMAN> show retention policy;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ****** are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
oracle rman
  • 1 个回答
  • 1147 Views
Martin Hope
Martin
Asked: 2014-06-26 03:20:29 +0800 CST

我可以从 Optimzer 那里得到一些理由,为什么它选择了某个解释计划吗?

  • 1

这与阅读解释计划无关。

这与添加任何提示或测量特定查询的性能无关。

我一直想知道一个给定的查询解释计划(或查询的自动跟踪)是否有可能“询问”优化器为什么选择这个计划而不是其他可用的计划。

  • 有没有办法让数据库显示它为同一查询考虑的不同计划的比较?
  • 有没有办法查看为计划显示的成本进行了哪些计算?(例如,优化器假设 wrt. 磁盘访问与内存中的东西等。)

这个问题的理由:据我所知,使用 EXPLAIN PLAN,当数据库选择某个执行计划时,这不够/太慢/......在第一时间,DBA 或开发人员并不知道:是否有根本没有这个计划的任何替代方案,而且不知道为什么,如果开发人员知道替代方案(例如未使用的索引),则不会使用这些替代方案。

oracle explain
  • 2 个回答
  • 259 Views
Martin Hope
Martin
Asked: 2013-05-25 06:23:44 +0800 CST

单个查询比连接快吗?

  • 47

概念性问题:单个查询是否比连接更快,或者:我应该尝试将客户端所需的所有信息压缩到一个SELECT 语句中,还是只使用看起来方便的尽可能多的信息?

TL;DR:如果我的联合查询比运行单个查询花费的时间更长,这是我的错还是可以预料到的?

首先,我不是很精通数据库,所以可能只有我一个人,但我注意到,当我必须从多个表中获取信息时,通过对单个表的多个查询来获取这些信息“通常”更快(也许包含一个简单的内部连接)并在客户端将数据修补在一起,以尝试编写一个(复杂的)连接查询,我可以在一个查询中获取所有数据。

我试图把一个非常简单的例子放在一起:

SQL小提琴

架构设置:

CREATE TABLE MASTER 
( ID INT NOT NULL
, NAME VARCHAR2(42 CHAR) NOT NULL
, CONSTRAINT PK_MASTER PRIMARY KEY (ID)
);

CREATE TABLE DATA
( ID INT NOT NULL
, MASTER_ID INT NOT NULL
, VALUE NUMBER
, CONSTRAINT PK_DATA PRIMARY KEY (ID)
, CONSTRAINT FK_DATA_MASTER FOREIGN KEY (MASTER_ID) REFERENCES MASTER (ID)
);

INSERT INTO MASTER values (1, 'One');
INSERT INTO MASTER values (2, 'Two');
INSERT INTO MASTER values (3, 'Three');

CREATE SEQUENCE SEQ_DATA_ID;

INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 1, 1.3);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 1, 1.5);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 1, 1.7);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 2, 2.3);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 3, 3.14);
INSERT INTO DATA values (SEQ_DATA_ID.NEXTVAL, 3, 3.7);

查询一:

select NAME from MASTER
where ID = 1

结果:

| NAME |
--------
|  One |

查询 B:

select ID, VALUE from DATA
where MASTER_ID = 1

结果:

| ID | VALUE |
--------------
|  1 |   1.3 |
|  2 |   1.5 |
|  3 |   1.7 |

查询 C:

select M.NAME, D.ID, D.VALUE 
from MASTER M INNER JOIN DATA D ON M.ID=D.MASTER_ID
where M.ID = 1

结果:

| NAME | ID | VALUE |
---------------------
|  One |  1 |   1.3 |
|  One |  2 |   1.5 |
|  One |  3 |   1.7 |

当然,我没有用这些来衡量任何性能,但人们可能会观察到:

  • 查询 A+B 返回与查询 C 相同数量的可用信息。
  • A+B 必须向客户端返回 1+2x3==7 个“数据单元”
  • C 必须返回 3x3==9 "Data Cells" 给客户端,因为有了连接,我自然会在结果集中包含一些冗余。

以此概括(就目前而言):

与接收相同信息量的单个查询相比,连接查询始终必须返回更多数据。由于数据库必须将数据拼凑在一起,因此对于大型数据集,可以假设数据库必须在单个连接查询上比在单个查询上做更多的工作,因为(至少)它必须向客户端返回更多数据。

是否会由此得出,当我观察到将客户端查询拆分为多个查询会产生更好的性能时,这只是要走的路,还是意味着我搞砸了连接查询?

performance join
  • 4 个回答
  • 81666 Views
Martin Hope
Martin
Asked: 2012-09-06 20:24:37 +0800 CST

将数据从 Oracle 移动到 SQL Server 的最简单方法是什么?

  • 15

我们的一款产品同时支持 Oracle 和 SQL Server 作为数据库后端。我们有一位客户希望从 Oracle 后端切换到 Microsoft SQL Server,这对我们来说不是典型的过渡。

将整个 Oracle Schema 中的所有数据导入 SQL Server 数据库的最简单方法是什么?

该模式只包含普通的旧表,没有什么花哨的。可能有一两个存储过程,我们手动迁移不会有问题。

我可以使用 Oracle 的 SQLDeveloper 将表数据导出为CREATE和INSERT语句,但这些与 SQL Server 上使用的语法不匹配,我不期待必须手动修复语法错误。

sql-server oracle
  • 2 个回答
  • 87587 Views
Martin Hope
Martin
Asked: 2011-11-12 03:02:13 +0800 CST

确定Oracle会话客户端字符集?

  • 9

我知道数据库字符集(NLS_CHARACTERSETin select * from v$nls_parameters;)和客户端字符集(客户端环境设置NLS_LANG)如何交互。

但是,我无法找到的是,对于已建立的会话,我如何或是否可以确定 Oracle 认为当前客户端字符集是什么。

这可能吗?

注意:SELECT * FROM NLS_SESSION_PARAMETERS;不包括字符集(在 10g2 上)。

为了明确我想要完成的工作:

  1. NLS_LANG 在客户端环境中设置为任意值(例如GERMAN_GERMANY.WE8MSWIN1252)
  2. 数据库应用程序[*] 启动并建立到 Oracle 数据库的连接/会话。
  3. 数据库应用程序[*] 想要“询问” Oracle(而不是其操作系统环境)客户端字符集是 Oracle 将假定的。

[*]:如果 db 应用程序是 sqlplus,则示例如下所示:

...
sqlplus /nolog
connect user/pass@example
*magic command*;
   CLIENT CHARACTERSET = ...

杰克在回答中的注释提出了两个重要的观点:

  • 使用 Oracle,谁做字符集翻译。它是客户端库代码还是在服务器端完成的?
  • 看起来它是客户端,客户端需要公开此设置——客户端库/工具假定此设置是什么。是否有任何 Oracle 客户端库/工具(sqlplus、OCI/OCCI、Pro*C、...)可以查询它认为该设置是什么?
oracle character-set
  • 2 个回答
  • 53369 Views
Martin Hope
Martin
Asked: 2011-09-30 02:31:27 +0800 CST

在事务中修改表结构?

  • 4

在 Oracle(可能还有其他地方)中,执行 ALTER TABLE 语句将对当前事务执行隐式提交。

我们有一个工具(用 Java 编写)应该通过以下方式修改模式:

  • 添加一些列
  • 删除一些列
  • 使用新的模式布局更新描述表

编写的工具将向用户显示当前模式布局并允许他修改它。(基本上在某些表中添加或删除自定义“属性”列)一旦他满意,他就可以应用他的更改。

请注意:基本模式布局,以及您需要 ALTER TABLE 来更改某些内容的事实是由标准预定义的,我们无法更改,因为其他工具将不再起作用。

现在的问题是我们不能在单个事务中运行这些更改,因为 AFAIK,不可能在一个事务中执行多个 ALTER TABLE 语句。

如果在应用更改时出现问题,我们有哪些选项可以“回滚”到初始状态?

注意:这里有人提出了 RESTORE POINT + FLASHBACK ——从这个(Java)工具调用它是个好主意吗?(在某些应该使用该工具的站点,我们不会完全控制数据库实例。)

注:Oracle 10g2 及以上

oracle schema
  • 6 个回答
  • 5544 Views
Martin Hope
Martin
Asked: 2011-08-09 22:18:29 +0800 CST

缩小 VARCHAR 列的大小有什么意义吗?

  • 19

在那里谷歌搜索似乎是混合报告VARCHAR2Oracle 中列的大小是否影响性能。

我想VARCHAR稍微扭曲一下大小的问题,并希望对此有所了解:

给定要存储在(Oracle)数据库中的(多行)自由文本字段(不是名称之类的短内容),在不最大化VARCHAR容量(VARCHAR2(4000)在 Oracle 上)但选择较小的值,例如 1024 或 512,因为无论如何这在 98% 的情况下可能就足够了。

oracle performance
  • 3 个回答
  • 4179 Views
Martin Hope
Martin
Asked: 2011-05-14 04:26:10 +0800 CST

闪回查询和序列化事务模式的区别?

  • 3

SERIALIZABLE事务和闪回查询在概念上有区别吗?

oracle transaction
  • 1 个回答
  • 364 Views
Martin Hope
Martin
Asked: 2011-05-14 03:32:27 +0800 CST

连接字符串的替代方法或程序化以防止 SQL 查询代码重复?

  • 19

免责声明:作为一个只在其工作时间的一小部分中使用数据库的人,请多多包涵。(大部分时间我在工作中进行 C++ 编程,但每个奇数月我都需要在 Oracle 数据库中搜索/修复/添加一些东西。)

我反复需要编写复杂的 SQL 查询,既针对临时查询,也针对内置于应用程序中的查询,其中大部分查询只是重复“代码”。

用传统的编程语言编写这种可憎的东西会给你带来很大的麻烦,但我(我)还没有找到任何合适的技术来防止 SQL 查询代码重复。


编辑:第一,我要感谢为我的原始示例提供出色改进的回答者。但是,这个问题与我的例子无关。这是关于 SQL 查询的重复性。因此,迄今为止的答案(JackP、Leigh)很好地表明您可以通过编写更好的查询来减少重复性。然而即便如此,您仍面临一些显然无法消除的重复性:这总是让我对 SQL 感到厌烦。在“传统”编程语言中,我可以进行很多重构以最大程度地减少代码中的重复性,但是对于 SQL,似乎没有(?)工具可以做到这一点,除了编写一个较少重复的语句开始。

请注意,我再次删除了 Oracle 标记,因为我真的很感兴趣是否没有数据库或脚本语言可以提供更多功能。


这是我今天拼凑而成的一颗这样的宝石。它基本上报告单个表的一组列的差异。请浏览以下代码,尤其是。最后的大查询。下面我继续。

--
-- Create Table to test queries
--
CREATE TABLE TEST_ATTRIBS (
id NUMBER PRIMARY KEY,
name  VARCHAR2(300) UNIQUE,
attr1 VARCHAR2(2000),
attr2 VARCHAR2(2000),
attr3 INTEGER,
attr4 NUMBER,
attr5 VARCHAR2(2000)
);

--
-- insert some test data
--
insert into TEST_ATTRIBS values ( 1, 'Alfred',   'a', 'Foobar', 33, 44, 'e');
insert into TEST_ATTRIBS values ( 2, 'Batman',   'b', 'Foobar', 66, 44, 'e');
insert into TEST_ATTRIBS values ( 3, 'Chris',    'c', 'Foobar', 99, 44, 'e');
insert into TEST_ATTRIBS values ( 4, 'Dorothee', 'd', 'Foobar', 33, 44, 'e');
insert into TEST_ATTRIBS values ( 5, 'Emilia',   'e', 'Barfoo', 66, 44, 'e');
insert into TEST_ATTRIBS values ( 6, 'Francis',  'f', 'Barfoo', 99, 44, 'e');
insert into TEST_ATTRIBS values ( 7, 'Gustav',   'g', 'Foobar', 33, 44, 'e');
insert into TEST_ATTRIBS values ( 8, 'Homer',    'h', 'Foobar', 66, 44, 'e');
insert into TEST_ATTRIBS values ( 9, 'Ingrid',   'i', 'Foobar', 99, 44, 'e');
insert into TEST_ATTRIBS values (10, 'Jason',    'j', 'Bob',    33, 44, 'e');
insert into TEST_ATTRIBS values (12, 'Konrad',   'k', 'Bob',    66, 44, 'e');
insert into TEST_ATTRIBS values (13, 'Lucas',    'l', 'Foobar', 99, 44, 'e');

insert into TEST_ATTRIBS values (14, 'DUP_Alfred',   'a', 'FOOBAR', 33, 44, 'e');
insert into TEST_ATTRIBS values (15, 'DUP_Chris',    'c', 'Foobar', 66, 44, 'e');
insert into TEST_ATTRIBS values (16, 'DUP_Dorothee', 'd', 'Foobar', 99, 44, 'e');
insert into TEST_ATTRIBS values (17, 'DUP_Gustav',   'X', 'Foobar', 33, 44, 'e');
insert into TEST_ATTRIBS values (18, 'DUP_Homer',    'h', 'Foobar', 66, 44, 'e');
insert into TEST_ATTRIBS values (19, 'DUP_Ingrid',   'Y', 'foo',    99, 44, 'e');

insert into TEST_ATTRIBS values (20, 'Martha',   'm', 'Bob',    33, 88, 'f');

-- Create comparison view
CREATE OR REPLACE VIEW TA_SELFCMP as
select 
t1.id as id_1, t2.id as id_2, t1.name as name, t2.name as name_dup,
t1.attr1 as attr1_1, t1.attr2 as attr2_1, t1.attr3 as attr3_1, t1.attr4 as attr4_1, t1.attr5 as attr5_1,
t2.attr1 as attr1_2, t2.attr2 as attr2_2, t2.attr3 as attr3_2, t2.attr4 as attr4_2, t2.attr5 as attr5_2
from TEST_ATTRIBS t1, TEST_ATTRIBS t2
where t1.id <> t2.id
and t1.name <> t2.name
and t1.name = REPLACE(t2.name, 'DUP_', '')
;

-- NOTE THIS PIECE OF HORRIBLE CODE REPETITION --
-- Create comparison report
-- compare 1st attribute
select 'attr1' as Different,
id_1, id_2, name, name_dup,
CAST(attr1_1 AS VARCHAR2(2000)) as Val1, CAST(attr1_2 AS VARCHAR2(2000)) as Val2
from TA_SELFCMP
where attr1_1 <> attr1_2
or (attr1_1 is null and attr1_2 is not null)
or (attr1_1 is not null and attr1_2 is null)
union
-- compare 2nd attribute
select 'attr2' as Different,
id_1, id_2, name, name_dup,
CAST(attr2_1 AS VARCHAR2(2000)) as Val1, CAST(attr2_2 AS VARCHAR2(2000)) as Val2
from TA_SELFCMP
where attr2_1 <> attr2_2
or (attr2_1 is null and attr2_2 is not null)
or (attr2_1 is not null and attr2_2 is null)
union
-- compare 3rd attribute
select 'attr3' as Different,
id_1, id_2, name, name_dup,
CAST(attr3_1 AS VARCHAR2(2000)) as Val1, CAST(attr3_2 AS VARCHAR2(2000)) as Val2
from TA_SELFCMP
where attr3_1 <> attr3_2
or (attr3_1 is null and attr3_2 is not null)
or (attr3_1 is not null and attr3_2 is null)
union
-- compare 4th attribute
select 'attr4' as Different,
id_1, id_2, name, name_dup,
CAST(attr4_1 AS VARCHAR2(2000)) as Val1, CAST(attr4_2 AS VARCHAR2(2000)) as Val2
from TA_SELFCMP
where attr4_1 <> attr4_2
or (attr4_1 is null and attr4_2 is not null)
or (attr4_1 is not null and attr4_2 is null)
union
-- compare 5th attribute
select 'attr5' as Different,
id_1, id_2, name, name_dup,
CAST(attr5_1 AS VARCHAR2(2000)) as Val1, CAST(attr5_2 AS VARCHAR2(2000)) as Val2
from TA_SELFCMP
where attr5_1 <> attr5_2
or (attr5_1 is null and attr5_2 is not null)
or (attr5_1 is not null and attr5_2 is null)
;

如您所见,生成“差异报告”的查询使用相同的 SQL SELECT 块 5 次(很可能是 42 次!)。这让我觉得绝对是脑死亡(我可以这么说,毕竟我写了代码),但我还没有找到任何好的解决方案。

  • 如果这将是一些实际应用程序代码中的查询,我可以编写一个函数,将该查询拼凑为一个字符串,然后我将查询作为一个字符串执行。

    • -> 构建字符串是可怕的和可怕的测试和维护。如果“应用程序代码”是用诸如 PL/SQL 之类的语言编写的,那会感觉错得离谱。
  • 或者,如果从 PL/SQL 或类似方法中使用,我猜想有一些程序方法可以使这个查询更易于维护。

    • -> 将可以在单个查询中表达的内容展开为程序步骤,只是为了防止代码重复也感觉不对。
  • 如果需要此查询作为数据库中的视图,那么 - 据我所知 - 除了实际维护我上面发布的视图定义之外别无他法。(!!?)

    • -> 实际上,一旦与上述声明相差不远,我就必须对 2 页​​视图定义进行一些维护。显然,更改此视图中的任何内容都需要对视图定义进行正则表达式文本搜索,以确定是否在另一行中使用了相同的子语句以及是否需要在那里进行更改。

那么,正如标题所言——有什么技巧可以防止写出这样的可憎之物?

query dynamic-sql
  • 3 个回答
  • 2215 Views
Martin Hope
Martin
Asked: 2011-05-05 01:31:56 +0800 CST

select count(*) 和 select count(any_non_null_column) 有什么区别?

  • 62

我似乎记得(在 Oracle 上)发声select count(*) from any_table和select count(any_non_null_column) from any_table.

如果有的话,这两个语句之间有什么区别?

oracle aggregate
  • 4 个回答
  • 36883 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