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

Dzyann's questions

Martin Hope
Dzyann
Asked: 2020-06-23 13:15:21 +0800 CST

如何在没有快照的情况下将完整的事务复制迁移到其他服务器?

  • 0

我们有使用事务复制保持同步的大型数据库。它们都在虚拟机中运行,我们将转移到新的提供商并重新组织网络结构和应用程序分布。

是否可以迁移事务复制:发布者、订阅者、分发数据库而无需拍摄新快照?目前,我们在 Server_1 中有发布者,在 Server_2 中有订阅者和分发数据库。我们将把发布者移动到 Server_3,将订阅者和分发数据库移动到 Server_4

我对 SQL 复制没有太多经验,所以我读了很多书。我在这里找到了这个答案。阅读它,我知道如果我按照这些步骤操作,应该可以将复制移动到新的 2 台服务器:

  1. 在停机期间,我们等到所有对象都同步
  2. 然后编写复制脚本(这包括发布者、订阅者和分发数据库吗?),
  3. 将发布者和订阅者数据库迁移到新位置
  4. 仅使用复制支持从头开始创建新的事务复制(使用从现有复制生成的脚本)
  5. 运行快照作业以确保创建任何缺少的系统对象。

但是我不知道我是否拥有所需的所有数据/步骤/理解,以及我是否遗漏了任何重要的东西。

另外,是否可以不等待所有对象同步?我想测试这个过程,但我不知道我是否能够关闭数据库这么长时间只是为了测试。那么我们能否在不完全同步的情况下迁移两个数据库并在不创建快照的情况下重新生成复制?也许没有“仅支持复制”选项并运行快照作业。如果我们在这种情况下运行快照作业,它们会创建一个完整的快照,因为数据库不会同步,还是只会寻找差异?

如果我的问题看起来很明显,我很抱歉,我以前没有使用过这个技术,我想确保一切都正确。

sql-server transactional-replication
  • 1 个回答
  • 519 Views
Martin Hope
Dzyann
Asked: 2015-06-25 12:28:48 +0800 CST

当我拥有 SELECT_CATALOG_ROLE 角色时,为什么 DBMS_METADATA.GET_DDL 会失败?

  • 0

我正在尝试为数据库中的对象获取DDL ,METADATA_DBMS.GET_DDL但出现以下错误:

ORA-31603: object "MY_PACKAGE" of type PACKAGE not found in schema "S1"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA", line 3149
ORA-06512: at "SYS.DBMS_METADATA", line 4787
ORA-06512: at line 1

这就是我所说的METADATA_DBMS.GET_DDL:

SELECT DBMS_METADATA.GET_DDL (object_type, object_name, owner)
       FROM dba_objects
       WHERE OBJECT_ID = (select OBJECT_ID from dba_objects where object_name ='MY_PACKAGE' and object_type = 'PACKAGE' and owner = 'S1')

我用子查询编写它以确保对象存在于模式 S1 中。我确定S1.MY_PACKAGE存在,我什至可以在 TOAD 模式浏览​​器中查看它。

我授予了以下角色:

select * from USER_ROLE_PRIVS 

USERNAME  GRANTED_ROLE         ADMIN_OPTION  DEFAULT_ROLE  OS_GRANTED
MYUSER    CONNECT              NO              YES          NO
MYUSER    DBA                  NO              YES          NO
MYUSER    SELECT_CATALOG_ROLE  NO              YES          NO

我有DBA Role第一个,因为它抛出了那个错误,所以我承认了自己SELECT_CATALOG_ROLE。

我检查了查询工作的另一个数据库实例并且我具有相同的角色,我还需要做什么DBMS_METADATA.GET_DDL工作?

两个数据库都是同一个源数据库的克隆,后来我获得了特权。

oracle oracle-10g
  • 1 个回答
  • 4262 Views
Martin Hope
Dzyann
Asked: 2015-05-09 07:41:11 +0800 CST

在 Oracle 中获取对对象的引用的正确方法?

  • 0

