Just as he forecast in spring training, Jose Lima became the first 20-game winner in the National League as the Astros won their season-high ninth straight yesterday, 5-3, over the Chicago Cubs in Houston.

"I told them 15 last year and I won 16. And I said 20 this year and I did it. What else can I do?" Lima said. "This is Lima time. I told you this would be Lima time, and it is."

Lima (20-7) struck out the side in the first inning and retired 10 of the first 11 batters. He also prevented Sammy Sosa from hitting his 60th home run -- last year, Sosa hit three homers off Lima, including No. 66.

The animated Lima was irritated when he was removed in the middle of the eighth inning. But by the game's end, he was dancing near the dugout to a crowd of 52,010, the Astros' largest of the season.

"I know people think bad when Jose Lima does his dance, but that is just Jose Lima, that's not going to change," Lima said. "This [game ball] is for my mother and for the fans of the Astros. They stayed for the whole game."

Sosa went 1 for 4 and remained at 59 home runs, one short of becoming the first player in major league history to hit at least 60 homers in a season twice.

"I never press," Sosa said. "They're just pitching me great. Good pitching is going to beat good hitting. I don't want it [hitting 60th] to get to me. I just want to be relaxed and do my job. I'm going out there and keep hacking and looking for my pitch.

"It didn't happen today. I'll just wait until tomorrow."

Billy Wagner pitched a perfect ninth for his 36th save.

"It doesn't get much better than that when you get to do it for a 20-game winner," Wagner said. "He's stayed healthy and we just helped him out and he did what he said. It's great to say you're going to win 20 and go out and do it."

After Mark Grace singled in the fourth, he advanced to third on right fielder Ryan Thompson's error and scored on Henry Rodriguez's grounder.

Lima then took control again until the eighth when singles by pinch hitters Lance Johnson, Roosevelt Brown and Mickey Morandini loaded the bases. Grace then hit a sacrifice fly, cutting Houston's lead to 5-3.

GIANTS 3, BRAVES 2: In San Francisco, Barry Bonds became the 210th major leaguer with 2,000 hits and Kirk Rueter allowed six hits in eight strong innings.

Bonds became the 15th active player with 2,000 hits when he doubled leading off the Giants' two-run fourth inning, in which Rich Aurilia and Scott Servais had RBI singles. F.P. Santangelo had an RBI grounder in the third for San Francisco.

Of his 2,001 hits, 926 have been for extra bases. And the three-time NL MVP has walked 1,426 times, including a major league record 298 intentional walks.

ROCKIES 7, BREWERS 6: In Denver, pinch hitter J.R. Phillips hit a go-ahead home run in the eighth. Phillips, recalled from the minors Friday, broke a 6-6 tie with his leadoff shot against Rocky Coppinger (3-3).

REDS 12, MARLINS 4: In Cincinnati, Aaron Boone and Dmitri Young started Cincinnati's four-homer barrage. The Reds concluded their week of home runs by getting three-run shots from Boone and Young, a solo homer from Eddie Taubensee and a two-run homer from Greg Vaughn. During the past eight days, the Reds have hit 29 homers in nine games.

PIRATES 8, CARDINALS 5: Ed Sprague hit a three-run homer and pinch hitter Dale Sveum contributed a two-run double to rally visiting Pittsburgh. Mark McGwire went 0 for 3 with two walks. He has 55 home runs and the Cardinals have 19 games left.

DIAMONDBACKS 4, PHILLIES 0: In Phoenix, Andy Benes tossed eight shutout innings to lead Arizona.

EXPOS 5, PADRES 4: Rondell White hit a two-run homer and Chris Widger drove in two runs as visiting Montreal ended the Padres' three-game winning streak.

METS 6, DODGERS 2: In Los Angeles, Mike Piazza and Roger Cedeno burned their former team with key hits and Masato Yoshii won his fourth straight decision.