Howard Battle, a 27-year-old rookie in his 10th year of professional baseball, was the Atlanta Braves' unlikely hero last night.

"You never know where the hits are going to come from," Chipper Jones said after Battle singled home the winning run with two outs in the ninth inning, giving host Atlanta a 3-2 victory over the St. Louis Cardinals.

"We preach to the young guys to stay ready," Jones said, "and Howard was ready."

Terry Mulholland and Mike Remlinger (7-1) combined on a six-hitter for Atlanta, which moved 3 1/2 games ahead of second-place New York in the NL East.

"It definitely feels great," Battle said. "I know my mom was watching on TV, and I know she's proud of me."

Atlanta, seeking its eighth straight division title, has won 14 of 17 games.

Mark McGwire went 0 for 4 with a pair of strikeouts and is hitless in 12 at-bats. He has 54 home runs, four behind Chicago's Sammy Sosa, the major league leader.

Darren Oliver (7-9) lost despite his second complete game of the season, scattering nine hits and allowing two earned runs.

CUBS 2-3, REDS 1-10: In Chicago, Greg Vaughn reignited Cincinnati's power machine, hitting three of his team's six homers as the Reds routed the Cubs to gain a doubleheader split.

Aaron Boone hit two homers and Mike Cameron connected once for the Reds, who dropped three games behind Houston in the NL Central. Cincinnati moved 3 1/2 games behind New York, which lost to the Giants, in the wild-card race.

Chicago won the opener, 2-1, as 16-game loser Steve Trachsel allowed just four hits in eight innings, winning consecutive decisions for the first time this season.

Sammy Sosa didn't homer during the doubleheader and remains at 58 with 24 games to go. He had two singles in the second game and was 2 for 8 in the doubleheader with four strikeouts.

The Reds, who hit a major league record 14 homers over a two-game span Saturday and Sunday in Philadelphia, were held homerless in the opener. But that changed quickly in the second game.

PIRATES 3, PADRES 1: Brian Giles hit a two-run home run and Jason Schmidt shut out San Diego for 7 2/3 innings following Quilvio Veras's leadoff homer as Pittsburgh won at home.

Giles, enjoying the best power season by a Pirates outfielder in 26 years, followed Adrian Brown's single in the sixth with his 36th homer and 11th in 20 games. He has 106 RBI -- 40 more than he did as a part-time outfielder with Cleveland last season. Giles, who went 3 for 3, needs four homers to become the first Pittsburgh player to hit 40 since Willie Stargell led the NL with 44 homers in 1973.

GIANTS 7, METS 4: In New York, Marvin Benard's RBI single capped a two-run eighth-inning rally and Rich Aurilia had three hits and drove in two runs as San Francisco won its ninth in 11 games.

The Giants, who had dropped two straight following a season-high eight-game winning streak, remain 6 1/2 games behind first-place Arizona in the NL West.

The Mets, who had a three-game winning streak snapped, fell 3 1/2 games behind Atlanta in the NL East but are 3 1/2 games ahead of Cincinnati for the wild card.

DIAMONDBACKS 11, BREWERS 9: In Milwaukee, Matt Williams's grand slam highlighted a seven-run sixth inning, as Arizona won a game that featured a major league record-tying 15 pitchers.

Arizona used eight pitchers and Milwaukee had seven as the teams equaled the major league record for most pitchers used in a nine-inning game. St. Louis and Cincinnati set the record in 1993, and Montreal and Atlanta matched it in 1996.

ASTROS 8, PHILLIES 6: In Philadelphia, Ken Caminiti hit a tiebreaking, two-run single in the ninth inning as Houston won its fifth straight.

The Astros increased their NL Central lead to three games over second-place Cincinnati, which split a doubleheader against the Cubs.

"We had 11 walks, and that in itself is only asking for trouble," Philadelphia Manager Terry Francona said. "Every time I looked around it seemed like there were Astros all over the place."

EXPOS 4, ROCKIES 1: Vladimir Guerrero went 2 for 3 and drove in four runs to increase his team-leading RBI total to 108 as Montreal won at home to stop a four-game losing streak.

Dustin Hermanson (7-12) won for the fourth time in six decisions following a 14-game winless streak, allowing one run and five hits in eight innings. He struck out eight, matching his season high.

MARLINS 2, DODGERS 1: Alex Gonzalez hit a go-ahead triple in the eighth inning to lead Florida to the victory in Miami.

With the game scoreless, Danny Bautista singled off rookie Matt Herges (0-1) leading off the eighth and took second on Luis Castillo's sacrifice. Gonzalez tripled into the left-center gap, then scored with two outs when first baseman Eric Karros dropped Kevin Millar's soft liner for an error.