我想找到所有引用我的对象的对象。

我想出了这个查询,这是获取对对象的所有引用的最佳方法吗?(我知道这不包括约束,我单独处理)

直接引用对象

SELECT object_id, owner, object_name, object_type
       FROM sys.DBA_OBJECTS  
       WHERE object_id IN (select object_id
                           from public_dependency
                           where REFERENCED_OBJECT_ID = :id_object)
       ORDER BY object_name

另外,在互联网上,我遇到了如下查询。

对对象的直接和间接引用

SELECT object_id, owner, object_name, object_type
       FROM sys.DBA_OBJECTS  
       WHERE object_id IN (SELECT object_id
                           FROM public_dependency 
                           CONNECT BY PRIOR object_id = referenced_object_id
                           START WITH referenced_object_id = :objectId)

但是,如果我的理解是正确的,则此查询不仅返回直接引用,还返回间接依赖。

例如,如果我想要 object_A 的引用。如果 object_B 引用了它,并且 object_C 引用了 object_B。此查询将返回 object_B 和 object_C 作为对 object_A 的引用。我对吗?

oracle oracle-10g
  • 2 个回答
  • 1915 Views
Martin Hope
Dzyann
Asked: 2015-05-09 05:21:47 +0800 CST

public_dependency 和 dba_dependencies 有什么区别?

  • 3

我知道PUBLIC_DEPENDENCY只有对象和引用 ID,而DBA_DEPENDENCIES没有 ID,但有类型、所有者、名称等。

但除此之外,两者之间有什么区别?当我对我的数据库进行计数时,它们返回不同的值。而PUBLIC_DEPENDENCY有更多的元素。

oracle oracle-10g
  • 1 个回答
  • 1178 Views
Martin Hope
Dzyann
Asked: 2015-01-09 09:26:17 +0800 CST

当您拥有 DBA 角色时,ALL_OBJECTS 和 DBA_OBJECTS 是否不同?

  • 3

我试图完全理解 ALL_OBJECTS 和 DBA_OBJECTS 之间的区别。我还是 Oracle 的新手,对整个 Access/Roles 的事情感到困惑。

从这里:

  • ALL_OBJECTS 显示当前的所有对象以及您有权访问的对象。
  • DBA_OBJECTS 显示所有用户的所有对象。

我的问题是,如果您有 DBA 角色,ALL_OBJECTS 是否应该等于 DBA_OBJECTS?我有 DBA 角色,在我正在处理的数据库中,ALL_OBJECTS 返回的元素比 DBA_OBJECTS 少。

如果我有 DBA 角色,我不应该有权访问 DBA_OBJECTS 中的所有对象,因此两个视图应该相等吗?

oracle permissions
  • 1 个回答
  • 8712 Views
Martin Hope
Dzyann
Asked: 2015-01-09 07:35:52 +0800 CST

如何列出不再指向有效对象的同义词?

  • 4

我有一个表 ( OBJECTS_TO_UPDATE),其中包含需要更新的几个对象,其中一些SYNONYMs用于不再存在的对象。

我想创建一个查询来列出它们。但我被困住了。

我的表OBJECTS_TO_UPDATE有这些列:

  • OBJECT_NAME
  • OBJECT_TYPE
  • OWNER

换句话说,我想做的事情是这样的:

  • 我过滤我的OBJECTS_TO_UPDATE表OBJECT_TYPE = 'SYNONYM'。
  • 使用所有者和名称我可以SYNONYM进入ALL_SYNONYMS.
  • 使用TABLE_OWNERandTABLE_NAME并在 dba_objects 中搜索它,如果该对象不存在,则同义词不再有效。

我想使用所有这些条件编写查询,但我遇到了问题。

select *
from OBJECTS_TO_UPDATE o2u 
where o2u.OBJECT_TYPE = 'SYNONYM' and NOT EXISTS ( 
                            --select * from dba_objects dobj
                            --where dobj.OWNER
                            select * from ALL_SYNONYMS syn
                            where  syn.OWNER = o2u.OWNER and syn.SYNONYM_NAME = o2u.OBJECT_NAME)

我对在NOT EXISTS.
我怎样才能达到我所需要的?我有 DBA 权限。

另外,这是实现我想要的最佳方式吗?也许我应该更直接地使用其他一些观点。

oracle metadata
  • 2 个回答
  • 9094 Views
Martin Hope
Dzyann
Asked: 2015-01-08 07:04:24 +0800 CST

为什么 SQL 和 PL/SQL 中 VARCHAR2 的字符限制存在差异?

  • 1

在处理一些大型脚本时,我遇到了与 VARCHAR2 在 SQL 中但在 PL/SQL 中没有的 4000 个字符限制相关的错误。

正如这里所解释的,VARCHAR2 数据类型有 4000 个字符的限制,而 PL/SQL 有更大的 32,767 个限制。

为什么存在这种差异?让两个 VARCHAR2 具有相同的限制不是更好吗?这似乎是一个相当混乱且容易出错的决定。

更新

我更新了我的问题以添加 ansible 的评论。Oracle VARCHAR2 和 PL/SQL VARCHAR2 限制是字节,而不是字符。这会对多字节字符系统产生重大影响。

oracle plsql
  • 1 个回答
  • 4139 Views
Martin Hope
Dzyann
Asked: 2015-01-08 06:55:34 +0800 CST

如何使用 PL/SQL 创建脚本文件?

  • 0

在许多情况下,我必须更新几个对象。为了实现这一点,我使用 DBMS_METADATA 创建 DDL 语句。

到目前为止,我有 DDL 语句并将它们保存在表中。我想为每个对象将所述 DDL 语句保存在 .sql 文件中。

我知道我可以用 C# 做到这一点,但到目前为止,我已经能够实现我需要用 PL/SQL 做的所有事情。有没有办法用 PL/SQL 创建 .sql 文件?

oracle plsql
  • 1 个回答
  • 5397 Views
Martin Hope
Dzyann
Asked: 2014-11-08 12:01:20 +0800 CST

我可以使用同义词指向使用另一个模式的模式中的对象吗?

  • 2

我在Oracle方面没有太多经验,所以如果这是一个简单的问题,我很抱歉。

我必须将数据库中的许多对象从一个模式移动到另一个模式。我也在尝试更新所有依赖项,但为了安全起见,我想留下一个链接。

示例:

  1. 现在我的 Schema 1 ( S1 ) 中有一个MyTable。用户像这样引用它:

    S1.MyTable

  2. 我想将MyTable移动到 Schema 2 ( S2 )

    S2.MyTable

  3. 我希望我的用户仍然能够像以前一样使用 MyTable。

    S1.MyTable / MyTable 确实在 S2 中,但用户可以通过 S1 /

我一直在阅读同义词,似乎您可以创建公共的,以便用户可以直接引用对象,例如:

MyTable

但我需要他们能够编写S1.MyTable

我可以为此使用同义词吗?

oracle
  • 2 个回答
  • 2237 Views
Martin Hope
Dzyann
Asked: 2014-10-17 11:37:47 +0800 CST

如何列出正在使用另一个对象的对象?

  • 0

我必须将某些对象从模式移动到另一个。数据库相当大,我想确保我们正确测试所有受影响的对象。

在 TOAD 上有一个名为“Used By”的选项卡,它显示所有引用所选对象的对象。

有没有办法用 SQL 命令实现类似的输出?我尝试检查不同的 DBA 视图,但无法找到任何我需要的信息。

oracle
  • 1 个回答
  • 132 Views
Martin Hope
Dzyann
Asked: 2014-06-19 10:47:36 +0800 CST

有没有办法传递一个变量立即执行一次但多次使用它?

  • 2

我有一个 Cursor,它沿着这些行从脚本中获取数据:

OPEN myCursor FOR
SELECT value1 AS Value1,
  myPackage.function1 (value1, :myId) AS Result1,
  myPackage.function2 (value1, :myId) AS Result2,
  myPackage.function3 (value1, :myId) AS Result3                       
FROM mySchema.myTable
WHERE tpk = :myPk
USING myId, myId, myID

如您所见,我使用了myId变量 3 次,并且我必须在 using 语句中将其传递 3 次才能使其正常工作。我在任何地方都找不到它,但是有没有办法只传递一次myId变量?

oracle plsql
  • 1 个回答
  • 357 Views
Martin Hope
Dzyann
Asked: 2014-06-18 12:19:41 +0800 CST

如何从包内的另一个模式中引用表?

  • 3

我正在使用 TOAD 在我拥有的架构中创建一个包。我的包使用另一个模式的表。

该包有一个使用游标的过程。创建包时出现编译错误:

正文 509 30 PL/SQL: ORA-00904: : 无效标识符

该错误指向光标的选择正在使用的表,并且它位于另一个模式中。

如果我直接在 TOAD 中运行查询,它可以完美运行,我是 Oracle 的新手,我不明白为什么会出现这个错误。为什么我会收到此错误?

oracle plsql
  • 1 个回答
  • 13977 Views
Martin Hope
Dzyann
Asked: 2014-05-28 08:48:40 +0800 CST

如何重用 Oracle Script 中的代码?

  • 0

我有一个脚本,我在其中创建一些测试数据。在脚本的开头,我创建了一些表,我必须在其中插入数据。在创建它们之前,我检查它们是否不存在。

declare
 tableExists number;
begin

SELECT COUNT(*)
    INTO tableExists
FROM user_tables
WHERE table_name = 'MY_TEST_TABLE';

if tableExists>0 then
    execute immediate 'drop  table MY_TEST_TABLE';
end if;

SELECT COUNT(*)
    INTO tableExists
FROM user_tables
WHERE table_name = 'MY_TEST_TABLE2';

if tableExists>0 then
execute immediate 'drop table MY_TEST_TABLE2';
end if;

--Here I create both tables: MY_TEST_TABLE and MY_TEST_TABLE2

我的问题是:有没有办法避免重复检查表是否存在的代码?有没有一种方法可以将该代码称为将表名作为参数传递的方法?

我相信我可以创建/声明一个函数,然后使用它。但这种功能不是暂时的。我知道这不像 C 或 C++。但我想知道是否有一种方法可以让这个脚本有一种“私有方法”来测试我的表的存在,这样我就不必重复代码,但该方法不会在之后保留我的剧本完成了。

如果有的话,实现我想要的正确方法是什么?

oracle plsql
  • 2 个回答
  • 1879 Views
Martin Hope
Dzyann
Asked: 2014-05-24 06:52:32 +0800 CST

如何使用变量并放入测试脚本?

  • 1

我必须修改某些 Oracle 包。基本上我将提取功能并将其移动到 C。

他们为我提供了一些“测试”脚本,我应该能够运行这些脚本来测试我的更改不会破坏包的底层逻辑。但他们没有工作。

我还注意到他们在原始脚本中对一些值进行了硬编码,而我正在尝试使用变量。我从未使用过 Oracle,所以我很困惑。

在 Toad 中,我有一个沿着这些方向的脚本:

declare
myTestId VARCHAR(32);

begin

select  '23423DSSF34SD234' into myTestId from dual;

--Here my drop for my_test_table1 and my_test_table2
drop table my_test_table1;
drop table my_test_table2;

--Here create table my_test_table1 and my_test_table2

--Here I have a bunch of inserts

--Here are some selects statements

end;

但是,当我运行脚本时,当它到达它不喜欢的“Drop”语句时它会失败。如何在我的脚本中执行 drop 语句?

我一直在阅读,似乎在 Oracle 中创建这样的临时表不是一个好主意吗?最好的方法是什么?

oracle plsql
  • 1 个回答
  • 1150 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